keepalived +nginx 高可用

1. 安装keepalived

yum -y install keepalived yum源直接安装

systemctl enable keepalived 设置keepalived开机自启动

2. 设置时间同步,确保各节点时间一致

dnf -y install chrony 安装服务,已安装忽略

systemctl enable chronyd 开机自启动服务

备节点:

vim /etc/chrony.conf

将第一行替换为:

server 192.168.0.220 iburst 192.168.0.220 为主节点ip

主节点:

vim /etc/chrony.conf

添加

server 192.168.0.220 iburst 设置服务器

allow 192.168.0.0/16 设置允许同步网段

local stratum 10 即使自己未能通过网络时间服务器同步到时间,也允许将本地时间作为标准时间授时给其它客户端

分别重启服务,完成时间同步。

3. 关闭防火墙或添加规则,关闭selinxu。

4. 安装killall。dnf -y install psmisc

5. 配置keepalived 配置文件

vim /etc/keepalived/keepalived.conf

global_defs {

router_id node1 #主机名,主备保持区别

#vrrp_mcast_group4 224.0.0.18 #设置组播地址,默认224.0.0.18

}

vrrp_script nginx_check { #定义脚本

script "killall -0 nginx " #脚本内容,可写脚本位置

interval 1 #1秒钟执行一次

weight -10 #若执行失败,减权,影响当前优先级

rise 2 #正确两次

fall 2 #失败两次,开始减权

}

vrrp_instance VI_1 {

state MASTER #设置主备,备为BACKUP

# preempt #抢占模式,nopreempt非抢占模式,默认为抢占。

# preempt_delay 300 #抢占模式,节点上线后触发新选举操作的延时

interface ens32 #设置虚拟路由器使用的网卡

virtual_router_id 51 #虚拟路由器id,主备需保持一直

priority 100 #优先级,值越大优先级越高。主高备低

advert_int 1 #vrrp通告时间间隔,默认1s

#track_ineterface{

# ens32

# }

track_script {

nginx_check #执行前边定义的脚本

}

notify_master "/etc/keepalived/start_nginx.sh" #设置当前节点成为主节点执行的脚本,一般为启动服务,也可加入邮件提醒等。

notify_backup "/etc/keepalived/start_nginx.sh"

authentication {

auth_type PASS #简单密码认证

auth_pass 1111 #随机字符串,不超过8位,主备节点一致即可

}

virtual_ipaddress {

192.168.0.239 #vip设置

}

}

主:

global_defs {

router_id node1

}

vrrp_script nginx_check {

script "killall -0 nginx"

interval 1

weight -10

rise 2

fall 2

}

vrrp_instance VI_1 {

state MASTER

interface ens32

virtual_router_id 51

priority 100

advert_int 1

track_interface {

ens32

}

notify_master "/etc/keepalived/start_nginx.sh"

notify_backup "/etc/keepalived/start_nginx.sh"

track_script {

nginx_check

}

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.0.239/24

}

}

备:

global_defs {

router_id node2

}

vrrp_script nginx_check {

script "killall -0 nginx"

interval 1

weight -10

rise 2

fall 2

}

vrrp_instance VI_1 {

state BACKUP

interface ens32

virtual_router_id 51

priority 96

advert_int 1

track_interface {

ens32

}

notify_master "/etc/keepalived/start_nginx.sh"

notify_backup "/etc/keepalived/start_nginx.sh"

track_script {

nginx_check

}

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.0.239

}

}

start_nginx.sh

#!/bin/bash

/usr/local/nginx/sbin/nginx

6. 测试:

主节点为220,备节点为221。优先级分别为100,96.nginx服务掉会减去10.抢占模式。

此时两台节点均无任何服务,

直接启动主节点keepalived

 

此时keepalived启动,执行脚本,启动nginx,成为主节点,并向组播地址通告优先级等。

备机启动keepalived

备节点nginx,keepalived都已启动,并成为备节点。

此时讲主节点nginx停掉

日志显示,主节点执行脚本失败返回值为1,优先级变为90,此时收到通报,221优先级为96,节点变为BACKUP,REMOVING VIPS。

抓包可看到组播地址中优先级的变化。

备节点日志:

主节点变为备节点自动执行脚本启动nginx,监测脚本执行成功,优先级变为100,抢占回主节点,变为MASTER.:

7. 隐患

检测脚本检测到nginx进程便不会转移vip,但nginx有多个进程,意味着若某一个或若干个进程挂掉,并保留最少一个进程,检测脚本便检测不出,无法自动转移vip。

心跳脑裂问题。可根据具体情况,写入脚本,周期自身 ping 网关,若不同,则干掉自身keepalived。或在BACKUP节点监测,若备节点变为主节点时,ping 网关,若不通则干掉自己,通,则认定自己没有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值