Keepalived实现高可用技术
一. 主配置文件详解:/etc/keepalived/keepalived.conf
! Configuration File for keepalived
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服务器地址
smtp_connect_timeout 30 #定义连接smtp服务器的超时时间
router_id master #定义keepalived节点域名或者IP地址
}
vrrp_instance lvs1 { #定义vrrp实例。一个配置文件中可以实现多实例。但不同主机上互为master<-->backup的实例名需相同
state MASTER #定义实例的角色状态是master还是backup必须大写
nopreempt #不抢占(只针对BACKUP生效)
interface ens3 #对外提供服务的网卡接口,即VIP绑定的网卡接口
virtual_router_id 51 #VRRP组id,keepalived主从必须的id号必须相同
priority 100 #节点优先级,取值范围0~254,MASTER要比BACKUP高
advert_int 1 #心跳信息发送和接收时间间隔,单位为秒
authentication { #验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。
auth_type PASS
auth_pass 1111 #最多支持8字符,超过8字符将只取前8字符
}
virtual_ipaddress { #虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。
192.168.300.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.300.16 80 { #虚拟服务地址和端口,使用空格分隔,其中地址为VIP
delay_loop 6 #健康检查时间间隔
lb_algo rr #定义负载均衡LB的算法,这里使用的是rr调度算法
lb_kind DR #负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。
persistence_timeout 50 #负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。
protocol TCP #转发协议,分为TCP和UDP两种
sorry_server 192.168.200.200 1358 #只有real_server全部宕机后,才会访问Keeplavied自己的网页,一般用于提示用户服务器维护中....(注意这里的ip地址必须是本机ip)
real_server 192.168.201.100 443 { #真实服务器IP和端口,可以定义多个 ,地址和端口使用空格分隔
weight 1 #负载权重,值越大,转发的优先级越高
SSL_GET { #健康状况检查的检查方式,常见的有HTTP_GET|SSL_GET|TCP_CHECK|MISC_CHECK。
url {
path / #指定ssl_get健康状况检查的路径,例如检查index.html是否正常(一般为网页放置的位置)
digest ff20ad2481f97b1754ef3e12ecd3a9cc #健康状况需要状态码,可以是status_code、digest或digest+status_code#digest值用keepalived的genhash命令生成,一般使用status_code即可
}
url {
path /mrtg/ #可以定义多个网页位置
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3 #表示3秒无响应就超时,即此realserver不健康,需重试连接
nb_get_retry 3 #表示重试3次,3次之后都超时就是宕机,防止误伤(nb=number)
delay_before_retry 3 #重试的时间间隔
#上述配置需12秒才能判断节点故障,时间太久,应改小
}
}
}
real_server 192.168.200.5 1358 { #真实服务器可以有多个,一般我们不用Keepalived作代理。
weight 1
HTTP_GET { #使用HTTP的方式作健康检查
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
real_server 192.168.122.176 80 {
weight 1
TCP_CHECK { #使用TCP的方式作健康检查(常用)
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
二. 开启VRRP地址转发功能:
[root@rs1 ~]# ip addr add dev lo 30.30.30.100/32 //在lo接口上绑定VIP(这一步在所有的real_server上设置即可)
//下面的步骤是开启VIP地址转发功能
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
//确保LoadBalancer仓库可用
[root@master ~]# yum -y install ipvsadm
[root@master ~]# ipvsadm -C //清空配置
[root@master ~]# service ipvsadm save //保存配置
[root@master ~]# ipvsadm -L -n --stats //检测配置情况