Keepalived:最初给LVS负载均衡集群中的服务节点提供健康检查功能,后来因为集成了VRRP协议,可以实现解决服务节点的单点故障,提高服务的可靠性,支持高可用集群的部署
VRRP协议
VRRP(虚拟路由冗余协议):由多台物理路由器组成一台高性能的虚拟路由器,多个物理路由器之间通过优先级举出主节点,其它节点为从节点,从节点不工作只接收主节点发来的VRRP通告,主节点管理虚拟IP并对外提供服务,主节点定时给从节点发送VRRP通告,通告中包含着主节点的优先级,当从节点在计时器的时间到了之后接收不到主机点发送的VRRP通告时,就认为主节点不可用,此时,从节点就会根据优先级选举出新的主节点并接管虚拟IP对外提供服务,这个切换过程对于客户端来说是透明的,这样解决了单点故障,保证了服务的可用性
无故ARP(免费ARP):特点是arp广播包中源IP目的IP源MAC目的MAC都是发送方的,也就是都是虚拟IP和虚拟MAC,
作用:
1.可以检测是否有地址冲突
2.可以更新终端设备的ARP缓存表
实验环境:
| 系统 |
IP |
服务 |
| Centos7.4 |
1.1.1.1 |
keepalived主 |
| Centos7.4 |
1.1.1.2 |
keepalived备 |
| Centos7.4 |
1.1.1.3 |
Nginx |
| Centos7.4 |
1.1.1.4 |
Nginx |
| * |
1.1.1.111 |
VIP |
| Centos7.4 |
1.1.1.10 |
Client |
配置keepalived主
使用yum安装keepalived服务
1
| # yum -y install keepalived
|
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| vim /etc/keepalived/keepalived.conf global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id master }
vrrp_instance VI_1 { state MASTER interface ens33 //指定主节点从那块网卡发送VRRP通告 virtual_router_id 51 //指定该实例所属的虚拟路由组的id,属于同一个组的节点使用的id应该相同,id取值范围为0-255 priority 100 //指定该节点的优先级,属于同一个组的节点优先级最高为主节点,取值范围为1-255,配置超过取值范围的值都默认视为100 添加:nopreempt //将该节点设置为非抢占模式 advert_int 1 //主节点每隔1s发送一次VRRP通告,时间可以自定义 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 1.1.1.111/8 } }
virtual_server 1.1.1.111 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 0 protocol TCP netmask 255.0.0.0
real_server 1.1.1.3 80 { weight 1 TCP_CHECK { connect_timeout 1 nb_get_retry 3 delay_before_retry 1 connect_port 80 } } real_server 1.1.1.4 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
|
将配置文件拷贝给keepalived备
1
| # scp /etc/keepalived/keepalived.conf root@1.1.1.2:/etc/keepalived/keepalived.conf
|
修改备的配置文件
1 2 3 4
| # vi /etc/keepalived/keepalived.conf router_id backup state BACKUP priority 90
|
启动主从的keepalived服务
1
| # systemctl restart keepalived
|
配置Nginx(两台同样步骤)
1 2 3 4 5 6 7 8 9
| # 配置虚拟IP # cd /etc/sysconfig/network-scripts/ # cp ifcfg-lo ifcfg-lo:1 # vi ifcfg-lo:1 DEVICE=lo:1 IPADDR=1.1.1.111 NETMASK=255.255.255.255 NAME=lo:1 # 多余的删除
|
可以通过ifconfig命令来配置不过是临时IP重启失效
ifconfig lo:1 1.1.1.111 netmask 255.255.255.255
重启网卡
1
| systemctl restart network
|
修改系统内核文件
1 2 3 4 5 6 7 8
| # vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore=1 net.ipv4.conf.default.arp_ignore=1 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.lo.arp_announce=2 net.ipv4.conf.default.arp_announce=2 net.ipv4.conf.all.arp_announce=2 # sysctl -p
|
修改web首页文件(第二台web改成NO.2)
1
| # echo "Wecom to nginx NO.1" > /usr/local/nginx/html/index.html
|
放行防护墙
1 2 3 4
| # firewall-cmd --add-port=80/tcp --permanent # firewall-cmd --add-service=nginx --permanent # firewall-cmd --reload # setenforce 0
|
客户端验证
1 2
| # curl 1.1.1.111 wecom to nginx NO.1
|