keepalived+Lvs/DR集羣+高可用node
keepalived+Lvs/DR集羣+高可用mysql
keepalived是什麼
keepalived是集羣管理中保證集羣高可用的一個服務軟件,其功能相似於heartbeat,用來防止單點故障。
keepalived工做原理
keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master(主)和多個backup(備份),master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播(224.?.?.?),當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級(priority)來選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。
keepalived主要有三個模塊,分別是core(核心)、check(檢測)和vrrp(虛擬路由冗餘協議)。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件(keepalived.conf)的加載和解析。check負責健康檢查,包括常見的各類檢查方式(TCP、腳本檢測進程狀態等)。vrrp模塊是來實現VRRP協議的。
keepalived的常見組合:
keepalived+LVS
keepalived+nginx
keepalived+mysql-proxy
keepalived+mycat
keepalived+LVS
Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。linux
軟件功能說明:
keepalived:實現中間件(代理服務器的高可用)。
LVS:是中間件軟件(即代理服務器軟件),是用來實現集羣的負載均衡。
+++++++++
+---------------------------> + Client + 192.168.11.1 win7/10
| +++++++++
| ________________|_________________
| | VIP eth0:1 192.168.10.100 |
| +++++++++++++++++++++ +++++++++++++++++++++
| + Director master主 node11 + + Director backup備 node12 +
| +++++++++++++++++++++ +++++++++++++++++++++
| DIP 192.168.11.11 ens33網卡 DIP 192.168.11.12 ens33網卡
| |________
| _________________|________________
| | |
| +++++++++++++++++ ++++++++++++++++++
+--------+ RealServer A node13 + + Real Server B node14 +
+++++++++++++++++ ++++++++++++++++++
192.168.11.13/24 192.168.11.14/24
分別在Director master、Director backup 上部署浮動資源(VIP IPVS策略)
測試2個Director在DR模式下都工做正常。測試完成後都撤掉浮動資源。nginx
實驗準備:算法
先保證服務器防火牆和selinux都處於關閉狀態sql
這裏先臨時關閉一下apache
systemctl stop firewalld臨時關閉防火牆vim
setenforce 0 關閉selinux後端
getenforce 查selinux狀態centos
2臺Real Server ,ip設置爲192.168.11.13和192.168.11.14
1臺Director master,ip 設置爲192.168.11.11
1臺Director backup,ip設置爲192.168.11.12
實驗開始
在2臺real server部署apache服務
用yum安裝apache
yum -y install httpd
systemctl restart httpd 啓動apache服務
systemctl enable httpd 設爲開機自啓
在默認網頁目錄中臨時添加內容
作本地測試
vim lo.sh##寫入以下腳本
加入可執行權限chmod +x lo.sh
運行腳本. lo.sh
查一下ip
ip a
會看到多出一個192.168.11.100的ip
再給這個腳本傳到另外一臺real server
到此13的機器就部署完了
如今部署另外一臺real server
用yum安裝apache
yum -y install httpd
systemctl restart httpd 啓動apache服務
systemctl enable httpd 設爲開機自啓
在默認網頁目錄中臨時添加內容,並作本地測試
執行從13上傳過來的腳本、
. lo.sh
再次查看ip地址
會發現多出一個ip地址。
到此,real server就部署好了。
如今部署Director master和Director backup
安裝keepalived和ipvsadm(主要用來查詢)
用yum安裝:
yum -y install keepalived ipvsadm
備份配置文件
cp -av /etc/keepalived/keepalived.conf{,.bak}
修改配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { 全局定義,說明:在實驗測試環境中,如下內容能夠隨便寫,可是master和backup的router_id必須相同
notification_email { 設置通知郵箱
root@localhost 管理員的郵箱地址
}
notification_email_from keepalived@localhost 通知郵件的發件人郵箱
smtp_server 127.0.0.1 郵箱服務器IP地址
smtp_connect_timeout 30 郵件服務器鏈接超時時間爲30秒
router_id dr1 路由器ID名稱,同一個keepalived高可用集羣中master和backup的ID名稱必須相同
#vrrp_strict 必定要註釋掉此行,不然沒法經過VIP地址訪問調度器
}
vrrp_instance VI_1 { vrrp虛擬路由冗餘協議的實例設置 ,實例名稱爲VI_1
state MASTER 狀態,主爲MASTER,備爲BACKUP狀態
interface ens33 //心跳檢測網卡接口,要根據實際狀況寫網卡接口名,用ip a查網卡接口名
virtual_router_id 51 //master主和backup備兩邊必須同樣,此處是集羣的羣號
priority 100 //優先級,MASTER的值必須高於BACKUP的值,相似於現實生活中的競選的票數
advert_int 1 //檢查間隔,單位秒。vrrp的組播地址是224.0.0.18
authentication { 身份認證配置
auth_type PASS //認證類型爲密碼方式,主備要一致
auth_pass 1111 //認證密碼爲1111,主備要一致
}
virtual_ipaddress {
192.168.11.100 //VIP,可多個IP,每行一個IP地址
192.168.11.111
}
}
virtual_server 192.168.11.100 80 { //LVS 配置(即調度器的配置),此行等同於ipvsadm -At 192.168.11.100:80 -s wrr命令
delay_loop 3 //服務論詢的時間間隔
lb_algo wrr //LVS 調度算法
lb_kind DR // LVS 集羣模式
protocol TCP //指定協議爲TCP協議
real_server 192.168.11.13 80 { //RS後端真實服務器的IP及端口號,等同於ipvsadm -at 192.168.11.100:80 -r 192.168.11.13:80 -g -w 1命令
weight 1
TCP_CHECK { //RS健康檢查,若是RS主機上的80端口業務異常關閉了,用ipvsadm -Ln查不到此RS的IP信息
connect_timeout 3 //鏈接超時時間爲3秒
}
}
real_server 192.168.11.14 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
修改好配置文件後:傳給備服務器
cd /etc/keepalived
傳成功後:
在備服務器上,修改配置文件
vim /etc/keepalived/keepalived.conf
最後,在Director上啓動服務。
systemctl restart keepalived [centos7專用命令]
service keepalived restart [centos6和7通用命令]
查ipvsadm的集羣信息
到此服務就部署完成了。
最後,測試
根據權重會有如下結果
最後,在192.168.11.11 master服務器上關掉keepalived服務
systemctl stop keepalived
用ip a查一下ip地址
會發現vip不見了
去backup服務器上查ip地址
到此,服務所有結束