Keepalived安装部署
1、安装
- 下载地址:链接
- 通过ftp工具上传到linux中,/home/software
- 解压
tar -zxvf keepalived-2.0.18.tar.gz
- 解压后进入到解压出来的目录,看到会有 configure ,那么就可以做配置了(配置安装和nginx一模一样)
- 指定配置文件位置
./configure --prefix=/usr/local/keepalived --sysconf=/etc
1、prefix:keepalived安装目录 – 指定配置文件路径要放到etc下面
2、sysconf : keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,会报错
问题:配置过程中可能会出现警告信息,如下所示:please install libnl/libnl-3 dev libraries to support
解决方法:安装libnl/libnl-3依赖
yum -y install libnl libnl-devel
- make && make install
make && make install
2、 keepalived.conf 配置
访问地址绑定 (域名绑定)61
keepalived71 绑定 61 tomcat 主
keepalived72 绑定 61 tomcat 备
# 全局配置
global_defs {
# 邮件通知信息
notification_email {
# 定义收件人
acassen@firewall.loc
}
# 定义发件人
notification_email_from Alexandre.Cassen@firewall.loc
# SMTP服务器地址
smtp_server 192.168.200.1
smtp_connect_timeout 30
# 路由器标识,一般不用改,也可以写成每个主机自己的主机名,当前安装keeplived节点的标识符,全局唯一
router_id LVS_DEVEL
# VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值
vrrp_mcast_group4 224.0.0.18
vrrp_mcast_group6 ff02::12
}
# 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换
vrrp_script SCRIPT_NAME {
}
# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance VI_1 {
# 定义初始状态,可以是MASTER或者BACKUP
state MASTER
# 工作接口,通告选举使用哪个接口进行
interface ens33
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
# ID还是虚拟MAC最后一段地址的信息,取值范围0-255
virtual_router_id 51
# 使用哪个虚拟MAC地址
use_vmac XX:XX:XX:XX:XX
# 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
track_interface {
eth0
ens33
}
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
priority 100
# 通告频率,单位为秒
advert_int 1
# 通信认证机制,这里是明文认证还有一种是加密认证
authentication {
auth_type PASS
auth_pass 1111
}
# 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
virtual_ipaddress {
# IP/掩码 dev 配置在哪个网卡
192.168.200.16/24 dev eth1
# IP/掩码 dev 配置在哪个网卡的哪个别名上
192.168.200.17/24 dev label eth1:1
}
# 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
virtual_routes {
192.168.110.0/24 dev eth2
}
# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
nopreempt|preempt
# 如果是抢占默认则可以设置等多久再抢占,默认5分钟
preempt delay 300
# 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
track_script {
}
# 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
notify_master ""
notify_backup ""
notify_fault ""
}
# 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
# 所以通过这里就可以看出来keepalive天生就是为ipvs而设计的
virtual_server 10.10.10.2 1358 {
delay_loop 6
# 算法
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
# LVS的模式
lb_kind NAT|DR|TUN
# 子网掩码,这个掩码是VIP的掩码
nat_mask 255.255.255.0
# 持久连接超时时间
persistence_timeout 50
# 定义协议
protocol TCP
# 如果后端应用服务器都不可用,就会定向到那个服务器上
sorry_server 192.168.200.200 1358
# 后端应用服务器 IP PORT
real_server 192.168.200.2 1358 {
# 权重
weight 1
# MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是
# 针对应用服务器做健康检查的方法
MISC_CHECK {}
# 用于检查SMTP服务器的
SMTP_CHEKC {}
# 如果应用服务器不是WEB服务器,就用TCP_CHECK检查
TCP_CHECK {
# 向哪一个端口检查,如果不指定默认使用上面定义的端口
connect_port <PORT>
# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
bindto <IP>
# 连接超时时间
connect_timeout 3
}
# 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样
SSL_GET {}
# 应用服务器UP或者DOWN,就执行那个脚本
notify_up "这里写的是路径,如果脚本后有参数,整体路径+参数引起来"
notify_down "/PATH/SCRIPTS.sh 参数"
# 使用HTTP_GET方法去检查
HTTP_GET {
# 检测URL
url {
# 具体检测哪一个URL
path /testurl/test.jsp
# 检测内容的哈希值
digest 640205b7b0fc66c1ea91c463fac6334d
# 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
status_code 200
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
# 向哪一个端口检查,如果不指定默认使用上面定义的端口
connect_port <PORT>
# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
bindto <IP>
# 连接超时时间
connect_timeout 3
# 尝试次数
nb_get_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
nb_get_retry 3
delay_before_retry 3
}
}
}
简化配置
# 全局配置
global_defs {
# 路由器标识,全局唯一,一般不用改,也可以写成每个主机自己的主机名
router_id keep_171
}
# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称(服务器节点)
vrrp_instance VI_1 {
# 定义初始状态,可以是MASTER或者BACKUP
state MASTER
# 工作接口,通告选举使用哪个接口进行,当前实例绑定的网卡
#查看网卡名称(ip addr)
interface ens33
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
# ID还是虚拟MAC最后一段地址的信息,取值范围0-255
#保证主备一致
virtual_router_id 51
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
#谁的优先级高,在master挂掉以后谁就是master
priority 100
# 通告频率,单位为秒 主备之间同步检查时间间隔
advert_int 1
#认证授权的密码,防止非法节点的进入
# 通信认证机制,这里是明文认证还有一种是加密认证
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟ip,设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
virtual_ipaddress {
192.168.1.161
}
}
启动keepalived效果
绑定ip关系图
备用机配置
# 全局配置
global_defs {
# 路由器标识,全局唯一,一般不用改,也可以写成每个主机自己的主机名
router_id keep_172
}
# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称(服务器节点)
vrrp_instance VI_1 {
# 定义初始状态,可以是MASTER或者BACKUP
state BACKUP
# 工作接口,通告选举使用哪个接口进行,当前实例绑定的网卡
#查看网卡名称(ip addr)自己查
interface ens33
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
# ID还是虚拟MAC最后一段地址的信息,取值范围0-255
#保证主备一致
virtual_router_id 51
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
#谁的优先级高,在master挂掉以后谁就是master
priority 80
# 通告频率,单位为秒 主备之间同步检查时间间隔
advert_int 1
#认证授权的密码,防止非法节点的进入
# 通信认证机制,这里是明文认证还有一种是加密认证
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟ip,设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
virtual_ipaddress {
192.168.1.161
}
}
主节点挂掉之后
3、Keepalived配置Nginx自动重启
- 增加Nginx重启检测脚本
vim /etc/keepalived/check_nginx_alive_or_not.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
#nginx安装位置
/usr/local/nginx/sbin/nginx
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
#杀死当前keepalived启用备用
killall keepalived
fi
fi
- 增加运行权限
chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
- 配置keepalived监听nginx脚本
#配置到全局配置文件中
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行失败,则升级权重+10
}
- 在 vrrp_instance 中新增监控的脚本
#启用上面配置的脚本
track_script {
check_nginx_alive # 追踪 nginx 脚本
}
- 重启Keepalived使得配置文件生
systemctl restart keepalived
4、keepalived双主热备
配置
5、lvs
为什么要用lvs+nginx
- lvs基于四层,工作效率高
- 单个nginx承受不了压力,需要集群
- lvs充当nginx集群的调度者
- nginx接受请求来回,lvs可以只接受不响应
6、lvs模式
7、dr模式配置
搭建LVS-DR模式- 配置LVS节点与ipvsadm
- 服务器与ip规划:
阿里云不支持虚拟ip,腾讯云支持但需要购买
LVS - 1台
VIP(虚拟IP):192.168.1.150
DIP(转发者IP/内网IP):192.168.1.151
Nginx - 2台(RealServer)
RIP(真实IP/内网IP):192.168.1.171
RIP(真实IP/内网IP):192.168.1.172
- 所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:
systemctl stop NetworkManager
systemctl disable NetworkManager
创建子接口
- 进入到网卡配置目录,找到咱们的ens33:
- 拷贝并且创建子接口:
cp ifcfg-ens33 ifcfg-ens33:1
* 注:`数字1`为别名,可以任取其他数字都行
- 修改子接口配置:
vim ifcfg-ens33:1
- 配置参考
- service network restart
service network restart
- 效果
8、安装ipvsadm(集群管理工具)
yum install ipvsadm
9、为两台rs配置虚拟ip
- 修改为
- 效果
10、搭建LVS-DR模式- 为两台RS配置arp
ARP响应级别与通告行为 的概念
- arp-ignore:ARP响应级别(处理请求)
0:只要本机配置了ip,就能响应请求
1:请求的目标地址到达对应的网络接口,才会响应请求 - arp-announce:ARP通告行为(返回响应)
0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
1:尽可能避免本网卡与不匹配的目标进行通告
2:只在本网卡通告
配置ARP
- 打开sysctl.conf:
vim /etc/sysctl.conf
- 配置 所有网卡 、 默认网卡 以及 虚拟网卡 的arp响应级别和通告行为,分别对应: all , default , lo :
# configration for lvs
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
- 刷新配置文件
- 增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:
11、使用ipvsadm配置集群规则
- 查看帮助文档
ipvsadm -h
- 添加集群
ipvsadm -A -t 192.168.1.150:80 -s rr
-a 添加
-s 负载均衡算法
rr 轮询
- 查看
ipvsadm -Ln
- 构建服务 添加真实服务器节点
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g
- 实例
- 修改持久化时间
12、keepalived+lvs高可用
- 配置方式
keepalived config
- 效果
- 第二台配置
其他不变