mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇
今天我們就來搭建一個讀寫分離,負載均衡的MySQL集群。想了解高可用理論方面內容的童鞋可以閱讀理論篇。
奧茲·杰克:MySQL高可用方案:理論篇?zhuanlan.zhihu.com搭建的集群的基本架構如下:
假設該集群下各機器的IP地址如下:
Master: 192.168.1.1
route:192.168.1.2
slave1:192.168.1.3
slave2:192.168.1.4
首先,我們需要通過主從復制搭建起最基本的一主三從集群。
- 配置master
然后修改my.cnf文件,在[mysqld]下添加如下配置:
[mysqld] server-id=1 # id必須唯一 log-bin=mysql-bin # 二進制文件名 log-bin-index=master-bin.index # 顯示master狀態 binlog-do-db=DATABASE_NAME # 主從復制哪些數據庫 sync_binlog=N # 每執行N次寫入后與硬盤同步一次值得一提的是,sync_binlog參數用于控制數據庫的binlog與磁盤同步,默認情況下,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系統自己控制它的緩存的刷新。這時候的性能是最好的,但是風險也是最大的。因為一旦系統Crash,在binlog_cache中的所有binlog信息都會被丟失。1是最安全的,但是也是最慢的。因此,可以視具體情況選擇合適的sync_binlog值。
重啟mysqld服務之后,通過SHOW MASTER STATUS;可以查看主服務器的master狀態
SHOW MASTER STATUS;其中File顯示的是二進制日志的文件名稱,假設此處File為‘mysql-bin.000001’,Position為654321
- 配置Slave
修改配置文件my.cnf,在[mysqld]下添加如下配置:
[mysqld] server-id=2 # 此id一定要大于master的id,且id必須保持唯一 relay-log-index=slave-relay-bin.index # 定義relay-log-index的文件名 relay-log=slave-relay-bin # 定義relay-log的文件名(默認保存在數據目錄下)配置完畢后重啟mysqld,進入mysql命令行開始登陸master:
change master to master_host='192.168.1.1', master_port=3306, master_user='repli', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=654321;其中master_log_file='mysql-bin.000001' 填的是master中二進制文件的名稱
master_log_pos=654321 填的是master中Position的值
然后執行start slave;開始主從復制
mysql> start slave; # 開始主從復制此時可以通過show slave status G;查看從機狀態
show slave status G;為了使從服務器專注于讀服務,可以在每臺從服務器上都執行set global read_only=1;來禁止寫入。
而負載均衡可以通過HAProxy實現,在route機上安裝HAProxy。
- - - - - - - - - - - - - - - - - - - HAProxy安裝過程省略線 - - - - - - - - - - - - - - - - - - - - -
安裝成功后打開/etc/haproxy/haproxy.cfg進行配置
globaldaemon # 以守護進程的方式工作于后臺,其等同于“-D”選項的功能nbproc 1log 127.0.0.1 local2 # 通過local2進行log記錄pidfile /var/run/haproxy.pidmaxconn 5000 # 最大并發連接數,等同于命令行選項“-n” default=4000defaultsmode tcp # mode{tcp/http/health}: tcp在第四層, http在第七層.retries 3 # 3次連接失敗就認為服務器不可用,通過check進行檢查option redispatch # serverId對應的服務器掛掉后,強制定向到其他健康的服務器option abortonclosemaxconn 4096timeout connect 5000mstimeout client 30000mstimeout server 30000mstimeout check 2000log global# 監控頁面配置 listen admin_statsstats enablebind 0.0.0.0:8080 # 監聽端口mode httpoption httplogmaxconn 5stats refresh 30s # 30s刷新一次頁面stats uri /MONITER # 虛擬路徑stats hide-version # 隱藏HAProxy的版本號stats realm Global statisticsstats auth root:abcd1234 # 登錄賬號:密碼 # 配置完畢后可以通過 http://ip:8080/MONITER 同時輸入賬號密碼來訪問HAProxy的監控頁面listen testbind 0.0.0.0:3306log 127.0.0.1 local0 debugbalance roundrobin # 負載均衡算法option mysql-check user lb01mode tcpserver slave1 192.168.1.3:3306 server slave2 192.168.1.4:3306 # 如果還有更多從機,直接追加即可- 配置段說明:
“global”配置中的參數為進程級別的參數,且通常與其運行的操作系統有關
“defaults”用于為所有其他配置段提供默認參數
“forntend”用于定義一系列監聽的套接字,這些套接字可以接受客戶端請求并與子建立連接
“backend” 用于定義一系列“后端”服務器,代理將會將對應客戶端的請求轉發至這些服務器
“listen” 用于定義通過關聯“前段”和“后端”一個完整的代理,通常只對TCP流量有用
- 負載均衡算法:
其支持的算法有:
roundrobin:基于權重進行輪詢,在服務器的處理時間保持均勻分布時 ,這是最平衡、最公平的算法。此算法是動態的,這表示某權重可以在運行時進行調整,不過,在設計上,每個后端服務器僅能最多支持4128個連接。
static-rr:基于權重進行輪詢,與roundrobin類似,但是為靜態方法,在運行時調整期后端權重不會生效,不過,其在后端服務器連接數上沒有限制。
leastconn:新的連接會被派發至具有最少連接數目的后端服務器,在有這較長會話的場景中推薦使用此算法,如LDAP、SQL等。其并不太適合用于較短會話的應用層協議,如HTTP,此算法是動態的,可以在運行時調整其權重。
source:將請求的源地址進行hash運算,并有后端的服務器的權重總數相處后派發至某匹配的服務器,這可以使得同一個客戶端IP的請求始終被派發至某特定的服務器,不過,當服務器權重總數發生變化時,如某服務器宕機或者添加新服務器,許多的請求可能會被派發至與此前請求不同的服務器,常用于負載均衡無cooki功能的基于TCP的協議,默認為動態,不過可以使用hash-type修改此特性。
uri:對URI的左半部分(“問號”標記之前的部分)或整個URI進行hash運算,并由服務器的總權重相除后派發至某匹配的服務器;這可以使得對同一個URI的請求總是派發至某匹配的服務器,除法服務器的權重總數發生了變化,此算法常用于代理緩存或反病毒代理以提高緩存的命中率,需要注意的是,此算法僅應用于HTTP后端服務器場景,其默認為靜態算法,不過可以使用hash-type修改此特性。
url_param:通過為URL指定的參數在每個HTTP GET請求中將會被索引,日過找到了指定的參數且其通過等于號“=”被賦予了一個值,那么此值將被執行hash運算并被服務器的總權重相處后派發至某匹配的服務器,此算法可以通過追蹤請求中的用戶標識進而確保同一個用戶的ID請求被發送同一個特定的服務器,除非服務器的總權重發生了變化;如果某請求中沒有出現指定的參數或其沒有有效值,則使用輪詢算法對其想用請求進行調度,此算法默認為靜態,不過可以使用hash-type修改此特性。
har():對于每個HTTP請求,通過指定的HTTP首部將會被檢索,如果對于那個的首部沒有出現或其沒有有效值,則使用輪詢算法對響應請求進行調度,其有一個可選項“use_domain_only”可以指定檢索類似host類的首部時僅計算域名部分以降低hash算法的運算量,此算法默認為靜態,不過可以使用hash-type修改此特性。
- 參數mode說明:
其一共支持tcp、http、health三種模式。
2. http:實例運行于http模式,客戶端請求在轉發至后端服務器之前將被深度分析,所有不與RFC模式兼容的請求都會被拒絕
3. health:實例運行于health模式,其對入站請求僅響應“OK”信息并關閉連接,且不會記錄任何日志信息 ,此模式將用于相應外部組件的監控狀態檢測請求;目前來講,此模式已經廢棄,因為tcp或http模式中的monitor關鍵字可完成此類功能
介紹完haproxy的基本配置以后,咱們回到部署的步驟中。
配置完畢后,直接service haproxy start啟動haproxy服務即可。
此時查詢haproxy狀態就可以看得到:
service haproxy statusHAProxy啟動成功!現在整個集群中以它作為從機負載均衡的路由,讀服務直接訪問route,它會根據負載均衡算法將讀請求分配給某個slave,從而實現負載均衡。
總結
以上是生活随笔為你收集整理的mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: emc整改措施及案例_12.5EMC一点
- 下一篇: 画一个圆角多边形_CAD零基础教程,矩形