5-4keepalived与nginx实现高可用故障转移实战

回顾:
keepalived:HA Cluster高可用集群的实现
vrrp:虚拟冗余路由协议
虚拟路由器:物理路由器
VRID:Virtual Router ID
Master/Backup
一主一备货一主多备
priority
抢占模式/非抢占模式
ipvs wrapper(checkers);
checkers:对各VS的各RS做健康状态检测
应用层检测:HTTP_GET,SSL_GET,SMTP_CHECK
传输层检测:TCP_CHECK
自定义检测:MISC_CHECK(例如mysql数据检测),自定义脚本检测

keepalived内建是没有高可用nginx这种功能,要想高可用nginx,要确保两个节点上的nginx服务都运行起来就可以,不用管是不是主节点,需要借助外部脚本把nginx服务启动起来或者重启,并且nginx服务发生故障时还能转移故障,降低优先级(不能当作主节点了)

视频内课件:
keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现有限动态调整;
分两步:(1)先定义一个脚本;(2)调用此脚本;
vrrp_script <SCRIPT_NAME> {---定义一个脚本
script "一行命令或者外部脚本路径"
interval INT---每隔多长时间,上边的脚本要执行一次,万一失败了,权重要减去多少
weight -INT
}

track_script {---使用这个命令去调用脚本,而且可以调用多个脚本
    SCRIPT_NAME_1
    SCRIPT_NAME_2
    ...
}

示例:高可用nginx服务
!Configuration File for keepalived

global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
}

vrrp_script chk_down {
script "[[-f /etc/keepalived/down]] && exit 1 || exit 0"---这个文件如果存在就错误,不存在就成功,意思就是想让nginx降权就touch一个down文件
interval 1
weight -5
}

vrrp_script chk_nginx {
script "killall -0 nginx && exit 0 ||exit 1"---killall -0看这个进程能不能关闭,表示这个进程在,不真杀进程,而是看能不能杀,如果成功了返回0,如果失败了返回1
interval 1
weight -5
fall 2---检测失败2次,才会认为有问题
rise 1---如果以前是失败的,现在一检测又成功了,立即加上减去的权重,并抢占资源
}

vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 14
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97h2
}
virtual_ipaddress {
10.1.0.93/16 dev eno16777736
}
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"
}
博客作业:
(1)双主模型的ipvs高可用集群
(2)双主模型的nginx proxy高可用集群

测试:ipvs使用sh算法或持久连接时,故障切换后,同一个客户端是否依然能关联至此前绑定的RS
nginx使用ip_hash或hash $request_url算法时,故障切换后,同一个客户端是否依然能关联至此前绑定的upstream server;

视频中的演示:两台nginx,一台虚拟主机启动多个web服务(监听多个接口)用来模拟多台主机

首先都同步下时间,并安装keepalived服务
yum -y install keepalived
ntpdate 172.16.0.1

===================================================================
node1:172.16.0.6
ntpdate 172.16.0.1
vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.101.33
}

vrrp_script chk_down {---脚本要定义在示例外边
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"---存在就错误退出,不存在就正确退出
weight -10---脚本失败了就降权
interval 1---监测间隔时间1秒
fall 1--失败几次认为失效
rise 1---检测几次认为正常
}

vrrp_script chk_ngx {
script "killall -0 nginx && exit 0 || exit 1"---nginx存在就失败,不存在就成功
weight -10---脚本失败了就降权
interval 2---监测间隔时间1秒
fall 3--失败几次认为失效
rise 3---检测几次认为正常
}

vrrp_instance VI_1 {
state MASTER
priority 100
interface eno16777736
virtual_router_id 33
advert_int 1
authentication {
auth_type PASS
auth_pass RT3SKUI2
}
virtual_ipaddress {
172.16.0.77/16 dev eno16777736 label eno16777736:0
}

track_script {---跟踪下面这个脚本
    chk_down
    chk_ngx
}

notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"

}
systemclt start keepalived.service
systemctl status keepalived.service---查看服务状态
ifconfig---可以看到已经配置上地址了
此时在/etc/keepalived/下创建文件downnode1节点会变为备用节点
在node2节点上运行下面的命令
tcpdump -i eno16777736 -nn host 224.1.101.33---可以看到监听在这个地址上的信息
node1节点上运行下面的命令
rm -f down---删除以后就可以看到地址转移给node2节点了

