前言
首先介紹一下Keepalived,它是一個高性能的服務器高可用或熱備解決方案,起初是專為LVS負載均衡軟件設計的,Keepalived主要來防止服務器單點故障的發生問題,可以通過其與Nginx的配合實現web服務端的高可用。
Keepalived以VRRP協議為實現基礎,VRRP是Virtual Router Redundancy Protocol(虛擬路由冗余協議)的縮寫,VRRP協議將兩臺或多臺路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或多個)。
VRRP出現的目的就是為了解決靜態路由的單點故障問題的,它能保證當個別節點宕機時,整個網絡可以不間斷地運行。
下面我們介紹一下nginx keepalived高可用方案的部署安裝。
環境準備
在兩臺主機上準備如下壓縮文件:
- keepalived-2.0.20.tar.gz
- nginx-1.16.1.tar.gz
虛擬IP
真實IP
nginx端口
主從
192.168.124.20
192.168.124.13
80
MASTER
192.168.124.20
192.168.124.14
80
BACKUP
安裝nginx
新建一個用戶:
1
|
useradd tianyan |
確定安裝目錄,我這里的安裝目錄是:/home/tianyan/tianyan_soft/nginx.install。
在這個目錄下分別新建兩個目錄用于安裝nginx和keepalived,解壓兩個壓縮包。
執行安裝命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
./configure --prefix=/home/tianyan/tianyan_soft/nginx.install --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock --user=tianyan --group=tianyan --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_realip_module --with-threads --with-pcre --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi |
如果報錯,記得安裝相關依賴:
1
|
yum install gcc gcc-c++ |
1
|
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。 |
注:以非root權限啟動時,會出現 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 錯誤。
原因:Linux只有root用戶可以使用1024一下的端口
解決辦法:
1.按照root權限啟動
2.將 /usr/local/nginx/conf/nginx.conf 文件中的80端口改為1024以上。
安裝keepalived
1
|
. /configure --prefix= /usr/local/keepalived |
上述命令執行完畢后繼續執行:
1
|
make && make install |
安裝完畢后,目錄是這個樣子:
將配置文件拷貝到系統對應的目錄下
1
2
3
|
mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived .conf /etc/keepalived/keepalived .conf cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived |
編輯 master 節點的 keepalived.conf
1
|
vim /etc/keepalived/keepalived .conf |
內容參考如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
! Configuration File for keepalived global_defs { #一個沒重復的名字即可 router_id hyq_slave } #ng是否運行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 必填,可以是MASTER或BACKUP interface ens33 virtual_router_id 101 priority 90 advert_int 1 # 如果兩節點的上聯交換機禁用了組播,則采用vrrp單播通告的方式 # 本機ip unicast_src_ip 192.168.124.14 unicast_peer { # 其他機器ip 192.168.124.13 } # 設置nopreempt防止搶占資源 nopreempt authentication { auth_type PASS auth_pass 1111 } # 與上方nginx運行狀況檢測呼應 track_script { chk_nginx } virtual_ipaddress { 192.168.124.20 } } |
編輯 slave 節點的 keepalived.conf
1
|
vim /etc/keepalived/keepalived.conf |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
! Configuration File for keepalived global_defs { #一個沒重復的名字即可 router_id hyq_slave } #ng是否運行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 必填,可以是MASTER或BACKUP interface ens33 virtual_router_id 101 priority 90 advert_int 1 # 如果兩節點的上聯交換機禁用了組播,則采用vrrp單播通告的方式 # 本機ip unicast_src_ip 192.168.124.14 unicast_peer { # 其他機器ip 192.168.124.13 } # 設置nopreempt防止搶占資源 nopreempt authentication { auth_type PASS auth_pass 1111 } # 與上方nginx運行狀況檢測呼應 track_script { chk_nginx } virtual_ipaddress { 192.168.124.20 } } |
編寫nginx_check.sh腳本
在/etc/keepalived目錄下新建nginx_check.sh腳本
1
|
touch nginx_check.sh |
編輯其內容為:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/sh A=` ps -C nginx --no-header | wc -l` if [ $A - eq 0 ] then /usr/sbin/nginx sleep 1 A2=` ps -C nginx --no-header | wc -l` if [ $A2 - eq 0 ] then systemctl stop keepalived fi fi |
含義是:如果 nginx 停止運行,嘗試啟動,但是如果無法啟動,則殺死本機的 keepalived 進程, keepalied將會把虛擬 ip 綁定到 BACKUP 機器上。 注意: /usr/sbin/nginx是nginx的啟動命令,如果你安裝到其他目錄,則相應的替換。
Keepalived的日志
Keepalived日志默認位置是在/var/log/messages目錄下。我們將其修改一下。
由于系統是centos7,修改位置為:/lib/systemd/system/keepalived.service
原內容:
EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
修改為:
修改完畢后重新加載service
1
|
systemctl daemon-reload |
創建命令軟連接:
1
|
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived |
執行:
1
|
keepalived -D -f /etc/keepalived/keepalived.conf |
-D 將日志輸出到message日志,默認日志也在message
-f 是指定配置文件
修改/etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改為:KEEPALIVED_OPTIONS="-D -d -S 0"
在/etc/rsyslog.conf 末尾添加
1
|
local0.*/var/log/keepalived.log |
最后執行命令:
1
|
service rsyslog restart |
重啟keepalived后就可以看到日志在/var/log/keepalived.log下了。
測試驗證VIP
當keepalived和nginx都啟動后,我們來測試一下。
首先在瀏覽器里面訪問三個地址
- http://192.168.124.20(vip)
- http://192.168.124.13(master)
- http://192.168.124.14(slave)
我修改了一下nginx的index.html,可以看到當前vip指向是13的master節點:
然后,我們手動停止13上的nginx,再次訪問http://192.168.124.20。
說明安裝成功。
其中通過ip address命令可以觀察到網卡的變化
實驗到這里,我們就完成了keepalived + nginx 主從配置的安裝部署了。
思考:如何開啟雙主模式
什么是雙主模式?
分別介紹一下兩種配置
1、Nginx+keepalived 主從配置
這種方案就是上文介紹過的,使用一個vip地址,前端使用2臺機器,一臺做主,一臺做備,但同時只有一臺機器工作,另一臺備份機器在主機器不出現故障的時候,永遠處于浪費狀態,僅僅用于災備,平時都是空閑著的。
2、Nginx+keepalived 雙主配置
這種方案,使用兩個vip地址,前端使用2臺機器,互為主備,同時有兩臺機器工作,當其中一臺機器出現故障,兩臺機器的請求轉移到一臺機器負擔,如下圖:
【實戰】 elasticsearch 寫入速度提升的案例分享
到此這篇關于Nginx+Keepalived實現雙機主備的方法的文章就介紹到這了,更多相關Nginx Keepalived 雙機主備內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://segmentfault.com/a/1190000022148976