KeepAlived实现
HA Cluster 配置准备:
(1) 各节点时间必须同步 ntp, chrony
(2) 确保iptables及selinux不会成为阻碍
(3) 各节点之间可通过主机名互相通信(对KA并非必须)建议使用/etc/hosts文件实现
(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)
一、yum 安装 Base源
yum install keepalived
二、源码编译安装Keepalived
1 安装依赖包
[root@~]# yum install libnfnetlink-devel libnfnetlink ipvsadm libnl libnl-devel \
libnl3 libnl3-devel lm_sensors-libs net-snmp-agent-libs net-snmp-libs openssh-server \
openssh-clients openssl openssl-devel automake iproute gcc
2.下载Keepalived
[root@~]# cd /usr/local/src/
[root@src]# wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz
[root@src]# tar xvf keepalived-1.3.4.tar.gz
[root@src]# cd keepalived-1.3.4/
3.编译安装
[root@localhost keepalived-1.3.4]# ./configure --prefix=/usr/local/keepalived --disable-fwmark
[root@ keepalived-1.3.4]# make && make install
4.复制相关配置文件及启动脚本:
[root@keepalived-1.3.4]# cp /usr/local/src/keepalived-1.3.4/keepalived/etc/init.d/keepalived.rh.init /etc/sysconfig/keepalived
[root@keepalived-1.3.4]# cp /usr/local/src/keepalived-1.3.4/keepalived/keepalived.service /usr/lib/systemd/system/
[root@keepalived-1.3.4]# cp /usr/local/keepalived/sbin/keepalived /usr/local/sbin/
5.准备一个简单的配置文件:
[root@keepalived-1.3.4]# mkdir /etc/keepalived
[root@keepalived-1.3.4]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@keepalived-1.3.4]# vim /etc/keepalived/keepalived.conf 从其它keepalived复制过来。
Keepalived配置文件
Keepalived配置文件:1.全局设置 2.Vrrpd虚拟路由器设置 3.LVS设置
GLOBAL CONFIGURATION
Global definitions
Static routes/addresses
VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步组
VRRP instance(s):即一个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs
1.全局设置
notification_email { # 邮件通知信息
root@localhost # 定义收件人,#QQ邮件账号启用SMTP功能获取到验证码
}
notification_email_from keepalived@localhost #往外发送邮件身份
smtp_server 127.0.0.1 #发邮件地址
smtp_connect_timeout 30
router_id KA1 #虚拟机路由名称, 路由器标识,可以写成每个主机自己的主机名
vrrp_mcast_group4 224.100.100.100 #VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,默认值:224.0.0.18 范围:224.0.0.0到239.255.255.255
vrrp_mcast_group6 ff02::120 #VRRP的ipv6的广播地址
vrrp_script SCRIPT_NAME { # 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换
script <STRING>|<QUOTED-STRING> # shell命令或脚本路径,此脚本返回值为非0时(假),会触发下面OPTIONS执行
interval <INTEGER> # 间隔时间,单位为秒,默认1秒
timeout <INTEGER> # 超时时间
weight <INTEGER:-254..254> # 权重,监测失败后会执行权重相加,权重可以为负数即相加后降低本机权重
fall <INTEGER> #脚本几次失败转换为失败
rise <INTEGER> # 脚本连续监测成功后,把服务器从失败标记为成功的次数
user USERNAME [GROUPNAME] # 执行监测的用户或组
init_fail # 设置默认标记为失败状态,监测成功之后再转换为成功状态
}
vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict #严格遵守VRRP协议,禁止以下状况:1.无VIP地址 2.配置了单播(unicast选择) 3.在VRRP版本2中有IPv6地址,开启动此项会自动开启iptables防火墙规则,建议关闭此项配置,
vrrp_garp_interval 0 #gratuitous ARP messages报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
vrrp_iptables #开启此项,当vrrp_strict开启时,不添加防火墙规则,否则VIP无法访问。+KA的VIP接口一般是转发给后端服务器,所以默认是禁止访问KA服务器。
defaul_interface p33p1.3 #设置静态地址的默认接口 eth0
nopreempt #非抢占模式所有的state都为BACKUP
include /etc/keepalived/conf.d/*.conf; #设置Vrrpd虚拟路由器子配置文件。与VRRPD或GLOBAL同级。
2.Vrrpd虚拟路由器配置说明
state MASTER|BACKUP: #当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP
interface IFACE_NAME: #绑定为当前虚拟路由器使用的物理接口
priority 100: #当前物理节点在此虚拟路由器中的优先级;范围1-254,如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
virtual_router_id VRID:#当前虚拟路由器惟一标识,范围是0-255,多个节点必须相同
use_vmac XX:XX:XX:XX:XX #使用哪个虚拟MAC地址
advert_int 1: vrrp通告的时间间隔,也叫心跳通告时间,默认1s
authentication { #认证机制,auth_pass仅前8位有效
auth_type AH|PASS
auth_pass <PASSWORD>}
virtual_ipaddress {# 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
192.168.200.17/24
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1}
track_interface { #配置监控网络接口,一旦出现故障,则转为FAULT状态,实现地址转移,主要防止”interface IFACE_NAME“的网卡出现故障
eth0
eth1}
virtual_routes { #虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
192.168.110.0/24 dev eth2}
nopreempt: #定义工作模式为非抢占模式
preempt_delay 300: #抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式
track_script { SCRIPT_NAME } #追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
定义通知脚本:根据状态触发,# 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
notify_master <STRING>|<QUOTED-STRING>:
当前节点成为主节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>:
当前节点转为备节点时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>:
当前节点转为“失败”状态时触发的脚本
notify <STRING>|<QUOTED-STRING>:
通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
3.KeepAlived支持IPVS(LVS)设置参数说明
virtual server (虚拟服务)的定义的三种方法:
virtual_server IP port #定义虚拟主机IP地址及其端口, (IP跟virtual_ipaddress中的IP相同,也跟后端LVS中的VIP相同)。
virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群,(FWM标签)
virtual_server group string #将多个虚拟服务器定义成组,将组定义成虚拟服务,如:http和https定义成一个虚拟服务器组
virtual_server IP port { #VIP和PORT
delay_loop <INT>: #检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh: #定义调度方法
lb_kind NAT|DR|TUN: #集群的类型
persistence_timeout <INT>: #持久连接时长
protocol TCP|UPD: #服务协议,仅支持TCP
nat_mask 255.255.255.0 #子网掩码,这个掩码是VIP的掩码
sorry_server <IPADDR> <PORT>: #所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT> #VIP和PORT
{
weight <INT> #RS权重
notify_up <STRING>|<QUOTED-STRING> #RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> #RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }:#定义当前主机的健康状态检测方法
}
}
3.1
HTTP_GET|SSL_GET: 应用层检测方法
HTTP_GET|SSL_GET {
url {
path <URL_PATH>: 定义要监控的URL
status_code <INT>: 判断上述检测机制为健康状态的响应码,(digest要startus 两种方法二选一即可)
digest <STRING>: 检测内容的哈希值,判断为健康状态的响应的内容的校验码,URL的文件改了哈希值会变以,
}
connect_timeout <INTEGER>: 连接请求的超时时长
nb_get_retry <INT>: 重试次数
delay_before_retry <INT>: 重试之前的延迟时长
connect_ip <IP ADDRESS>: 向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT>: 向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>: 发出健康状态检测请求时使用的源地址
bind_port <PORT>: 发出健康状态检测请求时使用的源端口
}
3.2
TCP_CHECK 传输层检测方法,如果应用服务器不是WEB服务器,就用TCP_CHECK检查
TCP_CHECK {
connect_ip <IP ADDRESS>: 向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT>: 向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>: 发出健康状态检测请求时使用的源地址
bind_port <PORT>: 发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER>: 连接请求的超时时长
nb_get_retry 3 尝试次数
delay_before_retry 3 每次尝试之间间隔几秒
}