keepalived两个功能,一个是使lvs使用的vip高可用,一个是监控各个上游节点的对应端口是否正常工做,以保证快速剔除坏掉的节点。html
keepalived默认的yum 1.3.5有BUG,根本跑不起来,因此咱们换成源码压缩包下载后编译安装的方式进行安装c++
通过实验 CentOS7.4下的lvs不是不停轮询,而是一段时间内会绑定用户和实际目标服务器,keepalived中也会表现出来,不过咱们能够换个ip访问一下,来验证咱们的配置结果。算法
本文出现三种节点名称,keepalived主节点和备用节点,以及RealServer——最终提供服务的服务器,注意将keepalived的主节点、备用节点、realserver分配为不一样的机器服务器
一、安装依赖(本文使用的Centos7.4是最小安装,部分依赖不全,因此须要先安装依赖)网络
yum install -y gcc gcc-c++ openssl-devel
二、下载keepalived-1.3.5压缩包(下载地址),放在/usr/local目录下,并解压,步骤略编辑器
三、进入解压后的目录中,执行如下命令:ide
./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
四、编辑keepalived.serviceoop
vi /lib/systemd/system/keepalived.service
将全部的字符串 “/usr/local/keepalived” 替换为空白,vi编辑器命令:【%s/\/usr\/local\/keepalived//g】spa
五、刷新配置.net
systemctl daemon-reload
六、编辑/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改低一些
七、在各个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转发过来的包真的是发给本身的,从而正常处理该包,不至于认为数据包不合法。
八、在主节点和备节点上分别执行
systemctl start keepalived
九、其余注意内容
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