<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Atlas MySQLMySQL 中間層

          聯(lián)合創(chuàng)作 · 2023-09-30 20:07

          Atlas是由 Qihoo 360,  Web平臺部基礎(chǔ)架構(gòu)團(tuán)隊開發(fā)維護(hù)的一個基于MySQL協(xié)議的數(shù)據(jù)中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎(chǔ)上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內(nèi)部得到了廣泛應(yīng)用,很多MySQL業(yè)務(wù)已經(jīng)接入了Atlas平臺,每天承載的讀寫請求數(shù)達(dá)幾十億條。

          主要功能:
          * 讀寫分離
          * 從庫負(fù)載均衡
          * IP過濾
          * SQL語句黑白名單
          * 自動分表

          Q & A
          -------------------
          Q: 是否支持多字符集?
          A: 這是我們對原版MySQL-Proxy的第一項改進(jìn),符合國情是必須的

          Q: 自動讀寫分離挺好,但有時候我寫完馬上就想讀,萬一主從同步延遲怎么辦?
          A: SQL語句前增加 /*master*/ 就可以將讀請求強(qiáng)制發(fā)往主庫

          Q: 主庫宕機(jī),讀操作受影響么?
          A: 在atlas中是不會的! 能問這樣的問題, 說明你用過官方的mysql-proxy, 很遺憾官方版本并未解決這個問題

          Q: 檢測后端DB狀態(tài)會阻塞正常請求么?
          A: 不會, atlas中檢測線程是異步進(jìn)行檢測的,即使有db宕機(jī),也不會阻塞主流程。在atlas中沒有什么異常會讓主流程阻塞! 同上,官方版本也會讓你失望

          Q: 想下線一臺DB, 又不想停掉mysql server, 怎么辦?
          A: 可以通過管理接口手動上下線后端db, atlas會優(yōu)先考慮管理員的意愿

          Q: 想給集群中增加一臺DB, 不想影響線上正常訪問可以嗎?
          A: 通過管理接口可以輕松實(shí)現(xiàn)

          Q: 相比官方mysql-proxy, atlas還有哪些改進(jìn)?
          A: 這實(shí)在是個難以回答的問題,性能,穩(wěn)定性,可靠性,易維護(hù)性,我們做過幾十項的改進(jìn),下面會盡量列一些較大的改動

          VS 官方MySQL-Proxy
          -------------------
          1. 將主流程中所有Lua代碼改為純C實(shí)現(xiàn),Lua僅用在管理接口
          2. 重寫網(wǎng)絡(luò)模型、線程模型
          3. 實(shí)現(xiàn)了真正意義的連接池
          4. 優(yōu)化了鎖機(jī)制,性能提高數(shù)十倍
          ......

          附名字來源:
              Atlas,希臘神話中雙肩撐天的巨人,普羅米修斯的兄弟,最高大強(qiáng)壯的神之一,因反抗宙斯失敗而被罰頂天。我們期望這個系統(tǒng)能夠腳踏后端DB,為前端應(yīng)用撐起一片天。

          二、配置文件示例
          -------------------
          [mysql-proxy]    #不需要改
          plugins = admin, proxy    #Atlas加載的模塊名稱,不需要改

          admin-username = user    #管理接口的用戶名
          admin-password = pwd    #管理接口的密碼
          admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua    #實(shí)現(xiàn)管理接口的Lua腳本所在路徑

          proxy-backend-addresses = 127.0.0.1:3306    #Atlas后端連接的MySQL主庫的IP和端口,可設(shè)置多項,用逗號分隔
          proxy-read-only-backend-addresses = 127.0.0.1:3305@2    #Atlas后端連接的MySQL從庫的IP和端口,2代表權(quán)重,用來作負(fù)載均衡,若省略則默認(rèn)為1,可設(shè)置多項,用逗號分隔

          daemon = false    #設(shè)置Atlas的運(yùn)行方式,設(shè)為true時為守護(hù)進(jìn)程方式,設(shè)為false時為前臺方式,一般開發(fā)調(diào)試時設(shè)為false,線上運(yùn)行時設(shè)為true
          keepalive = false    #設(shè)置Atlas的運(yùn)行方式,設(shè)為true時Atlas會啟動兩個進(jìn)程,一個為monitor,一個為worker,monitor在worker意外退出后會自動將其重啟,設(shè)為false時只有worker,沒有monitor,一般開發(fā)調(diào)試時設(shè)為false,線上運(yùn)行時設(shè)為true

          event-threads = 4    #工作線程數(shù),推薦設(shè)置與系統(tǒng)的CPU核數(shù)相等
          log-level = message    #日志級別,分為message、warning、critical、error、debug五個級別
          log-path = /usr/local/mysql-proxy/log    #日志存放的路徑
          instance = test    #實(shí)例名稱,用于同一臺機(jī)器上多個Atlas實(shí)例間的區(qū)分

          proxy-address = 0.0.0.0:1234    #Atlas監(jiān)聽的工作接口IP和端口
          admin-address = 0.0.0.0:2345    #Atlas監(jiān)聽的管理接口IP和端口

          min-idle-connections = 128    #連接池的最小空閑連接數(shù),可根據(jù)業(yè)務(wù)請求量大小適當(dāng)調(diào)大或調(diào)小
          tables = person.mt.id.3    #分表設(shè)置,此例中person為庫名,mt為表名,id為分表字段,3為子表數(shù)量,可設(shè)置多項,以逗號分隔
          pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=    #用戶名與其對應(yīng)的加密過的密碼,密碼使用加密程序encrypt加密,此設(shè)置項用于多個用戶名同時訪問同一個Atlas實(shí)例的情況,若只有一個用戶名則不需要設(shè)置該項
          charset = utf8    #默認(rèn)字符集,若不設(shè)置該項,則默認(rèn)字符集為latin1

          三、編譯安裝
          -------------------
          依賴:glib(2.32.0以上)、libevent(1.4以上)、Lua(5.1以上)、OpenSSL(0.9.8以上)

          ./bootstrap.sh    #可能需要修改其中的路徑
          make
          sudo make install

          四、啟動與停止
          -------------------
          進(jìn)入PREFIX/conf目錄,編輯instance.conf,此處instance的實(shí)際名稱應(yīng)與其中instance設(shè)置項相同,其他設(shè)置項含義見第二節(jié)。

          啟動:
          PREFIX/bin/mysql-proxyd instance start

          停止:
          PREFIX/bin/mysql-proxyd instance stop

          重啟:
          PREFIX/bin/mysql-proxyd instance restart

          查看運(yùn)行狀態(tài):
          PREFIX/bin/mysql-proxyd instance status

          瀏覽 25
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  四虎男人天堂 | 欧美亚洲天堂 | 91嫩草私人成人亚洲影院 | 性爱视频大香蕉 | 欧洲高潮视频在线看 |