CentOS7 Keepalived+LVS 负载均衡 后台节点健康检查

CentOS7 安装Keepalived以及基本配置    这篇文章介绍了如何安装keepalived以及配置虚拟IP实现双机故障切换。


本文主要介绍 Keepalived+LVS 负载均衡配置与后台节点健康检查。


1.安装LVS

1:下载RPM软件包 http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26-1.src.rpm

2:安装 rpm -ivh ipvsadm-1.26-1.src.rpm 包

3:yum install ipvsadm 安装软件

4:执行  ipvsadm   看是否有下面输出说明安装成功


5:执行命令 lsmod|grep ip_vs 检查当前加载的内核模块,看是否存在 ip_vs 模块

CentOS7 Keepalived+LVS 负载均衡 后台节点健康检查_第1张图片

注 1、只有执行 ipvsadm 以后,才会在内核加载 ip_vs 模块


2.安装keepalived 

1:CentOS7 安装Keepalived以及基本配置 

2:配置文件/etc/keepalived/keepalived.conf  

! Configuration File for keepalived

global_defs {  
   notification_email {  
     root@localhost  
   }  
   notification_email_from root@localhost  
   smtp_server localhost  
   smtp_connect_timeout 30  
   router_id  NodeA  
} 


vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.220
    }
}

virtual_server 192.168.1.220 8080 { 
   delay_loop 6                  
   lb_algo rr                     
   lb_kind DR                     
   nat_mask 255.255.255.0           
   persistence_timeout 0           
   protocol TCP                    
   real_server 192.168.1.107 8080 {   
       weight 1                      
        HTTP_GET {
            url { 
              path /index.jsp
              digest d654f21f87b7e6900b887f07c19e73fe
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }       
   }
   real_server 192.168.1.108 8080 {    
       weight 11
        HTTP_GET {
            url { 
              path /index.jsp
              digest 625eddd79c61cf84c71c0c17448f8093
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }        
   }
}

vrrp_instance VI_1 :不在这里解释了,看我另外一篇文章,地址在上面。

virtual_server 192.168.1.220 8080   : 这里配置虚拟服务器 (192.168.1.220 为虚拟IP, 监听8080端口)客户端就访问这个地址。

delay_loop :健康检查时间间隔,单位是秒。

lb_algo :负载均衡调度算法,互联网应用常使用 wlc 或 rr。

lb_kind :负载均衡转发规则。一般包括 DR,NAT,TUN3 种,在我的方案中,都使用DR 的方式。

persistence_timeout. :会话保持时间,单位是秒。这个会话是网络7层传输协议中的(第三层)会话。比如我们把它设置为60,那么客户端60秒内访问LVS虚拟服务器的请求都会被转到到同1个后台服务器节点。如果设置为0,那么每次请求都会根据配置的调度情况进行分发。

转发协议 protocol. 一般有 tcp 和 udp 两种。实话说,我还没尝试过 udp 协议类的转发。


real_server 192.168.1.107 8080  : 这里配置真实服务器的地址与端口。

weight 1  :权重,不解释了。一般都是机器性能好的高一些,低的小一些。

HTTP_GET:配置健康检查

url { 
        path /index.jsp  健康检查的页面
        digest 625eddd79c61cf84c71c0c17448f8093  根据页面计算出的MD5的值,这个值一定不能随便写,不然keepliv
}

下面说一下如何计算digest 

我的keepalived的安装目录在 /usr/local/keepalive/

进入到/usr/local/keepalive/bin

./genhash -s 192.168.1.107 -p 8080 -u /index.jsp
通过上诉命令计算digest  然后写到配置文件上就可以了。

connect_timeout 5   :连接超时时间
nb_get_retry 3        :重连次数
delay_before_retry 3  :重连间隔时间
connect_port 8080        :检测端口

3:启动keepalived

1:CentOS7 下配置Keepalived为系统服务,开机自动启动。   systemctl start keepalived.service

2:也可以直接 /usr/local/keepalive/sbin/keepalived -D 启动,怎么启动都行。

3:启动成功输入命令 ps aux | grep keepalived  


Keepalived 正常运行时,共启动 3 个进程,其中一个进程是父进程,负责监控其子进程;一个是 vrrp 子进程;另外一个是 checkers 子进程。

4:也可以查看日志:tail -f /var/log/message

5:可以用其它服务器去ping 192.168.1.220这个虚拟IP,Telnet 8080端口,测试虚拟服务器是否有问题。


4:配置真实服务器

说明:一般真实互联网应用都配置为lb_kind = dr 模式,因为这种模式效率是最高的,缺点就是配置稍微复杂一点,需要配置客户端。

DR模式原理请参考:http://atong.blog.51cto.com/2393905/1348602

简单说一下:  假设A为前端负载均衡服务器, B,C为后端真实服务器。 A接收到数据包以后,会把数据包的MAC地址改成B的(根据调度算法,假设发给B服务器),然后把数据包重新发出去,交换机收到数据包根据MAC地址找到B,把数据包交给B。 这时B会收到数据包,同时验证请求IP地址,由于数据包里的IP地址是给A的,所以正常情况下B会丢弃数据包,为了防止这种情况,需要在B机器的回环网卡上配置A的IP地址。并设置ARP压制。

1:在真实服务器上运行脚本文件

#!/bin/bash  
#description : start realserver
VIP=192.168.1.220
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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 

VIP=192.168.1.220   大家只要修改这个地方为虚拟IP即可,别的地方都不需要改。

2:需要对脚本授权 

chmod +x lvs_real.sh


3:如果脚本是在windows编辑在拷贝过去的会有问题,好像是回车换行符不同导致的。


sed -i 's/\r$//' lvs_real.sh


4:运行脚本

./lvs_real.sh

5:输入ifconfig查看虚拟IP是否已经绑定到回环网卡

CentOS7 Keepalived+LVS 负载均衡 后台节点健康检查_第2张图片

6:测试的时候最好先关闭防火墙,免得给自己挖坑。


7:如果想知道当前测试机的访问请求被转发到那个服务器去了,可以在 ipvsadm 命令后带一个选项,其完整形式为:ipvsadm –lcn | grep 159.226.240.63 (你的IP)。


5.其它健康检查方式

1:TCP方式检查

virtual_server 192.168.80.120 8080 { 
   delay_loop 6                  
   lb_algo rr                     
   lb_kind DR                     
   nat_mask 255.255.255.0           
   persistence_timeout 0           
   protocol TCP                    
   real_server 192.168.80.129 8080 {   
       weight 1                      
      TCP_CHECK {
        connect_port    8080
        connect_timeout 5
      }      
   }
   real_server 192.168.80.131 8080 {    
       weight 1
      TCP_CHECK {
        connect_port    8080
        connect_timeout 5
      }      
   }
}

2:其它方式请参考keepalived提供的配置文件



你可能感兴趣的:(Linux)