Docker 部署 MySQL 集群服务

一、什么是集群

计算机集群(computer cluster)是一组松散或紧密连接在一起工作的计算机。由于这些计算机协同工作,在许多方面它们可以被视为单个系统。与网格计算机不同,计算机集群将每个节点设置为执行相同的任务,由软件控制和调度。
集群的组件通常通过快速局域网相互连接,每个节点(用作服务器的计算机)运行自己的服务实例。在大多数情况下,所有节点使用相同的硬件和相同的操作系统,尽管在某些设置中(例如使用OSCAR),可以在每台计算机或不同的硬件上使用不同的操作系统。

二、集群的优点

集群的设计主要考虑性能,但实际使用中还涉及许多其他因素,包括容错(能够容许系统继续使用故障节点)能力、可扩展性、高性能、不需要频繁运行维护程序、资源集成(如RAID)和集中管理。集群的优点包括在发生灾难时启用数据恢复、提供并行数据处理和高计算能力。
在可伸缩性方面,集群提供了水平添加节点的能力。这意味着可以向集群中添加更多的计算机,以提高其性能、冗余和容错。与在集群中扩展单个节点相比,添加节点是一个既节省成本,又可以使集群获得更高的性能的解决方案。计算机集群的这一大特性允许大量性能较低的计算机执行较大的计算负载。
向集群添加新节点时,可靠性也会增加,这是因为进行维护的时候不需要停下整个集群,只需停下单个节点维护,集群的其余节点承担该节点的负载即可。
如果集群包含大量的计算机,那么可以使用分布式文件系统和RAID,这两种方法可以大大提高集群的可靠性和速度。

三、MySQL集群部署

在开始以下内容之前需要具备有如下软件使用的基础:

  1. Linux Shell
  2. 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)