https://hub.docker.com/r/mysql/mysql-cluster

https://github.com/mysql/mysql-docker/tree/mysql-cluster

https://github.com/mysql/mysql-docker/


1.docker network

docker network ls

-Create a docker network

docker network create cluster — subnet=192.168.0.0/16


2.修改管理节点的集群配置文件

https://github.com/mysql/mysql-docker/tree/mysql-cluster

-下载对应版本的mysql-cluster.cnf


3.启动管理节点

docker run -d --net=cluster --name=management1 --ip=192.168.0.2  -v /data/docker/mysql/mysql-cluster/8.0/mysql-cluster.cnf:/etc/mysql-cluster.cnf:ro  -v /data/docker/mysql/mysql-cluster/8.0/my.cnf:/etc/my.cnf:ro --mount source=management1,target=/var/lib/mysql  mysql/mysql-cluster ndb_mgmd


-在指定自定义的network时,最好使用-it参数

---两个数据节点

docker run  -dit  --net=cluster  -p 13306:3306  --name=ndb1   --mount source=ndb1,target=/var/lib/mysql  --ip=192.168.0.3  -v /data/docker/mysql/mysql-cluster/8.0/mysql-cluster.cnf:/etc/mysql-cluster.cnf:ro  -v /data/docker/mysql/mysql-cluster/8.0/my.cnf:/etc/my.cnf:ro   mysql/mysql-cluster ndbd

docker run  -dit  --net=cluster  -p 13306:3306  --name=ndb2    --mount source=ndb2,target=/var/lib/mysql  --ip=192.168.0.4  -v /data/docker/mysql/mysql-cluster/8.0/mysql-cluster.cnf:/etc/mysql-cluster.cnf:ro  -v /data/docker/mysql/mysql-cluster/8.0/my.cnf:/etc/my.cnf:ro   mysql/mysql-cluster ndbd


---SQL节点

docker run  -dit  --net=cluster  -p 13308:3306  --name=mysql1  --mount source=mysql1,target=/var/lib/mysql  --ip=192.168.0.5  -v /data/docker/mysql/mysql-cluster/8.0/mysql-cluster.cnf:/etc/mysql-cluster.cnf:ro  -v /data/docker/mysql/mysql-cluster/8.0/my.cnf:/etc/my.cnf:ro  -e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no  mysql/mysql-cluster mysqld

....

docker run  -dit  --net=cluster  -p 13308:3306  --name=mysql2  --mount source=mysql2,target=/var/lib/mysql  --ip=192.168.0.6  -v /data/docker/mysql/mysql-cluster/8.0/mysql-cluster.cnf:/etc/mysql-cluster.cnf:ro  -v /data/docker/mysql/mysql-cluster/8.0/my.cnf:/etc/my.cnf:ro  -e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no   mysql/mysql-cluster mysqld


docker logs mysql1 2>&1 | grep PASSWORD

docker exec -it mysql1 mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';



docker run -dit --net=cluster --restart always  --privileged=true  --name=management1  --ip=192.168.0.21 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /etc/localtime:/etc/localtime:ro  -v /data/file:/data/file/ \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

mysql/mysql-cluster ndb_mgmd

docker run -dit --net=cluster --restart always  --privileged=true  --name=ndb1 --ip=192.168.0.31 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

-v /etc/localtime:/etc/localtime:ro mysql/mysql-cluster ndbd

docker run -dit --net=cluster --restart always  --privileged=true  --name=ndb2 --ip=192.168.0.32 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

-v /etc/localtime:/etc/localtime:ro mysql/mysql-cluster ndbd

docker run -dit --net=cluster --restart always  --privileged=true  --name=ndb3 --ip=192.168.0.33 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

-v /etc/localtime:/etc/localtime:ro mysql/mysql-cluster ndbd

docker run -dit --net=cluster --restart always  --privileged=true  --name=ndb4 --ip=192.168.0.34 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

-v /etc/localtime:/etc/localtime:ro mysql/mysql-cluster ndbd

docker run -dit --net=cluster --restart always  --privileged=true  --name=ndb5 --ip=192.168.0.35 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

-v /etc/localtime:/etc/localtime:ro mysql/mysql-cluster ndbd

docker run -dit --net=cluster -p 3396:3306  --restart always  --privileged=true  --name=mysql1 --ip=192.168.0.40 \

-e MYSQL_ROOT_PASSWORD=wdqdmm@r  -e MYSQL_ALLOW_EMPTY_PASSWORD=no \

-v /data/docker/mysql/mysql-cluster/cluster.8.cnf:/etc/mysql-cluster.cnf:ro \

