Keepalived
Keepalived故障切换转移原理
Keepalived Directors 之间的故障切换转移,是通过VRRP协议(Virtual Router Redundancy Protocol 中文虚拟路由器冗余协议)来实现的
在Keepalived Directors正常工作时,主Director节点会不断地向备节点广播心跳消息,用以告诉备节点自己还活着,当主节点发生故障时,备节点就无法继续检测到主节点的
心跳,进而调用自身的接管程序,接管主节点的ip资源及服务。当主节点恢复故障时,备节点会释放主节点故障时接管的ip资源和服务,恢复到原来的自身的备用角色
VRRP协议的出现是为了解决静态路由的单点故障,VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器
keepalived官网 https://www.keepalived.org
一、keepalived安装
1. 下载keepalived
# mkdir -p /root/tools
# cd /root/tools
# wget --no-check-certificate https://www.keepalived.org/software/keepalived-1.4.2.tar.gz
2. 安装keepalived
# 安装前确认是否有kernels版本信息,若没有 yum install -y kernel-devel安装
[root@keepalived-master tools]# ls /usr/src/kernels/|wc -l
0
[root@keepalived-master tools]# yum install -y kernel-devel
已加载插件:fastestmirror
...
...
已安装:
kernel-devel.x86_64 0:3.10.0-1160.45.1.el7
完毕!
# 创建软连
[root@keepalived-master tools]# ln -s /usr/src/kernels/3.10.0-1160.45.1.el7.x86_64 /usr/src/linux
[root@keepalived-master tools]# ls /usr/src/ -l
总用量 0
drwxr-xr-x. 2 root root 6 8月 12 2015 debug
drwxr-xr-x. 3 root root 40 10月 16 20:53 kernels
lrwxrwxrwx. 1 root root 44 10月 16 20:55 linux -> /usr/src/kernels/3.10.0-1160.45.1.el7.x86_64
[root@keepalived-master tools]# tar zxf keepalived-1.4.2.tar.gz
[root@keepalived-master tools]# cd keepalived-1.4.2
[root@keepalived-master keepalived-1.1.17]# ./configure
...
...
Keepalived configuration
------------------------
Keepalived version : 1.4.2
Compiler : gcc
Preprocessor flags : -I/usr/include/libnl3
Compiler flags : -Wall -Wunused -Wstrict-prototypes -Wextra -g -O2 -fPIE -D_GNU_SOURCE
Linker flags : -pie
Extra Lib : -lcrypto -lssl -lnl-genl-3 -lnl-3
Use IPVS Framework : Yes
IPVS use libnl : Yes
IPVS syncd attributes : No
IPVS 64 bit stats : No
fwmark socket support : Yes
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
Use VRRP authentication : Yes
With ip rules/routes : Yes
SNMP vrrp support : No
SNMP checker support : No
SNMP RFCv2 support : No
SNMP RFCv3 support : No
DBUS support : No
SHA1 support : No
Use Debug flags : No
smtp-alert debugging : No
Use Json output : No
Stacktrace support : No
Memory alloc check : No
libnl version : 3
Use IPv4 devconf : No
Use libiptc : No
Use libipset : No
init type : systemd
Build genhash : Yes
Build documentation : No
[root@keepalived-master keepalived-1.4.2]# make
[root@keepalived-master keepalived-1.4.2]# make install
3.配置规范启动
# 拷贝启动文件至/etc/init.d/
[root@keepalived-master keepalived-1.4.2]# cp keepalived/etc/init.d/keepalived /etc/init.d/
# 配置启动脚本的参数
[root@keepalived-master keepalived-1.4.2]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# 创建默认的keepalived配置文件路径
[root@keepalived-master keepalived-1.4.2]# mkdir -p /etc/keepalived
# 将配置文件模板拷贝的/etc/keepalived下
[root@keepalived-master keepalived-1.4.2]# cp keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@keepalived-master keepalived-1.4.2]# cp /usr/local/sbin/keepalived /usr/sbin/
一个完整地keepalived配置文件由3个部分组成,分别是全局定义部分,vrrp实力定义部分以及虚拟服务器定义部分,配置信息说明如下
root@keepalived-master keepalived]# vim keepalived.conf
! Configuration File for keepalived
# 全局定义部分
global_defs {
notification_email {
acassen@firewall.loc # 设置报警邮件地址,可以设置多个,每行一个,
# 如果要开启邮件报警,需要开启本机sendmail服务
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc # 设置邮件的发送地址
smtp_server 192.168.200.1 # 设置smtp server地址
smtp_connect_timeout 30 # 设置超时时间
router_id LVS_DEVEL # 表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题中的信息,可以定位为主机ip
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# vrrp 实例定义部分
vrrp_instance VI_1 {
state MASTER # 定义keepalived的角色,MASTER表示此主机为主服务器,BACKUP表示此主机为备用服务器,注意主备大小写
interface eth0 # 网卡名,用ifconfig查看 ,一定是要存在的网卡设备
virtual_router_id 51 # 虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下,MASTER和BACKUP必须一致
priority 100 # 定义优先级,数字越大,优先级越高。在同一个vrrp_instance下,MASTER的优先级大于BACKUP
advert_int 1 # 设置MASTER和BACKUP负载均衡器之间同步的时间间隔,单位是秒
authentication { # 设置验证类型和密码
auth_type PASS # 类型主要有PASS和AH两种
auth_pass 1111 # 验证密码,同一个vrrp_instance下,MASTER和BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { # 设置虚拟ip地址,可以设置多个,每行一个
192.168.200.16
192.168.200.17
192.168.200.18
}
}
# 虚拟服务定义部分
virtual_server 192.168.200.100 443 { # 设置虚拟服务器,需要指定虚拟ip地址和服务端口,ip与端口之间用空格隔开
delay_loop 6 # 设置检查真实服务器运行的时间间隔,单位秒
lb_algo rr # 设置负载调度算法,rr为轮询算法
lb_kind NAT # 设置LVS实现负载均衡的机制,有NAT TUN DR 三种模式
persistence_timeout 50
# 会话保持时间,单位秒,这个选项对动态页面非常有用,为集群中的session共享提供了一个很好的解决方案,有了这个会话保持功能,用户的请求会被一直分发到某个服务
# 节点,直到超过这个会话的保持时间,需要注意的是,这个会话保持是最大无响应时间,也就是说,用户在操作动态页面时,如果在50s内没有执行任何操作,那么接下来的
# 操作会被分发到其他节点,但是如果用户一直在操作动态页面,则不受50s的时间限制
protocol TCP # 指定转发协议,有TCP和UDP两种
real_server 192.168.201.100 443 { # 配置服务节点,需要指定real server的真实ip和端口,ip与端口时间用空格隔开
weight 1 # 配置服务节点的权值,数字越大,权值越高。可以通过权重设置,分发节点请求
SSL_GET { # ssl健康检查
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
# status_code 200 获取状态码
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3 # 标识3秒无响应超时
retry 3 # 标识重试3次
delay_before_retry 3 # 标识重试间隔
}
}
}
virtual_server 10.10.10.2 1358 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
sorry_server 192.168.200.200 1358
real_server 192.168.200.2 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.200.4 1358 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
健康检查:
https://blog.csdn.net/yaoyaodexiaozhu/article/details/52067931
日志路径修改
默认日志路径:/var/log/messages 在centos 6下可以: (1)首先修改/etc/sysconfig/keepalived文件,注释掉如下,添加如下: #KEEPALIVED_OPTIONS="-D" KEEPALIVED_OPTIONS="-D -d -S 0" (2)其次修改 /etc/rsyslog.conf 文件,添加如下: local0.* /var/log/keepalived.log 在centos 7 下,还需要修改/lib/systemd/system/keepalived.service 文件: centos 7使用。因为centos 7使用systemctl,通过systemctl调用service,所以需要修改/lib/systemd/system/keepalived.service文件。 将里面的: EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS 修改成: EnvironmentFile=/etc/sysconfig/keepalived ExecStart=/sbin/keepalived $KEEPALIVED_OPTIONS 然后重新加载service: systemctl daemon-reload
报错
1. configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
解决方案:
yum -y install gcc
2.
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
解决方案:
yum -y install openssl-devel
3.
configure: error: Popt libraries is required
解决方案:
yum install popt-devel -y
4.
configure: error: libnfnetlink headers missing
解决方案:
yum install -y libnfnetlink-devel
浙公网安备 33010602011771号