利用HAProxy代理SQL Server的AlwaysOn輔助副本 公司最近資料庫升級到SQL Server2014 ,並部署了alwayson高可用集群 機房內有三套程式需要讀取資料庫 第一套:主程式,讀寫資料庫,連接主副本 第二套:報表程式,讀報表,連接輔助副本 第三套:歷史庫程式,讀歷史庫, ...
利用HAProxy代理SQL Server的AlwaysOn輔助副本
公司最近資料庫升級到SQL Server2014 ,並部署了alwayson高可用集群
機房內有三套程式需要讀取資料庫
第一套:主程式,讀寫資料庫,連接主副本
第二套:報表程式,讀報表,連接輔助副本
第三套:歷史庫程式,讀歷史庫,連接輔助副本
軟體環境
機器環境
架構圖
為什麼需要使用HAProxy?
之前機房裡面有2000個終端,這些終端是一個很小的嵌入式設備,第二套報表程式原來是使用直連資料庫IP(10.11.10.36)來連接資料庫
但這樣有一個弊端,當36這台輔助副本宕機,那麼報表程式就癱瘓了,因為2000個終端要更改資料庫連接需要燒寫程式到終端裡面非常耗費時間
可能要幾天時間
最後決定使用HAProxy做負載均衡和TCP連接重定向
使用HAProxy有幾個好處
1、前端不需要後端資料庫的實際IP,當需要升級後端資料庫,比如打補丁的時候特別方便
2、HAProxy能夠自動檢測後端資料庫服務,探測1433埠是否存活,如果1433埠出問題,能夠自動重定向連接到37這台輔助副本
3、減輕單台讀庫壓力,使用RR輪詢演算法,請求均衡分發到36和37這兩台輔助副本,減輕36這台機器的壓力
HAProxy相關配置步驟
#yum安裝,版本是1.5.4
yum install -y haproxy.x86_64
#編輯rsyslog 文件,修改為-c 2 -r
vi /etc/sysconfig/rsyslog SYSLOGD_OPTIONS="-c 2 -r"
#編輯rsyslog.conf 文件添加一行local2.*
vi /etc/rsyslog.conf local7.* /var/log/boot.log local2.* /var/log/haproxy.log
#重啟rsyslog服務
service rsyslog restart
# 編輯haproxy配置文件 下麵以mssql從庫負載均衡為例
vi /etc/haproxy/haproxy.cfg global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 6000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode http log global option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 6000 listen stats mode http bind *:2080 stats enable stats refresh 30s stats uri /haproxyadminstats stats realm HAProxy\ Statistics stats auth admin:admin stats admin if TRUE listen mssql :1433 mode tcp balance roundrobin server mssqldb1 10.11.10.36:1433 weight 1 maxconn 6000 check port 1433 inter 2000 rise 2 fall 2 server mssqldb2 10.11.10.37:1433 weight 1 maxconn 6000 check port 1433 inter 2000 rise 2 fall 2
#檢查配置文件是否有語法錯誤
haproxy -f /etc/haproxy/haproxy.cfg -c Configuration file is valid
#啟動haproxy
/etc/init.d/haproxy start
#檢查haproxy是否在監聽
netstat -lntp
註意:Centos機器只需要使用一個網口,不需要額外增加網口
#打開後臺管理界面
http://10.11.30.47:2080/haproxyadminstats
HAProxy提供了一個後臺管理界面
測試驗證
使用SSMS2016來連接HAProxy的IP
10.11.10.39
現在是連接到GZC-SQL03這台機
現在把 GZC-SQL03這台機的SQL服務停了
HAProxy已經探測到 GZC-SQL03這台機的SQL服務停了
再次點擊一下執行按鈕,可以發現已經重定向到 GZC-SQL02這台機
雖然經過HAProxy這一層,但是性能方面也不算太差
HAProxy的通信方式
通信方式類似於LVS的NAT模式
LVS的NAT模式(調度器將請求的目標ip即vip地址改為Real server的ip, 返回的數據包也經過調度器,調度器再把源地址修改為vip)
總結
線上環境使用HAProxy已經差不多1個月,到現在沒有出現過問題,比較穩定
對於HAProxy原理上的東西這裡就不敘述了,網上有很多資料
參考文章:
http://www.cnblogs.com/dehai/p/4885021.html
如有不對的地方,歡迎大家拍磚o(∩_∩)o
本文版權歸作者所有,未經作者同意不得轉載。