下边的演示是单主节点,节点变为主节点nginx服务上线,变为备用节点,nginx服务下线,两个节点都做如下配置
先安装nginx服务
yum -y install nginx
vim /etc/nginx/nginx.conf---nginx主要是作为反代服务器
在server上下文中添加一行
location / {
proxy_pass http://websrvs;
}
upstream websrvs {
server 192.168.10.11:80;
server 192.168.10.12:80;
server 192.168.10.13:80;
}
nginx -t
systemctl start nginx.service
curl
http://172.16.0.6/---可以看到是轮询访问三个主机
curl
http://172.16.0.7/---可以看到是轮询访问三个主机

现在先验证能不能监控节点变为主节点以后nginx服务能启动起来(先把两个节点的nginx服务都停掉,systemctl stop nginx.service)
vim /etc/keepalived/notify.sh
#!/bin/bash
#
contact=‘[email protected]‘

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.service---成为主节点就启动nginx
notify master
;;
backup)
systemctl start nginx.service---成为备用节点就启动nginx
notify backup
;;
fault)
systemctl stop nginx.service---成为故障节点就停掉nginx
notify fault
;;
*)
echo "Usage:$(basename $0) {master|backup|fault}"
exit 1
;;
esac

此时,创建down文件,就会转移地址到node2节点,删除down文件,就会转移到node1节点
注意:不要随便停掉nginx服务也不要重启,因为一旦监测失败就会降权,主节点备节点都是这样,所以还要修改通知脚本中的backup状态也改为启动nginx服务,保证服务不下线,但是地址会转移,而且还要监控nginx进程来完成降权目的,还要在配置文件中添加一个脚本vrrp_script chk_ngx,
注意:如何让nginx启动不起来?启动httpd抢占80端口即可
killall nginx && systemctl start httpd
自己强行让服务下线以后,需要手动启动服务,才能让地址转移过来,或者让另外一个节点下线

下面的是双主模型
vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.101.33
}

vrrp_script chk_down {---脚本要定义在示例外边
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"---存在就错误退出,不存在就正确退出
weight -10---脚本失败了就降权
interval 1---监测间隔时间1秒
fall 1--失败几次认为失效
rise 1---检测几次认为正常
}

vrrp_script chk_ngx {
script "killall -0 nginx && exit 0 || exit 1"---nginx存在就失败,不存在就成功
weight -10---脚本失败了就降权
interval 2---监测间隔时间1秒
fall 3--失败几次认为失效
rise 3---检测几次认为正常
}

vrrp_instance VI_1 {
state MASTER
priority 100
interface eno16777736
virtual_router_id 33
advert_int 1
authentication {
auth_type PASS
auth_pass RT3SKUI2
}
virtual_ipaddress {
172.16.0.77/16 dev eno16777736 label eno16777736:0
}

track_script {---跟踪下面这个脚本
    chk_down
    chk_ngx
}

notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"---双主模型nginx就不能停掉了

}

vrrp_instance VI_2 {
state BACKUP---另一个节点改为master
priority 96---另一个节点改为100
interface eno16777736
virtual_router_id 43
advert_int 1
authentication {
auth_type PASS
auth_pass RT7SKUI2
}
virtual_ipaddress {
172.16.0.78/16 dev eno16777736 label eno16777736:1
}

track_script {---跟踪下面这个脚本
    chk_down
    chk_ngx
}

track_interface {---生产环境中还会监控接口信息
    eno16777736
    eno33554984
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"---双主模型nginx就不能停掉了

}

systemctl stop keepalived.service
systemctl start keepalived.service
systemctl status keepalived.service---然后就可以看到每个节点都拿到地址了,业务正常了

=====================================================================
node2:172.16.0.7
ntpdate 172.16.0.1
vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived

global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
vrrp_mcast_group4 224.0.101.33
}

vrrp_script chk_down {---脚本要定义在示例外边
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"---存在就错误退出,不存在就正确退出
weight -10---脚本失败了就降权
interval 1---监测间隔时间1秒
fall 1--失败几次认为失效
rise 1---检测几次认为正常
}

vrrp_instance VI_1 {
state BACKUP
priority 96
interface eno16777736
virtual_router_id 33
advert_int 1
authentication {
auth_type PASS
auth_pass RT3SKUI2
}
virtual_ipaddress {
172.16.0.77/16 dev eno16777736 label eno16777736:0
}

track_script {---跟踪下面这个脚本
    chk_down
}

notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"

}

