成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)庫集群主從架構(gòu)查詢功能設(shè)計

oysun / 3201人閱讀

摘要:按照任意一個或者域名查找該數(shù)據(jù)庫實例所在集群架構(gòu)是否是主庫或者從庫,是運維中非常常見和必不可少的功能。回溯主庫回溯主庫使用賬號登錄執(zhí)行命令,查找當(dāng)前庫的主庫信息進行整理。

按照任意一個IP或者域名查找該數(shù)據(jù)庫實例所在集群架構(gòu)、是否是主庫或者從庫,是DBA運維中非常常見和必不可少的功能。本文描述的功能實現(xiàn)已經(jīng)實際應(yīng)用于某互聯(lián)網(wǎng)公司內(nèi)部,目前運行穩(wěn)定,持續(xù)提供服務(wù)。這里和大家分享實現(xiàn)方式,和大家一起學(xué)習(xí)。

1. 前提條件
? ? ? ? 為了能夠統(tǒng)一查找所有集群架構(gòu),這些機器需要有一個統(tǒng)一的能夠訪問所有機器的賬號和密碼,這里使用db_admin;另外做主從同步的時候,需要使用統(tǒng)一的賬號和密碼,這里使用repl。
? ? ? ? 作為示例,這里使用如下的集群結(jié)構(gòu):


? ? ? ? 這里A、B、C是主庫的從庫,是一級從庫,D、E是從庫C的從庫,是二級從庫,如果實際有其他更復(fù)雜的結(jié)構(gòu),以此類推即可。

2. 搜索查找
? ? ? ? 平時查找,任意給一個IP或者域名進行查找,由于集群中是無法標(biāo)示域名的,因此需要將域名轉(zhuǎn)化為IP進行查找。按照任意IP查找,不會知道它在集群所處的位置,為了得到整個集群的結(jié)構(gòu)需要先回溯到整個集群的主庫。

3. 回溯主庫
? ? ? ?回溯主庫使用db_admin賬號登錄MySQL執(zhí)行"SHOW SLAVE STATUS"命令,查找當(dāng)前庫的主庫信息進行整理。
針對之前的集群結(jié)構(gòu)常見的回溯類型如下圖的三種:

最終要獲得的都是主庫實例,python的實現(xiàn)代碼如下:

# curr_node 當(dāng)前搜索節(jié)點
# lisense 統(tǒng)一訪問的賬號,密碼
# sub_node 子節(jié)點
def traceback_root(curr_node, lisense, sub_node):
    query_process = "SHOW SLAVE STATUS"
    master_row = None
    conn = None
    try:
        # 連接當(dāng)前數(shù)據(jù)庫,查找主庫信息
        conn = get_connection(
            curr_node.get("ip"), curr_node.get("port"),
            lisense.get("account"), lisense.get("passwd"))
        with open_cursor(conn) as cursor:
            cursor.execute(query_process)
            master_row = cursor.fetchone()

    except Exception as e:
        return None

    if master_row:
        return curr_node
    # 讀取主庫信息
    io_run = master_row.get("Slave_IO_Running", "")
    sql_run = master_row.get("Slave_SQL_Running", "")
    master_ip = master_row.get("Master_Host", "")
    master_port = master_row.get("Master_Port", "")

    # 檢查主庫狀態(tài),狀態(tài)不對返回當(dāng)前節(jié)點
    if io_run.lower() == "yes" and sql_run.lower() == "yes":
        may_master_node = dict()
        may_master_node["ip"] = master_ip
        may_master_node["port"] = master_port

        # 檢查父節(jié)點實例信息是否和子節(jié)點一樣,
        # 用來避免雙主庫回溯陷入無線循環(huán)的情況
        if sub_node and sub_node.get("ip", "") == master_ip  and
                sub_node.get("port", "") == master_port:
            return None

        # 由于考慮了雙主的情況,當(dāng)前庫的父節(jié)點只是可能主庫,
        # 使用父節(jié)點繼續(xù)回溯主庫實例
        master_node = traceback_root(
            may_master_node, lisense, curr_node)
        
        # 如果回溯到主庫,返回;否則返回當(dāng)前節(jié)點
        if master_node:
            return master_node
        else:
            return curr_node

    else:
            return curr_node

