1. 程式人生 > >Linux集群概述及高可用軟件keepalived配置、測試

Linux集群概述及高可用軟件keepalived配置、測試

bash mys ipad force from 更新 heartbeat 切換 增加

一、Linux集群概述

1)、 根據功能劃分為兩大類:高可用和負載均衡
高可用集群通
常為兩臺服務器,一臺工作,另外一臺作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務

2)、實現高可用的開源軟件有:
heartbeat、keepalived

heartbeat:有很多的BUG,有很長時間沒有更新了,不推薦用。
3)、負載均衡集群
需要有一臺服務器作為分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集群裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少為2
實現負載均衡的開源軟件有:
LVS、keepalived、haproxy、nginx,
商業的有F5、Netscaler 成本高,優勢:更高的並發量,穩定性好。

二、高可用的開源軟件keepalived介紹

1)、我們使用keepalived來實現高可用集群,因為heartbeat在centos6上有一些問題,影響實驗效果;
2)、keepalived通過VRRP(Virtual Router Redundancy Protocl)來實現高可用。
3)、在這個協議裏會將多臺功能相同的路由器組成一個小組,這個小組裏會有1個master角色和N(N>=1)個backup角色。
master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認為master宕機了。此時就需要根據各個backup的優先級來決定誰成為新的master.

4)、Keepalived要有三個模塊,分別是core、check和vrrp。
core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解;
check模塊負責健康檢查;
vrrp模塊是來實現VRRP協議的。

三、用keepalived配置高可用

1)、準備兩臺機器a和b,a作為master,b作為backup;兩臺機器都執行yum install -y keepalived
2)、兩臺機器都安裝nginx,安裝nginx: yum install -y nginx(讓哪個服務實現高可用我們實驗用nginx,而且nginx可以用來做負載均衡)
3)、更改配置文件
設定vip為100

編輯a上keepalived配置文件
[root@a ~]# > /etc/keepalived/keepalived.conf
清空裏面的內容

/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" #shell要自己定
interval 3 #檢測間斷時間3S
}

vrrp_instance VI_1 { #定義master
state MASTER
interface ens33 #指定網卡發廣播
virtual_router_id 51 #定義路由ID
priority 100 #定義權重
advert_int 1 #
authentication {
auth_type PASS #認證相關信息
auth_pass aminglinux>com
}
virtual_ipaddress { #公有IP ,主從都要用的。
192.168.188.100
}

track_script {                        #加載
    chk_nginx
}

}

     內容放也可以從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf獲取

 編輯a機器的監控腳本:
 vi /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 keepalived
fi
fi

 內容也可以從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh獲取
 給檢查腳本755權限:
 chmod 755 /usr/local/sbin/check_ng.sh
 systemctl start  keepalived a機器啟動服務
查看服務是否啟動 pa aux |grep keep
它的日誌文件在:    /var/logs/messages 
然後再查看它的IP地址: ip add 
查看防火墻是不是開啟,我們需要把它們關閉。
iptables -nvL
getenforce
systemctl stop firewalld

4)、配置從
B機器從上編輯配置文件:
清空原keepalived.conf文件內容:>/etc/keepalived/keepalived.conf
編輯:vi /etc/keepalived/keepalived.conf  加入以下內容:

global_defs {
notification_email {[email protected]
br/>[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 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.188.100
}

track_script {
    chk_nginx
}

}


內容也可以從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf獲取
我們要修改的地方有:
權重改成90,讓它變成從,虛擬IP改成跟主上一樣的100,id保持一置。

B機器從上編輯監控腳本,
vi /usr/local/sbin/check_ng.sh
加入以下內容:

#時間變量,用於記錄日誌
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
systemctl start nginx
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 keepalived
fi
fi



內容從
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh獲取
 給腳本755權限
 B從上也啟動服務 systemctl start keepalived
 ps aux |grep keep

6)、用yum安裝的nginx訪問頁面目錄在:
/usr/share/nginx/html/index.html

# 四、測試高可用
先確定好兩臺機器上nginx差異,比如可以通過curl -I 來查看nginx版本

 測試1:關閉master上的nginx服務:

 開啟了keepalived服務,nginx是關不掉的。
 因為檢測腳本:
 測試2:在master上增加iptabls規則 
 iptables -I OUTPUT -p vrrp -j DROP
不能測試到機器的切換服務
 測試3:關閉master上的keepalived服務
 訪問IP100 ,直接跳到了從上。
 測試4:啟動master上的keepalived服務
 訪問IP100 ,直接跳到了主上。

除了nginx可以配置高可用,mysql等都可以。

Linux集群概述及高可用軟件keepalived配置、測試