nginx双机热备安装+keepalived
Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。
1、环境准备
Server 1(master) : centos7.5 192.168.111.136
Server 2(backup) : centos7.5 192.168.111.128
2、安装nginx
在两台机器上安装并配置nginx,安装步骤请参考上章(nginx安装)
1) 安装完后在两台服务器分别编写配置文件
修改 /etc/nginx/nginx.conf
文件,建议先将原文件备份,然后再修改成如下内容
vim /nginx.conf
(写入以下内容)
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name localhost;
index a.html a.htm;
root /var/www; 【此路径根据页面所在位置而更改】
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2)分别在两台机器的/var/路径下创建www目录,并在此目录内创建测试文件
Server 1 中添加如下内容
[root@localhost opt]# echo "<h1>welcome to 192.168.111.136</h1>" > /var/www/a.html
server 2 中添加如下内容
[root@localhost opt]# echo "<h1>welcome to 192.168.111.128</h1>" > /var/www/a.html
测试效果如下
3、安装keepalived
[root@localhost opt]# yum install keepalived -y
安装完后 /etc/keepalived/keepalived.conf 默认会有此配置文件
1)在server1(master)服务器节点编写配置文件
vim /etc/keepalived/keepalived.conf
vrrp_script chk_http_port {
script "/opt/nginx_pid.sh" ###检测nginx状态的 监控脚本路径,
interval 2 ###监控时间间隔,每2s检测一次
weight -2 ###脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -2
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER ### 设置为 主节点
interface ens33 ### 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的为 ens33
virtual_router_id 51 ### 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
priority 101 ### 节点优先级,MASTER的权重值一定要高于 BAUCKUP
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点保持一致
authentication {
auth_type PASS ### 加密
auth_pass 11111 ### 加密的密码,两台服务器一定要一样
}
track_script {
chk_http_port ### 执行nginx监控的服务 ,注意这个设置不能紧挨着写在vrrp_script配置块的后面,否则nginx监控失效
}
##虚拟ip池,两个节点设置必须一致,可以定义多个
virtual_ipaddress {
192.168.111.7 ### 定义VIP,也就是虚拟IP,这个IP是由keepalived给服务器配置的,服务器靠这个VIP对外提供服务
}
}
2)在server2(backup)服务器节点编写配置文件
vim /etc/keepalived/keepalived.conf
vrrp_script chk_http_port {
script "/opt/nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP ### 设置为 辅机
interface ens33
virtual_router_id 51 ### 与 MASTRE 设置 值一样
priority 100 ### 比 MASTER权重值 低
authentication {
auth_type PASS
auth_pass 11111 ### 密码 与 MASTER 一样
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.111.7
}
}
3、编写监控nginx脚本
[root@ CentOS ~]# vim /opt/nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为零
/usr/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived ## 则结束 keepalived 进程
fi
fi
保存后,给脚本赋执行权限 chmod 755 /opt/nginx_pid.sh
启动keepalived systemctl restart keepalived
查看keepalived日志 tail -f /var/log/messages
4、验证测试
同时启动192.168.111.136 和192.168.111.128上的Nginx和Keepalived,通过VIP(192.168.50.130)来访问Nginx,效果如下
因为我们写了脚本 nginx_check.sh,这个脚本会自动重启Nginx,所以现在停掉server1节点的keepalived
systemctl stop keepalived
此时,再通过VIP(192.168.111.7)来访问Nginx,效果如下
来源:CSDN
作者:孫小木
链接:https://blog.csdn.net/mitezimu/article/details/103462344