4. 遍歷從庫
? ? ? ?找到主庫之后,從主庫開始,查找主庫下的所有從庫。查找從庫使用db_admin登錄MySQL執(zhí)行"SHOW PROCESSLIST"命令,然后從結(jié)果里,按照User是否是repl進行篩選,對于用戶是repl的從庫,連接上去使用回溯主庫使用的查看主庫的方法,驗證從庫的主庫是否是當(dāng)前查詢的數(shù)據(jù)庫實例,是的話,加入集群;否則放棄。對于查找出來的從庫,繼續(xù)使用上述方式查找從庫,知道找到所有從庫。

5. 返回集群結(jié)構(gòu)
? ? ? ?查找出來的集群結(jié)構(gòu),按照json格式組織,可以返回給需要的服務(wù),也可以整理之后顯示在頁面,下圖是對查找出來的整個集群結(jié)構(gòu)的簡單顯示:

6. 結(jié)束語
? ? ? ?整個查詢的大致過程如此,這里沒有說太多的編碼細(xì)節(jié)。在實際使用的過程中,可以根據(jù)需要自行進行調(diào)整,如添加多線程提高查詢速度等。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38474.html

相關(guān)文章

  • 數(shù)據(jù)庫集群主從架構(gòu)查詢功能設(shè)計

    摘要:按照任意一個或者域名查找該數(shù)據(jù)庫實例所在集群架構(gòu)是否是主庫或者從庫,是運維中非常常見和必不可少的功能?;厮葜鲙旎厮葜鲙焓褂觅~號登錄執(zhí)行命令,查找當(dāng)前庫的主庫信息進行整理。 按照任意一個IP或者域名查找該數(shù)據(jù)庫實例所在集群架構(gòu)、是否是主庫或者從庫,是DBA運維中非常常見和必不可少的功能。本文描述的功能實現(xiàn)已經(jīng)實際應(yīng)用于某互聯(lián)網(wǎng)公司內(nèi)部,目前運行穩(wěn)定,持續(xù)提供服務(wù)。這里和大家分享實現(xiàn)方式,...

    shevy 評論0 收藏0
  • 儲存高可用架構(gòu)

    摘要:一雙機高可用主備方式主機和備機雙方只需要進行數(shù)據(jù)復(fù)制即可,無須進行狀態(tài)判斷和主備切換這類復(fù)雜的操作應(yīng)用場景內(nèi)部的后臺管理系統(tǒng)主從復(fù)制從機需要提供讀操作,需要考慮主從復(fù)制延遲客戶端感知主從關(guān)系等問題應(yīng)用場景寫少讀多的新聞網(wǎng)站雙機切換設(shè)計要點主 showImg(https://segmentfault.com/img/bVbtpqk?w=648&h=174);? 一、雙機高可用 1、主備方...

    Lin_YT 評論0 收藏0
  • 【最全】Java 進階面試總結(jié)

    摘要:這里有一份面試題相關(guān)總結(jié),涉及高并發(fā)分布式高可用相關(guān)知識點,在此分享給大家,希望大家能拿到一份理想的知識點會陸續(xù)更新在上,覺得還算湊和的話可以關(guān)注一下噢高并發(fā)架構(gòu)消息隊列為什么使用消息隊列消息隊列有什么優(yōu)點和缺點都有什么優(yōu)點和缺點如何保證消 這里有一份面試題相關(guān)總結(jié),涉及高并發(fā)、分布式、高可用相關(guān)知識點,在此分享給大家,希望大家能拿到一份理想的 Offer! 知識點會陸續(xù)更新在 Git...

    nifhlheimr 評論0 收藏0

發(fā)表評論

0條評論

oysun

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<