天天看點

linux下搭建HA高可用叢集

HA 即 (high available)高可用,又被叫做雙機熱備,用于關鍵性業務。 簡單了解就是,有兩台機器A和B,正常是A提供服務,B待命閑置,當A當機或服務宕掉,會切換至B機器繼續提供服務。常用實作高可用的開源軟體有heartbeat和keepalived,其中keepalived有負載均衡的功能。

下面我們使用heartbeat來做HA叢集,并且把nginx服務作為HA對應的服務。

試驗準備工作:

兩台機器,都是centos6.6,各增加一塊網卡eth1,使用主機模式連接配接vmnet1,并設定為192.168.11.0網段;eth0為NAT模式,網段為192.168.20.0網段;

<a href="http://s3.51cto.com/wyfs02/M02/6D/FD/wKiom1VwDyWQlN76AAJC6vGAx1I551.jpg" target="_blank"></a>

開機啟動後,拷貝ifcfg-eth0 到 ifcfg-eth1,修改DEVICE為eth1,ip位址設為:192.168.11.20

1

2

3

4

5

6

7

8

9

<code># cd /etc/sysconfig/network-scripts/</code>

<code># cp ifcfg-eth0 ifcfg-eth1</code>

<code># cat ifcfg-eth1</code>

<code>DEVICE=eth1</code>

<code>TYPE=Ethernet</code>

<code>ONBOOT=</code><code>yes</code>

<code>NM_CONTROLLED=</code><code>yes</code>

<code>BOOTPROTO=static</code>

<code>IPADDR=192.168.11.20</code>

設定完成後,重新開機網卡,ifconfig檢視eth0、eth1的ip位址;

<code># /etc/init.d/network restart</code>

<code>#ifconfig</code>

主機的配置:

hostname hello

eth0:192.168.20.20

eth1:192.168.11.20

從機的配置:

hostname web

eth0:192.168.20.30

eth1:192.168.11.30

1、設定hostname,分别為hello和 web;

2、主從都需要關閉防火牆;關閉selinux;

<code># iptables -F</code>

<code># setenforce 0</code>

<code>setenforce: SELinux is disabled</code>

3、 vi /etc/hosts   //主從都需要增加内容如下:  

<code>192.168.20.20 hello </code>

<code>192.168.20.30 web</code>

4、安裝epel擴充源

<code># yum install -y epel-release</code>

5、兩個機器都安裝heartbeat、libnet

<code>#yum  install -y heartbeat*   libnet  nginx</code>

nginx做代理服務;

6、主上(hello)配置

Heartbeat軟體的安裝目錄為/etc/ha.d目錄;

拷貝配置檔案的模闆到/etc/ha.d目錄;

<code>cd</code> <code>/usr/share/doc/heartbeat-3</code><code>.0.4/</code>

<code>cp</code>  <code>authkeys  ha.cf haresources   </code><code>/etc/ha</code><code>.d/</code>

<code>cd</code> <code>/etc/ha</code><code>.d</code>

vi  authkeys  //去掉前面的#号,或加入下面的内容:

<code>auth 3</code>

<code>3 md5 Hello!</code>

更改權限為600

<code>chmod</code> <code>600 authkeys</code>

vi  haresources  //加入

<code>hello 192.168.11.100</code><code>/24/eth1</code><code>:0 nginx</code>

192.168.11.100 ip位址是流動ip,虛拟ip;用來綁定服務的;子網路遮罩為24位;使用eth1:0綁定虛拟ip,并運作nginx進行測試;

注意:兩台主機的haresources檔案設定必須完全一緻。

vi  ha.cf   //更改為如下内容:

10

11

12

13

14

<code>debugfile </code><code>/var/log/ha-debug</code>

<code>logfile </code><code>/var/log/ha-log</code>

<code>logfacility     local0</code>

<code>keepalive 2</code>

<code>deadtime 30</code>

<code>warntime 10</code>

<code>initdead 60</code>

<code>udpport 694</code>

<code>ucast eth1 192.168.11.30</code>

<code>auto_failback on</code>

<code>node    hello</code>

<code>node    web</code>

<code>ping</code> <code>192.168.11.1</code>

<code>respawn hacluster </code><code>/usr/lib/heartbeat/ipfail</code>

7、把主上的三個配置拷貝到從上:

<code>#cd /etc/ha.d/</code>

