部署LVS-DR + keepalived 高可用群集
阿新 • • 發佈:2018-06-22
mar 虛擬ip tin nfs服務 性能 opd conn 高可用 Oz LVS集群采用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。為此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。
直接路由(DirectRouting);簡稱DR模式,采用半開放式的網絡結構,與TUN模式的結構類似,但各節點並不是分散在各地,而是與調度器位於同一個物理網絡。負載調度器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道。
實驗需求
Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務器。
服務器主機 | IP: ( VIP:192.168.200.100) | 需要安裝配置 |
---|---|---|
NFS共享服務器 | 192.168.200.105 | NFS共享存儲 |
LVS主調度器 | 192.168.200.103 | keepalived 、ipvsadm |
LVS從調度器 | 192.168.200.104 | keepalived 、ipvsadm |
節點服務器1 | 192.168.200.101 | httpd 、NFS |
節點服務器2 | 192.168.200.102 | httpd 、NFS |
windows客戶機 | 192.168.200.200 | 測試專用 |
- LVS調度服務器
-
主從調度服務器配置基本相同(不同之處已經標註)
# yum install keepalived ipvsadm -y
-
調整proc響應參數
# vi /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 //proc響應關閉重定向功能// # sysctl -p //立即生效
-
配置虛擬VIP
# cd /etc/sysconfig/network-scripts # cp ifcfg-ens33 ifcfg-ens33:0 # vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.200.100 NETMASK=255.255.255.0 # ifup ens33:0 //啟用虛擬IP
- 配置負載分配策略
-
編寫腳本方便管理
# cd /etc/init.d/ # vi dr.sh #!/bin/bash GW=192.168.200.1 VIP=192.168.200.100 RIP1=192.168.200.101 RIP2=192.168.200.102 case "$1" in start) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm systemctl start ipvsadm /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up /sbin/route add -host $VIP dev ens33:0 /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;; stop) /sbin/ipvsadm -C systemctl stop ipvsadm ifconfig ens33:0 down route del $VIP echo "ipvsamd stoped----------------------[ok]" ;; status) if [ ! -e /var/lock/subsys/ipvsadm ];then echo "ipvsadm stoped---------------" exit 1 else echo "ipvsamd Runing ---------[ok]" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0 # chmod +x dr.sh # service dr.sh start
-
keepalived部署
# vim /etc/keepalived/keepalived.conf global_defs { ... smtp_server 127.0.0.1 #指向本地 router_id LVS_01 #指定名稱,備份服務器不同名稱 ... } vrrp_instance VI_1 { state MASTER #備份服務器是BACKUP virtual_router_id 10 # 組號 備份服務器相同 ... auth_pass abc123 #驗證密碼 備份服務器相同 priority 100 #優先級 備份小於主 ... virtual_ipaddress { 192.168.200.100 //指定VIP地址 } ... virtual_server 192.168.200.100 80 { lb_kind DR //指定DR模式 ... real_server 192.168.200.101 80 { #web節點地址端口 weight 1 #節點的權重 TCP_CHECK { #健康檢查方式 connect_port 80 #添加端口 connect_timeout 3 #連接超時 nb_get_retry 3 #重試次數 delay_before_retry 3 #重試間隔(秒) } } real_server 192.168.200.102 80 { weight 1 TCP_CHECK { connect_port 80 #添加端口 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } # systemctl start keepalived # ip addr show dev ens33:0 #查看虛擬網卡 # systemctl stop firewalld.service #關防火墻 # setenforce 0
-
配置NFS共享服務器
# systemctl stop firewalld.service //關防火墻 # setenforce 0 # yum install nfs-utils rpcbind -y //安裝NFS服務 # systemctl start rpcbind.service # systemctl start nfs.service # cd /opt | mkdir benet accp //創建共享目錄 (在實際工作中 還是要共享掛載磁盤陣列raid的目錄) # vi /etc/exports /usr/share *(ro,sync) /opt/benet 192.168.200.0/24(rw,sync) /opt/accp 192.168.200.0/24(rw,sync) # exportfs -rv //發布共享
- 節點服務器配置
-
兩個節點服務器配置基本相同(不同之處已經標註)
# yum install nfs-utils rpcbind -y //安裝NFS服務 # mount.nfs 192.168.200.105:/opt/benet /var/www/html //掛載NFS # yum install -y httpd #安裝httpd服務 # systemctl start httpd.service #啟動httpd服務 # systemctl stop firewalld.service #關防火墻 # setenforce 0
- 建立一個測試頁面
-
兩個節點服務器測試頁面要不同
# echo "this is 7.1 web" > /var/www/html/index.html #節點服務器1 # echo "this is 7.2 web" > /var/www/html/index.html #節點服務器2 (方便查看測試結果)
- 配置虛擬VIP
-
作用:僅發送web響應數據包的源地址
# cd /etc/sysconfig/network-scripts # cp ifcfg-lo ifcfg-lo:0 # vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.200.100 NETMASK=255.255.255.0 ONBOOT=yes
- 編寫服務腳本方便管理
- 添加VIP本地訪問路由
-
調整proc響應
# cd /etc/init.d/ # vim web.sh #!/bin/bash VIP=192.168.200.100 case "$1" in start) 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) ifconfig lo:0 down 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 Stopd" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 # chmod +x web.sh # service web.sh start # ifup lo:0 //啟用虛擬VIP # firefox "http://127.0.0.1/" & //火狐查看測試頁 # service web.sh stop # service web.sh start //(建議重啟服務)
-
測試
在windows7 瀏覽器輸入 虛擬VIP 192.168.200.100 (多刷新幾次可以看到節點1和節點2的測試頁面為成功)
部署LVS-DR + keepalived 高可用群集