Nginx高可用集群

本文介绍了如何通过Keepalived创建一主一从的高可用集群,以防止Nginx代理服务器挂掉导致服务不可访问。详细步骤包括设置静态IP、安装Nginx和Keepalived、配置Keepalived的主从模式以及编写检测脚本。同时,进行了Keepalived和Nginx的宕机测试,验证了故障转移功能。
摘要由CSDN通过智能技术生成

集群原理

为了防止当Nginx代理服务器挂掉了后面的服务就都没有办法访问了。所有就引出了高可用集群。下面的实例将配置一主一从的高可用集群。
在这里插入图片描述

例题:

创建两个虚拟机,一个是主机,一个副机
配置虚拟机的静态ip
输入 cd /etc/sysconfig/network-scripts/ 进入到此目录下,可以看到 ifcfg-ens33文件;
主机:192.168.103.100
副机:192.168.103.101
重启网卡 service network restart
在2台服务器安装nginx
在2台服务器安装keepalived

yum install keepalived -y

查看版本:

rpm -q -a keepalived

配置keepalived

改/etc/keepalived/keepalivec.conf配置文件,主从模式主要在这个文件里配置。
如果有两个nginx,一个作为主机,一个作为备机,如果备机故障,主机可以提供服务,如果主机故障,备机一样可以提供服务。
主机配置:

vrrp_script chk_nginx_up_down {
script “/etc/keepalived/nginx_check.sh” #运行脚本,脚本内容下面有,就是起到一个nginx宕
机以后,自动开启服务
interval 2 #检测时间间隔
weight 2 #如果条件成立的话,则权重 +2
}
#定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER #来决定主从BACKUP
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.103.100 #填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 心跳监测间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
#将 track_script 块加入 instance 配置块
track_script {
chk_nginx_up_down #执行 Nginx 监控的服务
}

virtual_ipaddress {
192.168.103.50 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置
多个。
}
}

副机配置:

vrrp_script chk_nginx_up_down {
script “/etc/keepalived/nginx_check.sh” #运行脚本,脚本内容下面有,就是起到一个nginx宕
机以后,自动开启服务
interval 2 #检测时间间隔
weight 2 #如果条件成立的话,则权重 +2
}
#定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP #来决定主从BACKUP
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.103.101 #填写本机ip
priority 90 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 心跳监测间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
#将 track_script 块加入 instance 配置块
track_script {
chk_nginx_up_down #执行 Nginx 监控的服务
}

virtual_ipaddress {
192.168.103.50 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置
多个。
}
}

在两个系统/etc/keepalived/ 添加检测脚本nginx_check.sh

#!/bin/bash
A=ps -C nginx --no-header |wc -l
#判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
#nginx的启动目录
/usr/local/nginx/sbin/nginx
#等待3秒再次检查nginx,如果没有重启成功,则停止keepalived,使其启动备用机
sleep 3
if [ ps -C nginx --no-header |wc -l -eq 0 ];then
kill keepalived
fi
fi

给 分别给两台nginx_check.sh 这个脚本指定权限

chmod +x /etc/keepalived/nginx_check.sh

如果linux开启了防火墙, 请配置两个系统的防火墙放行vrrp协议

firewall-cmd --add-rich-rule=‘rule protocol value=“vrrp” accept’ --permanent
firewall-cmd --reload

启动观测

#启动主机的keepalived
systemctl start keepalived.service
#启动成功之后ip addr 查看主机是否有50的虚拟ip
#启动主机nginx
/usr/local/nginx/sbin/nginx
#使用192.168.103.50访问项目查看是否成功!
#启动备机keepalived
#启动成功之后ip addr 如果配置成功备机是没有50的虚拟ip,主有主机故障才有
#启动备机nginx
#测试发现访问50的ip数据一直是走主机的这是正确的。
#其他命令
#关闭keepalived:systemctl stop keepalived.service

keepalived宕机测试

测试主机keepalived关闭后是够能否故障转移(启用备机)。

关闭 keepalived: systemctl stop keepalived.service

如果已经转移那么查看备机的ip地址一定会有一个50的虚拟ip出现
恢复主机:那么请求继续会走主机,50ip会再次回到主机上
注:在副机keepalived配置文件中设置抢占优先级
设置的为不抢占
在这里插入图片描述

nginx宕机测试

当主机关闭nginx后keepalived会再次帮你自动启动nginx
注意:(如果没有再次启动就需要关闭安全防护)

setenforce 0
或者
#永久关闭,重启生效: sed -i ‘s/SELINUX=enforcing/\SELINUX=disabled/’ /etc/selinux/config

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值