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