<code>#scp  authkeys  ha.cf haresources  web:/etc/ha.d/</code>

8、從上(web) 隻需要編輯ha.cf

vi  /etc/ha.d/ha.cf   //隻需要更改一個地方

ucast eth1 192.168.11.30 改為   ucast eth1 192.168.11.20   

9、啟動heartbeat

先主,後從

<code>#service heartbeat start</code>

10、檢查測試

ifconfig 檢視是否有 eth1:0 出現則說明主已經開始工作;

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<code>[root@yong ~]</code><code># ifconfig </code>

<code>eth0      Link encap:Ethernet  HWaddr 00:0C:29:43:3D:32  </code>

<code>          </code><code>inet addr:192.168.20.20  Bcast:192.168.20.255  Mask:255.255.255.0</code>

<code>          </code><code>inet6 addr: fe80::20c:29ff:fe43:3d32</code><code>/64</code> <code>Scope:Link</code>

<code>          </code><code>UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1</code>

<code>          </code><code>RX packets:433 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:429 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>collisions:0 txqueuelen:1000 </code>

<code>          </code><code>RX bytes:37095 (36.2 KiB)  TX bytes:75381 (73.6 KiB)</code>

<code>          </code><code>Interrupt:18 Base address:0x2000 </code>

<code>eth1      Link encap:Ethernet  HWaddr 00:0C:29:43:3D:3C  </code>

<code>          </code><code>inet addr:192.168.11.20  Bcast:192.168.11.255  Mask:255.255.255.0</code>

<code>          </code><code>inet6 addr: fe80::20c:29ff:fe43:3d3c</code><code>/64</code> <code>Scope:Link</code>

<code>          </code><code>RX packets:396 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:399 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:83641 (81.6 KiB)  TX bytes:89725 (87.6 KiB)</code>

<code>          </code><code>Interrupt:18 Base address:0x2080 </code>

<code>          </code> 

<code>eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:43:3D:3C  </code>

<code>          </code><code>inet addr:192.168.11.100  Bcast:192.168.11.255  Mask:255.255.255.0</code>

<code>lo        Link encap:Local Loopback  </code>

<code>          </code><code>inet addr:127.0.0.1  Mask:255.0.0.0</code>

<code>          </code><code>inet6 addr: ::1</code><code>/128</code> <code>Scope:Host</code>

<code>          </code><code>UP LOOPBACK RUNNING  MTU:65536  Metric:1</code>

<code>          </code><code>RX packets:0 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:0 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>collisions:0 txqueuelen:0 </code>

<code>          </code><code>RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)</code>

檢視是否有nginx程序、heartbeat程序;

<code>[root@yong ha.d]</code><code># ps aux |grep nginx</code>

<code>root      3731  0.0  0.1   5000   632 ?        Ss   10:52   0:00 nginx: master process </code><code>/usr/local/nginx/sbin/nginx</code> <code>-c </code><code>/usr/local/nginx/conf/nginx</code><code>.conf</code>

<code>nobody    3732  0.0  0.1   5200   984 ?        S    10:52   0:00 nginx: worker process</code>

<code>[root@yong ha.d]</code><code># ps aux |grep heartbeat</code>

<code>root      2765  0.3  1.3   6684  6676 ?        SLs  10:44   0:01 heartbeat: master control process</code>

<code>root      2770  0.0  1.2   6488  6480 ?        SL   10:44   0:00 heartbeat: FIFO reader  </code>

<code>root      2771  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: write: ucast eth1</code>

<code>root      2772  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: </code><code>read</code><code>: ucast eth1 </code>

<code>root      2773  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: write: </code><code>ping</code> <code>192.168.11.1</code>

<code>root      2774  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: </code><code>read</code><code>: </code><code>ping</code> <code>192.168.11.1</code>

<code>498       2787  0.0  0.2   5380  1488 ?        S    10:45   0:00 </code><code>/usr/lib/heartbeat/ipfail</code>

11、測試1:主上故意禁ping

<code>#iptables -I INPUT -p icmp -j DROP</code>

windows用戶端一直ping 192.168.11.100 ,一直通,禁止ping之後中間會中斷一會,之後一直通;

<a href="http://s3.51cto.com/wyfs02/M00/6D/F9/wKioL1VwFDfAufNjAAF54o941FY163.jpg" target="_blank"></a>

