haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群
1.什么是Haproxy
HAProxy是一個(gè)使用C語(yǔ)言編寫(xiě)的自由及開(kāi)放源代碼軟件[1],其提供高可用性、負(fù)載均衡,以及基于TCP和HTTP的應(yīng)用程序代理。
HAProxy特別適用于那些負(fù)載特大的web站點(diǎn),這些站點(diǎn)通常又需要會(huì)話保持或七層處理。HAProxy運(yùn)行在當(dāng)前的硬件上,完全可以支持?jǐn)?shù)以萬(wàn)計(jì)的并發(fā)連接。并且它的運(yùn)行模式使得它可以很簡(jiǎn)單安全的整合進(jìn)您當(dāng)前的架構(gòu)中, 同時(shí)可以保護(hù)你的web服務(wù)器不被暴露到網(wǎng)絡(luò)上
2.什么是KeepAlived
keepalived是一個(gè)類(lèi)似于layer3, 4 & 5交換機(jī)制的軟件,也就是我們平時(shí)說(shuō)的第3層、第4層和第5層交換。Keepalived是自動(dòng)完成,不需人工干涉。
Keepalived的作用是檢測(cè)服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器宕機(jī),或工作出現(xiàn)故障,Keepalived將檢測(cè)到,并將有故障的服務(wù)器從系統(tǒng)中剔除,同時(shí)使用其他服務(wù)器代替該服務(wù)器的工作,當(dāng)服務(wù)器工作正常后Keepalived自動(dòng)將服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(fù)故障的服務(wù)器
3.什么是Mycat
MyCat 是目前最流行的基于 java 語(yǔ)言編寫(xiě)的數(shù)據(jù)庫(kù)中間件,是一個(gè)實(shí)現(xiàn)了 MySQL 協(xié)議 的服務(wù)器,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫(kù)代理,用 MySQL 客戶端工具和命令行訪問(wèn), 而其后端可以用 MySQL 原生協(xié)議與多個(gè) MySQL 服務(wù)器通信,也可以用 JDBC 協(xié)議與大多數(shù) 主流數(shù)據(jù)庫(kù)服務(wù)器通信,其核心功能是分庫(kù)分表。配合數(shù)據(jù)庫(kù)的主從模式還可實(shí)現(xiàn)讀寫(xiě)分離。 MyCat 是基于阿里開(kāi)源的 Cobar 產(chǎn)品而研發(fā),Cobar 的穩(wěn)定性、可靠性、優(yōu)秀的架構(gòu)和 性能以及眾多成熟的使用案例使得 MyCat 變得非常的強(qiáng)大。
4.Haproxy+KeepAlived+Mycat結(jié)構(gòu)圖
5.搭建 xinetd 服務(wù)
配置 MyCat 狀態(tài)檢查服務(wù) 在所有 MyCat(192.168.199.184/192.168.199.116)服務(wù)所在主機(jī)中增加狀態(tài)檢查服務(wù)腳 本。此操作為 HaProxy 提供對(duì) MyCat 服務(wù)狀態(tài)檢查的依據(jù)。通過(guò) xinetd,HAProxy 可以用 httpchk 來(lái)檢測(cè) Mycat 的存活狀態(tài)。(xinetd 即 extended internet daemon,xinetd 是新一代的網(wǎng)絡(luò)守護(hù)進(jìn)程服務(wù)程序,又叫超級(jí) Internet 服務(wù)器。經(jīng)常用來(lái)管 理多種輕量級(jí) Internet 服務(wù)。xinetd 提供類(lèi)似于 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 ,沒(méi)有就加上
vi /etc/xinetd.conf
3.創(chuàng)建/etc/xinetd.d 目錄
檢查 /etc/xinetd.d 目錄是否存在,不存在則創(chuàng)建
mkdir /etc/xinetd.d/
4.增加 Mycat 存活狀態(tài)檢測(cè)服務(wù)配置
vi /etc/xinetd.d/mycat_status
service說(shuō)明:
service6.添加 /usr/local/bin/mycat_status 服務(wù)腳本
vi /usr/local/bin/mycat_status
!7. 給新增腳本賦予可執(zhí)行權(quán)限
chmod 755 /usr/local/bin/mycat_status
8.在 /etc/services 中加入 mycat_status 服務(wù)
vi /etc/services
在末尾加入:
mycat_status 48700/tcp # mycat_status
保存后,重啟 xinetd 服務(wù) service xinetd restart
9.驗(yàn)證 mycat_status 服務(wù)是否成功啟動(dòng)
netstat -antup|grep 48700
10.測(cè)試腳本是否有效
/usr/local/bin/mycat_status
6.安裝 HAProxy
1.上傳 haproxy-1.7.1.tar.gz 到 Linux 并解壓安裝包
tar -zxf haproxy-1.7.1.tar.gz
2.安裝編譯依賴
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
3.編譯
cd haproxy-1.7.1
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è)包需要安裝不然不支持
4.創(chuàng)建安裝目錄
mkdir /usr/local/haproxy
5.執(zhí)行安裝
make install PREFIX=/usr/local/haproxy
6.創(chuàng)建配置文件目錄
mkdir -p /usr/local/haproxy/conf
mkdir -p /etc/haproxy/
7.添加配置文件并創(chuàng)建軟連接
vi /usr/local/haproxy/conf/haproxy.cfg
ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg
8.拷貝錯(cuò)誤頁(yè)面資源并創(chuàng)建軟連接(可選)
cp -r /root/upload/haproxy-1.7.1/examples/errorfiles /usr/local/haproxy/
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles
9.拷貝開(kāi)機(jī)啟動(dòng)文件,并賦予權(quán)限
cp /root/upload/haproxy-1.7.1/examples/haproxy.init /etc/rc.d/init.d/haproxy
chmod +x /etc/rc.d/init.d/haproxy
10.添加 HAProxy 命令腳本軟連接
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin
11.設(shè)置 HAProxy 開(kāi)機(jī)啟動(dòng)
chkconfig --add haproxy
chkconfig haproxy on
HAProxy 配置 MyCat 負(fù)載均衡集群:
haproxy.cfg說(shuō)明:
vi /usr/local/haproxy/conf/haproxy.cfg
## global 配置中的參數(shù)為進(jìn)程級(jí)別的參數(shù),通常與其運(yùn)行的操作系統(tǒng)有關(guān) global log 127.0.0.1 local0 info ## 定義全局的 syslog 服務(wù)器,最多可以定義 2 個(gè) ### local0 是日志設(shè)備,對(duì)應(yīng)于/etc/rsyslog.conf 中的配置,默認(rèn)回收 info 的日志級(jí)別 #log 127.0.0.1 local1 info chroot /usr/share/haproxy ## 修改 HAProxy 的工作目錄至指定的目錄并在放棄權(quán)限之前 執(zhí)行 ### chroot() 操作,可以提升 haproxy 的安全級(jí)別 group haproxy ## 同 gid,不過(guò)這里為指定的用戶組名 user haproxy ## 同 uid,但這里使用的為用戶名 daemon ## 設(shè)置 haproxy 后臺(tái)守護(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)程僅能打開(kāi)少數(shù)文件描述符的場(chǎng)中中才使用多進(jìn)程模式 maxconn 4096 ## 設(shè)定每個(gè) haproxy 進(jìn)程所接受的最大并發(fā)連接數(shù), ### 其等同于命令行選項(xiàng)"-n","ulimit-n"自動(dòng)計(jì)算的結(jié)果正式參照從參數(shù)設(shè)定的 # pidfile /var/run/haproxy.pid ## 進(jìn)程文件(默認(rèn)路徑 /var/run/haproxy.pid) node haproxy1 ## 定義當(dāng)前節(jié)點(diǎn)的名稱,用于 HA 場(chǎng)景中多 haproxy 進(jìn)程共享同一個(gè) IP 地址時(shí) description haproxy1 ## 當(dāng)前實(shí)例的描述信息 ## defaults:用于為所有其他配置段提供默認(rèn)參數(shù),這默認(rèn)配置參數(shù)可由下一個(gè)"defaults" 所重新設(shè)定 defaults log global ## 繼承 global 中 log 的定義 mode http ## mode:所處理的模式 (tcp:四層 , http:七層 , health:狀態(tài)檢查,只會(huì)返回 OK) ### tcp: 實(shí)例運(yùn)行于純 tcp 模式,在客戶端和服務(wù)器端之間將建立一個(gè)全雙工的連接, #### 且不會(huì)對(duì) 7 層報(bào)文做任何類(lèi)型的檢查,此為默認(rèn)模式 ### http:實(shí)例運(yùn)行于 http 模式,客戶端請(qǐng)求在轉(zhuǎn)發(fā)至后端服務(wù)器之前將被深度分析, #### 所有不與 RFC 模式兼容的請(qǐng)求都會(huì)被拒絕 ### health:實(shí)例運(yùn)行于 health 模式,其對(duì)入站請(qǐng)求僅響應(yīng)“OK”信息并關(guān)閉連接, #### 且不會(huì)記錄任何日志信息 ,此模式將用于相應(yīng)外部組件的監(jiān)控狀態(tài)檢測(cè)請(qǐng)求 option httplog retries 3 option redispatch ## serverId 對(duì)應(yīng)的服務(wù)器掛掉后,強(qiáng)制定向到其他健康的服務(wù)器 maxconn 2000 ## 前端的最大并發(fā)連接數(shù)(默認(rèn)為 2000) ### 其不能用于 backend 區(qū)段,對(duì)于大型站點(diǎn)來(lái)說(shuō),可以盡可能提高此值以便讓 haproxy 管理連接隊(duì)列, ### 從而避免無(wú)法應(yīng)答用戶請(qǐng)求。當(dāng)然,此最大值不能超過(guò)“global”段中的定義。 ### 此外,需要留心的是,haproxy 會(huì)為每個(gè)連接維持兩個(gè)緩沖,每個(gè)緩存的大小為 8KB, ### 再加上其他的數(shù)據(jù),每個(gè)連接將大約占用 17KB 的 RAM 空間,這意味著經(jīng)過(guò)適當(dāng)優(yōu) 化后 , ### 有著 1GB 的可用 RAM 空間時(shí)將維護(hù) 40000-50000 并發(fā)連接。 ### 如果指定了一個(gè)過(guò)大值,極端場(chǎng)景中,其最終所占據(jù)的空間可能會(huì)超過(guò)當(dāng)前主機(jī)的 可用內(nèi)存, ### 這可能會(huì)帶來(lái)意想不到的結(jié)果,因此,將其設(shè)定一個(gè)可接受值放為明智絕對(duì),其默 認(rèn)為 2000 timeout connect 5000ms ## 連接超時(shí)(默認(rèn)是毫秒,單位可以設(shè)置 us,ms,s,m,h,d) timeout client 50000ms ## 客戶端超時(shí) timeout server 50000ms ## 服務(wù)器超時(shí) ## HAProxy 的狀態(tài)信息統(tǒng)計(jì)頁(yè)面 listen admin_stats bind :48800 ## 綁定端口 stats uri /admin-status ##統(tǒng)計(jì)頁(yè)面 stats auth admin:admin ## 設(shè)置統(tǒng)計(jì)頁(yè)面認(rèn)證的用戶和密碼,如果要設(shè)置多個(gè),另起一 行寫(xiě)入即可 mode http option httplog ## 啟用日志記錄 HTTP 請(qǐng)求 ## listen: 用于定義通過(guò)關(guān)聯(lián)“前端”和“后端”一個(gè)完整的代理,通常只對(duì) TCP 流量有用 listen mycat_servers bind :3307 ## 綁定端口 mode tcp option tcplog ## 記錄 TCP 請(qǐng)求日志 option tcpka ## 是否允許向 server 和 client 發(fā)送 keepalive option httpchk OPTIONS * HTTP/1.1rnHost: www ## 后端服務(wù)狀態(tài)檢測(cè) ### 向后端服務(wù)器的 48700 端口(端口值在后端服務(wù)器上通過(guò) xinetd 配置)發(fā)送 OPTIONS 請(qǐng)求 ### (原理請(qǐng)參考 HTTP 協(xié)議) ,HAProxy 會(huì)根據(jù)返回內(nèi)容來(lái)判斷后端服務(wù)是否可用. ### 2xx 和 3xx 的響應(yīng)碼表示健康狀態(tài),其他響應(yīng)碼或無(wú)響應(yīng)表示服務(wù)器故障。 balance roundrobin ## 定義負(fù)載均衡算法,可用于"defaults"、"listen"和"backend"中,默 認(rèn)為輪詢方式 server mycat_01 192.168.199.184:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10 server mycat_02 192.168.199.116:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10 ## 格式:server <name> <address>[:[port]] [param*] ### serser 在后端聲明一個(gè) server,只能用于 listen 和 backend 區(qū)段。 ### <name>為此服務(wù)器指定的內(nèi)部名稱,其將會(huì)出現(xiàn)在日志及警告信息中 ### <address>此服務(wù)器的 IPv4 地址,也支持使用可解析的主機(jī)名,但要在啟動(dòng)時(shí)需要 解析主機(jī)名至響應(yīng)的 IPV4 地址 ### [:[port]]指定將客戶端連接請(qǐng)求發(fā)往此服務(wù)器時(shí)的目標(biāo)端口,此為可選項(xiàng) ### [param*]為此 server 設(shè)定的一系列參數(shù),均為可選項(xiàng),參數(shù)比較多,下面僅說(shuō)明幾 個(gè)常用的參數(shù): #### weight:權(quán)重,默認(rèn)為 1,最大值為 256,0 表示不參與負(fù)載均衡 #### backup:設(shè)定為備用服務(wù)器,僅在負(fù)載均衡場(chǎng)景中的其他 server 均不可以啟用此 server #### check:啟動(dòng)對(duì)此 server 執(zhí)行監(jiān)控狀態(tài)檢查,其可以借助于額外的其他參數(shù)完成更精 細(xì)的設(shè)定 #### inter:設(shè)定監(jiān)控狀態(tài)檢查的時(shí)間間隔,單位為毫秒,默認(rèn)為 2000, ##### 也可以使用 fastinter 和 downinter 來(lái)根據(jù)服務(wù)器端專(zhuān)題優(yōu)化此事件延遲 #### rise:設(shè)置 server 從離線狀態(tài)轉(zhuǎn)換至正常狀態(tài)需要檢查的次數(shù)(不設(shè)置的情況下,默 認(rèn)值為 2) #### fall:設(shè)置 server 從正常狀態(tài)轉(zhuǎn)換至離線狀態(tài)需要檢查的次數(shù)(不設(shè)置的情況下,默 認(rèn)值為 3) #### cookie:為指定 server 設(shè)定 cookie 值,此處指定的值將會(huì)在請(qǐng)求入站時(shí)被檢查, ##### 第一次為此值挑選的 server 將會(huì)被后續(xù)的請(qǐng)求所選中,其目的在于實(shí)現(xiàn)持久連接 的功能 #### maxconn:指定此服務(wù)器接受的最大并發(fā)連接數(shù),如果發(fā)往此服務(wù)器的連接數(shù)目高 于此處指定的值, #####其將被放置于請(qǐng)求隊(duì)列,以等待其他連接被釋放注意:多節(jié)點(diǎn)部署時(shí) node 、 description 的值要做相應(yīng)調(diào)整
2.為 HAProxy 添加 Linux 系統(tǒng)用戶
groupadd haproxy
useradd -g haproxy haproxy
3.創(chuàng)建 chroot 運(yùn)行的路徑
mkdir /usr/share/haproxy
4.開(kāi)啟 rsyslog 的 haproxy 日志記錄功能
默認(rèn)情況下 haproxy 是不記錄日志的,如果需要記錄日志,還需要配置系統(tǒng)的 syslog,
在 linux 系統(tǒng)中是 rsyslog 服務(wù)。syslog 服務(wù)器可以用作一個(gè)網(wǎng)絡(luò)中的日志監(jiān)控中心,rsyslog
是一個(gè)開(kāi)源工具,被廣泛用于 Linux 系統(tǒng)以通過(guò) TCP/UDP 協(xié)議轉(zhuǎn)發(fā)或接收日志消息。安裝配
置 rsyslog 服務(wù):
yum install -y rsyslog ## 沒(méi)安裝的情況下執(zhí)行安裝
vi /etc/rsyslog.conf
cd /etc/rsyslog.d/
創(chuàng)建 haproxy 的日志配置文件
vi /etc/rsyslog.d/haproxy.conf
注意:如果不加上面的的"&~"配置則除了在/var/log/haproxy.log 中寫(xiě)入日志外,也會(huì) 寫(xiě)入/var/log/message 文件中
配置保存后重啟 rsyslog 服務(wù) service rsyslog restart 等到 HAProxy 服務(wù)啟動(dòng)后,就能在/var/log/haproxy.log 中看到日志了
5.配置系統(tǒng)內(nèi)核 IP 包轉(zhuǎn)發(fā)規(guī)則
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1使配置生效
sysctl -p
6.啟動(dòng) HAProxy
service haproxy start
ps -ef | grep haproxy
查看 HAProxy 提供的 WEB 統(tǒng)計(jì)應(yīng)用
http://192.168.199.157:48800/admin-status http://192.168.199.102:48800/admin-status 用戶名和密碼都是 admin,參考/usr/local/haproxy/conf/haproxy.cfg 配置文件。 注意:安裝完一個(gè) HAProxy 之后,可以通過(guò) mysql 命令控制臺(tái)直接測(cè)試訪問(wèn) HAProxy。 命令為:mysql -uroot -p123456 -h192.168.199.157 -P33077.安裝 Keepalived
官網(wǎng): http://www.keepalived.org/
1.上傳 Keepalived 到 Linux 服務(wù)器
2.安裝依賴
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-deve
3.解壓并安裝
tar -zxf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18
mkdir /usr/local/keepalived
./configure --prefix=/usr/local/keepalived
make && make install
4.將 Keepalived 安裝成 Linux 系統(tǒng)服務(wù)
因?yàn)闆](méi)有使用 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/etc/rc.d/init.d/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ù)開(kāi)機(jī)啟動(dòng) chkconfig keepalived on5.修改 Keepalived 配置文件
5.1修改 haproxy1 服務(wù)器中的配置文件
vi /usr/local/keepalived/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
說(shuō)明:
! Configuration File for keepalived global_defs { ## keepalived 自帶的郵件提醒需要開(kāi)啟 sendmail 服務(wù)。建議用獨(dú)立的監(jiān)控或第三方 SMTP router_id haproxy1 ## 標(biāo)識(shí)本節(jié)點(diǎn)的字符串,通常為 hostname,需要修改/etc/hosts } ## keepalived 會(huì)定時(shí)執(zhí)行腳本并對(duì)腳本執(zhí)行的結(jié)果進(jìn)行分析,動(dòng)態(tài)調(diào)整 vrrp_instance 的優(yōu)先級(jí)。 ## 如果腳本執(zhí)行結(jié)果為 0,并且 weight 配置的值大于 0,則優(yōu)先級(jí)相應(yīng)的增加。 ## 如果腳本執(zhí)行結(jié)果非 0,并且 weight 配置的值小于 0,則優(yōu)先級(jí)相應(yīng)的減少。 ## 其他情況,維持原本配置的優(yōu)先級(jí),即配置文件中 priority 對(duì)應(yīng)的值。 vrrp_script chk_haproxy { script "/etc/keepalived/haproxy_check.sh" ## 檢測(cè) haproxy 狀態(tài)的腳本路徑 interval 2 ## 檢測(cè)時(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 來(lái)控制同時(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 號(hào),兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣,可選 IP 最后 一段使用,## 相同的 VRID 為一個(gè)組,他將決定多播的 MAC 地址 priority 120 ## 節(jié)點(diǎn)優(yōu)先級(jí),值范圍 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),按需求對(duì)應(yīng)該過(guò)來(lái) } ## 將 track_script 塊加入 instance 配置塊 track_script { chk_haproxy ## 檢查 HAProxy 服務(wù)是否存活 } ## 虛擬 IP 池, 兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣 virtual_ipaddress { 192.168.199.190 ## 虛擬 ip,可以定義多個(gè),每行一個(gè) } }5.2修改 haproxy2 服務(wù)器中的配置文件
vi /usr/local/keepalived/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
注意: 如果非搶占模式不生效, 在 Keepalived 的故障節(jié)點(diǎn)恢復(fù)后會(huì)再次導(dǎo)搶占
vip,從而因 vip 切換而閃斷帶來(lái)的風(fēng)險(xiǎn)(視頻解說(shuō))。 按以上配置,配置了 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) 防火墻配置允許組播(主、備兩臺(tái)設(shè)備上都需要配置, keepalived 使用 224.0.0.18
作為 Master 和 Backup 健康檢查的通信 IP)
6.提供 HAProxy 狀態(tài)檢查腳本
如果 haproxy 停止運(yùn)行,嘗試啟動(dòng),如果無(wú)法啟動(dòng)則殺死本機(jī)的 keepalived 進(jìn) 程,keepalied 將虛擬 ip 綁定到 BACKUP 機(jī)器上。
mkdir -p /usr/local/keepalived/log
vi /etc/keepalived/haproxy_check.sh
chmod +x /etc/keepalived/haproxy_check.sh
7.啟動(dòng) Keepalived
service keepalived start
關(guān)閉后,Keepalived 會(huì)自動(dòng)啟動(dòng) HAProxy。
關(guān)閉 Keepalived 命令 : service haproxy stop
查看 vip 命令: ip add
查看進(jìn)程命令: ps -ef | grep haproxy
通過(guò) VIP 訪問(wèn) MYSQL:
8.MyCat 配置數(shù)據(jù)庫(kù)集群
數(shù)據(jù)庫(kù)集群負(fù)載策略:
第一種配置方案:
schema.xml
<?xml version="1.0"?>缺陷:可能有 IO 延遲問(wèn)題。
第二種配置方案:
<?xml version="1.0"?>屬性說(shuō)明:
1.balance 屬性 balance=”0”, 不開(kāi)啟讀寫(xiě)分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上 balance=”1”,全部的 readHost 與 stand by writeHost 參與 select 語(yǔ)句的負(fù)載均衡 balance=”2”,所有讀操作都隨機(jī)的在 writeHost、 readhost 上分發(fā)。 balance=”3”, 所有讀請(qǐng)求隨機(jī)的分發(fā)到 writeHost 對(duì)應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力 2 writeType 屬性 writeType=”0”, 所有寫(xiě)操作發(fā)送到配置的第一個(gè) writeHost,第一個(gè)掛了切到還生存的第 二個(gè) writeHost,重新啟動(dòng)后已切換后的為準(zhǔn),切換記錄在配置文件中:conf/dnindex.properties (datanode index) writeType=”1”,所有寫(xiě)操作都隨機(jī)的發(fā)送到配置的 writeHost,1.5 以后廢棄不推薦 3 switchType 屬性 也涉及到讀寫(xiě)分離問(wèn)題,可以解決 IO 延遲問(wèn)題。 switchType='-1' 表示不自動(dòng)切換 switchType='1' 默認(rèn)值,表示自動(dòng)切換 switchType='2' 基于 MySQL 主從同步的狀態(tài)決定是否切換讀寫(xiě)主機(jī),心跳語(yǔ)句為 show slave status。 當(dāng)心跳監(jiān)測(cè)獲取的數(shù)據(jù)發(fā)現(xiàn)了 IO 的延遲,則讀操作自動(dòng)定位到 writeHost 中。如果心跳監(jiān)測(cè)獲取的數(shù)據(jù)沒(méi)有 IO 延遲,則讀操作自動(dòng)定位到 readHost 中。建議為 不同的表格定位不同的 dataHost 節(jié)點(diǎn)。總結(jié)
以上是生活随笔為你收集整理的haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python3.7安装pygal_pip
- 下一篇: 江西事业单位计算机管理岗怎么样,江西省直