Docker 部署集群mysql

一、安装docker

  yum install -y docker #安装
  service docker start #启动
  service docker  stop #关闭

二、常用命令

docker run -it docker.io/php bash #启动容器并且命令行进入
docker run -it  -v --privileged /root/php:/root/php docker.io/php bash #启动容器,文件映射,文件加权限 并且命令行进入
docker run -it --name php --privileged -v /root/php:/root/php -p 9000:80 docker.io/php bash #给名字起名字并且端口映射
docker ps -a      #查看容器运行状态
docker tag 原来的镜像的名字 要改为的镜像的名字
docker start -i 容器名字 #重启容器
docker volume inspect 容器名字  #查看容器数据卷
截屏2020-04-19 17.52.18.png

三、 设置加速器

mkdir -p /etc/docker
vim /etc/docker/daemon.json
    里面插入
    {
      "registry-mirrors": ["https://reg-mirror.qiniu.com"]
  }
四、分布式集群PXC

常用的命令

docker node ls # 查看集群节点
docker node rm -f 节点id #删除节点 -f 强制删除
docker swarm leave -f #解散集群
docker network ls #查看集群网络环境
docker network create -d overlay --attachable 网络名称 #创建共享网络
docker nerwork rm 网络名称 #删除虚拟网络

1、 创建Swarm()集群(虚拟主机1)

docker swarm init #如报错可指定IP --advertise-addr ip

2、管理主机开放端口(虚拟主机1)

firewall-cmd --permanent --zone=public --add-port=2377/tcp
firewall-cmd --permanent --zone=public --add-port=7946/tcp
firewall-cmd --permanent --zone=public --add-port=4789/tcp
firewall-cmd --permanent --zone=public --add-port=4789/udp
firewall-cmd --permanent --zone=public --add-port=7946/udp
firewall-cmd --reload

3、虚拟机2加入集群。切换到虚拟主机2,复制虚拟主机类似的这样的一句话,每个集群都不用,是在主机1,创建集群以后生成的一句话,然后在虚拟机2执行

docker swarm join \
    --token SWMTKN-1-6d3ssjevrb1vzdde6obgw0dz510ksy4lp0gq7ci3kplak6r701-0jkbeujh0uaz4qh8cehuo749r \
    192.168.56.103:2377     #返回成功的结果是this node joined a swarm as a worker

3、创建分布式容器

docker network create -d overlay --attachable 网络名称 #创建共享网络
docker run -it --net=上一步创建的共享网络名称 ...  #创建分布式容器 

4、下载安装pxc

docker pull percona/percona-xtradb-cluster  #拉去pxc镜像
docker tag percona/percona-xtradb-cluster pxc #复制并重新命名
docker rmi percona/percona-xtradb-cluster #删除

5、创建主节点(创建以后,稍等以后,才能连接)

docker run -d -p 9001:3306 -e MYSQL_ROOT_PASSWORD=root -e XTPABACKUP_PASSWORD=root -v pnv1:/var/lib/mysql --privileged --name=pn1 --net=swarm_mysql -e CLUSTER_NAME=pxc1  pxc
# XTPABACKUP_PASSWORD 节点之间同步密码;pnv1 数据存放在宿主机的位置;--net 上面创建的共享网络名称
出现了一串加密的字符串就代表成功了,稍等几秒,就可以使用navigate等工具连接数据库了,注意是9001端口

6、创建从节点
必须先创建主节点,才能创建重节点,否则会闪退

docker run -d -p 9001:3306 -e MYSQL_ROOT_PASSWORD=root -e XTPABACKUP_PASSWORD=root -v pnv1:/var/lib/mysql --privileged --name=pn2  -e CLUSTER_JOIN=pn1 --net=swarm_mysql -e CLUSTER_NAME=pxc1  pxc
和主节点的区别,增加了CLUSTER_JOIN=主节点的名字;--name= 节点名字

五、搭建Replication集群

1、下载和安装镜像(非官方)
docker pull mishamx/mysql
docker tag  mishamx/mysql rep
docker rmi  mishamx/mysql

2、创建主节点容器

docker run -d -p 9003:3306 --name rn1 -e MYSQL_MASTER_PORT=3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_REPLICATION_USER=root -e MYSQL_REPLICATION_PASSWORD=root -v rnv1:/var/lib/mysql --privileged --net=swarm_mysql rep


出现了一串加密的字符串就代表成功了,稍等几秒,就可以使用navigate等工具连接数据库了,注意是9003端口

3、创建从节点

docker run -d -p 9003:3306 --name rn2 -e MYSQL_MASTER_HOST=rn1 -e MYSQL_MASTER_PORT=3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_REPLICATION_USER=root -e MYSQL_REPLICATION_PASSWORD=root -v rnv1:/var/lib/mysql --privileged --net=swarm_mysql rep
与主节点不同,--name 修改;增加了MYSQL_MASTER_HOST=主节点的名字

4、搭建Replication集群2(为了使用mycat支持分片,如果不实用mycat,只做读写分离,此步骤可省去)


截屏2020-04-21 11.14.53.png

六、使用MyCat分库分表

1、什么是切分

为了降低数据库的负载和缩表

2、垂直切分(降低数据库负载)和水平切分(缩表)

3、安装OpenJDK1.8

docker pull adoptopenjdk/openjdk8
docker tag adoptopenjdk/openjdk8 openjdk8
docker rmi adoptopenjdk/openjdk8

4、创建Java容器,在数据卷放入Mycat

docker run -d -it --name mycat1 -v mycat1:/root/server --privileged --net=host openjdk8

5、开发端口

firewall-cmd --permanent --zone=public --add-port=8066/tcp
firewall-cmd --permanent --zone=public --add-port=9066/tcp
firewall-cmd --reload

6、下载Mycat,并放入数据卷

docker volume inspect 容器名字 #查看容器数据卷
cd 容器数据卷
wget Mycat的下载地址
tar -zxvf Mycat的压缩包  #解压

7、部署负载均衡Mycat
按照【第六】部署虚拟机1Mycat 部署虚拟机2的Mycat


未命名.png

8、Mycat的主要配置文件
server.xml schema.xml rule.xml

你可能感兴趣的:(Docker 部署集群mysql)