集羣高可用之lvs+keepalivehtml
keepalive簡介:nginx
負載均衡架構依賴於知名的IPVS內核模塊,keepalive由一組檢查器根據服務器的健康狀況動態維護和管理服務器池。keepalive經過VRRP協議實現高可用架構。VRRP是路由災備的實現基礎。web
LVS核心是調度器,全部的數據請求須要通過調度器進行調度轉發。萬一調度器發生故障,整個集羣系統所有崩潰,因此須要keepalive實現集羣系統的高可用。算法
部署兩臺或多臺lvs調度器,僅有一臺調度器作主服務器,其餘爲備用。當主發生故障後,keepalive能夠自動將備用調度器做爲主,實現整個集羣系統的高負載,高可用vim
VRRP協議介紹:後端
VRRP協議是爲消除在靜態缺省路由環境下的缺省路由器單點故障引發的網絡失效而設計的主備模式的協議,使得在發生故障而進行設備功能切換時能夠不影響內外數據通訊,不須要再修改內部網絡的網絡參數。VRRP協議須要具備IP地址備份,優先路由選擇,減小沒必要要的路由器間通訊等功能。
VRRP協議將兩臺或多臺路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或多個),而在路由器組內部,若是實際擁有這個對外IP的路由器若是工做正常的話就是MASTER,或者是經過算法選舉產生,MASTER實現針對虛擬路由器IP的各類網絡功能,如ARP請求,ICMP,以及數據的轉發等;其餘設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。當主機失效時,BACKUP將接管原先MASTER的網絡功能。
配置VRRP協議時須要配置每一個路由器的虛擬路由器ID(VRID)和優先權值,使用VRID將路由器進行分組,具備相同VRID值的路由器爲同一個組,VRID是一個0~255的正整數;同一組中的路由器經過使用優先權值來選舉MASTER,優先權大者爲MASTER,優先權也是一個0~255的正整數。centos
有一種特殊狀況,將虛擬路由IP地址設置爲多臺路由設備中某臺設備的真實ip地址,該路由設備將永遠處於主設備狀態。服務器
本例用centos7服務器網絡
keepalived 搭建架構
yum -y install gcc openssl-devel popt-devel libnl libnl-devel kernel-devel ipvsadm cd /usr/local/src wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz tar -xzf keepalived-1.2.7.tar.gz cd keepalived-1.2.7/ ./configure make && make install ln -s /usr/local/etc/keepalived/ /etc ln -s /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ ln -s /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ ln -s /usr/local/sbin/keepalived /usr/sbin/
配置圖如上:
配置以下:
web1,web2 的操做
nginx1的操做 vim /etc/sysconfig/network-scripts/ifcfg-eno16 DEVICE=eno16 BOOTPROTO=statci ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.30 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 BOOTPROTO=statci ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 vim /etc/sysctl.conf net.ipv4.conf.eno16.arp_ignore = 1 net.ipv4.conf.eno16.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce =2 sysctl -p systemctl restart network echo "192.168.1.100" > /usr/local/nginx/conf/html/index.html firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload nginx2的操做 vim /etc/sysconfig/network-scripts/ifcfg-eno16 DEVICE=eno16 BOOTPROTO=statci ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.40 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 BOOTPROTO=statci ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 vim /etc/sysctl.conf net.ipv4.conf.eno16.arp_ignore = 1 net.ipv4.conf.eno16.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce =2 sysctl -p systemctl restart network echo "192.168.1.40" > /usr/local/nginx/conf/html/index.html firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload
調度器lvs1和lvs2的配置
lvs1的配置
vim /etc/sysconfig/network-scripts/ifcfg-eno16 DEVICE=eno16 BOOTPROTO=statci ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.10 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 systemctl restart network yum -y install keepalived ipvsadm
將lvs1設置爲主,lvs2設置爲備,保證其中一臺調度器出現故障後,另外一臺能夠及時。
自動激活替換損壞的故障設備。在該配置文件中添加虛擬服務,
併爲該虛擬服務添加後端真實web服務器組和相應的調度算法。
vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { test@gmail.com } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lvs1 } vrrp_instance LVS_HA { state MASTER #lvs_2爲備用 interface eno16 virtual_router_id 60 #lvs_2的VRID必須與lvs_1相同 priority 100 #在相同的VRID組中優先級高者爲主設備 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.1/24 } } virtual_server 192.168.0.1 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.30 80 { weight 1 TCP_CHECK { connetct_timeout 20 connect_port 80 nb_get_retry 3 } } real_server 192.168.1.40 80 { weight 1 TCP_CHECK { connetct_timeout 20 connect_port 80 nb_get_retry 3 } }
}
systemctl start keepalived
systemctl enable keepalived
ip addr show
ipvsadm -Ln
firewall-cmd --set-default-zone=trusted
同理在上面配置lvs2
更改下網卡信息
vim /etc/keepalived/keepalived.conf
router_id lvs_2和priority 50
在軟路由上配置ip省略。
省略ip的配置 systemctl restart network iptables -F iptables -X iptables -t nat -F iptables -t nat -X 由於使用的是Linux的軟路由,下面須要使用iptables實現NAT地址轉發功能, 實現內網和外網的數據通訊 iptables -t nat -I PREPOUTING -d 124.126.147.168 -p tcp \ -dport 80 \ -j DNAT --to-destination 192.168.1.100:80 iptables -t nat -I POSTROUTING -S 192.168.1.0/24 -P tcp \ -j SNAT --to-source 124.126.147.168 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p 客戶端驗證:http://124.126.147.168,能夠獲得不一樣real server的響應數據包