日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇

發布時間:2025/3/19 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • 先在主數據庫中創建主從復制使用的用戶repli
  • GRANT REPLICATION SLAVE ON *.* TO 'repli'@'%' IDENTIFIED BY 'password';

    然后修改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流量有用

    • 負載均衡算法:
    “balance”用于定義負載均衡算法,可用于"defaults"、"listen"和"backend"中。用于在負載均衡場景中挑選一個server。

    其支持的算法有:

    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模式),否則將無法啟動實例。

    其一共支持tcp、http、health三種模式。

  • tcp: 實例運行于純tcp模式,在客戶端和服務器端之間將建立一個全雙工的連接,且不會對7層報文做任何類型的檢查,此為默認模式,通常用于SSL、SSH、SMTP等應用
  • 2. http:實例運行于http模式,客戶端請求在轉發至后端服務器之前將被深度分析,所有不與RFC模式兼容的請求都會被拒絕

    3. health:實例運行于health模式,其對入站請求僅響應“OK”信息并關閉連接,且不會記錄任何日志信息 ,此模式將用于相應外部組件的監控狀態檢測請求;目前來講,此模式已經廢棄,因為tcp或http模式中的monitor關鍵字可完成此類功能

    介紹完haproxy的基本配置以后,咱們回到部署的步驟中。

    配置完畢后,直接service haproxy start啟動haproxy服務即可。

    此時查詢haproxy狀態就可以看得到:

    service haproxy status

    HAProxy啟動成功!現在整個集群中以它作為從機負載均衡的路由,讀服務直接訪問route,它會根據負載均衡算法將讀請求分配給某個slave,從而實現負載均衡。

    總結

    以上是生活随笔為你收集整理的mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。