-v /data/docker/mysql/mysql-cluster/my.8.cnf:/etc/my.cnf:ro \

-v /etc/localtime:/etc/localtime:ro  mysql/mysql-cluster mysqld

#docker run -dit --net=cluster --restart always  --privileged=true --name=mgm  --ip=192.168.0.20  mysql/mysql-cluster ndb_mgm

#docker exec -it mgm ndb_mgm

docker exec -it management1  ndb_mgm

show

docker exec -it management1 ndb_mgmd -f  /etc/mysql-cluster.cnf  --initial --reload

create user ihunter@'%' identified  by 'wdqdmm@m';  # 增加

grant all privileges on *.* to ihunter@'%' with grant option;

ALTER USER ihunter@'%' IDENTIFIED WITH mysql_native_password BY 'wdqdmm@m';  # 修改密码 or 解决1045异常.

flush privileges;

docker stop management1  ndb1  ndb2 ndb3 ndb4 ndb5  mysql1

docker rm  management1  ndb1  ndb2  ndb3 ndb4 ndb5  mysql1

podman inspect management1   | grep IPAddress\"



---在管理节点查看集群状态

docker run -it --net=cluster mysql/mysql-cluster ndb_mgm

ndb_mgm> show


/etc/my.cnf

/etc/mysql-cluster.cnf 


---查看集群内存使用情况

ndb_mgm> all report memoryusage;

关闭集群顺序:SQL节点->数据节点->管理节点 或者使用# ./ndb_mgm -e shutdown命令关闭集群

启动集群顺序: 管理节点->数据节点->SQL节点


---验证测试

通过SQL节点(192.168.1.2记为SQL1/192.168.1.11记为SQL2)连入MySQL数据库



# mysql cluster在线添加数据节点

1.修改管理节点的config.ini配置文件 ,添加

-这里的Id不能跟已有的Id重复

[mysqld]

NodeId=6

hostname=192.168.0.6

2.关闭管理节点,用reload方式启动管理节点

-停止管理节点

ndb_mgm> 1 stop  

--停止管理节点不影响sql节点的正常访问。

-执行ndb_mgm进入管理命令界面

mysql-cluster]# 

ndb_mgmd -f  /etc/mysql-cluster.cnf  --initial--reload    #加上reload参数,使得修改过的config.ini生效

show

启动成功后用show查看,可以看到新加入的数据节点,并且处于未连接状态。

3.滚动重启旧的数据存储节点服务(滚动重启,不能所有节点同时重启,如果同时停止,数据库前端查询就会出现错误)

ndb_mgm> 2 RESTART

ndb_mgm> 3 RESTART

4.  滚动重启所有的数据查询节点服务

mysql-cluster]# bin/ mysqladmin -uroot -ppassword shutdown

mysql-cluster]# mysqld_safe --console --ndbcluster --ndb-connectstring=192.168.0.2

5.以初如化方式 启动新增加的数据存储节点

mysql-cluster]# ndbd -c 192.168.0.6 --initial

-启动后在管理节点上用show命令查看可以 看到新加入的节点已经启动并处于未分组状态

6.为新节点增加分组,在管理节点上ndb_mgm下输入以下命令:

ndb_mgm> create nodegroup 6,7

-这个数字不是随意设置的,是指你要添加哪些node到nodegroup中,这里是id=4,id=5的数据节点。

这时在管理节点上show,可以看到新节点已经分组。

ndb_mgm> show


# NoOfReplicas

mycluster 中没有参数设置节点组数. 节点组数=节点数/NoOfReplicas.

所以你如果总共有两个数据节点,如果NoOfReplicas设为2, 那么意味着只有一个节点组. 如果NoOfReplicas=1,那么就有两个节点组。


管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令“ndb_mgmd”启动的。


数据节点:这类节点用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令“ndbd”启动的。


SQL 节点:这是用来访问 Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点是使用命令“mysqld –ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动。


注释:在很多情况下,术语“节点”用于指计算机,但在讨论MySQL Cluster时,它表示的是进程。在单台计算机上可以有任意数目的节点,为此,我们采用术语“ Cluster主机”。


https://hub.docker.com/r/blackkensai/mysql-cluster

https://hub.docker.com/r/jonhartley/mysql-cluster8-sql

https://hub.docker.com/r/ljishen/mysql-cluster

https://hub.docker.com/r/jonhartley/mysql-cluster8-sql

https://hub.docker.com/r/jonhartley/mysql-cluster-mgm

https://hub.docker.com/r/jonhartley/mysql-cluster8-data

https://hub.docker.com/r/jonhartley/mysql-cluster-mgm


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回