nginx+keepalived雙主模式雙主熱備方式
| 主機名 | 真實IP | VIP |
| nginx01 | 11.0.1.31 | 11.0.1.29 |
| nginx02 | 11.0.1.32 | 11.0.1.30 |
一、雙主模式原理
1. nginx+keepalived主備模式缺點
雙機主備存在一個問題,不管keepalived存活在哪臺設(shè)備上,總有一臺設(shè)備是空閑的,資源利用率并不高,雙主模式可以很好解決該問題。
雙主模式可以實現(xiàn)以下效果:
- 11.0.1.29 VIP1 默認(rèn)訪問11.0.1.31
- 11.0.1.30 VIP2 默認(rèn)訪問11.0.1.32
當(dāng)其中一個nginx宕機,兩個虛擬IP仍然可以正常使用,此時存活的nginx同是綁定2個虛擬IP。
2. 主備模式和雙主模式的區(qū)別
雙主與主備的核心區(qū)別就是,主備模式只有一個vrrp實例(默認(rèn)搶占模式:1個master1個backup),雙主機需要兩個虛擬IP,兩個vrrp實例,兩者互為主備,vrrp1實例中(nginx01為master,nginx02為backup)、vrrp2實例中(nginx01為backup,nginx02為master)
二、配置文件
1. nginx01的keepalived.conf
[root@nginx01 sbin]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id real-server1
script_user root
enable_script_security
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 151
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
11.0.1.29
}
track_script {
chk_nginx
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 152
priority 50
advert_int 5
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
11.0.1.30
}
track_script {
chk_nginx
}
}2. nginx02的keepalived.conf
[root@nginx02 sbin]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id real-server2
script_user root
enable_script_security
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 151
priority 50
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
11.0.1.29
}
track_script {
chk_nginx
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 152
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
11.0.1.30
}
track_script {
chk_nginx
}
}3. 檢測nginx存活腳本文件nginx_check.sh
[root@nginx01 sbin]# cat /etc/keepalived/nginx_check.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl stop keepalived
fi
fi
三、測試準(zhǔn)備
1. 啟動nginx01、nginx02
cd /usr/local/ngins/sbin ./nginx
請確保真實IP可以訪問到nginx01、nginx02

2. 啟動keepalived
systemctl start keepalived
3. 查看網(wǎng)卡信息
nginx01的網(wǎng)卡信息
[root@nginx01 sbin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:60:05:0e brd ff:ff:ff:ff:ff:ff
inet 11.0.1.31/24 brd 11.0.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 11.0.1.29/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::a344:1c87:5caf:42cd/64 scope link noprefixroute
valid_lft forever preferred_lft forever

nginx02的網(wǎng)卡信息
[root@nginx02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b9:97:26 brd ff:ff:ff:ff:ff:ff
inet 11.0.1.32/24 brd 11.0.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 11.0.1.30/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::4ae3:fc87:6344:7062/64 scope link noprefixroute
valid_lft forever preferred_lft forever
可以看出VIP成功綁定到各自的真實服務(wù)器IP
四、測試
1. 測試VIP訪問

2. 測試nginx檢測腳本
關(guān)閉nginx01上的nginx服務(wù),查看腳本是否可以正常重啟nginx
[root@nginx01 sbin]# ./nginx -s stop [root@nginx01 sbin]# ps -aux | grep nginx root 3598 0.0 0.0 20540 612 ? Ss 22:48 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 3600 0.0 0.0 20984 1304 ? S 22:48 0:00 nginx: worker process root 3650 0.0 0.0 112824 988 pts/0 R+ 22:48 0:00 grep --color=auto nginx
重啟成功,腳本生效。
3. 模擬nginx01宕機
停止nginx01上的keepalived進程或者直接將nginx01關(guān)機(效果一樣),模擬nginx01宕機
[root@nginx01 sbin]# systemctl stop keepalived
nginx02網(wǎng)卡信息

nginx01網(wǎng)卡信息

訪問nginx01的VIP11.0.1.29,但實際是11.0.1.32響應(yīng),因為VIP1漂移到nginx02上,此時nginx02同時綁定VIP1、VIP2。即使nginx01宕機,ngin01的VIP11.0.1.29仍然可以正常使用。

4. 模擬nginx01修復(fù)宕機
重啟nginx01的keepalived(或開機)

訪問恢復(fù)正常

模擬nginx02宕機效果也是一樣,不再重復(fù)實驗。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Docker+Nginx+KeepaLived實現(xiàn)Nginx一主一從高可用方式
- keepalived+nginx+httpd實現(xiàn)的雙機熱備+負(fù)載均衡
- Keepalived搭建nginx高可用的實現(xiàn)
- Nginx使用Keepalived部署web集群(高可用高性能負(fù)載均衡)實戰(zhàn)案例
- Nginx+keepalived配置的實現(xiàn)步驟
- Keepalived+Nginx雙機配置小結(jié)
- keepalived+nginx實現(xiàn)網(wǎng)站高可用性
- centos7基于keepalived+nginx部署k8s1.26.0高可用集群
相關(guān)文章
Centos基于Nginx搭建RTMP服務(wù)器的實現(xiàn)
本文主要介紹了Centos基于Nginx搭建RTMP服務(wù)器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
nginx+rsync+inotify實現(xiàn)負(fù)載均衡配置方法
這篇文章主要介紹了nginx+rsync+inotify實現(xiàn)負(fù)載均衡配置方法,需要的朋友可以參考下2014-11-11

