nginx+keepalived雙主模式雙主熱備方式
| 主機(jī)名 | 真實(shí)IP | VIP |
| nginx01 | 11.0.1.31 | 11.0.1.29 |
| nginx02 | 11.0.1.32 | 11.0.1.30 |
一、雙主模式原理
1. nginx+keepalived主備模式缺點(diǎn)
雙機(jī)主備存在一個(gè)問題,不管keepalived存活在哪臺(tái)設(shè)備上,總有一臺(tái)設(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)其中一個(gè)nginx宕機(jī),兩個(gè)虛擬IP仍然可以正常使用,此時(shí)存活的nginx同是綁定2個(gè)虛擬IP。
2. 主備模式和雙主模式的區(qū)別
雙主與主備的核心區(qū)別就是,主備模式只有一個(gè)vrrp實(shí)例(默認(rèn)搶占模式:1個(gè)master1個(gè)backup),雙主機(jī)需要兩個(gè)虛擬IP,兩個(gè)vrrp實(shí)例,兩者互為主備,vrrp1實(shí)例中(nginx01為master,nginx02為backup)、vrrp2實(shí)例中(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. 檢測(cè)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
三、測(cè)試準(zhǔn)備
1. 啟動(dòng)nginx01、nginx02
cd /usr/local/ngins/sbin ./nginx
請(qǐng)確保真實(shí)IP可以訪問到nginx01、nginx02

2. 啟動(dòng)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成功綁定到各自的真實(shí)服務(wù)器IP
四、測(cè)試
1. 測(cè)試VIP訪問

2. 測(cè)試nginx檢測(cè)腳本
關(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宕機(jī)
停止nginx01上的keepalived進(jìn)程或者直接將nginx01關(guān)機(jī)(效果一樣),模擬nginx01宕機(jī)
[root@nginx01 sbin]# systemctl stop keepalived
nginx02網(wǎng)卡信息

nginx01網(wǎng)卡信息

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

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

訪問恢復(fù)正常

模擬nginx02宕機(jī)效果也是一樣,不再重復(fù)實(shí)驗(yàn)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Docker+Nginx+KeepaLived實(shí)現(xiàn)Nginx一主一從高可用方式
- keepalived+nginx+httpd實(shí)現(xiàn)的雙機(jī)熱備+負(fù)載均衡
- Keepalived搭建nginx高可用的實(shí)現(xiàn)
- Nginx使用Keepalived部署web集群(高可用高性能負(fù)載均衡)實(shí)戰(zhàn)案例
- Nginx+keepalived配置的實(shí)現(xiàn)步驟
- Keepalived+Nginx雙機(jī)配置小結(jié)
- keepalived+nginx實(shí)現(xiàn)網(wǎng)站高可用性
- centos7基于keepalived+nginx部署k8s1.26.0高可用集群
相關(guān)文章
Nginx捕獲并自定義proxy_pass返回的錯(cuò)誤問題
這篇文章主要介紹了Nginx捕獲并自定義proxy_pass返回的錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
nginx編譯安裝出現(xiàn)的常見錯(cuò)誤及解決方法
這篇文章給大家介紹了nginx在編譯安裝過程中容易出現(xiàn)的常見錯(cuò)誤以及解決方法,文中有詳細(xì)的代碼講解,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-08-08
Centos基于Nginx搭建RTMP服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Centos基于Nginx搭建RTMP服務(wù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
nginx+rsync+inotify實(shí)現(xiàn)負(fù)載均衡配置方法
這篇文章主要介紹了nginx+rsync+inotify實(shí)現(xiàn)負(fù)載均衡配置方法,需要的朋友可以參考下2014-11-11

