利用HAProxy代理SQL Server的AlwaysOn輔助副本

来源:http://www.cnblogs.com/lyhabc/archive/2016/08/30/5820492.html
-Advertisement-
Play Games

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近接觸了很多資料庫的東西,本來是一直接觸的是sql server,不過由於項目需要就開始對mysql進行了連接。下麵就讓我這個菜鳥淺談下經驗吧。 對於C++連接mysql,我不太喜歡多下載一個軟體mysqlodbc,所以採用的是通過mysql自己的API函數進行連接: 1、使用API的方式連接,需 ...
  • 先介紹一下環境: 我是異機恢復,和本機操作一樣。 一、 全量備份 步驟: ./innobackupex --user=root --password=root --host=172.17.210.112 --parallel=4 --throttle=400 --stream=tar /mysqlb ...
  • 由於工作需要,開始使用mysql資料庫,已經好久沒有使用了。基本已經忘了差不多。今天重新安裝配置了一下,寫個隨筆記錄一下,以免自己以後需要的時候翻看,如有不正確或需要補充的,希望大家多多留言。 首先下載mysql,我直接通過百度軟體中下載的“mysql-5.6.24-win32.1432006610 ...
  • 介紹 從archive單詞的解釋我們大概可以明白這個存儲引擎的用途,這個存儲引擎基本上用於數據歸檔;它的壓縮比非常的高,存儲空間大概是innodb的10-15分之一所以它用來存儲歷史數據非常的適合,由於它不支持索引同時也不能緩存索引和數據,所以它不適合作為併發訪問表的存儲引擎。Archivec存儲引 ...
  • MySql Server安裝步驟 1安裝MySql Server 2 安裝MySqlServer管理工具 解壓中文語言包,將文件複製到安裝目錄下覆蓋 文件覆蓋後,打開軟體設置語言為中文(CN) 3 MySqlServer開發註意事項(C#) public class Cmd { /// <summa ...
  • 總結了27條機器學習相關的Awesome系列,如有遺漏敬請指出。 ...
  • 在SQL Server資料庫或OACLE資料庫當中,通常一個會話持有某個資源的鎖,而另一個會話在請求這個資源,就會出現阻塞(blocking)。這是DBA經常會遇到的情況。當出現SQL語句的阻塞時,很多人想查看阻塞的源頭(哪個SQL語句阻塞了哪個SQL),這樣方便直觀、簡潔明瞭的定位問題。但是很多時... ...
  • 介紹 接下來幾篇文章會詳細介紹幾種常用的存儲引擎及適合場景。這篇文章就先來大概瞭解一下mysql的存儲引擎。 參考說明:mysql5.7 查看支持的存儲引擎 mysql> show engines \G; *************************** 1. row ************ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...