目标

搭建一个5个数据库的集群、数据实时同步

1. 安装镜像

1.1 安装地址

https://hub.docker.com/r/percona/percona-xtradb-cluster

1.2 Docker 拉取镜像

[root@localhost ~]# docker pull percona/percona-xtradb-cluster

2.创建Docker 网络

2.1 Docker网段命令

#创建网段、取名为:net1
[root@localhost ~]# docker network create net1
#查看指定网段详细信息
[root@localhost ~]# docker network inspect net1
#删除指定网段
[root@localhost ~]# docker network rm net1

2.2 创建网段

[root@localhost ~]# docker network create --subnet=172.18.0.0/24 net1
2.3 查询网段信息
[root@localhost ~]# docker network inspect net1
[
{
"Name": "net1",
"Id": "0e197c8d61e37aad6e52188b2a185de7a723087fd88e57f36a2ac98443e2823a",
"Created": "2019-05-16T15:25:46.447740525+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/24"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]

3. 创建Volume

3.1 Docke Volume卷命令

#创建网段、取名为:v1
[root@localhost ~]# docker volume create v1
#查看指定卷详细信息
[root@localhost ~]# docker volume inspect v1
#删除指定卷
[root@localhost ~]# docker volume rm v1
#查看卷信息
[root@localhost ~]# docker volume ls

3.2 创建卷

因为要搭建5个数据库的集群、所以创建5个卷

[root@localhost ~]# docker volume create v1
[root@localhost ~]# docker volume create v2
[root@localhost ~]# docker volume create v3
[root@localhost ~]# docker volume create v4
[root@localhost ~]# docker volume create v5

3.3 查看卷

[root@localhost ~]# docker volume inspect v1
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/v1/_data",
"Name": "v1",
"Options": {},
"Scope": "local"
}
]

4. 创建MySQL PXC容器

4.1 创建Master数据库

mysql的默认帐号是: root

[root@localhost images]# docker run -d -p 3306:3306
-v v1:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root123456
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=root123456
--privileged
--name=my1
--net=net1
--ip 172.18.0.2
percona-xtradb-cluster:latest

参数说明:

-d:后端启动容器

-p:宿主机端口:容器端口,把容器中的端口映射到宿主机的端口上,访问宿主机端口就是直接访问容器

-v:卷:容器目录,把卷挂载在容器里面

-e:启动参数

MYSQL_ROOT_PASSWORD:mysql的密码(自定义)

CLUSTER_NAME:集群名字(自定义)

XTRABACKUP_PASSWORD:数据库节点间数据同步的密码(自定义)

–privileged:授予权限

–name:容器命名

–net:绑定网段

–ip:绑定ip,ip地址为绑定网段内ip

percona-xtradb-cluster:latest:运行的镜像

4.2 创建备库

说明

加四个从数据库

特别注意:创建备库的时候、必须要等主库可以成功连接上了、才可以创建、不然会出现容器闪退的问题。原因是容器启动快、但是容器里服务启动慢。

注意事项

1. 修改挂载的卷

2. 修改宿主机端口,端口唯一

3. 添加指定的群名,-e CLUSTER_JOIN=my1

4. 修改容器名

5. 修改ip

6. 必须等第一个容器服务创建成功才能创建第二个、通过客户端工具验证,不然会出现闪退情况

my2:

[root@localhost images]# docker run -d -p 3307:3306
-v v2:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root123456
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=root123456
-e CLUSTER_JOIN=my1
--privileged
--name=my2
--net=net1
--ip 172.18.0.3
percona-xtradb-cluster:latest

参数说明:

CLUSTER_JOIN:需要加入到主集群中、主mysql名字,跟主数据数据同步

my3:

[root@localhost images]# docker run -d -p 3307:3306
-v v3:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root123456
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=root123456
-e CLUSTER_JOIN=my1
--privileged
--name=my3
--net=net1
--ip 172.18.0.4
percona-xtradb-cluster:latest

my4:

[root@localhost images]# docker run -d -p 3307:3306
-v v4:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root123456
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=root123456
-e CLUSTER_JOIN=my1
--privileged
--name=my4
--net=net1
--ip 172.18.0.5
percona-xtradb-cluster:latest

my5:

[root@localhost images]# docker run -d -p 3307:3306
-v v5:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root123456
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=root123456
-e CLUSTER_JOIN=my1
--privileged
--name=my5
--net=net1
--ip 172.18.0.6
percona-xtradb-cluster:latest

连接效果

注意事项:连接的是宿主机的ip和port、并不是容器内部地址

怎么运用docker搭建主从复制MySQL docker搭建mysql集群_数据库

数据同步测试

打开db1数据库、创建一个schemas(数据库)名为:blank

查看db2、db3、db4、db5 数据库是否有自动创建blank数据库

在该数据库(db1)创建一个表名:student、并添加数据

在任意数据库查看数据是否同步过来

怎么运用docker搭建主从复制MySQL docker搭建mysql集群_mysql_02

创建数据库

怎么运用docker搭建主从复制MySQL docker搭建mysql集群_mysql集群 docker_03

添加一条数据

怎么运用docker搭建主从复制MySQL docker搭建mysql集群_docker_04

查看其它数据库同步

总结

至此、数据库集群已经处理好了,数据同步也已经可以了!

项目只要连接任意一个数据库就可以同步了!

缺点:

单节点处理所有请求、负载高、性能差

怎么运用docker搭建主从复制MySQL docker搭建mysql集群_数据库_05

请求不能分发

解决方法:

使用Haproxy做负载均衡、请求被均匀分发给节点,单点负载低,性能好

怎么运用docker搭建主从复制MySQL docker搭建mysql集群_mysql_06

沏与你的这碗茶尚温热,一点十都如本心,九分人间烟火。

– 《好吗好的》