Docker搭建PXC集群
如何创建MySQL的PXC集群
下载PXC集群镜像文件
下载
docker pull percona/percona-xtradb-cluster
重命名
[root@hongshaorou ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc
创建内部网络
处于安全考虑,需要给PXC集群实例创建Docker内部网络
创建网段:
- [root@hongshaorou ~]# docker network create --subnet=172.18.0.0/24 net1
- ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63
查看网段
- [root@hongshaorou ~]# docker network inspect net1
- [
- {
- "Name": "net1",
- "Id": "ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63",
- "Created": "2018-06-06T10:06:28.55654238+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": {}
- }
- ]
删除网段
[root@hongshaorou ~]# docker network rm net1
创建Docker卷
Docker容器使用原则:一旦创建出容器,尽量不要在容器中保存数据。一般通过目录映射将数据保存在宿主机里面(我们把宿主机的一个目录映射到容器内,然后容器的数据都保存到映射目录,这样就保存到了宿主机,即使容器损坏,宿主机也有数据保存)。但是,PXC技术在使用Docker的时候无法直接使用映射目录,需要另外一种映射技术—Docker卷。
容器中的PXC节点映射数据目录的解决办法
- 创建Docker卷:[root@hongshaorou ~]# docker volume create --name v1
- --name:设置卷名 可以不写
我们创建的Docker卷是在宿主机上可以看到的具体映射真实目录
- [root@hongshaorou ~]# docker inspect v1
- [
- {
- "Driver": "local",
- "Labels": {},
- "Mountpoint": "/var/lib/docker/volumes/v1/_data",
- "Name": "v1",
- "Options": {},
- "Scope": "local"
- }
- ]
- 我们看到Docker卷v1映射到了/var/lib/docker/volumes/v1/_data
删除Docker卷
[root@hongshaorou ~]# docker volume rm v1
创建PXC容器
只需要向PXC镜像传入运行参数就能创建出PXC容器
- [root@hongshaorou ~]# docker run -d -p 3307:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
- 1da51c2b8817f414ad825ba48f69a46c176f0b5ba7539e3b31e9ac54de056877
- 参数解释:
- -d:表示后台运行
- -v:映射Docker卷到容器的mysql数据目录
- MYSQL_ROOT_PASSWORD:表示创建的数据库密码
- CLUSTER_NAME: 表示创建出的集群名字
- XTRABACKUP_PASSWORD:表示集群通信密码
- --privileged:表示分配最高权限
- --net:指定网段
- --ip:指定IP
- [root@hongshaorou ~]# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1da51c2b8817 pxc "/entrypoint.sh " 7 seconds ago Up 5 seconds 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1
这样我们就创建了第一个PXC节点
下面依次创建剩余四个节点
创建Docker卷
- [root@hongshaorou ~]# docker volume create --name v2
- v2
- [root@hongshaorou ~]# docker volume create --name v3
- v3
- [root@hongshaorou ~]# docker volume create --name v4
- v4
- [root@hongshaorou ~]# docker volume create --name v5
- v5
创建容器
- 创建node2:
- [root@hongshaorou ~]# docker run -d -p 3308:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
- 创建node3:
- [root@hongshaorou ~]# docker run -d -p 3309:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
- 创建node4:
- [root@hongshaorou ~]# docker run -d -p 3310:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
- 创建node5:
- [root@hongshaorou ~]# docker run -d -p 3311:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
- 查看当前有哪些运行容器:
- [root@hongshaorou ~]# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- f7638daaa09b pxc "/entrypoint.sh " 7 seconds ago Up 4 seconds 4567-4568/tcp, 0.0.0.0:3311->3306/tcp node5
- 909261673fac pxc "/entrypoint.sh " 25 seconds ago Up 24 seconds 4567-4568/tcp, 0.0.0.0:3310->3306/tcp node4
- 763dca13edcd pxc "/entrypoint.sh " 43 seconds ago Up 42 seconds 4567-4568/tcp, 0.0.0.0:3309->3306/tcp node3
- 9a3f92074ad0 pxc "/entrypoint.sh " About a minute ago Up About a minute 4567-4568/tcp, 0.0.0.0:3308->3306/tcp node2
- 1da51c2b8817 pxc "/entrypoint.sh " 15 minutes ago Up 15 minutes 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1
在创建剩余容器的时候需要注意的是网络和端口的映射不同,以及多了-e CLUSTER_JOIN=node1 表示加入node1节点。
注意:第一个节点创建时间较长,必须等待两分钟左右再创建剩余节点。
创建好之后我们就可以使用客户端连接数据库
转自:https://zhaobugs.com/2018/06/06/Docker搭建PXC集群
Docker搭建PXC集群的更多相关文章
- Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)
上一节我们有了两个分片的pxc集群,这一节我们接着安装haproxy和keepalived的实现集群的高可用 一.先下载haproxy的镜像 [root@localhost ~]# docker pu ...
- Docker 搭建pxc集群 + haproxy + keepalived 高可用(一)
一.首先需要安装好docker,安装方法可以参考之前一篇博文Centos7安装docker [root@localhost ~]# systemctl start docker [root@local ...
- docker安装pxc集群
前言 现在mysql自建集群方案有多种,keepalived.MHA.PXC.MYSQL主备等,但是目前根据自身情况和条件,选择使用pxc的放来进行搭建,最大的好处就是,多主多备,即主从一体,没有 ...
- Docker 搭建 etcd 集群
阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...
- Docker搭建RabbitMQ集群
Docker搭建RabbitMQ集群 Docker安装 见官网 RabbitMQ镜像下载及配置 见此博文 集群搭建 首先,我们需要启动运行RabbitMQ docker run -d --hostna ...
- docker搭建etcd集群环境
其实关于集群网上说的方案已经很多了,尤其是官网,只是这里我个人只有一个虚拟机,在开发环境下建议用docker-compose来搭建etcd集群. 1.拉取etcd镜像 docker pull quay ...
- docker 搭建zookeeper集群和kafka集群
docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之 ...
- 基于docker安装pxc集群
基于docker安装pxc集群 一.PXC 集群的安装 PXC集群比较特殊,需要安装在 linux 或 Docker 之上.这里使用 Docker进行安装! Docker的镜像仓库中包含了 PXC数据 ...
- 使用Docker搭建Spark集群(用于实现网站流量实时分析模块)
上一篇使用Docker搭建了Hadoop的完全分布式:使用Docker搭建Hadoop集群(伪分布式与完全分布式),本次记录搭建spark集群,使用两者同时来实现之前一直未完成的项目:网站日志流量分析 ...
随机推荐
- [luogu P2234] [HNOI2002]营业额统计
[luogu P2234] [HNOI2002]营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...
- html盒子铺满全屏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 走进JavaScript
JavaScript的作用:操作HTML元素,响应用户的操作,处理数据: script标签的type或者language可以写也可以不写: script标签防止位置:head结束之前或者body结束之 ...
- static静态全局变量和static静态局部变量
static静态全局变量: 静态全局变量就是将全局变量变成静态的.如何变?——全局变量加个static. static就是一个存储类说明符,a这个全局变量就成了一个静态全局变量了. 静态全局变量的特点 ...
- python如何实现像shell中的case功能
我们知道在shell脚本里是支持case语句,当位置参数为空时,会提示我们怎么使用脚本 那么在python怎么实现呢?也使用case吗? python里不支持case语句,但是也有实现case的方法. ...
- Verilog中的$display和$write任务
$display(p1,p2, …,pn); $write(p1,p2, …,pn); 这两个函数和系统任务的作用都是用来输出信息,即将参数p2到pn按参数p1给定的格式输出.参数p1通常称为:“格式 ...
- 编译QFileSystemModel
QT在windows系统下可以直接安装,但有些时候,可以只编译一个类,这里需要有一些需要注意的.下面是github路径:https://github.com/1171597779/compile_of ...
- 团队项目(MVP------新能源汽车无线充电管理网站)(个人任务1)
个人任务:1.设计问卷调查了解电动车目前的市场需求情况 2.收集问卷,并且进行总结和分析 3.后台管理系统界面的登录和注册界面的编写(主要用到html,css,javascript,其中用户的合法性检 ...
- keil项目的调试与编译
编译: Translate===编译单个文件 Build====编译当前项目,如果该项目先前编译过1次,并且文件没有编辑改动,则点击时不会重新编译 Rebuild===重新编译,每点击一次就重新编译. ...
- 框架tensorflow2
TensorFlow 2 TensorFlow 激励函数 TensorFlow 添加层: 思考:matmul和multiply两种乘法的区别:http://www.soaringroad.com/?p ...