背景
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的實現流程
- 拉鏡像
docker pull percona/percona-xtradb-cluster:5.7
- 鏡像名字有點長,起個短點的
docker tag percona/percona-xtradb-cluster:5.7 pxc
- 出于安全考慮,針對PXC集群實例創建內部網絡
創建的時候通過參數指定IP段和子網掩碼,Docker默認使用的IP 172.17.0.1,我們換個別的。
docker network create --subnet=172.18.0.0/24 pxc-network
- 創建第一個節點
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等工具測試連接。 - 創建第二個數據庫節點,并加入到第一個集群中,注意多了 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
- 創建第三個數據庫節點,并加入到第一個集群中,注意多了 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
- 接下來可以創建第N個節點,注意參數如容器名稱 --name 和映射的端口別沖突;
- 測試:本地連接這三個節點,在其中一個創建demo數據,其他節點都自動同步數據過去了
image.png
注意
- 啟動第一個節點后記得使用docker logs查看啟動狀態,然后使用navicat等工具測試連接,等第一個mysql運行成功后再運行第二個容器。否則第二個起不來,需要重新啟動容器。
- 如果停掉某一節點
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