本文參考https://www.cnblogs.com/hk315523748/p/6094656.html
一、軟件版本
操作系統(tǒng):CentOS-7-x86_64
JDK版本:1.8.0_221
HAProxy版本:HA-Proxy version 1.8.20 2019/04/25
MyCat版本:mycat-1.5.1-RELEASE-20161130213509
MySQL版本:Server version: 10.2.6-MariaDB-log MariaDB Server
二、部署環(huán)境規(guī)劃
| 名稱 | ip | 端口 |
|---|---|---|
| mysql-master | 192.168.100.70 | 3306 |
| mysql-slave | 192.168.100.71 | 3306 |
| mycat-1 | 192.168.100.70 | 8066 |
| mycat-2 | 192.168.100.71 | 8066 |
| haproxy-1 | 192.168.100.70 | |
| haproxy-2 | 192.168.100.71 | |
| keepalived-1 | 192.168.100.70 | |
| keepalived-2 | 192.168.100.71 |
三、集群部署架構(gòu)圖如下

說明:HAProxy為主備模式,當(dāng)主發(fā)生故障時(shí)會自動(dòng)切換到備機(jī)。同時(shí)haproxy負(fù)責(zé)將請求分發(fā)到MyCat集群上的mycat節(jié)點(diǎn),起到負(fù)載均衡的作用;HAProxy也能檢測到MyCat是否存活,HAProxy只會將請求轉(zhuǎn)發(fā)到存活的MyCat上。如果一臺MyCat服務(wù)器宕機(jī),HAPorxy轉(zhuǎn)發(fā)請求時(shí)不會轉(zhuǎn)發(fā)到宕機(jī)的MyCat上,所以MyCat依然可用。
四、mysql的安裝及主從復(fù)制配置
五、Mycat的安裝
詳請參考《Mycat+MariaDB/Mysql實(shí)現(xiàn)讀寫分離》
六、搭建xinetd服務(wù)
在所有MyCat服務(wù)所在主機(jī)中增加狀態(tài)檢查服務(wù)腳本。此操作為HaProxy提供對MyCat服務(wù)狀態(tài)檢查的依據(jù)。本案例中使用xinetd實(shí)現(xiàn),通過xinetd,HAProxy可以用httpchk來檢測Mycat的存活狀態(tài)。(xinetd即extended internet daemon,xinetd是新一代的網(wǎng)絡(luò)守護(hù)進(jìn)程服務(wù)程序,又叫超級Internet服務(wù)器。經(jīng)常用來管理多種輕量級Internet服務(wù)。xinetd提供類似于inetd+tcp_wrapper的功能,但是更加強(qiáng)大和安全。xinetd為linux系統(tǒng)的基礎(chǔ)服務(wù))
1、安裝xinetd
yum install -y xinetd
2、在/etc/xinetd.conf文件末尾添加includedir /etc/xinetd.d內(nèi)容.
安裝完成后在/etc目錄下會有一個(gè)名為xinetd.conf的文件,檢查文件底部是否有includedir /etc/xinetd.d內(nèi)容,若沒有,則需要手動(dòng)添加。
3、檢查目錄/etc/xinetd.d目錄是否存在,不存在還需要?jiǎng)?chuàng)建該目錄。
4、創(chuàng)建/etc/xinetd.d/mycat_status文件,其內(nèi)容如下:
service mycat_status
{
flags = REUSE
## 使用該標(biāo)記的socket_type為stream,需要設(shè)置wait為no
## 封包處理方式,Stream為TCP數(shù)據(jù)包
socket_type = stream
## 服務(wù)監(jiān)聽端口
port = 48700
## 表示不需等待,即服務(wù)將以多線程的方式運(yùn)行
wait = no
## 執(zhí)行此服務(wù)進(jìn)程的用戶
user = root
## 需要啟動(dòng)的服務(wù)腳本
server =/usr/local/bin/mycat_status
## 登錄失敗記錄的內(nèi)容
log_on_failure += USERID
## 要啟動(dòng)服務(wù),將此參數(shù)設(shè)置為no
disable = no
}
注意:文件中的注釋要單行,不可以行尾注釋
5、添加 /usr/local/bin/mycat_status 服務(wù)腳本
vim /usr/local/bin/mycat_status,添加如下內(nèi)容:
#!/bin/bash
#/usr/local/bin/mycat_status.sh
# This script checks if a Mycat server is healthy running on localhost.
# It will return:
# "HTTP/1.x 200 OK\r" (if Mycat is running smoothly)
# "HTTP/1.x 503 Internal Server Error\r" (else)
Mycat=`/usr/local/mycat/bin/mycat status | grep 'not running' | wc -l`
if [ "$Mycat" = "0" ]; then
/bin/echo -e "HTTP/1.1 200 OK\r\n"
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
fi
6、給新增腳本賦予可執(zhí)行權(quán)限
chmod 755 /usr/local/bin/mycat_status
7、在 /etc/services 中加入 mycat_status 服務(wù)
vi /etc/services,在末尾加入以下內(nèi)容
mycat_status 48700/tcp # mycat_status
8、啟動(dòng)xinetd服務(wù):systemctl start xinetd.service
9、驗(yàn)證mycat_status服務(wù)是否成功啟動(dòng)
netstat -antup|grep 48700
[root@localhost xinetd.d]# netstat -antup|grep 48700
tcp6 0 0 :::48700 :::* LISTEN 3711/xinetd
[root@localhost xinetd.d]#
10、測試腳本是否有效
/usr/local/bin/mycat_status
[root@localhost xinetd.d]# /usr/local/bin/mycat_status
HTTP/1.1 200 OK
[root@localhost xinetd.d]#
七、Haproxy的安裝
1、Haproxy的簡介
HAProxy各版本的官方文檔:http://cbonte.github.io/haproxy-dconv/index.html
HAProxy 是一款提供高可用性、負(fù)載均衡以及基于TCP(第四層)和HTTP(第七層)應(yīng)用的代理軟件,支持虛擬主機(jī),它是免費(fèi)、快速并且可靠的一種解決方案。
MyCat官方推薦使用HAProxy做MyCat的高可用負(fù)載均衡代理。
本文采用的haproxy-1.8.20版本
2、下載安裝包并解壓
tar -xzvf haproxy-1.8.20.tar.gz
3、安裝預(yù)編譯依賴包
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
4、編譯
cd到剛解壓的目錄并執(zhí)行命令:
make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy
說明:TARGET是指定內(nèi)核版本,高于2.6.28的建議設(shè)置為linux2628,Linux操作系統(tǒng)內(nèi)核版本查看命令# uname -r, ARCH指定系統(tǒng)架構(gòu),openssl pcre zlib 這三個(gè)包需要安裝不然不支持
5、創(chuàng)建安裝目錄 /usr/local/haproxy
mkdir /usr/local/haproxy
6、執(zhí)行安裝
cd到解壓的目錄并執(zhí)行命令
make install PREFIX=/usr/local/haproxy
7、創(chuàng)建配置文件目錄
[root@localhost haproxy]# mkdir -p /usr/local/haproxy/conf
[root@localhost haproxy]# mkdir -p /etc/haproxy/
8、從配置文件模版復(fù)制配置文件,并添加配置文件軟連接
[root@localhost haproxy-1.8.20]# cp /home/ding/soft/haproxy-1.8.20/examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
[root@localhost haproxy-1.8.20]# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg
9、拷貝錯(cuò)誤頁面,并添加目錄軟連接(HTTP模式選配)
cp -r /home/ding/soft/haproxy-1.8.20/examples/errorfiles /usr/local/haproxy/
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles
10、拷貝開機(jī)啟動(dòng)文件,并賦予可執(zhí)行權(quán)限
cp /home/ding/soft/haproxy-1.8.20/examples/haproxy.init /etc/rc.d/init.d/haproxy
chmod +x /etc/rc.d/init.d/haproxy
11、添加haproxy命令腳本軟連接
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
12、設(shè)置HAProxy開機(jī)啟動(dòng)(可選)
chkconfig --add haproxy
chkconfig haproxy on
13、根據(jù)以上HAProxy配置文件要求做以下配置
添加haproxy用戶組和用戶,創(chuàng)建chroot運(yùn)行的路徑
[root@localhost haproxy]# groupadd haproxy
[root@localhost haproxy]# useradd -g haproxy haproxy
[root@localhost haproxy]# mkdir /usr/share/haproxy
14、開啟rsyslog的haproxy日志記錄功能
默認(rèn)情況下 haproxy是不記錄日志的,如果需要記錄日志,還需要配置系統(tǒng)的syslog,在linux系統(tǒng)中是rsyslog服務(wù)。syslog服務(wù)器可以用作一個(gè)網(wǎng)絡(luò)中的日志監(jiān)控中心,rsyslog是一個(gè)開源工具,被廣泛用于Linux系統(tǒng)以通過TCP/UDP協(xié)議轉(zhuǎn)發(fā)或接收日志消息。安裝配置rsyslog服務(wù):
yum install rsyslog
修改配置文件:
vi /etc/rsyslog.conf
把$ModLoad imudp和$UDPServerRun 514前面的 # 去掉
$ModLoad imudp # 是模塊名,支持UDP協(xié)議
$UDPServerRun 514 #允許514端口接收使用UDP和TCP協(xié)議轉(zhuǎn)發(fā)過來的日志,而rsyslog在默認(rèn)情況下,正是在514端口監(jiān)聽UDP
在/etc/rsyslog.d/目錄下創(chuàng)建 haproxy的日志配置文件haproxy.log。
[root@localhost rsyslog.d]# touch /etc/rsyslog.d/haproxy.log
[root@localhost rsyslog.d]# vim /etc/rsyslog.d/haproxy.log
文件內(nèi)容如下:
local0.* /var/log/haproxy.log
&~
說明:如果不加上面的的"&~"配置則除了在/var/log/haproxy.log中寫入日志外,也會寫入/var/log/message文件中。
配置保存后重啟rsyslog服務(wù):systemctl status rsyslog.service
八、HAProxy配置MyCat負(fù)載均衡集群
HAProxy支持TCP(第四層)和HTTP(第七層)應(yīng)用的代理,本節(jié)課程我們使用HAProxy來做MyCat的負(fù)載均衡代理使用的是TCP模式。在4層模式下HAProxy僅在客戶端和服務(wù)器之間轉(zhuǎn)發(fā)雙向流量。HAProxy配置簡單,擁有非常不錯(cuò)的服務(wù)器健康檢查功能,當(dāng)其代理的后端服務(wù)器出現(xiàn)故障,HAProxy會自動(dòng)將該服務(wù)器摘除,故障恢復(fù)后會自動(dòng)將該服務(wù)器加入進(jìn)來?
1、修改haproxy-1及haproxy-2的配置文件
vim /usr/local/haproxy/conf/haproxy.cfg
haproxy-1的內(nèi)容如下:
global
# 定義全局的syslog服務(wù)器,最多可以定義2個(gè)
# local0是日志設(shè)備,對應(yīng)于/etc/rsyslog.conf中的配置,默認(rèn)回收info的日志級別
log 127.0.0.1 local0 debug ##記日志的功能
#log 127.0.0.1 local1 info
maxconn 4096 # 設(shè)定每個(gè)haproxy進(jìn)程所接受的最大并發(fā)連接數(shù),其等同于命令行選項(xiàng)"-n","ulimit-n"自動(dòng)計(jì)算的結(jié)果正式參照從參數(shù)設(shè)定的
chroot /usr/share/haproxy # 修改HAProxy的工作目錄至指定的目錄并在放棄權(quán)限之前執(zhí)行,chroot() 操作,可以提升 haproxy 的安全級別
user haproxy
group haproxy
daemon # 設(shè)置haproxy后臺守護(hù)進(jìn)程形式運(yùn)行
nbproc 1 ## 指定啟動(dòng)的haproxy進(jìn)程個(gè)數(shù),只能用于守護(hù)進(jìn)程模式的haproxy;默認(rèn)為止啟動(dòng)1個(gè)進(jìn)程,一般只在單進(jìn)程僅能打開少數(shù)文件描述符的場中中才使用多進(jìn)程模式
node edu-haproxy-01 ## 定義當(dāng)前節(jié)點(diǎn)的名稱,用于HA場景中多haproxy進(jìn)程共享同一個(gè)IP地址時(shí)
description edu-haproxy-01 ## 當(dāng)前實(shí)例的描述信息
defaults
log global # 繼承g(shù)lobal中l(wèi)og的定義
option dontlognull
retries 3
option redispatch
maxconn 2000 # 前端的最大并發(fā)連接數(shù)(默認(rèn)為2000)
timeout connect 5000
timeout client 50000
timeout server 50000
#contimeout 5000
#clitimeout 50000
#srvtimeout 50000
listen admin_status
bind :48800 ##VIP
stats uri /admin-status ##統(tǒng)計(jì)頁面
stats auth admin:admin # 設(shè)置統(tǒng)計(jì)頁面認(rèn)證的用戶和密碼,如果要設(shè)置多個(gè),另起一行寫入即可
mode http
option httplog
listen allmycat_service
bind :33066 ##轉(zhuǎn)發(fā)到 mycat 的 8066 端口,即 mycat 的服務(wù)端口
mode tcp
option tcplog
option tcpka ## 是否允許向server和client發(fā)送keepalive
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_70 192.168.100.70:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_71 192.168.100.71:8066 check port 48700 inter 5s rise 2 fall 3
#srvtimeout 20000
timeout server 20000
haproxy-2的內(nèi)容如下:
global
# 定義全局的syslog服務(wù)器,最多可以定義2個(gè)
# local0是日志設(shè)備,對應(yīng)于/etc/rsyslog.conf中的配置,默認(rèn)回收info的日志級別
log 127.0.0.1 local0 ##記日志的功能
#log 127.0.0.1 local1 info
maxconn 4096 # 設(shè)定每個(gè)haproxy進(jìn)程所接受的最大并發(fā)連接數(shù),其等同于命令行選項(xiàng)"-n","ulimit-n"自動(dòng)計(jì)算的結(jié)果正式參照從參數(shù)設(shè)定的
chroot /usr/share/haproxy # 修改HAProxy的工作目錄至指定的目錄并在放棄權(quán)限之前執(zhí)行,chroot() 操作,可以提升 haproxy 的安全級別
user haproxy
group haproxy
daemon # 設(shè)置haproxy后臺守護(hù)進(jìn)程形式運(yùn)行
nbproc 1 ## 指定啟動(dòng)的haproxy進(jìn)程個(gè)數(shù),只能用于守護(hù)進(jìn)程模式的haproxy;默認(rèn)為止啟動(dòng)1個(gè)進(jìn)程,一般只在單進(jìn)程僅能打開少數(shù)文件描述符的場中中才使用多進(jìn)程模式
node edu-haproxy-01 ## 定義當(dāng)前節(jié)點(diǎn)的名稱,用于HA場景中多haproxy進(jìn)程共享同一個(gè)IP地址時(shí)
description edu-haproxy-01 ## 當(dāng)前實(shí)例的描述信息
defaults
log global # 繼承g(shù)lobal中l(wèi)og的定義
option dontlognull
retries 3
option redispatch
maxconn 2000 # 前端的最大并發(fā)連接數(shù)(默認(rèn)為2000)
timeout connect 5000
timeout client 50000
timeout server 50000
listen admin_status
# VIP
bind :48800
stats uri /admin-status ##統(tǒng)計(jì)頁面
stats auth admin:admin # 設(shè)置統(tǒng)計(jì)頁面認(rèn)證的用戶和密碼,如果要設(shè)置多個(gè),另起一行寫入即可
mode http
option httplog
listen allmycat_service
bind :33066 ##轉(zhuǎn)發(fā)到 mycat 的 8066 端口,即 mycat 的服務(wù)端口
mode tcp
option tcplog
option tcpka ## 是否允許向server和client發(fā)送keepalive
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_50 192.168.100.70:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_51 192.168.100.71:8066 check port 48700 inter 5s rise 2 fall 3
#srvtimeout 20000
timeout server 20000
具體參數(shù)說明可參考官方配置文檔 /usr/local/haproxy/doc/haproxy/configuration.txt或GitHub連接:http://cbonte.github.io/haproxy-dconv/configuration-1.5.html
2、為HAProxy添加Linux系統(tǒng)用戶
[root@localhost conf]# groupadd haproxy
[root@localhost conf]# useradd -g haproxy haproxy
[root@localhost conf]# mkdir /usr/share/haproxy
3、創(chuàng)建chroot運(yùn)行的路徑
[root@localhost conf]# mkdir /usr/share/haproxy
4、配置系統(tǒng)內(nèi)核IP包轉(zhuǎn)發(fā)規(guī)則
修改文件/etc/sysctl.conf,修改內(nèi)容為:net.ipv4.ip_forward = 1,然后執(zhí)行sysctl -p使其生效
5、重啟haproxy:systemctl restart haproxy
九、查看HAProxy提供的WEB統(tǒng)計(jì)應(yīng)用
http://192.168.100.70:48800/admin-status
http://192.168.100.71:48800/admin-status
用戶名和密碼都是admin,參考/usr/local/haproxy/conf/haproxy.cfg配置文件。
注意:安裝完一個(gè)HAProxy之后,可以通過mysql命令控制臺直接測試訪問HAProxy。命令為:mysql -uroot -p123456 -h192.168.100.70 -P33066
十、安裝Keepalived
1、簡介
官網(wǎng): http://www.keepalived.org/
Keepalived 是一種高性能的服務(wù)器高可用或熱備解決方案, Keepalived 可以用來防止服務(wù)器單點(diǎn)故障的發(fā)生,通過配合 Haproxy 可以實(shí)現(xiàn) web 前端服務(wù)的高可用。Keepalived 以 VRRP 協(xié)議為實(shí)現(xiàn)基礎(chǔ),用 VRRP 協(xié)議來實(shí)現(xiàn)高可用性(HA)。 VRRP(Virtual Router Redundancy Protocol)協(xié)議是用于實(shí)現(xiàn)路由器冗余的協(xié)議, VRRP 協(xié)議將兩臺或多臺路由器設(shè)備虛擬成一個(gè)設(shè)備,對外提供虛擬路由器 IP(一個(gè)或多個(gè)),而在路由器組內(nèi)部,如果實(shí)際擁有這個(gè)對外 IP 的路由器如果工作正常的話就是 MASTER,或者是通過算法選舉產(chǎn)生。 MASTER 實(shí)現(xiàn)針對虛擬路由器 IP 的各種網(wǎng)絡(luò)功能,如 ARP 請求, ICMP,以及數(shù)據(jù)的轉(zhuǎn)發(fā)等;其他設(shè)備不擁有該虛擬 IP,狀態(tài)是 BACKUP,除了接收 MASTER 的VRRP 狀態(tài)通告信息外,不執(zhí)行對外的網(wǎng)絡(luò)功能。當(dāng)主機(jī)失效時(shí), BACKUP 將接管原先 MASTER 的網(wǎng)絡(luò)功能。VRRP 協(xié)議使用多播數(shù)據(jù)來傳輸 VRRP 數(shù)據(jù), VRRP 數(shù)據(jù)使用特殊的虛擬源 MAC 地址發(fā)送數(shù)據(jù)而不是自身網(wǎng)卡的 MAC 地址, VRRP 運(yùn)行時(shí)只有 MASTER 路由器定時(shí)發(fā)送 VRRP 通告信息,表示 MASTER 工作正常以及虛擬路由器 IP(組), BACKUP 只接收 VRRP 數(shù)據(jù),不發(fā)送數(shù)據(jù),如果一定時(shí)間內(nèi)沒有接收到 MASTER 的通告信息,各 BACKUP 將宣告自己成為 MASTER,發(fā)送通告信息,重新進(jìn)行 MASTER 選舉狀態(tài)。
2、上傳keepalived-1.4.5.tar.gz到Linux服務(wù)器
3、安裝依賴
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel
4、解壓并安裝
tar -xzvf keepalived-1.4.5.tar.gz
cd keepalived-1.4.5
./configure --prefix=/usr/local/keepalived
make && make install
5、將Keepalived安裝成Linux系統(tǒng)服務(wù)
因?yàn)闆]有使用 keepalived 的默認(rèn)路徑安裝(默認(rèn)是/usr/local) ,安裝完成之后,需要做一些工作復(fù)制默認(rèn)配置文件到默認(rèn)路徑。
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
復(fù)制 keepalived 服務(wù)腳本到默認(rèn)的地址
cp /usr/local/keepalived/sbin/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
設(shè)置 keepalived 服務(wù)開機(jī)啟動(dòng)
chkconfig keepalived on
6、修改Keepalived配置文件
- 修改haproxy1服務(wù)器中的配置文件/etc/keepalived/keepalived.conf,內(nèi)容如下:
! Configuration File for keepalived
global_defs {
## keepalived 自帶的郵件提醒需要開啟 sendmail 服務(wù)。建議用獨(dú)立的監(jiān)控或第三方 SMTP
router_id haproxy1 ## 標(biāo)識本節(jié)點(diǎn)的字符串,通常為 hostname,需要修改/etc/hosts
}
## keepalived 會定時(shí)執(zhí)行腳本并對腳本執(zhí)行的結(jié)果進(jìn)行分析,動(dòng)態(tài)調(diào)整 vrrp_instance 的優(yōu)先級。
## 如果腳本執(zhí)行結(jié)果為 0,并且 weight 配置的值大于 0,則優(yōu)先級相應(yīng)的增加。
## 如果腳本執(zhí)行結(jié)果非 0,并且 weight 配置的值小于 0,則優(yōu)先級相應(yīng)的減少。
## 其他情況,維持原本配置的優(yōu)先級,即配置文件中 priority 對應(yīng)的值。
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh" ## 檢測 haproxy 狀態(tài)的腳本路徑
interval 2 ## 檢測時(shí)間間隔
weight 2 ## 如果條件成立,權(quán)重+2
}
## 定義虛擬路由, VI_1 為虛擬路由的標(biāo)示符,自己定義名稱
vrrp_instance VI_1 {
state BACKUP ## 默認(rèn)主設(shè)備(priority 值大的)和備用設(shè)備(priority 值小的)都設(shè)置為 BACKUP,
## 由 priority 來控制同時(shí)啟動(dòng)情況下的默認(rèn)主備,否則先啟動(dòng)的為主設(shè)備
interface eth0 ## 綁定虛擬 IP 的網(wǎng)絡(luò)接口,與本機(jī) IP 地址所在的網(wǎng)絡(luò)接口相同,我的是 eth0
virtual_router_id 35 ## 虛擬路由的 ID 號,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣,可選 IP 最后一段使用,
## 相同的 VRID 為一個(gè)組,他將決定多播的 MAC 地址
priority 120 ## 節(jié)點(diǎn)優(yōu)先級,值范圍 0-254, MASTER 要比 BACKUP 高
nopreempt ## 主設(shè)備(priority 值大的)配置一定要加上 nopreempt,否則非搶占也不起作用
advert_int 1 ## 組播信息發(fā)送間隔,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣,默認(rèn) 1s
## 設(shè)置驗(yàn)證信息,兩個(gè)節(jié)點(diǎn)必須一致
authentication {
auth_type PASS
auth_pass 1111 ## 真實(shí)生產(chǎn),按需求對應(yīng)該過來
}
## 將 track_script 塊加入 instance 配置塊
track_script {
chk_haproxy ## 檢查 HAProxy 服務(wù)是否存活
}
## 虛擬 IP 池, 兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣
virtual_ipaddress {
192.168.100.78 ## 虛擬 ip,可以定義多個(gè),每行一個(gè)
}
}
- 修改haproxy2服務(wù)器中的配置文件/etc/keepalived/keepalived.conf,內(nèi)容如下:
! Configuration File for keepalived
global_defs {
router_id haproxy2
}
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 35
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.100.78
}
}
特別注意: 如果非搶占模式不生效, 在 Keepalived 的故障節(jié)點(diǎn)恢復(fù)后會再次導(dǎo)搶占 vip,從而因 vip 切換而閃斷帶來的風(fēng)險(xiǎn)(視頻解說)。 按以上配置,配置了 Keepalived 非搶占模式, 配置及注意點(diǎn)如下:
(1) 主設(shè)備、 從設(shè)備中的 state 都設(shè)置為 BACKUP
(2) 主設(shè)備、從設(shè)備中都不要配置 mcast_src_ip (本機(jī) IP 地址)
(3) 默認(rèn)主設(shè)備(priority 值大的 Keepalived 節(jié)點(diǎn)) 配置一定要加上 nopreempt,否則非搶占不起作用
(4) 防火墻配置允許組播(主、備兩臺設(shè)備上都需要配置, keepalived 使用 224.0.0.18 作為 Master 和Backup 健康檢查的通信 IP)
7、提供HAProxy狀態(tài)檢查腳本
我們編寫的腳本為/etc/keepalived/haproxy_check.sh (已在 keepalived.conf 中配置)腳本要求:如果 haproxy 停止運(yùn)行,嘗試啟動(dòng),如果無法啟動(dòng)則殺死本機(jī)的 keepalived 進(jìn)程,keepalied將虛擬 ip 綁定到 BACKUP 機(jī)器上。
mkdir -p /usr/local/keepalived/log
vi /etc/keepalived/haproxy_check.sh
#!/bin/bash
START_HAPROXY="/etc/rc.d/init.d/haproxy start"
STOP_HAPROXY="/etc/rc.d/init.d/haproxy stop"
LOG_FILE="/usr/local/keepalived/log/haproxy-check.log"
HAPS=`ps -C haproxy --no-header |wc -l`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check haproxy status" >> $LOG_FILE
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY >> $LOG_FILE
$START_HAPROXY >> $LOG_FILE 2>&1
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
echo "start haproxy failed, killall keepalived" >> $LOG_FILE
killall keepalived
fi
fi
添加權(quán)限:chmod +x /etc/keepalived/haproxy_check.sh
8、啟動(dòng)Keepalived
systemctl start keepalived
常用命令:
停止: systemctl stop keepalived
啟動(dòng): systemctl start keepalived
重啟: systemctl restart keepalived
查看狀態(tài): systemctl status keepalived
十一、測試
1、關(guān)閉VIP所在節(jié)點(diǎn)中的HAProxy
關(guān)閉后,Keepalived會自動(dòng)啟動(dòng)HAProxy。
關(guān)閉Keepalived命令 : service haproxy stop
查看vip命令: ip add
查看進(jìn)程命令: ps -ef | grep haproxy
2關(guān)閉VIP所在節(jié)點(diǎn)中的Keepalived
關(guān)閉后,VIP192.168.100.70會被另外一個(gè)主機(jī)搶占(192.168.199.102)
關(guān)閉Keepalived命令 : service keepalived stop
查看192.168.100.71中的VIP: ip add
查看192.168.100.10中的VIP : ip add