天天看點

keepalived配置高可用叢集

準備工作

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># &gt; /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>&gt;&gt; </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: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; 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># &gt; /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" &gt; /usr/share/nginx/html/index.html</code>

<code>[root@localhost ~]</code><code># echo "this is backup" &gt; /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,如需轉載請自行聯系原作者

繼續閱讀