Docker 部署 MySQL 集群服務

2021-09-22 20:17:00 字數 3440 閱讀 3756

計算機集群(computer cluster)是一組鬆散或緊密連線在一起工作的計算機。由於這些計算機協同工作,在許多方面它們可以被視為單個系統。與網格計算機不同,計算機集群將每個節點設定為執行相同的任務,由軟體控制和排程。

集群的元件通常通過快速區域網相互連線,每個節點(用作伺服器的計算機)執行自己的服務例項。在大多數情況下,所有節點使用相同的硬體和相同的作業系統,儘管在某些設定中(例如使用oscar),可以在每台計算機或不同的硬體上使用不同的作業系統。

集群的設計主要考慮效能,但實際使用中還涉及許多其他因素,包括容錯(能夠容許系統繼續使用故障節點)能力、可擴充套件性、高效能、不需要頻繁執行維護程式、資源整合(如raid)和集中管理。集群的優點包括在發生災難時啟用資料恢復、提供並行資料處理和高計算能力。

在可伸縮性方面,集群提供了水平新增節點的能力。這意味著可以向集群中新增更多的計算機,以提高其效能、冗餘和容錯。與在集群中擴充套件單個節點相比,新增節點是乙個既節省成本,又可以使集群獲得更高的效能的解決方案。計算機集群的這一大特性允許大量效能較低的計算機執行較大的計算負載。

向集群新增新節點時,可靠性也會增加,這是因為進行維護的時候不需要停下整個集群,只需停下單個節點維護,集群的其餘節點承擔該節點的負載即可。

如果集群包含大量的計算機,那麼可以使用分布式檔案系統和raid,這兩種方法可以大大提高集群的可靠性和速度。

在開始以下內容之前需要具備有如下軟體使用的基礎:

linux shell

docker

建立集群專用網路(可以根據需求定義子網範圍)

docker network create cluster --subnet=10.100.0.0/16
拉取網路映象

docker pull mysql/mysql-cluster
準備集群相關配置檔案

my.cnf檔案

[mysqld]

ndbcluster

ndb-connectstring=10.100.0.2

user=mysql

[mysql_cluster]

ndb-connectstring=10.100.0.2

mysql-cluster.cnf

[ndbd default]

noofreplicas=2

datamemory=80m

indexmemory=18m

[ndb_mgmd]

nodeid=1

hostname=10.100.0.2

datadir=/var/lib/mysql

[ndbd]

nodeid=2

hostname=10.100.0.3

datadir=/var/lib/mysql

[ndbd]

nodeid=3

hostname=10.100.0.4

datadir=/var/lib/mysql

[mysqld]

nodeid=4

hostname=10.100.0.10

[mysqld]

nodeid=5

hostname=10.100.0.11

建立管理節點

docker run -d --net=cluster --name=management1 --ip=10.100.0.2 -v /path/mysql-cluster.cnf:/etc/mysql-cluster.cnf mysql/mysql-cluster ndb_mgmd
建立資料節點(用於資料儲存)

docker run -d --net=cluster --name=ndb1 --ip=10.100.0.3 -v /path/my.cnf:/etc/my.cnf -v /path/db1:/var/lib/mysql mysql/mysql-cluster ndbd

docker run -d --net=cluster --name=ndb2 --ip=10.100.0.4 -v /path/my.cnf:/etc/my.cnf -v /path/db2:/var/lib/mysql mysql/mysql-cluster ndbd

建立sql服務節點(用於提供mysql服務給其他應用連線)

docker run -d --net=cluster --name=mysql1 --ip=10.100.0.10 -e mysql_random_root_password=true -p 3306:3306 -v /path/my.cnf:/etc/my.cnf mysql/mysql-cluster mysqld

docker run -d --net=cluster --name=mysql2 --ip=10.100.0.11 -e mysql_random_root_password=true -p 3307:3306 -v /path/my.cnf:/etc/my.cnf mysql/mysql-cluster mysqld

更改所有節點的預設密碼

docker logs mysql1 2>&1 | grep password # 獲取mysql的臨時密碼

docker exec -it mysql1 mysql -uroot -p # 輸入上乙個命令獲取的臨時密碼登入容器裡面的mysql服務

mysql> alter user 'root'@'localhost' identified by 'root'; # 更改root密碼為root

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; # 允許遠端連線

mysql> flush privileges; # 重新整理許可權

檢視當前集群狀態

docker run --rm -it --net=cluster -v /path/my.cnf:/etc/my.cnf -v /path/mysql-cluster.cnf:/etc/mysql-cluster.cnf mysql/mysql-cluster ndb_mgm
測試可用性

mysql> create database clustertest;

mysql> use clustertest;

mysql> create table test_table (name varchar(20), value varchar(20)) engine=ndbcluster;

Docker部署Redis集群

centos系統docker部署3主3從redis集群 docker pull redis 6.0.5 alpine密碼為redis2020pass,可自行修改 vi redis cluster.tmplport protected mode no cluster enabled yes clust...

docker部署kafka集群

sudo curl l s uname m o usr local bin docker composesudo chmod x usr local bin docker compose zookeeper映象 docker pull zookeeper kafka manager映象 docker...

docker 部署redis集群

部署方式這裡沒有採用哨兵模式,而是使用 分片 高可用 負載均衡的模式,架構圖 至少啟動6個容器 建立網絡卡 docker network create redis subnet 192.168.0.0 16 通過指令碼建立6個redis配置 for port in seq 1 6 do mkdir ...