1. 程式人生 > 其它 >|NO.Z.00013|——————————|^^ 構建 ^^|——|HAC構建.V4|-------------------------------------------|5臺server|

|NO.Z.00013|——————————|^^ 構建 ^^|——|HAC構建.V4|-------------------------------------------|5臺server|



[Applications:HAC構建.V4]                                                                               [Applications.LBC&HAC$HPC] [HAC|HA高可用|Keepalived原理|LVS+NAT+LVS健康檢查指令碼] [LVS-DR+keepalived|Heartbeat+Nginx|5臺server]








一、Heartbeat+Nginx
### --- Heartbeat+Nginx
~~~     Heartbeat是Linux-HA工程的一個元件,
~~~     自1999年開始到現在,釋出了眾多版本,
~~~     是目前開源Linux-HA專案最成功的一個例子,在行業內得到了廣泛的應用。 

### --- heartbeat:在HA專案中是實現高可用的,
~~~     在行業內很多應用都在採用heartBeat來構建高可用專案,
~~~     主要有V2/V3兩個版本,這裡採用V3版本構建
~~~     heartbeat是採用一組指令碼的方式去去檢測和切換的;
~~~     所以它的原理不像Keepalived負載採用的是VRRP,而在這裡以實際構建為主
~~~     10.10.10.11/10.10.10.12:兩臺nginx伺服器去檢測以及心跳切換
~~~     10.10.10.100:對於10.10.10.240來說10.10.10.100就是它要訪問的外網伺服器,
~~~     10.10.10.100:又會在10.10.10.11和10.10.10.12之間檢測切換,切換的方式就是採用指令碼的方式進行檢測切換
~~~     10.10.10.240:使用者客戶端。
~~~     兩臺nginx檢測主機存活並自動切換,不會造成公司網站的癱瘓。
~~~     可以應用在中小型的入口網站之中,訪問量特別小,又不用過多的叢集化,
~~~     減少不必要的麻煩,我們可以採用兩臺nginx去做高可用切換。
~~~     在生產環境中,應該再加一個共享儲存,它倆的頁面保持一致。
~~~     在負載均衡叢集中,生產環境中是必須的。
二、Heartbeat+Nginx實驗構建:10.10.10.11環境配置
### --- 10.10.10.11環境配置
### --- 安裝nginx;將nnginx-1.2.6.tar.gz安裝包匯入伺服器中

[root@server11 ~]# tar -zxvf nginx-1.2.6.tar.gz
~~~     安裝依賴環境//因為我們不需要構建https的協議,所以不需要安裝openxcel這個工具包
[root@server11 ~]# yum install -y pcre pcre-devel zlib zlib-devel 
[root@server11 ~]# cd nginx-1.2.6
 
~~~     建立使用者
[root@server11 nginx-1.2.6]# useradd -s /bin/nologin -M nginx               // 設定它的啟動許可權為/bin/nologin不允許遠端使用者登入 -M:不建立家目錄 nginx:使用者名稱

~~~     生成Makefile
[root@server11 nginx-1.2.6]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@server11 nginx-1.2.6]# make && make install
### --- 修改主頁檔案

[root@server11 nginx-1.2.6]# cd /usr/local/nginx/html/
[root@server11 html]# rm -rf *
[root@server11 html]# vim index.html
aaaaaaaaaaaaaaaaaaaaaa
### --- 啟用nginx服務
### --- 通過IE去訪問http://10.10.10.11/主機地址正常

[root@server11 html]# /usr/local/nginx/sbin/nginx 
三、Heartbeat+Nginx實驗構建:10.10.10.12環境配置
### --- Heartbeat+Nginx實驗構建:10.10.10.12環境配置
### --- 安裝nginx;將nnginx-1.2.6.tar.gz安裝包匯入伺服器中

