Nginx+keepalived双主配置(双机双主热备)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+keepalived双主配置(双机双主热备)相关的知识,希望对你有一定的参考价值。
参考技术A简介
这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于生产架构环境。
一、网络拓扑
四台虚拟机如下所示:
为什么使用keepalived呢?
使用keepalived就用来做高可用的,提供虚拟VIP
将两台机器上的/etc/keepalived/keepalived.conf配置文件修改成如下:
nginx-A:
Nginx-B:
然后修改两台机器上的nginx首页
chk_nginx.sh脚本也不用改,然后重启keepalived
3.1 查看服务器上的IP地址
查看Nginx-A的地址:
查看Nginx-B的地址:
会多出两个虚拟IP
首先通过两个VIP地址访问如下:
3.2、关闭Nginx-A上的nginx,keepalived将在2s内将它重新启动
3.3、关闭Nginx-A上的keepalived,VIP会切换到Nginx-B上
不管访问的是:http://192.168.182.157/ 还是http://192.168.182.156/ 都将导到Nginx-B上去。
同时会发现Nginx-A上的虚拟IP会消失
实现双主模型NGINX架构
实验拓扑图
主节点配置
yum -y install nginx keepalived psmisc
#修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS1 #用于标识本节点的名称
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_iptables #关闭防火墙功能
# vrrp_mcast_group4 224.0.0.18
}
vrrp_script chk_down { #定义检测资源
script "/bin/bash -c ‘[[ -f /etc/keepalived/down ]]‘ && exit 1 || exit 0"
interval 1 #间隔检测时间
weight -5 #检测失败后权重-5
}
vrrp_script chk_nginx { #定义检测资源
script "killall -0 nginx && exit 0 || exit 1"
interval 1 #间隔检测时间
weight -5 #检测失败后权重-5
}
vrrp_instance VI_1 {
state MASTER #定义状态为主或从
interface ens34 #定义对外的网卡接口
virtual_router_id 88 #虚拟路由ID,相同的IP为一组
priority 100 #定义主节点的优先级
advert_int 1
authentication { #定义认证信息
auth_type PASS
auth_pass rilegou
}
virtual_ipaddress { #定义虚拟IP(VIP)
172.20.29.111
}
track_script { #调用定义的检测资源脚本
chk_nginx
chk_down
}
}
vrrp_instance VI_2 {
state BUCKUP
interface ens34
virtual_router_id 99
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass centos
}
virtual_ipaddress {
172.20.29.114
}
track_script { #调用定义的检测资源脚本
chk_nginx
chk_down
}
}
#配置NGINX服务
vim /etc/nginx/conf.d/test.conf
upstream websrvs {
server 172.20.29.103:80;
server 172.20.29.104:80;
}
server {
listen 80 default_server;
server_name node01.magedu.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://websrvs;
}
}
#开启服务
systemctl nginx keepalived
从节点配置
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS2 #用于标识本节点的名称
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_iptables #关闭防火墙功能
# vrrp_mcast_group4 172.20.29.77
}
vrrp_script chk_down { #定义检测资源
script "/bin/bash -c ‘[[ -f /etc/keepalived/down ]]‘ && exit 1 || exit 0"
interval 1 #间隔检测时间
weight -5 #检测失败后权重-5
}
vrrp_script chk_nginx { #定义检测资源
script "killall -0 nginx && exit 0 || exit 1"
interval 1 #间隔检测时间
weight -5 #检测失败后权重-5
}
vrrp_instance VI_1 {
state BACKUP #定义状态为主或从
interface ens34 #定义外对的网卡接口
virtual_router_id 88 #虚拟路由ID,相同的ID为一组
priority 98 #定义从服务器的优先级
advert_int 1
authentication { #认证信息
auth_type PASS
auth_pass rilegou
}
virtual_ipaddress { #定义虚拟IP(VIP)
172.20.29.111
}
track_script { #调用定义的检测资源脚本
chk_nginx
chk_down
}
}
vrrp_instance VI_2 {
state MASTER
interface ens34
virtual_router_id 99
priority 96
advert_int 1
authentication {
auth_type PASS
auth_pass centos
}
virtual_ipaddress {
172.20.29.114
}
track_script { #调用定义的检测资源脚本
chk_nginx
chk_down
}
}
#配置NGINX服务
vim /etc/nginx/conf.d/test.conf
upstream websrvs {
server 172.20.29.103:80;
server 172.20.29.104:80;
}
server {
listen 80 default_server;
server_name node01.magedu.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://websrvs;
}
}
#开启服务
systemctl nginx keepalived
web服务器配置
#配置httpd页面
echo "<h1>`hostname`</h1>" > /var/www/html/index.html
#添加VIP
ip a a 172.20.29.111/32 dev lo
#配置VIP不冲突
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#开启服务
systemctl start httpd
以上是关于Nginx+keepalived双主配置(双机双主热备)的主要内容,如果未能解决你的问题,请参考以下文章