使用docker进行跨主机mysql-cluster集群实践

构建集群环境

搭建docker swarm集群

在进行mysql-cluster集群前,我们需要设置好docker的集群环境,使用docker swarm模式来进行docker容器间的跨主机通信。
docker swarm集群的基本要求:

  1. 3台可以网络通信的Linux主机
  2. 安装了1.12.0以上版本的docker
  3. 开放TCP port 2377为集群管理通信端口,TCP and UDP port 7946 为节点间通信端口,UDP port 4789 为网络间流量端口
    然后使用 docker swarm init 来初始化一个新的swarm集群(本机作为一个管理节点),也可以用

docker swarm init --advertise-addr ip-adress

来指定作为管理节点的ip,根据给出的命令添加相应的工作/管理节点:

docker@manager:~$ docker swarm init --advertise-addr 192.168.0.100

Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.0.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

集群初始化完成后,用docker node ls查看当前节点信息。
如果没有记住添加节点的命令,可以用docker swarm join-token worker/manager可以重新获取添加工作/管理节点的命令。

创建docker跨主机overlay网络

现在我们已经创建了docker swarm集群,下一步是创建一个overlay网络,使得不同主机上的docker容器可以直接通过这个新建网络直接进行通信。

docker network create --driver overlay --attachable --subnet 192.168.0.0/24 dadao

swarm在设计之初是为了service(一组容器)而服务的,因此通过swarm创建的overlay网络在一开始并不支持单独的容器加入其中。但是在docker1.13, 我们可以通过“–attachable ” 参数声明当前创建的overlay网络可以被容器直接加入。

用docker启动mysql-cluster

mysql-cluster的配置安装

在docker安装mysql-cluster,先拉取最新的mysql-cluster镜像。

docker pull mysql/mysql-cluster

这里为了数据持久性,使用指定数据卷保存每个节点的数据。

docker volume create management1
docker volume create ndb1
docker volume create mysql1

mysql-cluster的配置文件:
my.cnf

[mysqld]
skip-grant-tables
ndbcluster
ndb-connectstring=192.168.12.5,192.168.12.10
user=mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
character-set-server = utf8mb4
default-time-zone = '+08:00'
max_allowed_packet = 100M

[mysql_cluster]
ndb-connectstring=192.168.12.5,192.168.12.10

mysql-cluster.cnf

[ndbd default]
NoOfReplicas=2
DataMemory=256M
IndexMemory=64M
MaxNoOfTables=1024
MaxNoOfAttributes=50000
MaxNoOfConcurrentTransactions=100000
MaxNoOfConcurrentOperations=100000
MaxNoOfOrderedIndexes=1024

[ndb_mgmd]
NodeId=1
hostname=192.168.12.5
datadir=/var/lib/mysql

[ndb_mgmd]
NodeId=2
hostname=192.168.12.10
datadir=/var/lib/mysql

[ndbd]
NodeId=3
hostname=192.168.12.30
datadir=/var/lib/mysql

[ndbd]
NodeId=4
hostname=192.168.12.40
datadir=/var/lib/mysql

[mysqld]
NodeId=5
hostname=192.168.12.100

[mysqld]
NodeId=6
hostname=192.168.12.200

部分配置不是必要,仅仅是项目需求

接下来分别运行mysql-cluster管理节点、数据节点和sql节点,为他们指定配置文件和数据卷,同时指定前面构建好的overlay网络,设置好相应ip

# 在指定自定义的network时,最好使用-it参数
# 运行管理节点:
docker run -d --net=dadao -v /home/dadao/mysql-conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/dadao/mysql-conf/my.cnf:/etc/my.cnf --mount source=management1,target=/var/lib/mysql --name=management1 --ip=192.168.12.5 mysql/mysql-cluster ndb_mgmd
docker run -dit --net=dadao -v /home/dadao/mysql-conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/dadao/mysql-conf/my.cnf:/etc/my.cnf --mount source=management1,target=/var/lib/mysql --name=management2 --ip=192.168.12.10 mysql/mysql-cluster ndb_mgmd
# 挂载目录:/var/lib/mysql

# 运行数据节点:
docker run -d --net=dadao -v /home/dadao/mysql-conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/dadao/mysql-conf/my.cnf:/etc/my.cnf --mount source=ndb1,target=/var/lib/mysql --name=ndb1 --ip=192.168.12.30 -p 13306:3306 mysql/mysql-cluster ndbd
docker run -dit --net=dadao -v /home/dadao/mysql-conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/dadao/mysql-conf/my.cnf:/etc/my.cnf --mount source=ndb2,target=/var/lib/mysql --name=ndb2 --ip=192.168.12.40 -p 13306:3306 mysql/mysql-cluster ndbd
# 挂载目录:/var/lib/mysql

# 运行mysql节点;
docker run -d --net=dadao -v /home/dadao/mysql-data:/opt/mysql-data -v /home/dadao/mysql-conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/dadao/mysql-conf/my.cnf:/etc/my.cnf --mount source=mysql1,target=/var/lib/mysql --name=mysql1 --ip=192.168.12.100 -p 13308:3306  mysql/mysql-cluster mysqld
docker run -dit --net=dadao -v /home/dadao/mysql-conf/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/dadao/mysql-conf/my.cnf:/etc/my.cnf --mount source=mysql2,target=/var/lib/mysql --name=mysql2 --ip=192.168.12.200 -p 13308:3306 mysql/mysql-cluster mysqld
# 挂载目录:/var/lib/mysql

最后使用docker exec -it management1 bash进入管理节点,输入ndb_mgm命令,查看集群运行情况

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Docker来模拟MySQL Cluster集群的部署,你可以按照以下步骤进行操作: 1. 安装Docker:首先确保你的系统上已安装Docker。你可以根据官方文档的指引来完成安装步骤。 2. 创建Docker网络:在终端中运行以下命令创建一个自定义的Docker网络,用于连接集群中的各个容器: ``` docker network create mysql-cluster ``` 3. 编写Docker Compose文件:创建一个名为docker-compose.yml的文件,并填入以下内容: ```yaml version: '3' services: mysql1: image: mysql/mysql-cluster environment: - MYSQL_CLUSTER_NAME=cluster - MYSQL_ROOT_PASSWORD=rootpassword networks: - mysql-cluster mysql2: image: mysql/mysql-cluster environment: - MYSQL_CLUSTER_NAME=cluster - MYSQL_ROOT_PASSWORD=rootpassword networks: - mysql-cluster mysql3: image: mysql/mysql-cluster environment: - MYSQL_CLUSTER_NAME=cluster - MYSQL_ROOT_PASSWORD=rootpassword networks: - mysql-cluster networks: mysql-cluster: external: true ``` 4. 启动容器:在终端中运行以下命令启动MySQL容器: ``` docker-compose up -d ``` 通过以上步骤,你可以使用Docker来模拟MySQL Cluster集群的部署。每个容器都代表一个MySQL节点,并且它们都在同一个自定义的Docker网络中互相通信。这种方式可以帮助你快速搭建一个本地的MySQL Cluster集群环境进行学习和测试。 请注意,这种方式只是模拟了集群的基本功能,不适用于生产环境。在实际部署中,你需要使用多台物理服务器来搭建真正的MySQL Cluster集群
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值