[root@server12 ~]#  tar -zxvf nginx-1.2.6.tar.gz
~~~     安裝依賴環境//因為我們不需要構建https的協議,所以不需要安裝openxcel這個工具包
[root@server12 ~]#  yum install -y pcre pcre-devel zlib zlib-devel 
[root@server12 ~]#  cd nginx-1.2.6
 
~~~     建立使用者
[root@server12 nginx-1.2.6]# useradd -s /bin/nologin -M nginx               // 設定它的啟動許可權為/bin/nologin不允許遠端使用者登入 -M:不建立家目錄 nginx:使用者名稱

~~~     生成Makefile
[root@server12 nginx-1.2.6]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@server12 nginx-1.2.6]# make && make install
### --- 修改主頁檔案

[root@server12 nginx-1.2.6]# cd /usr/local/nginx/html/
[root@server12 html]# rm -rf *
[root@server12 html]# vim index.html
bbbbbbbbbbbbbbbbbbbbbb
### --- 啟用nginx服務
### --- 通過IE去訪問http://10.10.10.12/主機地址正常

[root@server12 html]# /usr/local/nginx/sbin/nginx 
四、Heartbeat+Nginx實驗構建:10.10.10.11構建heartbeat
### --- Heartbeat+Nginx實驗構建:10.10.10.11構建heartbeat
### --- heartbeat預設yum源時沒有的,需要第三方的epel源進行安裝
### --- 此環境已有下載包,無需使用epel源
### --- 將heartbeat.tar.gz軟體包上傳到伺服器

[root@server11 ~]# tar -zxvf heartbeat.tar.gz 
[root@server11 ~]# cd heartbeat
### --- 安裝heartbeat

[root@server11 heartbeat]# yum install -y *
### --- 配置時間同步伺服器

[root@server11 ~]# yum install -y ntp
[root@server11 ~]# vim /etc/ntp.conf 
restrict 10.10.10.0 mask 255.255.255.0 nomodify notrap                      // 寫入當前的網段地址
#server 0.centos.pool.ntp.org iburst                                        // 註釋預設官方的
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
[root@server11 ~]# service ntpd start
Starting ntpd:                                             [  OK  ]
[root@server11 ~]# chkconfig ntpd on
### --- 配置主機名解析

[root@server11 ~]# hostname www.centos1.com
[root@server11 ~]# hostname
www.centos1.com 
[root@server11 ~]# vim /etc/sysconfig/network                               // 修改配置檔案,重啟後生效
NETWORKING=yes
HOSTNAME=www.centos1.com
### --- 構建DNS,修改配置檔案生效
 
[root@server11 ~]# vim /etc/hosts
10.10.10.11 www.centos1.com
10.10.10.12 www.centos2.com
### --- 拷貝出heartBear的配置檔案
### --- ha.cf:注配置檔案 authkeys:認證檔案  haresources:原始檔  /etc/ha.d/:heartbeat的預設存放路徑

[root@server11 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server11 heartbeat-3.0.4]# cp -a ha.cf authkeys  haresources  /etc/ha.d/      
~~~     修改配置檔案

[root@server11 heartbeat-3.0.4]# cd /etc/ha.d/
[root@server11 ha.d]# dd if=/dev/random bs=512 count=1 | openssl md5        // 生成隨機的md5值;比人為寫入的更不容易找到規律
(stdin)= 080370eb3fb6e668ad9034cd56e8ca77
[root@server11 ha.d]# vim authkeys 
auth 3                                                                      // 第三個md5認證方式
1 crc
2 sha1 HI!
3 md5 080370eb3fb6e668ad9034cd56e8ca77                                      // 寫入剛才生成的md5值
[root@server11 ha.d]# chmod 600 authkeys                                    // authkeys的許可權必須是600,若不是600它會認為是不安全,不會讓你啟動
[root@server11 ha.d]# vim ha.cf 
bcast   eth0            # Linux                                             // 開啟網絡卡心跳檢測,單塊網絡卡linux系統怎麼配置
#bcast  eth1 eth2       # Linux                                             // 開啟網絡卡心跳檢測,多塊網絡卡linux系統怎麼配置
#bcast  le0             # Solaris                                           // 開啟網絡卡心跳檢測,單塊網絡卡Solaris系統怎麼配置
#bcast  le1 le2         # Solaris                                           // 開啟網絡卡心跳檢測,多塊網絡卡Solaris系統怎麼配置
#       node    nodename ...    -- must match uname -n
node    www.centos1.com
node    www.centos2.com
### --- 開啟haresources的源配置檔案
[root@server11 ~]# ls /etc/ha.d/resource.d/                                 // 官方寫好的指令碼檔案地址
apache        db2    Filesystem    ICP  IPaddr   IPsrcaddr  LinuxSCSI  MailTo  portblock  SendArp    WAS       Xinetd
AudibleAlarm  Delay  hto-mapfuncs  ids  IPaddr2  IPv6addr   LVM        OCF     Raid1      ServeRAID  WinPopup

