LVS+Keepalived实现高可用集群
LVS+Keepalived 介绍
LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群
系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项 目之
一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);
十种调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
Keepalvied
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP
主机之间failover的实现
IP配置信息:
LVS-DR-Master 172.16.1.1
LVS-DR-BACKUP 172.16.1.8
LVS-DR-VIP 172.16.1.80
WEB1-Realserver01 172.16.1.2
WEB2-Realserver02 172.16.1.3
WEB3-Realserver03 172.16.1.4
一,安装LVS和Keepalvied软件包
1. Install ipvsadm
yum –y ipvsadm
2. 安装LVS和Keepalived
yum –y install gcc kernel-devel openssl-devel tar zxvf keepalived-1.1.15.tar.gz cd keepalived-1.1.15 ./configure -–sysconfdir=/etc/ --with-kernel-dir=/usr/src.kernel/2.6XXXX make && make install ln -s /usr/local/sbin/keepalived /sbin/ chkconfig --add keepalived chkconfig --level 2345 keepalived on service keepalived restart
二. 配置LVS实现负载均衡
lvs-dr
#!/bin/bash VIP=172.16.1.80 ./etc/rc.d/init.d/functions case "$1" in start) ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev eth0:1 echo "DirectoryServer Start OK" ;; stop) ipvsadm -C ipvsadm -Z ifconfig eth0:1 down /sbin/route del $VIP >/dev/null 2>&1 echo "DirectoryServer Stop OK" ;; *) echo "Usage: $0 {start|stop}" exit 1 esca exit0
lvs-realserver
#!/bin/bash
VIP=10.207.238.82 . /etc/rc.d/init.d/functions case "$1" in start) /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /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 "Usage: $0 {start|stop}" exit 1 esac exit 0 #end
三.利用Keepalvied結合lvs實現高可用实现负载均衡和和高可用性
1.配置在主负载均衡服务器上配置keepalived.conf
#vi /etc/keepalived/keepalived.conf (主调度器)
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.1.80 } } virtual_server 172.16.1.80 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 172.16.1.2 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.16.1.3 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.16.1.4 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
在备用调度器上:
#vi /etc/keepalived/keepalived.conf (备调度器)
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.1.80 } } virtual_server 172.16.1.80 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 172.16.1.2 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.16.1.3 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.16.1.4 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
如果報錯
Jan 11 09:06:26 hnxz-vm-dg-s1 Keepalived_vrrp[2436]: ip address associated with VRID not present in received packet : 10.207.238.82 Jan 11 09:06:26 hnxz-vm-dg-s1 Keepalived_vrrp[2436]: one or more VIP associated with VRID mismatch actual MASTER advert
應該為virtual id 問題可以通過命令查看
tcpdump -nn -i any net 224.0.0.0/8
#watch ipvsadm –ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddressort Scheduler Flags -> RemoteAddressort Forward Weight ActiveConn InActConn TCP 61.164.122.8:80 wrr persistent 60 -> 61.164.122.10:80 Route 3 0 0 -> 61.164.122.9:80 Route 3 0 0
#tail –f /var/log/message 监听日志,查看状态,测试LVS负载均衡及高可用性是否
有效。
5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管服务。
6.单纯keepalived 实现高可用
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 10.195.225.126 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/etc/keepalived/check-httpd.sh" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 80 priority 100 authentication { auth_type PASS auth_pass eric } track_script { chk_http_port } virtual_ipaddress { 10.207.238.82 } }
检测脚本文件
vim /etc/keepalived/check-httpd.sh
#!/bin/bash # varsion 0.0.1 A=`ps -C httpd --no-header |wc -l` if [ $A -eq 0 ];then /usr/sbin/httpd -k start sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
测试是否正常