在從上ifconfig檢視出現eth1:0,檢視nginx程序也有,說明轉換到從機器上運作;

<code>[root@web ~]</code><code># ifconfig </code>

<code>eth0      Link encap:Ethernet  HWaddr 00:0C:29:97:C3:EC  </code>

<code>          </code><code>inet addr:192.168.20.30  Bcast:192.168.20.255  Mask:255.255.255.0</code>

<code>          </code><code>inet6 addr: fe80::20c:29ff:fe97:c3ec</code><code>/64</code> <code>Scope:Link</code>

<code>          </code><code>RX packets:460 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:469 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:37104 (36.2 KiB)  TX bytes:101866 (99.4 KiB)</code>

<code>          </code><code>Interrupt:19 Base address:0x2000 </code>

<code>eth1      Link encap:Ethernet  HWaddr 00:0C:29:97:C3:F6  </code>

<code>          </code><code>inet addr:192.168.11.30  Bcast:192.168.11.255  Mask:255.255.255.0</code>

<code>          </code><code>inet6 addr: fe80::20c:29ff:fe97:c3f6</code><code>/64</code> <code>Scope:Link</code>

<code>          </code><code>RX packets:1022 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:1035 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:191275 (186.7 KiB)  TX bytes:182393 (178.1 KiB)</code>

<code>eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:97:C3:F6  </code>

<code>          </code><code>Interrupt:18 Base address:0x2080</code>

12、測試2:主上停止heartbeat服務

<code>#service heartbeat stop</code>

windows用戶端一直ping 192.168.11.100 ,一直通,停止心跳服務後中間會中斷一會,之後一直通;

13、測試3:測試腦裂,主和從都停掉eth1網卡;

eth1網卡禁用,ifdown eth1 心跳線斷了之後,會發生腦裂;主從之間連接配接斷了,從在死亡時間沒收到主的心跳,則認為主死亡。

主死了,從機器接管服務,從機器使用虛拟ip位址,主和從都在運作服務;

主機器沒有eth1網卡,一直運作nginx;

<code>[root@yong ha.d]</code><code># ifconfig </code>

<code>          </code><code>RX packets:11442 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:15376 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:842833 (823.0 KiB)  TX bytes:10226838 (9.7 MiB)</code>

<code>          </code><code>RX packets:1163 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:150095 (146.5 KiB)  TX bytes:150095 (146.5 KiB)</code>

<code>root     11686  0.0  0.1   5000   636 ?        Ss   14:27   0:00 nginx: master process </code><code>/usr/local/nginx/sbin/nginx</code> <code>-c </code><code>/usr/local/nginx/conf/nginx</code><code>.conf</code>

<code>nobody   11687  0.0  0.1   5200   988 ?        S    14:27   0:00 nginx: worker process</code>

從機器檢視位址,eth1:0出現

<code>[root@localhost ha.d]</code><code># ifconfig </code>

<code>          </code><code>RX packets:7901 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:5891 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:603592 (589.4 KiB)  TX bytes:2094606 (1.9 MiB)</code>

<code>          </code><code>RX packets:20774 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:59144 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>RX bytes:3513861 (3.3 MiB)  TX bytes:12998603 (12.3 MiB)</code>

<code>          </code><code>inet addr:192.168.11.100  Bcast:0.0.0.0  Mask:255.255.255.0</code>

<code>[root@localhost ha.d]</code><code># ps aux |grep nginx</code>

<code>root      8938  0.0  0.0   3684   584 ?        Ss   14:37   0:00 nginx: master process </code><code>/usr/local/nginx/sbin/nginx</code> <code>-c </code><code>/usr/local/nginx/conf/nginx</code><code>.conf</code>

<code>nobody    8940  0.0  0.1   4936  2008 ?        S    14:37   0:00 nginx: worker process                                          </code>

<code>nobody    8941  0.0  0.2   4936  2064 ?        S    14:37   0:00 nginx: worker process</code>

14、測試4:設定auto_failback off

主從都需要配置,啟動heartbeat,主上禁止ping之後,跳轉到從機器,主恢複ping之後,也不會跳轉到主,一直是從機器提供服務;

HA高可用搭建完畢;

本文轉自 模範生 51CTO部落格,原文連結:http://blog.51cto.com/mofansheng/1658552,如需轉載請自行聯系原作者

繼續閱讀