Docker 學習系列13 實現 基于pxc 的mysql 多節點主主同步

背景

MySQL本身是開源的,有些公司或社區基于MySQL發布了新的分支,如有名的MariaDB。
在介紹 Percona 之前,首要要介紹的是XtraDB存儲引擎,在MYSQL中接觸比較多的是MyISAM 和 InnoDB這兩個存儲引擎。
MySQL 4 和 5 使用默認的 MyISAM 存儲引擎安裝每個表。從5.5開始,MySQL已將默認存儲引擎從 MyISAM 更改為 InnoDB。MyISAM 沒有提供事務支持,而 InnoDB 提供了事務支持。與 MyISAM 相比,InnoDB 提供了許多細微的性能改進,并且在處理潛在的數據丟失時提供了更高的可靠性和安全性。
Percona Server由領先的MySQL咨詢公司Percona發布。Percona Server是一款獨立的數據庫產品,其可以完全與MySQL兼容,可以在不更改代碼的情況了下將存儲引擎更換成XtraDB 。

Percona XtraDB Cluster 完全兼容MySQL。

常見MySQL集群方案

image.png

Percona XtraDB Cluster優缺點

優點:
1.當執行一個查詢時,在本地節點上執行。因為所有數據都在本地,無需遠程訪問。
2.無需集中管理。可以在任何時間點失去任何節點,但是集群將照常工作。
3.良好的讀負載擴展,任意節點都可以查詢。

缺點:
1.加入新節點,開銷大。需要復制完整的數據。
2.不能有效的解決寫縮放問題,所有的寫操作都將發生在所有節點上。
3.有多少個節點就有多少重復的數據。

基于Docker的實現流程

  1. 拉鏡像 docker pull percona/percona-xtradb-cluster:5.7
  2. 鏡像名字有點長,起個短點的
    docker tag percona/percona-xtradb-cluster:5.7 pxc
  3. 出于安全考慮,針對PXC集群實例創建內部網絡
    創建的時候通過參數指定IP段和子網掩碼,Docker默認使用的IP 172.17.0.1,我們換個別的。
    docker network create --subnet=172.18.0.0/24 pxc-network
  4. 創建第一個節點
    docker run -d -p 33010:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster --name=pxc_node1 --net=pxc-network --ip=172.18.0.2 pxc
    執行 docker logs pxc_node1
    查看執行狀態,如果看到 mysqld: ready for connections.
    就可以使用navicat等工具測試連接。
  5. 創建第二個數據庫節點,并加入到第一個集群中,注意多了 CLUSTER_JOIN 參數
    docker run -d -p 33011:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster -e CLUSTER_JOIN=pxc_node1 --name=pxc_node2 --net=pxc-network --ip=172.18.0.3 pxc
  6. 創建第三個數據庫節點,并加入到第一個集群中,注意多了 CLUSTER_JOIN 參數
    docker run -d -p 33012:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster -e CLUSTER_JOIN=pxc_node1 --name=pxc_node3 --net=pxc-network --ip=172.18.0.4 pxc
  7. 接下來可以創建第N個節點,注意參數如容器名稱 --name 和映射的端口別沖突;
  8. 測試:本地連接這三個節點,在其中一個創建demo數據,其他節點都自動同步數據過去了
image.png

注意

  1. 啟動第一個節點后記得使用docker logs查看啟動狀態,然后使用navicat等工具測試連接,等第一個mysql運行成功后再運行第二個容器。否則第二個起不來,需要重新啟動容器。
  2. 如果停掉某一節點 docker stop pxc_node1 再啟動時 docker start pxc_node1 可能會發現連接不上了。這時候可以刪除容器,重新運行,命令類似 docker run -d -p 33010:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster -e CLUSTER_JOIN=pxc_node2 --name=pxc_node1 --net=pxc-network --172.18.0.2 pxc

參考

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/install/docker.html
https://www.percona.com/doc/percona-xtradb-cluster/5.7/index.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容