|NO.Z.00013|——————————|^^ 構建 ^^|——|HAC構建.V4|-------------------------------------------|5臺server|
阿新 • • 發佈:2022-03-22
[Applications:HAC構建.V4] [Applications.LBC&HAC$HPC] [HAC|HA高可用|Keepalived原理|LVS+NAT+LVS健康檢查指令碼] [LVS-DR+keepalived|Heartbeat+Nginx|5臺server]
一、Heartbeat+Nginx
二、Heartbeat+Nginx實驗構建:10.10.10.11環境配置### --- 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去做高可用切換。 ~~~ 在生產環境中,應該再加一個共享儲存,它倆的頁面保持一致。 ~~~ 在負載均衡叢集中,生產環境中是必須的。
### --- 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)