[root@server11 ha.d]# vim haresources                                       // 指令碼的主要目的是切換IP地址,在最後一行寫入如下內容
www.centos1.com IPaddr::10.10.10.100/24/eth0:0                              // 等同於:ifconfig eth0:0 10.10.10.100 netmask 255.255.255.0
五、Heartbeat+Nginx實驗構建:10.10.10.12客戶端配置
### --- Heartbeat+Nginx實驗構建:10.10.10.12客戶端配置
### --- 將heartbeat.tar.gz軟體包上傳到伺服器

[root@server12  ~]# tar -zxvf heartbeat.tar.gz 
[root@server12  ~]# cd heartbeat
### --- 安裝heartbeat

[root@server12  heartbeat]# yum install -y *
### --- 配置時間同步

[root@server12 ~]# yum install -y ntpdate
[root@server12 ~]# ntpdate -u 10.10.10.11                                   // 同步時間
21 Jan 07:24:10 ntpdate[4443]: adjust time server 10.10.10.11 offset 0.441872 sec 
### --- 配置主機名解析

[root@server12 ~]# hostname www.centos2.com
[root@server12 ~]# hostname
www.centos2.com
[root@server12 ~]# vim /etc/sysconfig/network                               / /修改配置檔案,重啟後生效
NETWORKING=yes
HOSTNAME=www.centos2.com 
### --- 構建DNS,修改配置檔案生效
 
[root@server12 ~]#  vim /etc/hosts
10.10.10.11 www.centos1.com
10.10.10.12 www.centos2.com
### --- 修改配置檔案

~~~     在HA-server1下通過scp命令推送配置檔案至HA-server2主機中。
[root@server11 ha.d]# scp ha.cf authkeys haresources [email protected]:/etc/ha.d/
六、Heartbeat+Nginx實驗構建:10.10.10.11    10.10.10.12主機下啟動服務
### --- Heartbeat+Nginx實驗構建:10.10.10.11    10.10.10.12主機下啟動服務
### --- 啟動兩臺主機的heartbeat服務

