準備工作
1、裝置配置設定
192.168.137.100 master
192.168.137.150 backup
192.168.137.254 vip
2、兩台裝置均安裝keepalived
1
<code>yum </code><code>install</code> <code>-y keepalived</code>
3、兩台裝置均安裝nginx
<code>yum </code><code>install</code> <code>-y nginx</code>
主裝置配置
1、編輯keepalived配置檔案
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
<code>[root@juispan ~]</code><code># > /etc/keepalived/keepalived.conf</code>
<code>[root@juispan ~]</code><code># vi /etc/keepalived/keepalived.conf</code>
<code>global_defs {</code>
<code> </code><code>notification_email { </code><code>##出現問題後接收提示的郵箱</code>
<code> </code><code>test</code><code>@</code><code>test</code><code>.com</code>
<code> </code><code>}</code>
<code> </code><code>notification_email_from [email protected] </code><code>##發件人</code>
<code> </code><code>smtp_server 127.0.0.1 </code><code>##郵件伺服器</code>
<code> </code><code>smtp_connect_timeout 30 </code><code>##延時</code>
<code> </code><code>router_id LVS_DEVEL</code>
<code>}</code>
<code>vrrp_script chk_nginx { </code><code>##檢查服務狀态</code>
<code> </code><code>script </code><code>"/usr/local/sbin/check_ng.sh"</code>
<code> </code><code>interval 3</code>
<code>vrrp_instance VI_1 { </code><code>##定義master相關配置</code>
<code> </code><code>state MASTER </code><code>##設定角色</code>
<code> </code><code>interface ens33 </code><code>##指定發送vrrp包的網卡</code>
<code> </code><code>virtual_router_id 51 </code><code>##定義VRRP RID,要和從裝置一緻</code>
<code> </code><code>priority 100 </code><code>##優先級,越大越優</code>
<code> </code><code>advert_int 1</code>
<code> </code><code>authentication {</code>
<code> </code><code>auth_type PASS </code><code>##定義認證類型</code>
<code> </code><code>auth_pass 123456 </code><code>##認證密碼</code>
<code> </code><code>}</code>
<code> </code><code>virtual_ipaddress { </code><code>##VIP</code>
<code> </code><code>192.168.137.254</code>
<code> </code><code>track_script { </code>
<code> </code><code>chk_nginx </code><code>##加載定義的chk_nginx腳本</code>
2、編輯監控腳本
如果程序裡面沒發現nginx那就代表着服務當機了,然後腳本自動的再次啟動nginx服務。 如果服務還是不可以啟動,就把啟動報錯日志輸入到指定的位置,然後為防止“腦裂”就把keepalived也關閉。
<code>[root@juispan ~]</code><code># vi /usr/local/sbin/check_ng.sh</code>
<code>#!/bin/bash</code>
<code>#時間變量,用于記錄日志</code>
<code>d=`</code><code>date</code> <code>--</code><code>date</code> <code>today +%Y%m%d_%H:%M:%S`</code>
<code>#計算nginx程序數量</code>
<code>n=`</code><code>ps</code> <code>-C nginx --no-heading|</code><code>wc</code> <code>-l`</code>
<code>#如果程序為0,則啟動nginx,并且再次檢測nginx程序數量,</code>
<code>#如果還為0,說明nginx無法啟動,此時需要關閉keepalived</code>
<code>if</code> <code>[ $n -</code><code>eq</code> <code>"0"</code> <code>]; </code><code>then</code>
<code> </code><code>/etc/init</code><code>.d</code><code>/nginx</code> <code>start</code>
<code> </code><code>n2=`</code><code>ps</code> <code>-C nginx --no-heading|</code><code>wc</code> <code>-l`</code>
<code> </code><code>if</code> <code>[ $n2 -</code><code>eq</code> <code>"0"</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>"$d nginx down,keepalived will stop"</code> <code>>> </code><code>/var/log/check_ng</code><code>.log</code>
<code> </code><code>systemctl stop keepalived</code>
<code> </code><code>fi</code>
<code>fi</code>
<code>[root@juispan ~]</code><code># chmod 755 /usr/local/sbin/check_ng.sh</code>
3、啟動服務
<code>[root@juispan ~]</code><code># systemctl start keepalived </code>
<code>[root@juispan ~]</code><code># ps aux | grep keep</code>
<code>root 2416 0.0 0.1 111708 1316 ? Ss 19:29 0:00 </code><code>/usr/sbin/keepalived</code> <code>-D</code>
<code>root 2417 0.0 0.2 111708 2560 ? S 19:29 0:00 </code><code>/usr/sbin/keepalived</code> <code>-D</code>
<code>root 2418 0.0 0.1 111708 1616 ? S 19:29 0:00 </code><code>/usr/sbin/keepalived</code> <code>-D</code>
<code>root 2479 0.0 0.0 112664 976 pts</code><code>/0</code> <code>S+ 19:29 0:00 </code><code>grep</code> <code>--color=auto keep</code>
4、清空政策并驗證
<code>[root@juispan ~]</code><code># systemctl stop firewalld</code>
<code>[root@juispan ~]</code><code># systemctl disable firewalld</code>
<code>Removed </code><code>symlink</code> <code>/etc/systemd/system/basic</code><code>.target.wants</code><code>/firewalld</code><code>.service.</code>
<code>Removed </code><code>symlink</code> <code>/etc/systemd/system/dbus-org</code><code>.fedoraproject.FirewallD1.service.</code>
<code>[root@juispan ~]</code><code># setenforce 0</code>
<code>[root@juispan ~]</code><code># less /var/log/messages ##檢視日志</code>
<code>[root@juispan ~]</code><code># ip addr</code>
<code>2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>
<code> </code><code>link</code><code>/ether</code> <code>00:0c:29:0c:4d:a8 brd ff:ff:ff:ff:ff:ff</code>
<code> </code><code>inet 192.168.137.100</code><code>/24</code> <code>brd 192.168.137.255 scope global ens33</code>
<code> </code><code>valid_lft forever preferred_lft forever</code>
<code> </code><code>inet 192.168.137.254</code><code>/32</code> <code>scope global ens33 </code><code>##已加載VIP</code>
從裝置配置
1、關閉防火牆
<code>[root@localhost ~]</code><code># systemctl stop firewalld</code>
<code>[root@localhost ~]</code><code># systemctl disable firewalld</code>
<code>[root@localhost ~]</code><code># setenforce 0</code>
2、配置keepalived檔案
<code>[root@localhost ~]</code><code># > /etc/keepalived/keepalived.conf</code>
<code>[root@localhost ~]</code><code># vi /etc/keepalived/keepalived.conf</code>
<code> </code><code>notification_email {</code>
<code> </code><code>notification_email_from root@</code><code>test</code><code>.com</code>
<code> </code><code>smtp_server 127.0.0.1</code>
<code> </code><code>smtp_connect_timeout 30</code>
<code>vrrp_script chk_nginx {</code>
<code>vrrp_instance VI_1 {</code>
<code> </code><code>state BACKUP</code>
<code> </code><code>interface ens33</code>
<code> </code><code>virtual_router_id 51</code>
<code> </code><code>priority 90</code>
<code> </code><code>auth_type PASS</code>
<code> </code><code>auth_pass 123456</code>
<code> </code><code>virtual_ipaddress {</code>
<code> </code><code>track_script {</code>
<code> </code><code>chk_nginx</code>
3、編寫啟動腳本
<code>[root@localhost ~]</code><code># vi /usr/local/sbin/check_ng.sh</code>
<code> </code><code>systemctl start nginx</code>
<code>[root@localhost ~]</code><code># chmod 755 /usr/local/sbin/check_ng.sh</code>
4、啟動服務
<code>[root@localhost ~]</code><code># systemctl start keepalived</code>
<code>[root@localhost ~]</code><code># ps aux | grep keepalived</code>
<code>root 3266 0.0 0.1 111708 1308 ? Ss 21:30 0:00 </code><code>/usr/sbin/keepalived</code> <code>-D</code>
<code>root 3267 0.0 0.2 111708 2548 ? S 21:30 0:00 </code><code>/usr/sbin/keepalived</code> <code>-D</code>
<code>root 3268 0.1 0.1 111708 1620 ? S 21:30 0:00 </code><code>/usr/sbin/keepalived</code> <code>-D</code>
<code>root 3321 0.0 0.0 112664 976 pts</code><code>/1</code> <code>S+ 21:30 0:00 </code><code>grep</code> <code>--color=auto keepalived</code>
測試高可用
1、編輯nginx首頁
<code>[root@juispan ~]</code><code># echo "this is master" > /usr/share/nginx/html/index.html</code>
<code>[root@localhost ~]</code><code># echo "this is backup" > /usr/share/nginx/html/index.html</code>
2、用戶端測試
<a href="https://s1.51cto.com/wyfs02/M01/A4/E8/wKioL1mz9riCrpM-AABVTHVj4vc884.png-wh_500x0-wm_3-wmp_4-s_3933185801.png" target="_blank"></a>
3、主裝置模拟當機,關閉keepalived服務
<a href="https://s5.51cto.com/wyfs02/M02/A4/E8/wKioL1mz9y-wSwJuAAAhwxihjFA461.png-wh_500x0-wm_3-wmp_4-s_2593580998.png" target="_blank"></a>
除了配置nginx的高可用,也可以配置其他服務的高可用,比如mysql的高可用,但前提是一定要保證雙方的資料是一緻的。如果主mysql當機,從mysql的資料一定會和主裝置不一緻。
本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/1964009,如需轉載請自行聯系原作者