叢集介紹
Linux叢集根據功能劃分為兩大類:高可用和負載均衡。
1、高可用叢集通常為2台伺服器,一台工作,另一台作為備援,當提供服務的機器當機時,備援将接替繼續提供服務。
實作高可用的開源軟體有:heartbeat、Keepalived,其中heartbeat很多bug已無人維護(不推薦使用),是以今後使用Keepalived來搭建高可用叢集。
2、負載均衡叢集,需要有1台伺服器作為分發器,它負責把使用者的請求分發給後端的伺服器處理,在這個叢集裡,除了分發器外就是給使用者提供服務的伺服器了,這些伺服器數量至少為2台,是以負載均衡叢集至少要3台伺服器。
實作負載均衡的開源軟體有:LVS、Keepalived、haproxy、nginx;商業軟體有:F5、Netscaler。
keepalived介紹
Keepalived通過VRRP(virtual router redundancy protocol)虛拟路由備援協定來實作高可用。
在這個協定裡會将多台功能相同的路由器組成一個小組,這個小組會有1個master角色和N(N≥1)個backup角色。
Keepalived有三個子產品:core、check、vrrp。其中core子產品為Keepalived的核心,負責主程序的啟動、維護以及全局配置檔案的加載和解析;check子產品負責健康檢查,vrrp負責實作vrrp協定。
用keepalived配置高可用叢集
準備環境
master:192.168.3.74 安裝編譯nginx
backup:192.168.3.83 安裝編譯nginx
VIP:192.168.3.100 # 注: VIP(virtual IP)虛拟IP,由Keepalived設定,用于伺服器對外提供服務。
準備工作:
master
[root@centos7 ~]# yum install -y keepalived
[root@centos7 ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.12.1
backup
[root@test ~]# yum install -y keepalived
[root@test ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.12.2
配置主伺服器上:
1、[root@centos7 ~]# vi /etc/keepalived/keepalived.conf
global_defs { #全局定義
notification_email {
} #定義故障提醒郵件接收位址
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { #定義nginx監控腳本
script "/usr/local/sbin/check_ng.sh" #指定服務健康檢測(check)腳本
interval 3 #檢測時間間隔
vrrp_instance VI_1 {
state MASTER #定義該服務的角色
interface eno16777736 #定義在本機中監聽VIP的網卡
virtual_router_id 51 #虛拟路由id(同組中的伺服器保持該id一緻)
priority 100 #指定本機權重(決定優先級)
advert_int 1
authentication { #定義認證相關資訊
auth_type PASS #認證類型為密碼形式
auth_pass 123456 #定義認證密碼
}
virtual_ipaddress { #定義VIP
192.168.3.100
track_script { #加載監控服務(腳本)
chk_nginx #注意此處服務名稱要與上面監控腳本名稱一緻
2、[root@centos7 ~]# cat /usr/local/sbin/check_ng.sh
#!/bin/bash
#時間變量,用于記錄日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx程序數量
n=`ps -C nginx --no-heading|wc -l`
#如果程序為0,則啟動nginx,并且再次檢測nginx程序數量,
#如果還為0,說明nginx無法啟動,此時需要關閉keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalive #在此停止Keepalived服務是為了避免發生腦裂
fi
fi
3、[root@centos7 ~]# chmod 755 /usr/local/sbin/check_ng.sh
4、啟動
[root@centos7 ~]# systemctl start keepalived
[root@centos7 ~]# ps -aux | grep keep
root 21327 0.0 0.0 120712 1400 ? Ss 10:33 0:00 /usr/sbin/keepalived -D
root 21328 0.0 0.1 120712 2748 ? S 10:33 0:00 /usr/sbin/keepalived -D
root 21329 0.4 0.1 120712 2440 ? S 10:33 0:00 /usr/sbin/keepalived -D
root 21360 0.0 0.0 112664 968 pts/0 R+ 10:33 0:00 grep --color=auto keep
驗證nginx的監控腳本:
1、将nginx伺服器停止
[root@centos7 ~]# /etc/init.d/nginx stop
2、再看還是會有nginx服務的程序
[root@centos7 ~]# netstat -nutlp| grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23022/nginx: master
3、隻有當keepalived服務停止,才會停止nginx
4、檢視vip
[root@centos7 ~]# ip addr
inet 192.168.3.100/32 scope global eno16777736
“腦裂”,即當master當機後仍然未釋放VIP,同時backup接替master提供服務要使用同一VIP,因而導緻兩台機器争占同一VIP導緻服務紊亂,是以當master當機後需要關閉其Keepalived服務來避免腦裂現象發生。Keepalived服務的日志位置:/var/log/messages。
配置從伺服器上的:
1、
[root@test ~]# cat /etc/keepalived/keepalived.conf
global_defs {
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
vrrp_instance VI_1 { #隻有該部分與master有差別
state BACKUP #角色
interface eth0
virtual_router_id 51
priority 90 #權重
authentication {
auth_type PASS
auth_pass 123456
virtual_ipaddress {
}
track_script {
chk_nginx
2、[root@test ~]# vim /usr/local/sbin/check_ng.sh
/etc/init.d/keepalived stop #在此停止Keepalived服務是為了避免發生腦裂
3、[root@test ~]# chmod 755 /usr/local/sbin/check_ng.sh
4、[root@test ~]# /etc/init.d/keepalived start
5、[root@test ~]# ps -ef | grep keep
root 7473 1 0 10:47 ? 00:00:00 /usr/sbin/keepalived -D
root 7474 7473 0 10:47 ? 00:00:00 /usr/sbin/keepalived -D
root 7475 7473 0 10:47 ? 00:00:00 /usr/sbin/keepalived -D
root 7479 3017 0 10:47 pts/0 00:00:00 grep keep
驗證:
當機前的驗證
1、通路master:
<a href="https://s4.51cto.com/oss/201711/22/59d14df0453b8bb90f0cbfc58ba205b1.png-wh_500x0-wm_3-wmp_4-s_2627363339.png" target="_blank"></a>
2、通路從伺服器
<a href="https://s2.51cto.com/oss/201711/22/b901647cf12de98ec37e4ac0df10732e.png-wh_500x0-wm_3-wmp_4-s_2162970524.png" target="_blank"></a>
3、通路vip
<a href="https://s4.51cto.com/oss/201711/22/01a0ea84e8231a484e64eb81d44217e8.png-wh_500x0-wm_3-wmp_4-s_4253163443.png" target="_blank"></a>
master當機後:
關閉Keepalived服務:
[root@centos7 ~]# systemctl stop keepalived
[root@centos7 ~]# ps -ef | grep keep
root 25316 16637 0 10:58 pts/0 00:00:00 grep --color=auto keep
此時主機上已經沒有vip了,vip已經轉移到了從伺服器上
[root@test ~]# ip addr
inet 192.168.3.83/24 brd 192.168.3.255 scope global eth0
inet 192.168.3.100/32
通路vip時已轉移到備份上:
<a href="https://s3.51cto.com/oss/201711/22/2ee3e1aca9cb271cdb5e9cfab6696fe9.png-wh_500x0-wm_3-wmp_4-s_1027594348.png" target="_blank"></a>
現将主伺服器keepalived啟動:
vip又轉移到了主伺服器上,從伺服器上已經沒有vip了
再次通路vip,又回到主伺服器上了。
<a href="https://s4.51cto.com/oss/201711/22/417cc3ead4d875b604f0f3033de7a894.png-wh_500x0-wm_3-wmp_4-s_1635067972.png" target="_blank"></a>
本文轉自 iekegz 51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/1984020,如需轉載請自行聯系原作者