[root@server11 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.
[root@server12 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.
### --- 檢視心跳IP地址生成;兩個節點中有且只有一個節點會存活ifcfg-eth0:0 ;若出現兩個,說明服務不正常。     
### --- 在本地cmd下ping 10.10.10.100; 

[root@server11 ~]# ifconfig
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:FA:34:71  
          inet addr:10.10.10.100  Bcast:10.10.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

七、通過IE驗證:http://10.10.10.100/ 1、切換驗證:斷掉HA-server1:10.10.10.11的網路連線
### --- 切換過程中會有網路終端過程

C:\Users\Administrator>ping 10.10.10.100 -t
~~~     來自 10.10.10.100 的回覆: 位元組=32 時間<1ms TTL=64
~~~     請求超時。                                                                   
~~~     請求超時。
~~~     來自 10.10.10.100 的回覆: 位元組=32 時間<1ms TTL=64
2、重新整理IE瀏覽器驗證:http://10.10.10.100/    :說明切換成功。配置生效。 3、斷網恢復,重新驗證
### --- 重新為HA-server1連網重新並重啟動heartbeat服務

[root@server11 ~]# /etc/init.d/heartbeat restart
4、服務又回到主節點上
~~~     原理上考慮的話:Keepalived的ARRP技術更成熟一些。   
~~~     VRRP有一個資源控制器的功能,會對應的調整資源服務的狀態監控,以及對應的啟用。
~~~     在這裡V3版本已經被剝離出去了;若是出現網掉線,
~~~     伺服器宕機,服務出現問題,都是可以進行服務的切換
八、通過服務pkill nignx 停止服務驗證
~~~     若是pkill nginx,發現服務並不會自動切換;網頁訪問不了。
~~~     說明heartbeat檢測的是服務的網路通訊的類,而不是服務的是否存活。
~~~     LVS是核心檢測,核心若是宕了的情況是切換不了的。
~~~     此處是nginx,nginx宕機和核心是無關的。因為它是在使用者空間通訊。
~~~     我們可以通過指令碼實現檢測服務存活狀態
### --- 通過服務pkill nignx 停止服務驗證

[root@server11 ~]# mkdir /usr/local/script
[root@server11 ~]# mv 80.sh /usr/local/script/
[root@server11 ~]# vim /usr/local/script/80.sh 
#!/bin/bash

PWD=/usr/local/script                                                       // 指令碼地址

URL="http://10.10.10.11/index.html"
    
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`                 // 監控網站的返回碼,


if [ $HTTP_CODE != 200 ]                                                    // 200表示正常
    then
        service heartbeat stop                                              // 若不是200的情況下,就把heartbeat給
fi
[root@server11 ~]# pkill nginx
[root@server11 ~]# bash /usr/local/script/80.sh                             // 它會直接把heartbeat關閉,服務切換到從節點上
Stopping High-Availability services: Done.
### --- 通過IE訪問:http://10.10.10.100/是如下狀態    
~~~     這個時間切換是非常快的。和我們隨機宕網,宕機時間延遲不同。
~~~     說明主節點主動關閉的情況下會告訴從節點說明:
~~~     主節點要退出了,從節點接管,所以時間差是非常小的。

bbbbbbbbbbbbbbbbbbbbbb 
九、配置nginx服務80服務是否正常,若是不正常會把heartbeat服務關閉(上述5.2的解決方案)
### --- 配置nginx服務80服務是否正常,若是不正常會把heartbeat服務關閉(上述5.2的解決方案)

[root@server11 ~]# /usr/local/nginx/sbin/nginx 
[root@server11 ~]# chmod a+x /usr/local/script/80.sh 
[root@server11 ~]# crontab -e
*/1 * * * * bash /usr/local/script/80.sh                                    // 把指令碼啟動放在迴圈裡,每個一分鐘檢查
[root@server11 ~]# service crond restart                                    // 重啟定時計劃任務
[root@server11 ~]# chkconfig  crond on
[root@server11 ~]# /etc/init.d/heartbeat start                              // 開啟heartbeat服務
Starting High-Availability services: INFO:  Resource is stopped
Done.   
### --- 通過IE訪問:http://10.10.10.100/
aaaaaaaaaaaaaaaaaaaaaa                                                      / /又恢復到主節點上

### --- 驗證:非正常狀態,HA-server1下的nginx服務停止
[root@server11 ~]# pkill nginx                                              // pkill殺死nginx服務
### --- 1分鐘之後發現切換到HA-server2主機的nginx服務上                             // 或者執行如下操作
[root@server11 ~]# bash /usr/local/script/80.sh

### --- 通過IE瀏覽器訪問地址,發現切換到HA-server2從節點上了。
~~~     說明:配置以上策略:不管是主機網路,主機,應用服務宕掉,都不會影響到業務的終端,會自動切換到從節點上。








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)