Keepalived
Keepalived双机热备
Keepalived简介
Keepalived是使用C语言编写的路由热备软件,该项目软件的主要目标是为Linux系统提供简单高效的负载均衡及高可用解决方案。负载均衡架构依赖于知名的IPVS(Linux Virtual Server,即基于IP的虚拟服务器)内核模块,Keepalived由一组检查器根据服务器的健康状况动态地维护和管理服务器池。另外,Keepalived通过VRRP(Virtual Router Redundancy Protocol)协议实现高可用架构,VRRP是路由灾备的实现基础。LVS调用一组服务器提供虚拟服务的强大负载均衡能力。但LVS的核心是调度器,所有的数据请求都需要经过调度器进行调度转发。因此,万一调度器发生故障,则整个集群系统将全部崩溃,所以我们需要Keepalived来实现集群系统的高可用。部署两台或多台LVS调度器,仅有一台调度器作为主服务器,其他调度器作为备用,当主调度器发生故障时,Keepalived可以自动将备用调度器升级为主调度器,最终实现整个集群系统的高负载、高可用。
VRRP协议简介
VRRP(Virtual Router Redundancy Protocol)协议是为了在静态路由环境下防止单点故障而设计的主从灾备协议,VRRP实现在主设备发生故障时将业务自动切换至从设备,而这一切对用户而言是透明的。VRRP将两台或多台路由设备虚拟成一个设备,对外仅提供一个虚拟的路由IP地址,而多台路由设备同一时刻仅可以有一台设备拥有该虚拟IP地址,该设备就是主路由设备,其他设备为备份设备。主设备会不断地发送自己的状态信息给备用路由设备,当备用设备接收不到主设备的状态信息时,备用设备将根据自身的优先级立刻选举出新的主设备,并提供所有的业务功能。VRRP协议需要为每个路由设备定义虚拟路由ID(VRID)以及设备优先级别,所有主备路由设备的VRID必须一样,所有VRID相同的路由设备组成一个虚拟路由设备组,组内优先级高的路由设备将被选举为主路由设备。虚拟路由设备ID与优先级均为0至255之间的整数,如果优先级相等,则继续对比路由设备的实际IP地址,IP地址越大,优先级就越高。
有一种特殊情况是,如果将虚拟路由IP地址设置为多台路由设备中某台设备的真实IP地址,则该路由设备将永远处于主设备状态。
安装Keepalived服务
Keepalived官网:https://www.keepalived.org/
安装源码软件包前需要通过yum方式安装相关的依赖软件包。Keepalived源码软件可以通过官方网站下载,下载后使用configure、make、make install标准方式安装该软件。软件安装完成后,为了后期操作的方便,还需要为该软件的部分文件与目录创建软连接。
yum install gcc openssl-devel popt-devel libnl libnl-devel kernel-devel ipvsadm
Keepalived源码包下载:wget -c https://www.keepalived.org/software/keepalived-2.0.16.tar.gz
解压:
tar -xzf keepalived-2.0.16.tar.gz -C /usr/src
cd /usr/src/keepalived-2.0.16/
./configure
make && make install
ln -s /usr/local/etc/keepalived/ /etc
ln -s /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
配置文件解析
Keepalived主配置文件的路径为 /etc/keepalived/keepalived.conf,配置文件主要分为全局配置块、VRRP配置块、LVS配置块,每个配置块都以{包裹,以#或!开 头的行在配置文件中代表注释行。具体的Keepalived核心配置参数说明见下表。
设置项 |
功能描述 |
notification_email |
定义邮件列表,当主服务器出现故障进行主从切换时会发送邮件给邮件列表中的所有人 |
notification_email_from |
定义邮件发送者 |
smtp_server |
设置邮件服务器IP地址 |
router_id |
设备标识,一般可以设置为主机名 |
enable_traps |
启用SNMP跟踪 |
static_ipaddress |
设置系统真实的静态IP地址,也可以通过系统层面设置 |
static_ |
设置系统真实的静态路由地址,也可以通过系统层面设置 |
vrrp_instance |
定义VRRP实例,描述主从初始状态、虚拟路由ID、优先级等 |
state |
设置初始设备状态,MASTER为主设备,BACKUP为从设备 |
interface |
可以绑定VRRP的网络接口,如eth0、ethl 等 |
use_vmac |
使用VRRP虚拟MAC地址 |
dont_track_primary |
忽略接口故障,默认为设置 |
track_interface |
设置要跟踪监控的网络接口 |
mcast_src_ip |
发送状态通告信息的源IP地址 |
virtual_ router_ id |
设置虚拟路由ID,相同的VRID为一个组,要求主从VRID要一致,该值为0~255 |
priority |
设置虚拟路由组中设备的优先级,优先级高者将被推举为主设备 |
advert_int |
检查间隔,默认为1秒 |
authentication |
定义主从验证设置,相同的VRRP实例中主从验证方式与密码要一致 |
auth_type |
设置验证方式(PASS或AH),官方文档建议使用密码 |
auth_pass |
验证密码 |
virtual_ipaddress |
定义虚拟IP地址,在VRRP实例中仅主设备实时拥有该IP地址格式: <IP>/<MASK> dev <STRING> scop <SCOPE> label <LABLE> 如:192.168.100.100/24 dev eth2 label eth2:1 |
virtual_routes |
定义虚拟路由,如:192.168.200.0/24 via 192.168.100.254 |
virtual_server_group |
定义LVS虚拟服务设置块,定义虚拟IP及端口号 |
delay_loop |
服务器轮询间隔时间 |
Ib_algo |
LVS负载均衡算法,可以设置为: rr|wrr|lc|wlc|lblc|sh|dh |
Ib_kind |
LVS负载均衡工作模式,可以设置为: NAT|DR|TUN |
persistence_timeout |
会话保持时间,当用户多次请求时,调度器可以转发给相同的真实服务器 |
protocol |
数据转发协议 |
real_server |
定义后端真实服务器,添加所有的真实服务器的IP地址与端口信息 |
Weight |
设置服务器权重 |
HTTP_GET |
对后端真实服务器进行HTTP健康检查 |
TCP_CHECK |
对后端真实服务器进行TCP健康检查 |
connect_ port |
健康检查的端口号 |
bindto |
健康检查的IP地址 |
connect_timeout |
连接超时时间,单位为秒 |
nb_get_retry |
连接重试次数(number of get retry) |
delay_before_retry |
连接重试的间隔时间 |