keepalive+lvs,keepalive+nginx配置
2018-11-25 本文已影响0人
N33_LvQing
lvs容易出现单点故障,keepalive可以很好的解决这个问题,配置好keepalive会自动生成ipvs规则下面让我们来动手试试吧
image.png将所有的地址都配好后我们只需要在两台lvs主机上编辑keepalive的配置文件
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.31.66/24 dev ens33 label ens33:0
}
}
virtual_server 192.168.31.66 80 {
delay_loop 1 #每隔1秒检测一次
lb_algo wrr #wrr算法
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.31.203 80 {
weight 1
HTTP_GET { #获取健康状态的方法
url {
path /index.html
status_code 200
}
nb_get_retry 3 #失败重试3次
delay_before_retry 2 #每一次重试之前延迟2秒
connect_timeout 3 #超时时长
}
}
real_server 192.168.31.204 80 {
weight 1
HTTP_GET {
url {
path /index.html
status_code 200
}
nb_get_retry 3 #失败重试3次
delay_before_retry 2 #每一次重试之前延迟2秒
connect_timeout 3 #超时时长
}
}
}
与普通的keepalive不同的是需要定义一个虚拟服务器,然后在里面再定义两台真正的服务器
启动keepalive服务
image.png
配置好后就会自动生成ipvs规则了
image.png
下面我们来测试下
可以看到已经成功的负载均衡了,就算我们down掉其中一台主机lvs也能正常的工作,可用性大大的增强了。
image.png
就算我们down掉两台服务器也能访问sorry页面
当然这样只有一台lvs主机在服务有点浪费资源,我们可以设置keepalived双主模式,让两台主机都动起来
当然lvs使用起来由诸多的限制性,生产中较为常见的一般都是keepalived+nginx配置,现在让我们动手实验看看吧。
keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;也就是说当地址转移到本主机上就启动nginx,转走就关闭nginx这一切都是通过脚本的执行状态来完成,keepalived本身没有调动nginx的功能。当然如果是双主模式就不需要关闭nginx,只需要启动就行了。
分两步:(1) 先定义一个脚本;(2) 调用此脚本;
注意脚本要先定义在虚拟路由器之外,然后用track_script在虚拟路由器之内调用
vrrp_script <SCRIPT_NAME> {
script "" #脚本如果很简单可直接写在这
interval INT #每隔多久脚本执行一次
weight -INT #如果失败当前节点的priority减去多少(减去后因当小于备用节点)
fall INT #至少检查几次
rise INT# 如果可用立即加权
}
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
...
}
配置示例:
vrrp_script chk_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
weight -10
interval 1
fall 1
rise 1
}
vrrp_script chk_nginx {
script "killall -0 nginx && exit 0 || exit 1"
interval 1
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.31.66/24 dev ens33 label ens33:0
}
track_script {
chk_down
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
在这个脚本我们通过判断目录下是否存在down文件来调整服务的优先级
image.png
这个时候如果我们创建一个down文件,则优先级就会被降低,ip地址会被移动到BACKUP上
image.png
既然这样我们也可以通过脚本来控制nginx,如果状态是主我们就启动nginx如果状态是备就关掉nginx
在nginx的主配置文件中添加
upstream webservs {
server 192.168.0.10:80
server 192.168.0.11:80
server 192.168.0.12:80
{
proxy_pass http://webservs;
#通知脚本
notify() {
local mailsubject="$(hostname) to be $1, vip floating"
local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
systemctl start nginx
notify master
;;
backup)
systemctl restart nginx
notify backup
;;
fault)
systemctl stop nginx