keepalived兩個功能,一個是使lvs使用的vip高可用,一個是監控各個上游節點的對應端口是否正常工作,以保證快速剔除壞掉的節點。
keepalived默認的yum 1.3.5有BUG,根本跑不起來,所以我們換成源碼壓縮包下載后編譯安裝的方式進行安裝
經過實驗 CentOS7.4下的lvs不是不停輪詢,而是一段時間內會綁定用戶和實際目標服務器,keepalived中也會表現出來,不過我們可以換個ip訪問一下,來驗證我們的配置結果。
本文出現三種節點名稱,keepalived主節點和備用節點,以及RealServer——最終提供服務的服務器,注意將keepalived的主節點、備用節點、realserver分配為不同的機器
1、安裝依賴(本文使用的Centos7.4是最小安裝,部分依賴不全,所以需要先安裝依賴)
yum install -y gcc gcc-c++ openssl-devel
2、下載keepalived-1.3.5壓縮包(下載地址),放在/usr/local目錄下,並解壓,步驟略
3、進入解壓后的目錄中,執行以下命令:
./configure --prefix=/usr/local/keepalived && make && make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ mkdir -p /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp ./keepalived/etc/init.d/keepalived /etc/init.d/ chmod 755 /etc/init.d/keepalived
4、編輯keepalived.service
vi /lib/systemd/system/keepalived.service
將所有的字符串 “/usr/local/keepalived” 替換為空白,vi編輯器命令:【%s/\/usr\/local\/keepalived//g】
5、刷新配置
systemctl daemon-reload
6、編輯/etc/keepalived/keepalived.conf配置為自己的配置(摘自傳送門,有改動),示例:
主節點:

global_defs { notification_email { edisonchou@hotmail.com } notification_email_from sns-lvs@gmail.com smtp_server 192.168.80.1 smtp_connection_timeout 30 router_id LVS_DEVEL # 設置lvs的id,在一個網絡內應該是唯一的 } vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER為主,BACKUP為備 interface eth1 #指定網卡名稱,是實際使用的網卡,而非虛網卡 virtual_router_id 51 #虛擬路由編號,主備要一致 priority 100 #定義優先級,數字越大,優先級越高,主DR必須大於備用DR advert_int 1 #檢查間隔,默認為1s authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.80.200 #定義虛擬IP(VIP)為192.168.2.33,可多設,每行一個 } } # 定義對外提供服務的LVS的VIP以及port virtual_server 192.168.80.200 80 { delay_loop 6 # 設置健康檢查時間,單位是秒 lb_algo wrr # 設置負載調度的算法為wlc lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式 nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.80.102 80 { # 指定real server1的IP地址 weight 3 # 配置節點權值,數字越大權重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.80.103 80 { # 指定real server2的IP地址 weight 3 # 配置節點權值,數字越大權重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
注意網卡名一定要和你機器上的一致。另外,virtual_router_id不要與同網絡的其他的keepalived集群配置沖突。
備用節點,需要修改:
將MASTER改為BACKUP,並將priority由100改低一些
7、在各個Real Server中添加腳本,命名為【rs.sh】(摘自傳送門,有改動):
SNS_VIP=$2 #/etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_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 $SNS_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 1 esac exit 0
增加執行權限:
chmod 755 rs.sh
執行:
./rs.sh start [VIP]
該內容將VIP作為RealServer的一個類似127.0.0.1的IP添加到RealServer的回環IP列表中,讓RealServer認為主節點通過VIP轉發過來的包真的是發給自己的,從而正常處理該包,不至於認為數據包不合法。
8、在主節點和備節點上分別執行
systemctl start keepalived
9、其他注意內容
A、如果在正式環境中,建議將添加回環地址作為開機啟動項,並且keepalived 也配置成開機啟動
B、如果使用了防火牆,務必允許keepalived使用的vrrp組播通過防火牆,否則虛IP會同時出現在主備兩台機器上。
命令如下(網卡換成你的網卡即可):
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface [網卡] --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --reload