Docker搭建MySQL集群

Docker简易搭建MySQL集群

MySQL集群通过PXC 集群方案( Percona XtraDB Cluster )搭建

1.下载percona

docker pull percona/percona-xtradb-cluster

2.创建内部网络

出于安全考虑,将PXC集群放置于docker内部网络中。只需将宿主的端口与之映射并开放出来即可

docker network create --subnet=172.18.0.0/24 net1

执行成功后,查看net1详细信息执行如下命令

docker inspect net1

返回结果

[
    {
        "Name": "net1",
        "Id": "cfe8279ff4bff1561c33bc2aec88f37800829f7fd5377ac284005c4c8a275e07",
        "Created": "2020-04-27T00:12:30.448769804+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/24"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

3.创建Docker卷

PXC较为特殊,无法直接使用映射目录的方法做映射(使用后会闪退),故使用docker卷

docker volume create --name volume1

执行成功后,想查看映射的地址执行如下命令

docker inspect volume1

返回结果

[
    {
        "CreatedAt": "2020-05-15T13:04:24+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/volume1/_data",
        "Name": "volume1",
        "Options": {},
        "Scope": "local"
    }
]
  • 由于要多个数据库,所以建立数据卷volume2,volume3,volume4,volume5
docker volume create --name volume2
docker volume create --name volume3
docker volume create --name volume4
docker volume create --name volume5

4. 创建PXC容器

docker run -d -p 3306:3306 -v volume1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 --privileged --name=node1 --net=net1 --ip 172.18.0.2 percona/percona-xtradb-cluster
-d:默认在后台运行,为守护进程
-p:3306(宿主):3306(容器)端口映射,将容器3306端口映射到宿主3306坤口
-v  v1:/var/lib/mysql:目录映射,将第三步创建的v1映射到容器/var/lib/mysql
-e MYSQL_ROOT_PASSROWD:创建的用户实例的密码,默认实例root
-e CLUSTER_NAME:集群名称
-e XTRABACKUP_PASSWORD:数据库之间同步使用的密码
--privileged:权限给予最高权限
--name:给容器容命名
--net:使用内部网段
--ip:内部网段分到的地址
percona:percona镜像
  • 建立多个PXC容器
docker run -d -p 3307:3306 -v volume2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 percona/percona-xtradb-cluster

docker run -d -p 3308:3306 -v volume3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.18.0.4 percona/percona-xtradb-cluster

docker run -d -p 3309:3306 -v volume4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 172.18.0.5  percona/percona-xtradb-cluster

docker run -d -p 3310:3306 -v volume5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 172.18.0.6 percona/percona-xtradb-cluster

5.测试

用Navicat for mysql连接到之前四个节点的数据库,在四个节点数据库中 在任意一个数据库进行建库、建表、增删改查数据等操作后,再查看其它节点进行查看,或者在其它不同的节点进行操作看是否数据能成功进行同步

你可能感兴趣的:(MySQL,Docker)