` keepalived(二) | 听云轩

keepalived(二)

keepalived+nginx搭建

主从配置:

这种方案,使用一个VIP地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候永远处于浪费状态。

双主配置:

这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合当前的架构。

实验环境:

1
2
3
4
5
node1(Nginx1):192.168.248.129 
node2(Nginx2):192.168.248.130
node3(WEB1):192.168.248.128
node4(WEB2):192.168.248.133
VIP:192.168.248.144
  • web部署

在node3和node4上执行下面的脚本:

1
2
3
4
5
6
#!/bin/bash
yum install net-tools httpd -y
systemctl stop firewalld
setenforce 0
echo "<h1>This is RS1</h1>" > /var/www/html/index.html # 修改不同的主页以便测试!
systemctl start httpd
  • nginx部署

在node1和node2上执行以下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
systemctl stop firewalld
setenforce 0
yum install nginx -y
cat > /etc/nginx/conf.d/proxy.conf << EOF
upstream websers{
server 192.168.248.128;
server 192.168.248.133;
}
server{
listen 8080;
server_name 192.168.248.129; //node2改
location / {
proxy_pass http://websers;
}
}
EOF
nginx -s reload
  • keepalived部署

在node1和node2节点执行以下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
yum install keepalived -y
mv /etc/keepalived/keepalived.conf{,.bak}
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
router_id node1 # node2修改
}
vrrp_instance VI_1 {
state MASTER # node2节点BACKUP
interface ens33 #指定检测网络接口
virtual_router_id 10 #虚拟路由标识,同一个VRRP实例要使用同一个标识
priority 100 # node2节点小于100
advert_int 1 #设置主备节点间同步检查时间间隔
authentication { ##设置主备节点间的通信验证类型及密码,同一个VRRP实例中要一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ##使用虚拟ip进行访问
192.168.248.144
}
}
EOF
systemctl restart keepalived

我们需要自定义脚本检测nginx服务是否正常运行,此时需要修改配置文件加入:

1
2
3
4
5
6
7
8
9
10
vrrp_script chk_http_port {     #配合track_script进行脚本监控,chk_http_port自定义名字
script "/usr/local/src/check_nginx_pid.sh"
interval 1
weight -2 # 条件成立,优先级-2
}

# 调用script脚本
track_script {
chk_http_port
}

其中脚本内容为 :

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
exit 1
else
exit 0
fi
else
exit 0
fi

然后访问测试,并可以尝试分别关闭keepalived和nginx服务后进行测试。

------ 本文结束 ------
您的支持将鼓励我继续创作