docker搭建mysql集群
准备环境:
1.一台centos7机器 ip地址:192.168.113.11
2.pxc镜像
搭建步骤:
1.拉取或导入本地镜像
# 从docker hub上拉取 docker pull percona/percona-xtradb-cluster # 或将镜像压缩包导入 docker load < /root/pxc.tar.gz
2.更改镜像名
# 更改一个短的、易记忆的镜像名 docker tag percona/percona-xtradb-cluster pxc # 删除原有的、长的镜像名 docker rmi percona/percona-xtradb-cluster
3.创建集群的内部网络
# 网段可以自定义 docker network create --subnet= 172.18.0.0/24 net1 # 查看网段信息 docker network inspect net1
4.创建Docker卷
docker volume create v1 #查看v1卷在宿主机的那个目录下 docker volume inspect v1 [ { "CreatedAt": "2019-05-13T13:53:31+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/v1/_data", "Name": "v1", "Options": {}, "Scope": "local" } ] # 创建其他四个卷,每个卷对应一个pxc容器 docker volume create v2 docker volume create v3 docker volume create v4 docker volume create v5 # 查看卷在宿主机的目录 ls /var/lib/docker/volumes/
5.创建PXC容器
注意:容器创建是很快,但是容器内的mysql初始化很慢,需要等第一个容器的mysql初始化完成后,才创建后面的容器,不然后面创建的容器会闪退
# 创建第一个容器 # --privileged表示最高权限 # 设置一些环境变量,如mysql的root登陆密码、集群名、集群同步的密码 # 创建完成后,等待几分钟,最好用mysql连接一下,成功后创建接下来的几个集群 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123qqq...A -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123qqq...A -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc # 创建第二个容器 # CLUSTER_JOIN指定加入的集群的节点名 # 因为是在同一台宿主机上创建的几个PXC容器,所以端口不能重复 # 还有就是一些像卷组、节点名、ip地址需要变化 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123qqq...A -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123qqq...A -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc # 创建第三个容器 docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123qqq...A -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123qqq...A -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc # 创建第四个容器 docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123qqq...A -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123qqq...A -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc # 创建第五个容器 docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123qqq...A -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123qqq...A -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
6.测试
# 连接第二个容器node2的mysql,并创建一个test数据库 mysql -h 192.168.113.11 -P 3307 -uroot -p MySQL > create database test; # 连接第五个容器node5的mysql,查看是否同步 mysql -h 192.168.113.11 -P 3310 -uroot -p MySQL > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ # 连接第三个容器node3的mysql,创建在test数据库中创建一个student表 mysql -h 192.168.113.11 -P 3308 -uroot -p MySQL > use test; MySQL > create table student( -> id int primary key, -> name varchar(200) not null); # 连接第四个容器node4的mysql,往student表中插入一条数据 mysql -h 192.168.113.11 -P 3309 -uroot -p MySQL > use test; MySQL > insert into student values(1,'Scott'); # 连接第一个容器node1的mysql,查看student表 mysql -h 192.168.113.11 -P 3306 -uroot -p MySQL > select * from test.student; +----+-------+ | id | name | +----+-------+ | 1 | scott | +----+-------+