server:192.168.10.11/24,192.168.10.12/24,192.168.10.13/24配置三个IP地址
ntpdate 172.16.0.1
vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 192.168.10.11:80>
ServerName 192.168.10.11
DocumentRoot "/data/web/vhost1"
<Directory "/data/web/vhost1">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.12:80>
ServerName 192.168.10.12
DocumentRoot "/data/web/vhost2"
<Directory "/data/web/vhost2">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.13:80>
ServerName 192.168.10.13
DocumentRoot "/data/web/vhost3"
<Directory "/data/web/vhost3">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

编辑好以后测试语法
httpd -t---测试语法,提示目录不存在
mkdir -pv /data/web/vhost{1,2,3}
vim /data/web/vhost1/index.html
<h1>Vhost1</h1>
vim /data/web/vhost2/index.html
<h1>Vhost2</h1>
vim /data/web/vhost3/index.html
<h1>Vhost3</h1>

systemctl start httpd.service

5-4keepalived与nginx实现高可用故障转移实战

原文地址:https://blog.51cto.com/13852573/2386891

时间: 2024-10-02 06:43:35

5-4keepalived与nginx实现高可用故障转移实战的相关文章

Windows 2012 系统搭建高可用故障转移集群

Windows 2012 系统搭建高可用故障转移集群 一.故障转移集群介绍 2 1.1 系统介绍 2 1.2 工作原理 2 二.实验目的 2 2.1 验证故障转移功能 2 2.2 验证高可用集群的可用性,以及支持的服务类型 2 三.实验原理 3 3.1 实验拓扑 3 3.2 实验环境设备 3 四.配置步骤 4 4.1 配置域服务器 4 4.2  iSCSI 虚拟存储配置 18 4.3 配置故障转移集群服务 45 4.4  验证集群 63 五.实验结果验证 68 5.1  验证故障转移 68 5.

sql server 高可用故障转移(2)

添加网卡心跳线 目标: 二台sql服务器需要添加网卡心跳线,用于sql server内部数据传输 计算机名 Ip信息 心跳线 Hsr1 192.168.2.50    (ipv4 ip) 255.255.255.0   (掩码) 192.168.2.1     (网关) 192.168.2.52    (dns) 100.100.100.1  (ipv4 ip) 255.255.255.0  (掩码 不需要配置网关及DNS hsr2 192.168.2.51 255.255.255.0 192.

sql server 高可用故障转移(4)

二台sql服务器配置ISCSI虚拟磁盘 在上篇我们利用ISCSI Target软件在DC-ISCSCI上创建了三个ISCSI虚拟磁盘,在下面我们将为大家介绍SQL-CL01(hsr1 50)和SQL-CL02(hsr2  51)如何访问这些ISCSI虚拟磁盘. SQL-CL01和SQL-CL02可以使用ISCSI协议访问DC-ISCSCI上的虚拟ISCSI磁盘,由于Windows Server 2008已经内置了ISCSI协议,因此我们无需在SQL-CL01和SQL-CL02上安装ISCSI客户

nginx+keepalived高可用

nginx+keepalived高可用 1.环境如下 lb-01:192.168.75.136/24  nginx+keepalived-master lb-02:192.168.75.137/24  nginx+keepalived-backup VIP:192.168.75.135/24   rs-01:192.168.75.133/24 apache rs-02:192.168.75.13424 apache lb操作系统centos7.rs操作系统ubuntu14.04 2.lb-01/

分布式架构高可用架构篇_04_Keepalived+Nginx实现高可用Web负载均衡

一.场景需求 二.Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用. Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA).VRRP(VirtualRouter Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路

keepalived+nginx实现高可用and负载均衡集群

keepalived+nginx实现高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(work

keepalived+nginx搭建高可用and负载均衡集群

keepalived+nginx搭建高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都由主进程发出,Slave(worke

keepAlived+nginx实现高可用双主模型LVS

实验目的: 利用keepalived实现高可用反向代理的nginx.以及双主模型的ipvs 实验环境: node1:在nginx做代理时做反向代理节点,在keepalived实现LVS时做Director.VIP1:172.16.18.22 VIP2:172.16.18.23 node2:在nginx做代理时做反向代理节点,在keepalived实现LVS时做Director.VIP1:172.16.18.22 VIP2:172.16.18.23 node3:在nginx做代理时做web服务器.

keepalived基于双主模型实现nginx的高可用(2)

Keepalived: keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务. 当keepalived基于主备模