Keepalive+Haproxy+Mycat高可用環(huán)境搭建

本文參考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)圖如下

image.png

說明: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ù)制配置

詳請參考《MariaDB(Mysql)一主一從配置》

五、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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容