1. 程式人生 > >集群介紹、keepalived介紹、用keepalived配置高可用集群

集群介紹、keepalived介紹、用keepalived配置高可用集群

keepalived服務

集群介紹

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 {

[email protected]

} #定義故障提醒郵件接收地址

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 {

[email protected]

}

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配置高可用集群