标签:keepalived 高可用
一、keepalived介绍 为了保证业务不间断的对外提供服务,从而需要有单独的硬件(F5)或者软件来监控服务是否能正常的提供服务,keepalived就是一种能够监控后端服务是否能正常的提供服务的一种软件,keepalived软件是根据一种路由协议实现的,协议名叫做VRRP。
VRRP工作过程
(1) 虚拟路由器中的路由器根据优先级选举出Master。Master 路由器通过发送免费ARP 报文,将自己的虚拟MAC 地址通知给与它连接的设备或者主机,从而承担报文转发任务;
(2) Master 路由器周期性发送VRRP 报文,以公布其配置信息(优先级等)和工作状况;
(3) 如果Master 路由器出现故障,虚拟路由器中的Backup 路由器将根据优先级重新选举新的Master;
(4) 虚拟路由器状态切换时,Master 路由器由一台设备切换为另外一台设备,新的Master 路由器只是简单地发送一个携带虚拟路由器的MAC 地址和虚拟IP地址信息的免费ARP 报文,这样就可以更新与它连接的主机或设备中的ARP 相关信息。网络中的主机感知不到Master 路由器已经切换为另外一台设备。
(5) Backup 路由器的优先级高于Master 路由器时,由Backup 路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。在VRRP中有一个免费的ARP是来解决路由器或者路由器中的缓存mac地址的问题免费ARP:通知同一个网段的主机更新地址表,缓存,mac地址
keepalived两种工作模式
1.抢占模式
如果backup工作在抢占模式下,当收到vrrp报文后,会将自己的优先级与通告的优先级进行比对,若比通告的优先级高,则会主动抢占为master,否则继续保持backup
2.非抢占模式
如果backup工作在非抢占模式下,只要master不发生故障,就算backup比master优先级高也不会抢占为master
keepalived核心功能
1.VRRP:地址转移
2.检查IPVS健康状态,若后端服务出现故障,能够自动的踢出和添加
3.添加IPVS规则,直接在keepalived配置文件中就可以添加IPVS功能
二、使用keepalived实现VRRP的双主模型配置(单主则直接添加一个即可)
该配置只是在两台不同的主机上配置keepalived,没有配置任何的服务,只是起到了VRRP能够在任何一台主机故障,虚拟IP地址还是可用
主机1
[root@centos7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost #这里填写可以真正发送邮件的邮件服务器
}
notification_email_from keepalived@localhost #发送人
smtp_server 127.0.0.1 #主机地址
smtp_connect_timeout 10 #超时时间
router_id test1 #该ID不能与其他服务器一致
vrrp_mcast_group4 224.255.255.255 #广播地址,可以使用任意广播地址
}
vrrp_instance VI_1 { #指定VRRP
state MASTER #工作模式
interface ens38 #物理网卡
virtual_router_id 11 #相同的VRRP应该一致,不同的VRRP不能一致
priority 100 #优先级,1-255
advert_int 1 #每隔多久发送一个ARP
authentication {
auth_type PASS #认证机制,
auth_pass 12345678 #密码,最长8位字符
}
virtual_ipaddress {
192.168.1.200/24 dev ens38 #虚拟IP地址,网卡等信息
}
track_interface {
ens38 #监控的网卡,可以监控多个
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens38
virtual_router_id 22
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 87654321
}
virtual_ipaddress {
192.168.1.222/24 dev ens38
}
track_interface {
ens38
}
}主机2
[root@centos7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 10
router_id test2
vrrp_mcast_group4 224.255.255.255
}
vrrp_instance VI_1 {
state BACKUP
interface ens38
virtual_router_id 11
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.200/24 dev ens38
}
track_interface {
ens38
}
}
vrrp_instance VI_2 {
state MASTER
interface ens38
virtual_router_id 22
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 87654321
}
virtual_ipaddress {
192.168.1.222/24 dev ens38
}
track_interface {
ens38
}
}三、使用keepalived高可用IPVS
准备环境,若需要测试则需要四台主机,两台做后端的提供web服务的机器,两台做高可用IPVS,这里只配置前端高可用的配置
[root@centos7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 10
router_id test1
vrrp_mcast_group4 224.255.255.255
}
vrrp_instance VI_1 {
state MASTER
interface ens38
virtual_router_id 11
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.200/24 dev ens38
}
track_interface {
ens38
}
}
virtual_server 192.168.1.200 80 { #IPVS的设置,需要指定使用哪一个虚拟主机
delay_loop 1 #轮询间隔
lb_algo rr #轮询算法支持rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #模型 DR|NAT|TUN
persistence_timeout 10 超时时间
protocol TCP #使用协议,只支持TCP
sorry_server 127.0.0.1 80 #当所有服务都不可用时,指定错误页面,一般指向本机
real_server 192.168.1.153 80 { #都断的服务器
weight 1 #权重
HTTP_GET { #方法,也可以使用SSL_GET定义https协议
url {
path / #检查的目录
status_code 200 #返回的状态码
}
nb_get_retry 3 #重试次数
delay_before_retry 10 #重试之前的延迟时长
connect_timeout 10 #请求超时时长
}
}
}备用主机
[root@centos7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 10
router_id test2
vrrp_mcast_group4 224.255.255.255
}
vrrp_instance VI_1 {
state BACKUP
interface ens38
virtual_router_id 11
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.200/24 dev ens38
}
track_interface {
ens38
}
}
virtual_server 192.168.1.200 80 {
delay_loop 1
lb_algo rr
lb_kind DR
persistence_timeout 10
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.1.153 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
nb_get_retry 3
delay_before_retry 10
connect_timeout 10
}
}
} 在该模型下,也需要和IPVS配置NAT模型时更改的内核参数,和添加指向keepalived服务器的路由,参考更改配置如下,在多台后端服务器上都需要修改,若需要永久生效,则需要将配置更改到/etc/sysctl.conf文件中
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@centos7 ~]#ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200 up [root@centos7 ~]#route add -host 192.168.1.200 dev lo:0
四、使用keepalived高可用nginx,因为keepalived内置并不能直接高可用nginx,所以需要依靠脚本文件来实现,这里只是简单的实现高可用,基本拓扑图如下图,但是DNS一般就是指的添加两条A记录,并不是自己搭建DNS服务器

相关配置文件
调用脚本
1.定义脚本
vrrp_script 脚本名 {
script ""
interval INT #检测间隔
weight -INT|+INT #表示满足条件后增加权重或减少权重,从而达到动态的切换
}
2.调用脚本
track_script {
脚本1
脚本2
}两台主机的相关配置
keepalivedA
[root@centos7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 10
router_id test1
vrrp_mcast_group4 224.255.255.255
}
vrrp_script test {
script "killall -0 nginx"
interval 1
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface ens38
virtual_router_id 11
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.200/24 dev ens38
}
track_interface {
ens38
}
track_script {
test
}
}keepalivedB
[root@centos7 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@loaclhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 10
router_id test2
vrrp_mcast_group4 224.255.255.255
}
vrrp_script test {
script "killall -0 nginx"
interval 1
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens38
virtual_router_id 11
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.1.200/24 dev ens38
}
track_interface {
ens38
}
track_script {
test
}
}
vrrp_instance VI_2 {
state MASTER
interface ens38
virtual_router_id 22
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 87654321
}
virtual_ipaddress {
192.168.1.222/24 dev ens38
}
track_interface {
ens38
}
track_script {
test
}
}标签:keepalived 高可用
原文地址:http://blog.51cto.com/10492754/2124791