Nginx+Lvs+keepAlived构建高可用集群环境
[TOC]
利用Keepalive+Nginx搭建与阿里云SLB一样高效的高可用应用架构
安装keepalive请查看另一篇文章
安装nginx 略
高可用集群规划
集群环境介绍
- 操作系统环境: CentOS Linux release 7.9.2009
- Nginx 版本: nginx/1.20.1
- 高可用版本:keepalived-2.2.2
- root 系统管理员用户登录安装部署
集群规划与配置
节点名称 | 节点 IP Addr | 主机名 | Nginx端口 | 默认主从 | 配置 |
---|---|---|---|---|---|
VIP | 192.168.233.100 | ||||
MASTER | 192.168.233.129 | master | 80 | MASTER | 2核2G20GB |
BACKUP | 192.168.233.130 | backup | 80 | BACKUP | 2核2G20GB |
编写脚本
编写 nginx 服务存活检测脚本
1 | vim /usr/bin/check_nginx_alive.sh |
不重启脚本
1 |
|
重启一次脚本:一般keepalived 不会挂,所以重启nginx 一次
1 |
|
1 | chmod +x /usr/bin/check_nginx_alive.sh |
监测脚本解析
1 | ps -C nginx --no-header |
这里涉及ps 的用法,我们一般用ps查看相关进程,一般都是用
ps -ef | grep XX 或 ps -aux| grep XX 的模式
如下:
1 | $ ps -ef | grep nginx |
但是这样通常都会覆盖一个grep的进程
我们可以用ps -C 或ps -c 的方式, -C 后面接命令的名字 ,如下:
1 | # ps -C nginx |
–no-header 就是去掉title
wc -l 行数计算
如果值为0,即代表服务未启动
如果值为非0,即代表服务已启动
安装killall命令
为验证高可用,因centos安装的是minimal 版本,默认没有该命令,需要安装一下
1 | yum install -y psmisc |
防止脑裂
关闭SELinux
查看 SELinux
MASTER主
1
2
3
4
5
6
7# getenforce
Permissive ### 允许的
# /usr/sbin/sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinuxBACKUP从
1
2
3
4
5
6# getenforce
Enforcing ### 强制执行
# /usr/sbin/sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux临时关闭
1
2
3##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
# setenforce 0setenforce 0 #设置为宽容模式
但这样只在本次生效,重启服务器后将失效。
永久关闭
如果要永久关闭,还需要修改配置文件:
1
2
3
4
5# vim /etc/selinux/config
### 将
SELINUX=enforcing
### 改为
SELINUX=disabled设置后需要重启才能生效
iptables防火墙配置
centos 防火墙有两种管理方式firewall, iptables两者不能同时开启
防火墙开启的情况下,我们需要加入一条配置:
iptables
编辑vim /etc/sysconfig/iptables
1 | -A INPUT -p vrrp -j ACCEPT |
注意:
添加规则一定不要在 -A INPUT -j REJECT --reject-with icmp-host-prohibited
之后,一定要加在其前面。
配置完之后 reload
1 | service iptables reload |
Firewalld 防火墙配置
问题就是出现在了防火墙这里,防火墙阻止了vrrp组包发送
如果是Firewalld防火墙 则主、备都运行下面的命令
centos7 默认防火墙firewall
开启vrrp 协议
主备都运行下面的命令
1 | firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT |
重新启动服务
1 | # systemctl restart keepalived |
配置 keepalive
1 | # 非抢占模式,这种模式主要是针对主机崩溃,集群已经重新选出新的主机,并且原来的主机重新上线后并不争夺主机的情况。这种模式适合那些倾向于认为崩溃的主机即便上线还是会出现崩溃的场景。 |
1 | vim /etc/keepalived/keepalived.conf |
master配置
1 | ! Configuration File for keepalived |
BACKUP配置
1 | ! Configuration File for keepalived |
重启 keepalive 生效
1 | systemctl restart keepalived |
注意
新版本
1 | ip a |
查看网卡,只会存在 主master 可以看到 虚拟vip
测试
初始化
启动
启动两台机器的nginx 和keepalived
这里129 为master,130 为backup
虚拟vip正确显示master 机器
master 当前状态
backup 当前状态
使用不重启脚本
模拟master 宕机
停止master nginx
1 | systemctl stop nginx |
模拟master 存活
重启master
1 | systemctl restart nginx |
可以看见虚拟vip 自动切换为129
使用重试1次脚本
模拟master 宕机
制造配置文件错误
可见成功漂移 backup
模拟master 存活
成功成功漂移到master
更多请查看keepalived官网http://www.keepalived.org