標籤:接下來 標識 ddr ons 真實機 服務 email dir pvs
最近希望能夠配置一下負載平衡,在虛擬機器上面,但是網上找了很多資料很零散,對於不瞭解的人,很多不夠詳細,最近終於做好了,把具體的步驟寫下來,方便各位網友查閱學習
這個實驗需要安裝nginx如果沒有安裝過,請參考:
linux安裝nginx:http://www.cnblogs.com/aspirant/p/6714548.html
(1) 我們的系統是CentOS7 目前需要四台機器,分別為 Director機器 兩台:master,slave
真實機器realserver1,realserver2;搭建的系統架構圖如下:
- 所用系統:CentOS7
- 真實web伺服器(RS1):192.168.137.5
- 真實web伺服器(RS2):192.168.137.6
- Master負載平衡伺服器:192.168.137.101
- backup負載平衡伺服器:192.168.137.102
- 系統對外虛擬IP:192.168.137.100
從架構可以看出來,從使用者的角度來說,會直接存取192.168.137.100,也就是說不管系統如何設計要保證此ip的可用性,
從架構師的角度考慮:
使用者訪問192。168.137.100位VIP:Virtual IP,虛擬iP,使用者不關心內部如何協調,我們使用
192.168.137.101 作為主機 Master機器,然後使用keepalived 技術配置 HA(high avilable)配置高可用行,也就是說如果 分發的機器Master宕機了,keepalive會自動轉到 backup機器,
這就是HA配置,保證master即使宕機了,也不影響轉寄;
master機器負責把使用者的請求轉寄到 真實的機器, RS1和RS2,他們會按照一定的輪訓機制,訪問,如果RS1宕機,master會自動轉寄到RS2;
我們在兩台負載平衡的機器上面,配置keepalived保證分發機器的高可用行HA;
系統的 IP配置如下:
| 伺服器名 |
IP地址 |
虛擬設備名 |
虛擬IP |
| Director Server |
192.168.137.101 |
ens33:0 |
192.168.137.100 |
| Backup Server |
192.168.137.102 |
ens33:0 |
192.168.137.100 |
| Real Server1 |
192.168.137.5 |
lo:0 |
192.168.137.100 |
| Real Server2 |
192.168.137.6 |
lo:0 |
192.168.137.100 |
二、Keepalived的安裝配置過程
兩台負載平衡伺服器上均需要安裝、配置Keepalived
2.1 安裝Keepalived
$ yum -y install keepalived
2.2 配置Keepalived
$ vim /etc/keepalived/keepalived.conf
配置資訊如下
! Configuration File for keepalivedglobal_defs { notification_email { [email protected] #設定警示郵件地址,可以設定多個,每行一個。 [email protected] #需開啟原生sendmail服務 [email protected] } notification_email_from [email protected] #設定郵件的發送地址 smtp_server 127.0.0.1 #設定smtp server地址 smtp_connect_timeout 30 #設定串連smtp server的逾時時間 router_id LVS_DEVEL #表示運行keepalived伺服器的一個標識。發郵件時顯示在郵件主題的資訊}vrrp_instance VI_1 { state MASTER #指定keepalived的角色,MASTER表示此主機是主伺服器,BACKUP表示此主機是待命伺服器 interface ens33 #指定HA監測網路的介面 virtual_router_id 51 #虛擬路由辨別碼,這個標識是一個數字,同一個vrrp執行個體使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的 priority 100 #定義優先順序,數字越大,優先順序越高,在同一個vrrp_instance下,MASTER的優先順序必須大於BACKUP的優先順序 advert_int 1 #設定MASTER與BACKUP負載平衡器之間同步檢查的時間間隔,單位是秒 authentication { #設定驗證類型和密碼 auth_type PASS #設定驗證類型,主要有PASS和AH兩種 auth_pass 1111 #設定驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通訊 } virtual_ipaddress { #設定虛擬IP地址,可以設定多個虛擬IP地址,每行一個 192.168.137.100 }}virtual_server 192.168.137.100 80 { #設定虛擬伺服器,需要指定虛擬IP地址和服務連接埠,IP與連接埠之間用空格隔開 delay_loop 6 #設定運行情況檢查時間,單位是秒 lb_algo rr #設定負載調度演算法,這裡設定為rr,即輪詢演算法 lb_kind DR #設定LVS實現負載平衡的機制,有NAT、TUN、DR三個模式可選 nat_mask 255.255.255.0 persistence_timeout 0 #會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,為叢集系統中的session共用提供了一個很好的解決方案。 #有了這個會話保持功能,使用者的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。 #需要注意的是,這個會話保持時間是最大無響應逾時時間,也就是說,使用者在操作動態網頁面時,如果50秒內沒有執行任何操作 #那麼接下來的操作會被分發到另外的節點,但是如果使用者一直在操作動態網頁面,則不受50秒的時間限制 protocol TCP #指定轉寄協議類型,有TCP和UDP兩種 real_server 192.168.137.5 80 { #佈建服務節點1,需要指定real server的真實IP地址和連接埠,IP與連接埠之間用空格隔開 weight 1 #佈建服務節點的權值,權值大小用數字表示,數字越大,權值越高,設定權值大小可以為不同效能的伺服器 #分配不同的負載,可以為效能高的伺服器設定較高的權值,而為效能較低的伺服器設定相對較低的權值,這樣才能合理地利用和分配系統資源 TCP_CHECK { #realserver的狀態檢測設定部分,單位是秒 connect_timeout 3 #表示3秒無響應逾時 nb_get_retry 3 #表示重試次數 delay_before_retry 3 #表示稍候再試 connect_port 8066 } } real_server 192.168.137.6 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 8066 } }}
要注意的地方:
- interface ens33:這裡的enp0s3是我的網卡名稱,想要查看自己網卡名稱的話,在/etc/sysconfig/network-scripts/ifcfg-e(敲下TAB)這個每個系統可能都不同,
我們可以輸入ifconfig,一般會出現兩個網卡,一個是ens33還有一個是迴環地址lo,對於分發機器master 和backup 我們需要在添加 ens33:0網卡,對於真實機器realserver1,realserver2,我們需要添加lo:0網卡,下一步就能看到這是不同的;
- persistence_timeout 0:指的是在一定的時間內來自同一IP的串連將會被轉寄到同一realserver中。而不是嚴格意義上的輪詢。預設為50s,因此在測試負載平衡是否可以正常輪詢時,最好先把值設定為0,方便查看
- TCP_CHECK { :注意TCK_CHECK和 {之間有一個空格,忘記打這個空格的話,可能會出現後面用ipvsadm查看時,某個RS查看不到
- 可以直接把上面的代碼複製下來放到建立檔案放到自己的機器上面,但是別忘了需要轉換一下格式,因為我們使用window機器拷貝的,所以在linux上面我們需要轉化一下轉成linux可以使用的指令碼,因為window的斷行符號跟linux的斷行符號是不同的,使用dos2unix轉化,
- 我們使用 (a) yum install dos2unix
- (b) dos2unix 檔案名稱
- 轉換完了,就可以用了;
另外一個台待命伺服器上Keepavlied的配置類似,只是把MASTER改為backup,把priority設定為比MASTER低,設定為90;
keepalived的2個節點執行如下命令,開啟轉寄功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
2.3 兩台RS上為lo:0綁定VIP地址、抑制ARP廣播
兩台 RS機器上面都要安裝 nginx:
linux安裝nginx:http://www.cnblogs.com/aspirant/p/6714548.html
然後我們在nginx的訪問目錄:我的是這個: /home/zkpk/nginx-1.8.0/html/index.html中
RS1的 index.html 修改一下,這樣方便測試,比如輸入 我是 RS1;
RS2的 index.html 修改一下,這樣方便測試,比如輸入 我是 RS2;
在兩台RS上編寫以下指令檔realserver.sh
#!/bin/bash#description: Config realserverVIP=192.168.137.100/etc/rc.d/init.d/functionscase "$1" instart) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;;stop) /sbin/ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;;*) echo "Usage: $0 {start|stop}" exit 1esacexit 0
在兩台RS上分別執行指令碼
$ sh realserver.sh start
2.4 啟用Keepavlied
$ service keepalived start
之後通過ipvsadm -L命令可以查看VIP是否已經成功映射到兩台RS,如果發現有問題,可以通過/var/log/message查看錯誤原因,注意此處的192.168.137:100 你的可能不是,而是localhost之類的,也沒有錯;
接下來就可以測試可用性了2.4.1 測試負載平衡2.4.2測試keepalived的監控檢測
停掉RS1的nginx,然後在MASTER負載平衡伺服器上可以到看VIP映射關係中已經剔除了192.168.137.5
(1)停掉RS1的nginx
使用 pkill -9 nginx 殺死進程
如果需要開啟nginx使用: /usr/local/nginx/sbin/nginx 啟動nginx進程;
然後 ps -ef |grep nginx 可以查看nginx是否啟動成功;
(2)實驗測試1
瀏覽器訪問 http://192.168.137.100 看看是否啟動成功,nginx是否顯示;
實驗2
手動關閉192.168.137.5 節點的nginx,service nginx stop 在用戶端上去測試訪問 http://192.168.137.100 結果正常,不會出現訪問失敗的情況,
實驗3
手動重新開啟 192.168.137.5 節點的nginx, service nginx start 在用戶端上去測試訪問 http://192.168.137.100 結果正常,按照 rr 調度演算法訪問5節點和6節點。
實驗4
測試 keepalived 的HA特性,首先在master上執行命令 ip addr ,可以看到38的vip在master節點上的;這時如果在master上執行 service keepalived stop 命令,這時vip已經不再master上,在slave節點上執行 ip addr 命令可以看到 vip 已經正確漂到slave節點,這時用戶端去訪問 http://192.168.137.100 訪問依然正常,驗證了 keepalived的HA特性。
參考資料:
逐條配置:
http://ixdba.blog.51cto.com/2895551/554799
http://blog.csdn.net/u012852986/article/details/52412174
http://www.jb51.net/article/38368.htm
http://www.cnblogs.com/llhua/p/4195330.html
具體部署:
http://www.cnblogs.com/liwei0526vip/p/6370103.html
nginx啟動停止:
http://www.cnblogs.com/codingcloud/p/5095066.html
linux 負載平衡配置 keepalive lvs 使用nginx轉寄 CentOS7 搭建LVS+keepalived負載平衡