集群介紹、keepalived介紹、用keepalived配置高可用集群
集群介紹
Linux集群根據功能劃分為兩大類:高可用和負載均衡。
1、高可用集群通常為2臺服務器,一臺工作,另一臺作為冗余,當提供服務的機器宕機時,冗余將接替繼續提供服務。
實現高可用的開源軟件有:heartbeat、Keepalived,其中heartbeat很多bug已無人維護(不推薦使用),所以今後使用Keepalived來搭建高可用集群。
2、負載均衡集群,需要有1臺服務器作為分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集群裏,除了分發器外就是給用戶提供服務的服務器了,這些服務器數量至少為2臺,所以負載均衡集群至少要3臺服務器。
實現負載均衡的開源軟件有:LVS、Keepalived、haproxy、nginx;商業軟件有:F5、Netscaler。
keepalived介紹
在這個協議裏會將多臺功能相同的路由器組成一個小組,這個小組會有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
準備工作:
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 {
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 {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 { #只有該部分與master有區別
state BACKUP #角色
interface eth0
virtual_router_id 51
priority 90 #權重
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.3.100
}
track_script {
chk_nginx
}
}
2、[root@test ~]# vim /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
/etc/init.d/keepalived stop #在此停止Keepalived服務是為了避免發生腦裂
fi
fi
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:
2、訪問從服務器
3、訪問vip
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時已轉移到備份上:
現將主服務器keepalived啟動:
[root@centos7 ~]# systemctl start keepalived
vip又轉移到了主服務器上,從服務器上已經沒有vip了
再次訪問vip,又回到主服務器上了。
本文出自 “探索發現新事物” 博客,請務必保留此出處http://jacksoner.blog.51cto.com/5802843/1984020
集群介紹、keepalived介紹、用keepalived配置高可用集群