赞
踩
目录
九.实现 master/master 的 Keepalived 双主架构
Keepalived是Linux下一个轻量级别的高可用解决方案,可以实现服务或者网络的高可用。主要是通过虚拟路由冗余来实现高可用,虽然它没有HeartBeat那么强大,但部署和使用非常简单,所有配置只需要一个配置文件即可完成。 Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,如果某个服务器节点出现故障,Keepalived将检测到后自动将节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此节点重新加入集群中,这些工作自动完成,不需要人工干预,需要人工完成的只是修复出现故障的节点。
后来又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有高可用集群功能 健康检查和失败切换是keepalived的两大核心功能 健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活 而失败切换主要是应用于配置了主备模式的服务器,利用VRRP协议维持主备服务器的心跳,当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性。
Initialize状态:系统启动后进入initialize状态
Master状态
Backup状态
抢占模式下,一旦有优先级高的路由器加入,立即成为Master,默认 非抢占模式下,只要Master不挂掉,优先级高的路由器只能等待 简单点说抢占模式就是,当master宕机后,backup 接管服务。 后续当master恢复后,vip漂移到master上,master重新接管服务,多了一次多余的vip切换,而在实际生产中是不需要这样。 实际生产中是,当原先的master恢复后,状态变为backup,不接管服务,这是非抢占模式。
接下来分4种情况说明:
1.俩台都为master时,比如server1的优先级大于server2,keepalived启动后server1获得master,server2自动降级为backup。此时server1宕机的话,server2接替 服务,当server1恢复后,server1又变为master,重新接管服务,server2变为backup。属于抢占式。
2.server1为master,server2位backup,且master优先级大于backup。keepalived启动后server1获得master,server2为backup。当server1宕机后, server2接管服务。当server1恢复后,server1重新接管服务变为master,而server2变为backup。属于抢占式。
3.server1为master,server2位backup,且master优先级低于backup。keepalived启动后server2获得master,server1为backup。当server2宕机后, server1接管服务。此时server2恢复后抢占服务,获得master,server1降级将为backup。属于抢占式。 以上几种,只要级别高就会获取master,与state状态是无关的 。
4.server1和server2都为backup。我们要注意启动server服务的启动顺序,先启动的升级为master,与优先级无关。且配置nopreempt项比如server1获得master权限,server2为backup。此时server1宕机后,server2接管服务升级为master。当server1恢复后权限将为backup,不会争抢 server2的master权限,server2将会继续master权限。属于非抢占式
重点:第4种非抢占式俩节点state必须为bakcup,且必须配置nopreempt
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了 tips:抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
用户空间核心组件:
vrrp stack:VIP消息通告
checkers:监测real server
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件
IPVS wrapper:生成IPVS规则
Netlink Reflector:网络接口
WatchDog:监控进程
控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:针对网络目的而优化的自己的线程抽象
内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
需要四台机子 VIP:172.25.254.100 k1:172.25.254.10 sh vmset.sh eth0 172.25.254.10 k1.rhel7.org k2:172.25.254.20 sh vmset.sh eth0 172.25.254.20 k2.rhel7.org #如果出现网卡的问题,先去对应的目录/etc/sysconfig/network-scripts里面看看有没有多的东西,再看看网卡开了没有nmcli networking;开启:nmcli networking on;最后看看nmcli connection看看挂载情况。
- realserver1:172.25.254.110
- 配置Apache服务
- yum install httpd -y
- echo realserver1 - 172.25.254.110 > /var/www/html/index.html
- systemctl enable --now httpd
- realserver2:172.25.254.120
- 配置Apache服务
- yum install httpd -y
- echo realserver2 - 172.25.254.120 > /var/www/html/index.html
- systemctl enable --now httpd
配置文件:/etc/keepalived/keepalived.conf
配置文件组成
GLOBAL CONFIGURATION
Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION VRRP
instance(s): 定义每个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s): LVS集群的VS和RS
- ! Configuration File for keepalived
- global_defs {
- notification_email {
- 3511123xxx@qq.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
- timiniglee-zln@163.com
- }
- notification_email_from keepalived@KA1.rhel7.org #发邮件的地址
- smtp_server 127.0.0.1 #邮件服务器地址
- smtp_connect_timeout 30 #邮件服务器连接timeout
- router_id KA1.rhel7.org #每个keepalived主机唯一标识;建议使用当前主机名,但多节点重名不影响
- vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能;启用此配置后,如果收到的通告报文和上一个报文是同一 #个路由器,则跳过检查,默认值为全检查
- vrrp_strict #严格遵循vrrp协议
- #启用此项后以下状况将无法启动服务:
- #1.无VIP地址
- #2.配置了单播邻居
- #3.在VRRP版本2中有IPv6地址
- #建议不加此项配置
- vrrp_garp_interval 0 #报文发送延迟,0表示不延迟
- vrrp_gna_interval 0 #消息发送延迟
- vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:
- }
- vrrp_instance VI_1 {
- state MASTER
- interface eth0 #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和VIP不在一个网卡
- virtual_router_id 100 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一;否则服务无法启动;同属一个虚拟路由器的多个keepalived节点必须相同;务必要确认在同一网络中此值必须唯一
- priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254;值越大优先级越高,每个keepalived主机节点此值不同
- advert_int 1 #vrrp通告的时间间隔,默认1s
- authentication { #认证机制
- auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
- uth_pass 1111 #预共享密钥,仅前8位有效;同一个虚拟路由器的多个keepalived节点必须一样
- }
- virtual_ipaddress { #虚拟IP,生产环境可能指定上百个IP地址;指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认32
- 172.25.254.102/24 dev eth2 label eth0:1
- }
- }
- 测试:tcpdump -i eth0 -nn host 224.0.0.18
- #没有指令可以下载:yum install tcpdump -y;关闭KA1后再看组播信息
- dropped privs to tcpdump
- tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
- listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
- 22:48:23.294894 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 20,
- prio 100, authtype none, intvl 1s, length 20
- 22:48:24.084793 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 30,
- prio 80, authtype none, intvl 1s, length 20
- vim /etc/sysconfig/keepalived
- KEEPALIVED_OPTIONS="-D -S 6" #添加内容
- vim /etc/rsyslog.conf
- .....
- # Save boot messages also to boot.log
- local7.* /var/log/boot.log
- local6.* /var/log/keepalived.log
- ..... #添加内容
- systemctl restart keepalived.service rsyslog.service #重启
- tail -f /var/log/keepalived.log
- Aug 12 21:50:55 k1 Keepalived_vrrp[13257]: Sending gratuitous ARP on eth0 for 172.25.254.100
- Aug 12 21:50:55 k1 Keepalived_vrrp[13257]: Sending gratuitous ARP on eth0 for 172.25.254.100
- Aug 12 21:50:55 k1 Keepalived_vrrp[13257]: Sending gratuitous ARP on eth0 for 172.25.254.100
- ...
当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理 将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含子配置文件。
- [root@K1 ~]# mkdir /etc/keepalived/conf.d
- [root@K1 ~]# vim /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
- global_defs {
- notification_email {
- 3511123xxx@qq.com
- }
- notification_email_from keepalived@KA1.rhel7.org
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id KA1.rhel7.org
- vrrp_skip_check_adv_addr
- #vrrp_strict
- vrrp_garp_interval 0
- vrrp_gna_interval 0
- vrrp_mcast_group4 224.0.0.18
- #vrrp_iptables
- }
- include "/etc/keepalived/conf.d/*.conf" #相关子配置文件
- ....
- [root@K1 ~]# vim /etc/keepalived/conf.d/router.conf
- vrrp_instance VI_1 {
- state MASTER
- interface eth0
- virtual_router_id 20
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- }
- [root@KA1 ~]# systemctl restart keepalived
默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机;要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP。
- #ka1主机配置
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- virtual_router_id 100
- priority 100 #优先级高
- nopreempt #非抢占模式
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- }
- #KA2主机配置
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- virtual_router_id 100
- priority 80 #优先级低
- advert_int 1
- nopreempt #非抢占模式
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- }
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP
preempt_delay # #指定抢占延迟时间为#s,默认延迟300s
- #ka1主机配置
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- virtual_router_id 100
- priority 100 #优先级高
- preempt_delay 10s #抢占延迟10s
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- }
- #KA2主机配置
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- virtual_router_id 100
- priority 80 #优先级低
- advert_int 1
- preempt_delay 10s #抢占延迟10S
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- }
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流 注意:启用 vrrp_strict 时,不能启用单播 注意:启用 vrrp_strict 时,不能启用单播
注意:启用 vrrp_strict 时,不能启用单播 注意:启用 vrrp_strict 时,不能启用单播
- #在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
- unicast_src_ip <IPADDR> #指定发送单播的源IP
- unicast_peer {
- <IPADDR> #指定接收单播的对方目标主机IP
- ......
- }
- #启用 vrrp_strict 时,不能启用单播,否则服务无法启动,并在messages文件中记录下面信息
- Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: (m44) Strict mode does not
- support authentication. Ignoring.
- ---------------------------实验配置---------------------------
- #master 主机配置
- [root@K1 ~]# vim /etc/keepalived/keepalived.conf
- .....
- vrrp_skip_check_adv_addr
- #vrrp_strict #注释此参数,与vip单播模式冲突
- .......
- state MASTER
- interface eth0
- ......
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- unicast_src_ip 172.25.254.10 #本机IP
- unicast_peer {
- 172.25.254.20 #指向对方主机IP
- #如果有多个keepalived,再加其它节点的IP
- }
- }
- ##在BACKUP主机中
- [root@K2 ~]# vim /etc/keepalived/keepalived.conf
- ....
- vrrp_skip_check_adv_addr
- #vrrp_strict #注释此参数,与vip单播模式冲突
- vrrp_garp_interval 0
- ......
- vrrp_instance VI_1 {
- state BACKUP
- ......
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:0
- }
- unicast_src_ip 172.25.254.20 #本机ip
- unicast_peer {
- 172.25.254.1 0 #对端主机IP
- }
- }
- 测试:抓包查看单播效果
- [root@K1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20
- dropped privs to tcpdump
- tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
- listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
- 00:20:16.150917 IP 172.25.254.10 > 172.25.254.20: VRRPv2, Advertisement, vrid 100,
- prio 100, authtype simple, intvl 1s, length 20
- 00:20:17.151569 IP 172.25.254.10 > 172.25.254.20: VRRPv2, Advertisement, vrid 100,
- prio 100, authtype simple, intvl 1s, length 20
- [root@K2 ~]# tcpdump -i eth0 -nn src 172.25.254.20 and dst 172.25.254.10
- dropped privs to tcpdump
- tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
- listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
- 00:20:50.853174 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100,
- prio 80, authtype simple, intvl 1s, length 20
- 00:20:51.853798 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100,
- prio 80, authtype simple, intvl 1s, length 20
当keepalived的状态变化时,可以自动触发脚本的执行,比如:发邮件通知用户 默认以用户keepalived_script身份执行脚本 如果此用户不存在,以root执行脚本可以用下面指令指定脚本执行用户的身份。
当前节点成为主节点时触发的脚本
notify_master <STRING>|<QUOTED-STRING>
当前节点转为备节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>
当前节点转为“失败”状态时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>
通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
notify <STRING>|<QUOTED-STRING>
当停止VRRP时触发的脚本
notify_stop <STRING>|<QUOTED-STRING>
- [root@K1 ~]# vim /etc/keepalived/mail.sh
- #!/bin/bash
- mail_dest='594233887@qq.com'
- mail_send()
- {
- mail_subj="$HOSTNAME to be $1 vip 转移"
- mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
- echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
- }
- case $1 in
- master)
- mail_send master
- ;;
- backup)
- mail_send backup
- ;;
- fault)
- mail_send fault
- ;;
- *)
- exit 1
- ;;
- esac
- dnf install mailx -y #安装邮件发送工具
- vim /etc/mail.rc
- #######mail set##########
- set from=3511123xxx@qq.com
- set smtp=smtp.qq.com
- set smtp-auth-user=3511123xxx@qq.com
- set smtp-auth-password=isjatjw #qq邮箱的授权码,在邮箱设置里面账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务生成授权码。
- set smtp-auth=login
- set ssl-verify=ignore
- 测试:echo test message |mail -s test 3511123xxx@qq.com
- #在所有 keepalived节点配置如下
- vim /etc/keepalived/mail.sh
- #!/bin/bash
- mail_dest='3511123xxx@qq.com'
- mail_send()
- {
- mail_subj="$HOSTNAME to be $1 vip 转移"
- mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
- echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
- }
- case $1 in
- master)
- mail_send master
- ;;
- backup)
- mail_send backup
- ;;
- fault)
- mail_send fault
- ;;
- *)
- exit 1
- ;;
- esac
- chmod +x /etc/keepalived/mail.sh
- vim /etc/keepalived/keepalived.conf
- vrrp_instance VI_1 {
- state MASTER
- interface eth0
- virtual_router_id 100
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- unicast_src_ip 172.25.254.10
- unicast_peer {
- 172.25.254.20
- }
- notify_master "/etc/keepalived/mail.sh master"
- notify_backup "/etc/keepalived/mail.sh backup"
- notify_fault "/etc/keepalived/mail.sh fault"
- }
- 测试:模拟master故障在浏览器中观察邮件即可
- yum install ntpdate -y #下载软件包
- ntpdate ntp.aliyun.com #同步阿里云服务器时间
- date #查看时间
master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。 master/master 的双主架构: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高 服务器资源利用率.
- [root@k1 ~]# vim /etc/keepalived/keepalived.conf
- .....
- vrrp_instance VI_1 {
- state MASTER #主
- interface eth0
- virtual_router_id 100
- priority 100
- #nopreempt
- #preempt_delay 5s
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- unicast_src_ip 172.25.254.10
- unicast_peer {
- 172.25.254.20
- }
- }
- vrrp_instance VI_2 {
- state BACKUP #备
- interface eth0
- virtual_router_id 200
- priority 80
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.200/24 dev eth0 label eth0:2
- }
- unicast_src_ip 172.25.254.10
- unicast_peer {
- 172.25.254.20
- }
- }
- ...
-
- [root@k2 ~]# vim /etc/keepalived/keepalived.conf
- ....
- vrrp_instance VI_1 {
- state BACKUP #备
- interface eth0
- virtual_router_id 100
- priority 80
- #nopreempt
- #preempt_delay 5s
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eth0:1
- }
- unicast_src_ip 172.25.254.20
- unicast_peer {
- 172.25.254.10
- }
- }
-
- vrrp_instance VI_2 {
- state MASTER #主
- interface eth0
- virtual_router_id 200
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.200/24 dev eth0 label eth0:2
- }
- unicast_src_ip 172.25.254.20
- unicast_peer {
- 172.25.254.10
- }
- }
- ....
- 注意:一定要看清楚自己的主备;还有优先级,router_id的值不要搞混了,出现问题的话,可以先看看这几个地方。
- 测试:ifconfig查看自己的vip
- [root@k1 ~]# yum install ipvsadm -y
- [root@k2 ~]# yum install ipvsadm -y
- [root@k1 ~]# vim /etc/keepalived/keepalived.conf
- [root@k2 ~]# vim /etc/keepalived/keepalived.conf #一样的配置
- virtual_server 172.25.254.100 80 {
- delay_loop 6 #每隔 6 秒对后端服务器进行健康检查
- lb_algo wrr #使用加权轮询(Weighted Round Robin)的负载均衡算法。
- lb_kind DR #表示负载均衡的类型为DR模式
- #persistence_timeout 50
- protocol TCP #指定协议为 TCP
-
- real_server 172.25.254.110 80 {
- weight 1 #表示这两个服务器的权重均为 1
- HTTP_GET { #应用层检测
- url {
- path /
- status_code 200 #期望得到的状态码是 200,表示服务器正常。
- }
- connect_timeout 3 #连接超时时间为 3 秒
- nb_get_retry 2 #重试次数为 2 次
- delay_before_retry 2 #每次重试前的延迟为 2 秒
- }
- }
- real_server 172.25.254.120 80 {
- weight 1
- HTTP_GET {
- url {
- path /
- status_code 200
- }
- connect_timeout 3
- nb_get_retry 2
- delay_before_retry 2
- }
- }
- }
- [root@realserver1 ~]# vi /etc/sysctl.d/arp.conf
- net.ipv4.conf.all.arp_ignore=1 #这个设置适用于所有网络接口。当设置为 1 时,表示系统只响应目的 IP 地址是接收网卡上的本地地址的 ARP 请求。
- net.ipv4.conf.all.arp_announce=2 #同样适用于所有网络接口。设置为 2 时,表示系统在发送 ARP 报文时,尽可能避免使用不属于该网络接口子网的本地地址作为源 IP 地址。
- net.ipv4.conf.lo.arp_ignore=1 #这两个设置专门针对回环接口lo进行了相同的ARP相关配置。
- net.ipv4.conf.lo.arp_announce=2
- [root@realserver1 ~]# sysctl --system
- * Applying /usr/lib/sysctl.d/00-system.conf ...
- * Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
- .....
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.all.arp_announce = 2
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- * Applying /etc/sysctl.conf ...
- [root@realserver1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo #设置环回vip接口
- DEVICE=lo
- IPADDR0=127.0.0.1
- NETMASK0=255.0.0.0
- IPADDR1=172.25.254.100
- NETMASK1=255.255.255.255
- NETWORK=127.0.0.0
- # If you're having problems with gated making 127.0.0.0/8 a martian,
- # you can change this to something else (255.255.255.255, for example)
- BROADCAST=127.255.255.255
- ONBOOT=yes
- NAME=loopback
- [root@realserver1 ~]# systemctl restart network #如果重启不了,看看ifcfg-lo文件所在地有没有其他的文件,删掉即可。
- [root@realserver2 ~]# vi /etc/sysctl.d/arp.conf
- net.ipv4.conf.all.arp_ignore=1
- net.ipv4.conf.all.arp_announce=2
- net.ipv4.conf.lo.arp_ignore=1
- net.ipv4.conf.lo.arp_announce=2
- [root@realserver2 ~]# sysctl --system #反馈内容出现对应的即可
- [root@realserver2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo #跟realserver1一样的操作。
- [root@realserver2 ~]# systemctl restart network
- 测试:[root@k1 ~]# ipvsadm -Ln出现对应的ip就没问题了。如果没有就看看主配置文件有没有问题,可以关掉其中一台的web服务,看策略,应该是没有。
如果一直没有对应东西出来,以下是检测的地方。
keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先 动态调整,从而实现其它应用的高可用性功能。
- [root@k1 ~]# vim /etc/keepalived/test1.sh
- #!/bin/bash
- [ ! -f /mnt/lee ]
- [root@k1 ~]# sh test.sh
- [root@k1 ~]# echo $?
- 0
- [root@k1 ~]# chmod +x /etc/keepalived/test1.sh
- [root@k1 ~]# vim /etc/keepalived/keepalived.conf
- ......
- vrrp_script check_file {
- script "/etc/keepalived/test1.sh"
- interval 1
- weight -30
- fall 2
- rise 2
- timeout 2
- }
- vrrp_instance VI_1 {
- state MASTER
- interface ens33
- virtual_router_id 100
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.25.254.100/24 dev eth0 label eeth0:1
- }
- unicast_src_ip 172.25.254.10
- unicast_peer {
- 172.25.254.20
- }
- track_script {
- check_file #后面的空格需要注意,不要有空格,
- }
- }
- 测试:建立文件,查看vip在那个地方,在ka2就对了。
- [root@k1 ~]# touch /mnt/lee
- [root@k1 ~]# systemctl restart keepalived
- [root@k1 ~]# ifconfig
- [root@k1 ~]# yum install haproxy -y #
- vim /etc/haproxy/haproxy.cfg
- ... #文章末尾添加
- listen webcluster
- bind 172.25.254.100:80
- mode http
- balance roundrobin
- server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
- server web2 172.25.254.120:80 check inter 3 fall 2 rise 5
- #在两个ka1和ka2两个节点启用内核参数
- [root@k1 ~]# vim /etc/sysctl.conf
- net.ipv4.ip_nonlocal_bind = 1 #在文件末尾添加这行,表示本地没有ip也可以启动
- [root@k1 ~]# sysctl -p #生效
- #在ka1中编写检测脚本
- [root@k1 ~]# vim /etc/keepalived/test.sh
- #!/bin/bash
- killall -0 haproxy #如果没有指令,可以yum install psmisc 命令来安装
- [root@k1 ~]# chmod +X /etc/keepalived/test.sh
- #在ka1中配置keepalived
- [root@k1 ~]# vim /etc/keepalived/keepalived.conf
- global_defs {
- ....
- vrrp_script check_haproxy {
- script "/etc/keepalived/test.sh"
- interval 1
- weight -30
- fall 2
- rise 2
- timeout 2
- }
- vrrp_instance VI_1 {
- ....
- track_script {
- check_haproxy
- }
- }
- [root@k1 ~]#systemctl restart keepalived
- [root@k1 ~]#systemctl restart haproxy
- [root@realserver1 ~]# /etc/sysctl.d/arp.conf #realserver2一样需要改为0
- net.ipv4.conf.all.arp_ignore=0
- net.ipv4.conf.all.arp_announce=0
- net.ipv4.conf.lo.arp_ignore=0
- net.ipv4.conf.lo.arp_announce=0
- 测试:做之前要注释lvs的配置。通过systemctl stop haproxy.service关闭haproxy服务,查看vip有没有到ka2端,有就对了,没有就有问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。