进Q群11372462领取专属报名福利!
#说在前面
Linux下的keepalived是集群管理中保证集群高可用(HA)的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived是以VRRP协议为实现基础的,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样我们就可以保证集群的高可用。VRRP本身是数通方向的协议。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议。接下来,我们会找出两台Linux系统作为主节点和备节点,实现高可用。Let’s go !!!
#Keepalived安装
在master和standby节点分别基于YUM的方式安装keepalived
yum install -y gcc gcc-c++ wget popt-devel openssl openssl-devel
yum install -y libnllibnl-devel libnl3 libnl3-devel
yum install -y libnfnetlink-devel
yum install –y keepalived.x86_64
#Keepalived配置文件说明
##第一部分:全局配置
全局配置以“global_defs”作为标识,在“global_defs”区域内的都是全局配置选项。
! Configuration File for keepalived
global_defs {
notification_email { #用于设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的Sendmail服务。
dba.gao@gmail.com
ixdba@163.com
}
notification_email_fromKeepalived@localhost #用于设置邮件的发送地址。
smtp_server 192.168.200.1 #用于设置邮件的smtp server地址。
smtp_connect_timeout 30 #用于设置连接smtp server的超时时间。
router_id LVS_DEVEL #表示运行Keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息。
}
##第二部分:VRRPD 配置
vrrp_instance VI_1 { #VRRP实例开始的标识,后跟VRRP实例名称。
state MASTER #用于指定Keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。
interface eth0 #用于指定HA监测网络的接口。
virtual_router_id 151 #虚拟路由标识,这个标识是一个数字,同一个VRRP实例使用唯一的标识,即在同一个vrrp_instance下,MASTER和BACKUP必须是一致的。
priority 100 #用于定义节点优先级,数字越大表示节点的优先级就越高。在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。
advert_int 1 #设定MASTER与BACKUP主机之间同步检查的时间间隔,单位是秒。
track_interface { #设置一些额外的网络监控接口,其中任何一个网络接口出现故障,Keepalived都会进入FAULT状态。
eth0
eth1
}
authentication { #设定节点间通信验证类型和密码,验证类型主要有PASS和AH两种,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。
auth_type PASS
auth_passqwaszx
}
virtual_ipaddress { #设置虚拟IP地址(VIP)。
192.168.200.16
192.168.200.17 dev eth1
192.168.200.18 dev eth2
}
nopreempt #设置的是高可用集群中的不抢占功能。在一个HA Cluster中,如果主节点死机了,备用节点会进行接管,主节点再次正常启动后一般会自动接管服务。这种来回切换的操作,对于实时性和稳定性要求不高的业务系统来说,还是可以接受的,而对于稳定性和实时性要求很高的业务系统来说,不建议来回切换。
preemtp_delay 300 #设置切换的延时时间,单位是秒。
notify_master "/etc/keepalived/master.sh " #指定当Keepalived进入Master状态时要执行的脚本,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。
notify_backup “/etc/keepalived/backup.sh” #指定当Keepalived进入Backup状态时要执行的脚本,同理,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。
notify_fault “/etc/keepalived/fault.sh” #指定当Keepalived进入Fault状态时要执行的脚本,脚本功能与前两个类似。
}
##第三部分:LVS配置
virtual_server 192.168.12.200 80 { #设置虚拟服务器的开始,后面跟虚拟IP地址和服务端口,IP与端口之间用空格隔开。
delay_loop 6 #设置健康检查的时间间隔,单位是秒。
lb_algo rr #设置负载调度算法,可用的调度算法有rr、wrr、lc、wlc、lblc、sh、dh等,常用的算法有rr和wlc。
lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN和DR三个模式可选。
persistence_timeout 50 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
persistence_granularity #此选项是配合persistence_timeout的,后面跟的值是子网掩码,表示持久连接的粒度。
protocol TCP #指定转发协议类型,有TCP和UDP两种。
sorry_server 。 #备用节点,在所有real server失效后,这个备用节点会启用。
real_server 192.168.12.132 80 { #指定real server节点,后面跟的是real server的真实IP地址和端口,IP与端口之间用空格隔开。
weight 3 #配置real server节点的权值。权值大小用数字表示,数字越大,权值越高。
inhibit_on_failure #检测到real server节点失效后,把它的“weight”值设置为0,而不是从IPVS中删除。
notify_up | #与上面介绍过的notify_maser有相同的功能,后跟一个脚本,表示在检测到real server节点服务处于UP状态后执行的脚本。
notify_down | #检测到real server节点服务处于DOWN状态后执行的脚本。
}
#Keepalived高可用配置应用
首先在node-01节点进行配置,通过配置10.60.100.118作为虚拟IP地址检测TCP80端口应用作为高可用条件,以下黑色部分配置为要改动的内容。
[root@node-1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_scriptcheck_httpd {
script “</dev/tcp/127.0.0.1/80”
interval 2
fall 2
rise 1
}
vrrp_instanceHA_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_httpd
}
virtual_ipaddress {
10.60.100.118/24 dev ens33
}
}
接下来,对node-2节点开始配置。
[root@node-2 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_idLVS_02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_scriptcheck_httpd {
script “</dev/tcp/127.0.0.1/80”
interval 2
fall 2
rise 1
}
vrrp_instance HA_1 {
state BACKUP
interface ens33
virtual_router_id 80
priority 40
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_httpd
}
virtual_ipaddress {
10.60.100.118/24 dev ens33
}
}
#Keepalived高可用效果测试
当我们分别在两台节点执行systemctl start keepalived.service 启动服务,通过查看ip addr发现,主节点的ens33物理网卡绑定虚拟IP10.60.100.118,如下图所示:
当我们主动停掉httpd服务后会发现10.60.100.118该虚拟IP会跑到备节点的ens33物理网卡中。如下图所示:
当修复httpd应用,重启拉起后,虚拟IP又会回到主节点;到此,关于keepalived高可用服务已实现。
#说在最后
这一次,我们通过了解通过配置keepalived实现应用的高可用,这些都是我们成为Linux大神的必备基础技能;UP楠哥先帮小伙伴们支棱到这里,后面通过大家伙使用的反馈,欢迎小伙伴们加群11372462,交流IT行业发展和知识,感觉这篇文章有用,也可以求个关注CSDN,关注UPWEN的公众号。UP楠哥持续输出最纯粹的IT行业发展和知识!