标签: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