文章目录
- 前言
- 安装与启动
- ubuntu安装
- centos安装
- 启动
- 配置
- 全局配置
- 全局定义
- 静态路由配置
- vrrpd配置
- vrrp同步组(synchroization group)
- vrrp脚本(vrrp script)
- vrrp实例(vrrp instance)
- LVS配置
- 常用示例
前言
- 高可用:两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将这个称之为高可用
- keepalived工作原理:通过vrrp协议实现
- vrrp:虚拟路由冗余协议
- keepalived启动后会有三个进程
- 父进程:内存管理,子进程管理等
- 子进程:VRRP子进程
- 子进程:healthchecker子进程
- 过程:两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事,healthchecker子进程负责检查各自服务器的健康程度,如果healthchecker子进程检查到master上服务不可用了,就会通知本机上的兄弟vrrp子进程,让其删除通告,并且去除虚拟ip,转为backup状态
- 工作方法:当master故障后,vip和mac地址自动飘移到backup(master和backup会每隔1s向组播地址发送数据包,来检测主或备是否存活),这时会通知下端主机刷新arp表
- keepalived工作方式:抢占式、非抢占式
安装与启动
ubuntu安装
- 安装:
apt-get install keepalived
- 安装依赖:
apt-get install curl gcc libssl-dev libnl-3-dev libnl-genl-3-dev libsnmp-dev
- 初始化脚本:
ln -s /etc/init.d/keepalived.init /etc/rc2.d/S99keepalived
centos安装
- 安装:
yum install keepalived
- 安装依赖:
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel
- 初始化脚本:
ln -s /etc/rc.d/init.d/keepalived.init /etc/rc.d/rc3.d/S99keepalived
启动
可用systemctl或service进行管理
- 启动:
sudo service keepalived start
|sudo systemctl start keepalived
- 重启:
sudo service keepalived restart
|sudo systemctl restart keepalived
- 停止:
sudo service keepalived stop
|sudo systemctl stop keepalived
- 查看状态:
sudo service keepalived status
|sudo systemctl status keepalived
配置
官方配置文档:https://www.keepalived.org/manpage.html
全局配置
全局定义
global_defs #全局配置标识,表明这个区域{}是全局配置
{
notification_email
{
admin@example.com # 表示发送通知邮件时邮件源地址是谁
}
notification_email_from admin@example.com # 表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,邮件地址可以多个,每行一个notification_email_from admin@example.com
smtp_server 127.0.0.1 # 表示发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
stmp_connect_timeout 30 # 连接smtp连接超时时间
router_id node1 # 机器标识,数字,全网唯一,不可重复
}
静态路由配置
实际就是给服务器配置真实的ip地址和路由的,在复杂的环境下可能需要配置,一般不会用这个来配置,直接用vi /etc/sysconfig/network-script/ifcfg-eth1来配置
# 静态地址配置
static_ipaddress
{
192.168.1.1/24 brd + dev eth0 scope global # 相当于: ip addr add 192.168.1.1/24 brd + dev eth0 scope global
192.168.1.2/24 brd + dev eth1 scope global # 就是给eth1配置IP地址
}
# 静态路由配置
static_routes
{
src $SRC_IP to $DST_IP dev $SRC_DEVICE # 路由和ip同理,一般这个区域不需要配置
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
vrrpd配置
vrrp同步组(synchroization group)
vrrp_sync_group VG_1 { # VG_1全网唯一,不可重复
group {
http # 实例名
mysql # 实例名
}
notify_master /path/to/to_master.sh # 表示当切换到master状态时,要执行的脚本
notify_backup /path_to/to_backup.sh # 表示当切换到backup状态时,要执行的脚本
notify_fault "/path/fault.sh VG_1"
notify /path/to/notify.sh
smtp_alert # 表示切换时给global defs中定义的邮件地址发送邮件通知
}
vrrp脚本(vrrp script)
vrrp_script check_running { # check_running为script名字
script "/usr/local/bin/check_running" # 定义脚本所在路径
interval 10 # 脚本执行的间隔
weight 10 # 脚本执行的优先级变更
}
vrrp实例(vrrp instance)
vrrp_instance http {
# 指定实例的初始状态
# 抢占模式设置为MASTER和BACKUP, 结合priority优先级使用,当设置为master时,通过优先级判断,优先级高的抢占为master
# 非抢占模式设置为BACKUP和BACKUP,结合priority使用,并且将priority设置成一样的值
state MASTER
interface eth0 # 实例绑定的网卡,因为在配置虚拟ip的时候必须在已有的网卡上添加
dont_track_primary # 忽略vrrp的interface错误
track_interface { # 跟踪接口设置额外的监控,里面任一2网卡出现问题,都会进入fault状态
eth0
eth1
}
mcast_src_ip <IPADDR> # 发送多播数据包时的源ip地址,实际就是那个地址上发送vrrp通告,相当于heartbeat的心跳端口,默认为绑定的网卡ip(interface指定的ip地址)
garp_master_delay 10 # 切换到master状态后,延迟进行免费的APR请求
virtual_router_id 51 # 虚拟路由id,相同的virtual_router_id为一个组,决定多播的mac地址,全网唯一
priority 100 # 优先级,高的为master
advert_int 1 # 检查间隔,默认1s
authentication { # 设置认真个
auth_type PASS # 认证方式 PASS或AH
autp_pass 1234 # 认证密码
}
virtual_ipaddress { # vip,虚拟ip地址,随着state的变化而增加删除,当state为master的时候添加,为backup的时候删除,只有是由优先级决定的,跟state设置的值没有多大关系,可以设置多个ip地址
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
virtual_routes { # 增加和删除路由
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}
nopreempt # 设置不抢占,这里只能设置在state为backup的节点上,而且这个节点的优先级必须必另外的高
preemtp_delay 300 # 抢占延迟
debug # debug级别
notify_master /path/to/to_master.sh # 表示当切换到master状态时,要执行的脚本
notify_backup /path_to/to_backup.sh # 表示当切换到backup状态时,要执行的脚本
track_script { # 在实例引用脚本,类似脚本中的函数引用一样,先定义,后引用函数名
check_running weight 20
}
}
注意vrrp脚本合vrrp实例属于同一个级别
LVS配置
这里是专门为keepalived+LVS集成准备的,并不是真的安装LVS然后用ipvsadm来配置,而是用keepalived的配置文件来代替ipvsadm来配置LVS,这样会方便很多,一个配置文件搞定,了解即可
常用示例
! Configuration File for keepalived
global_defs {
}
vrrp_script service_check {
script "/etc/keepalived/service_check.sh"
interval 10
weight 10
}
vrrp_instance service_one {
state BACKUP
interface ens160
virtual_router_id 51
priority 100
#nopreempt
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.66.1.124
}
notify_master /etc/keepalived/to_master.sh
notify_backup /etc/keepalived/to_slave.sh
track_script {
service_check
}
}