利用HAProxy代理SQL Server的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 -x -m

vi /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -m 0 -r -x"

 

 


#編輯rsyslog.conf 文件添加兩行local3.*  和local0.*

vi /etc/rsyslog.conf
local7.*                                                /var/log/boot.log
local3.*                                                /var/log/haproxy.log
local0.*                                               /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     
stats socket /var/run/haproxy.sock mode 666 level admin
stats timeout 2m


defaults 
mode http 
log                 127.0.0.1:514       local3                     
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提供了一個后台管理界面

 

查看haproxy的日志

cat /var/log/haproxy.log


測試驗證

使用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

 

如果是每個業務使用不同端口,可以使用下面的配置文件

比如報表使用1433端口,BI抽取數據使用2433端口

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 
    stats socket /var/run/haproxy.sock mode 666 level admin
    stats timeout 2m

    


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
    
    
listen mssql2 :2433
    mode tcp
    balance leastconn
    server mssqldb3 10.11.10.37:1433   maxconn 6000 check port 1433 inter 2000  rise 2 fall 2

 

 

如有不對的地方,歡迎大家拍磚o(∩_∩)o 

本文版權歸作者所有,未經作者同意不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM