keepalived+nginx 双机热备搭建
- 一、准备工作
- 1.1 准备两台centos7.9
- 1.2 nginx 与 keepalived软件 双机安装
- 1.3 ip分配
- 1.4 修改主机名
- 1.5 关闭selinux(双机执行)
- 1.6 修改hosts(双机执行)
- 二、安装keepalived
- 2.1 执行一下命令安装keepalived(双机执行)
- 2.1.1 yum安装
- 2.1.2 编译安装
- 2.1.2.1 安装依赖
- 2.1.2.2 解压
- 2.2 编辑keepalived配置文件
- 2.2.1 清空原有的配置文件(双机执行)
- 2.2.2 执行以下命令,编辑keepalived.conf文件。(双机分别执行)
- 2.2.3 内容粘在配置文件中,设置不抢占(第一台主节点执行)
- 2.2.4 内容粘在配置文件中(第二台从节点执行)
- 2.2.5 编写check_nginx.sh脚本(双机执行)
- 2.3 设置开机自启动
- 三、安装nginx(双机安装)
- 四、配置下systemctl管理自安装nginx
- 4.1 创建nginx.service文件
- 4.2 重载systemctl
- 4.3 设置开机自启动
- 五、开启keepalived,并测试下
- 5.1 首先区分下 nginx 的index.html页面
- 5.2 开启keepalived
- 5.3 检验 keepalived的可用性
一、准备工作
1.1 准备两台centos7.9
1.2 nginx 与 keepalived软件 双机安装
1.3 ip分配
机器1 | 机器2 | vip |
---|---|---|
192.168.19.200 | 192.168.19.201 | 192.168.19.203 |
1.4 修改主机名
# 第一台
hostnamectl set-hostname nginx01
# 第二台
hostnamectl set-hostname nginx02
1.5 关闭selinux(双机执行)
#关闭selinux
#永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时关闭
setenforce 0
#查看
getenforce
1.6 修改hosts(双机执行)
cat >> /etc/hosts << EOF
192.168.19.130 nginx01
192.168.19.131 nginx02
EOF
二、安装keepalived
2.1 执行一下命令安装keepalived(双机执行)
2.1.1 yum安装
yum -y install keepalived
2.1.2 编译安装
获取安装包https://www.keepalived.org/download.html
找到自己需要的版本安装,本次安装2.1.5,双机下载,也可以wget
2.1.2.1 安装依赖
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel -y
2.1.2.2 解压
# 解压源码包
tar fx keepalived-2.1.5.tar.gz
# 进入解压后的目录
cd keepalived-2.1.5
# 配置选项
./configure --prefix=/usr/local/keepalived --sysconf=/etc --with-run-dir=/usr/local/keepalived/run
# 编译安装
make && make install
# 检查安装情况 如果等于0则代表成功编译安装
echo $?
# 创建存放pid的目录
mkdir /usr/local/keepalived/run
# 拷贝启动文件到/usr/sbin/
cp -rf /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
2.2 编辑keepalived配置文件
2.2.1 清空原有的配置文件(双机执行)
>/etc/keepalived/keepalived.conf
2.2.2 执行以下命令,编辑keepalived.conf文件。(双机分别执行)
vim /etc/keepalived/keepalived.conf
2.2.3 内容粘在配置文件中,设置不抢占(第一台主节点执行)
! Configuration File for keepalived
global_defs {
# 唯一表示id 规格为keep_ip最优一段
router_id keep_200
}
vrrp_script check_nginx {
# 执行的检测脚本
script "/etc/keepalived/check_nginx.sh"
# 间隔检测的时间2s
interval 2
# 检测失败降低权重,需要与主实例权重相减后小于备份实例
weight -20
}
vrrp_instance VI_1 {
# 指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
state BACKUP
# 设置不抢占
nopreempt
# 网卡设置 此处记得修改,ip a s显示需要绑定vip的网卡
interface ens33
# 虚拟路由标识,是一个数字,不用更改
virtual_router_id 51
# 定义优先级,数字越大,优先级越高
priority 100
# 设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔
advert_int 1
# 设置验证类型和密码,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 脚本监控状态
track_script {
check_nginx
}
virtual_ipaddress {
192.168.19.133
}
}
2.2.4 内容粘在配置文件中(第二台从节点执行)
! Configuration File for keepalived
global_defs {
# 唯一表示id 规格为keep_ip最优一段
router_id keep_201
}
vrrp_script check_nginx {
# 执行的检测脚本
script "/etc/keepalived/check_nginx.sh"
# 间隔检测的时间2s
interval 2
# 检测失败降低权重,需要与主实例权重相减后小于备份实例
weight -20
}
vrrp_instance VI_1 {
# 指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
state BACKUP
# 设置不抢占
nopreempt
# 网卡设置 此处记得修改,ip a s显示需要绑定vip的网卡
interface ens33
# 虚拟路由标识,是一个数字,不用更改
virtual_router_id 51
# 定义优先级,数字越大,优先级越高
priority 99
# 设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔
advert_int 1
# 设置验证类型和密码,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 脚本监控状态
track_script {
check_nginx
}
virtual_ipaddress {
192.168.19.133
}
}
2.2.5 编写check_nginx.sh脚本(双机执行)
vim /etc/keepalived/check_nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl start nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
systemctl stop keepalived
else
exit 0
fi
else
exit 0
fi
2.3 设置开机自启动
systemctl enable keepalived
三、安装nginx(双机安装)
# 下载依赖
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
# 创建相关目录src为下载nginx安装包目录,soft为nginx安装目录
mkdir -p /data/{src,soft}
# 进入下载目录
cd /data/src/
# 下载nginx安装包
yum -y install wget
wget http://nginx.org/download/nginx-1.21.0.tar.gz
# 解压
tar fx nginx-1.21.0.tar.gz
cd nginx-1.18.0/
# 配置nginx编译环境
./configure --prefix=/data/soft/nginx --with-http_stub_status_module
# 编译安装
make && make install
# 检查安装是否有问题
echo $?
四、配置下systemctl管理自安装nginx
4.1 创建nginx.service文件
vim /lib/systemd/system/nginx.service
将下面文字直接粘贴进去修改
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/data/soft/nginx/sbin/nginx -c /data/soft/nginx/conf/nginx.conf
ExecReload=/data/soft/nginx/sbin/nginx -s reload
ExecStop=/data/soft/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
ExecStart:nginx的启动命令
ExecReload:nginx的重载命令
ExecStop:nginx的停止命令
4.2 重载systemctl
systemctl daemon-reload
4.3 设置开机自启动
systemctl enable nginx
五、开启keepalived,并测试下
5.1 首先区分下 nginx 的index.html页面
第一台
"hello world 1" > /data/soft/nginx/html/index.html
第二台
"hello world 2" > /data/soft/nginx/html/index.html
5.2 开启keepalived
# 开启keepalived
systemctl start keepalived
# 检查keepalived状态
systemctl status keepalived
5.3 检验 keepalived的可用性
首先查看vip在那台机器上,应该在第一台上,因为给的权重高
ip a s
浏览器访问下,访问vip
关闭第一台机器的nginx,这时候我们将check_nginx.sh的启动nginx命令先注释下,要不会自动启动
完成后停止第一台nginx
# 停止nginx
systemctl stop nginx
# 查看nginx状态
systemctl status nginx
# 查看keepalived 状态
systemctl status keepalived
# 查看vip在哪台机器上(两台执行)
ip a s
nginx 停止了
keepalived也停止了
查看vip 再第二台机器上,说明没问题
访问下浏览器http://192.168.19.203/
因为用的是不抢占模式,所以我们恢复下,看看vip会不会漂移回来(不漂移回来是对的)
首先修改刚刚修改的第一台check_nginx.sh脚本,将注释取消掉
直接启动第一台的keepalived,脚本会启动nginx的
# 启动第一台keepalived
systemctl start keepalived
# 查看状态
systemctl status keepalived
# 查看nginx启动状态
systemctl status nginx
# 都启动后查看vip再那台机器上(双机执行)
ip a s
还是再第二台上,说明没问题