1.PXC(Percona XtraDB Cluster)

速度慢 但能保证强一致性 适用于保存价值较高的数据

数据同步是双向的 在任一节点写入数据 都会同步到其他所有节点 在任何节点上都能同时读写

采用同步复制 向任一节点写入数据 只有所有节点都同步成功后 才会向客户端返回成功。事务在所有节点要么同时提交,要么不提交

1.1 PXC集群安装

(1)安装 docker pull percona/percona-xtradb-cluster

(2)重命名 docker tag percona/percona-xtradb-cluster:latest pxc

(3)删除源镜像标签 docker rmi percona/percona-xtradb-cluster

docker images

(3)创建网段 docker network create --subnet=172.188.0.0/24 hxjf-docker (如果有重复可以删除 docker network rm 名称)

查看当前宿主机上的网络配置 docker network ls

查看 docker network inspect hxjf-docker

(4)创建5个数据卷

docker volume create --name pxc-vm01
docker volume create --name pxc-vm02
docker volume create --name pxc-vm03
docker volume create --name pxc-vm04
docker volume create --name pxc-vm05

查看 docker inspect pxc-vm01

(5)创建5个PXC容器

# 第一个节点
(1)创建容器

docker run -d -p 3301:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -v pxc-vm01:/var/lib/mysql -v backup:/data --privileged --name=pxcnode01 --net=hxjf-docker --ip 172.188.0.81 pxc

(2)验证

docker ps -a

docker exec -it pxcnode01 bash

mysql -u root -proot (这里我后来重新docker run MYSQL_ROOT_PASSWORD参数修改123456登录也不行 只能用root登录)

#以下二三四五节点 多了个 -e CLUSTER_JOIN=pxcnode01

# 第二个节点

docker run -d -p 3302:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root  -e CLUSTER_JOIN=pxcnode01 -v pxc-vm02:/var/lib/mysql -v backup:/data --privileged --name=pxcnode02 --net=hxjf-docker --ip 172.188.0.82 pxc

# 第三个节点

docker run -d -p 3303:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm03:/var/lib/mysql -v backup:/data --privileged --name=pxcnode03 --net=hxjf-docker --ip 172.188.0.83 pxc

# 第四个节点
docker run -d -p 3304:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root  -e CLUSTER_JOIN=pxcnode01 -v pxc-vm04:/var/lib/mysql -v backup:/data --privileged --name=pxcnode04 --net=hxjf-docker --ip 172.188.0.84 pxc

# 第五个节点
docker run -d -p 3305:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root  -e CLUSTER_JOIN=pxcnode01 -v pxc-vm05:/var/lib/mysql -v backup:/data --privileged --name=pxcnode05 --net=hxjf-docker --ip 172.188.0.85 pxc

# 查看 docker ps -a

2.解决SSL通信问题

2.1第一种方案

(1)重新配置pxcnode01

查看日期发现其它pxcnode02 pxcnode03 pxcnode04 pxcnode05没有起来

docker ps -a

docker logs -f pxcnode03

删掉第一个pxcnode01 重新配置

docker stop pxcnode01

docker rm pxcnode01

docker ps -a

(2) 配置

这里增加了一个新的数据卷映射 -v conf01:/etc/mysql ,方便在宿主机修改配置。默认情况下映射到底宿主机目录在 /var/lib/docker/volumes/ 目录下

(3)docker run -d -p 3301:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -v pxc-vm01:/var/lib/mysql -v backup:/data  -v conf01:/etc/mysql --privileged=true --name=pxcnode01 --net=hxjf-docker --ip 172.188.0.81 pxc

(4)修改配置文件 vim /var/lib/docker/volumes/conf01/_data/node.cnf
[mysqld]

default_authentication_plugin=mysql_native_password
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
skip-host-cache
core-file
# 关闭ssl通信
pxc-encrypt-cluster-traffic=OFF #server_id=0

(5)重启pxcnode01

(6)重启剩余节点

docker rm pxcnode02

docker rm pxcnode03

docker rm pxcnode04

docker rm pxcnode05

docker ps -a

#pxcnode02

docker run -d -p 3302:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm02:/var/lib/mysql -v backup:/data -v conf02:/etc/mysql --privileged --name=pxcnode02 --net=hxjf-docker --ip 172.188.0.82 pxc

#pxcnode03

docker run -d -p 3303:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm03:/var/lib/mysql -v backup:/data -v conf03:/etc/mysql --privileged --name=pxcnode03 --net=hxjf-docker --ip 172.188.0.83 pxc

#pxcnode04

docker run -d -p 3304:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm04:/var/lib/mysql -v backup:/data -v conf04:/etc/mysql --privileged --name=pxcnode04 --net=hxjf-docker --ip 172.188.0.84 pxc

#pxcnode05

docker run -d -p 3305:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm05:/var/lib/mysql -v backup:/data -v conf05:/etc/mysql --privileged --name=pxcnode05 --net=hxjf-docker --ip 172.188.0.85 pxc

#查看容器 docker ps -a 还是失败

(7)配置从节点

vim /var/lib/docker/volumes/conf02/_data/node.cnf
vim /var/lib/docker/volumes/conf03/_data/node.cnf
vim /var/lib/docker/volumes/conf04/_data/node.cnf
vim /var/lib/docker/volumes/conf05/_data/node.cnf

如下图所示 每个节点都加一句  pxc-encrypt-cluster-traffic=OFF

(8)重启节点

docker start pxcnode02
docker start pxcnode03
docker start pxcnode04
docker start pxcnode05

(9)查看节点

启动正常 docker ps -aq

2.数据库的负载均衡

将所有请求发送给单一节点 其负载过高 性能很低 其他节点却很空闲

使用Haproxy做负载均衡 可以将请求均匀地发送给每个节点 单节点负载低 性能好

2.1安装Haproxy

(1)docker pull haproxy

(2)创建配置文件

mkdir -p /home/soft/haproxy/
touch /home/soft/haproxy/haproxy.cfg
vim /home/soft/haproxy/haproxy.cfg

# haproxy.cfg
global
#工作目录
chroot /usr/local/etc/haproxy
#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
log 127.0.0.1 local5 info
#守护进程运行
daemon defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognull
#连接超时(毫秒)
timeout connect 5000
#客户端超时(毫秒)
timeout client 50000
#服务器超时(毫秒)
timeout server 50000 #监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8888
#访问协议
mode http
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:123456
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口
bind 0.0.0.0:3306
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
option mysql-check user haproxy
server MySQL_1 172.188.0.2:3306 check weight 1 maxconn 2000
server MySQL_2 172.188.0.3:3306 check weight 1 maxconn 2000
server MySQL_3 172.188.0.4:3306 check weight 1 maxconn 2000
server MySQL_4 172.188.0.5:3306 check weight 1 maxconn 2000
server MySQL_5 172.188.0.6:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka

(3)

Docker部署Mysq集群的更多相关文章

  1. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  2. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  3. 基于Docker部署ETCD集群

    基于Docker部署ETCD集群 关于ETCD要不要使用TLS? 首先TLS的目的是为了鉴权为了防止别人任意的连接上你的etcd集群.其实意思就是说如果你要放到公网上的ETCD集群,并开放端口,我建议 ...

  4. Docker部署zookeeper集群和kafka集群,实现互联

    本文介绍在单机上通过docker部署zookeeper集群和kafka集群的可操作方案. 0.准备工作 创建zk目录,在该目录下创建生成zookeeper集群和kafka集群的yml文件,以及用于在该 ...

  5. RabbitMQ系列(五)使用Docker部署RabbitMQ集群

    概述 本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘. Windows10上Docker的安装 因为本人用的是Win ...

  6. Docker部署Consul集群

    服务介绍 Consul是一种分布式.高可用.支持水平扩展的服务注册与发现工具.包含的特性有:服务发现.健康检查.键值存储.多数据中心和服务管理页面等. 官方架构设计图: 图中包含两个Consul数据中 ...

  7. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...

  8. 使用docker部署hadoop集群

    最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用doc ...

  9. docker部署Broketrmq集群

    部署Broketrmq集群 通过docker-compose形式部署 首先创建 broker 配置文件,配置文件如下: brokerClusterName = DefaultCluster #集群名 ...

随机推荐

  1. UEFI和Legacy兼容启动U盘制作

    应用场景 自己有一个可启动移动硬盘,是属于老式的BIOS启动方式,最近换了新电脑,因为电脑只支持uefi的启动方式,所以决心为移动硬盘增加uefi启动支持,如何将一个只支持BIOS启动(或者 Lega ...

  2. WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的关系。

    在WPF中,经常使用Grid容器,来布局我们想要显示的对象. 这就不可避免的要和布局在其中的控件的VerticalAlignment特性,HorizonAlignment特性,以及Magin特性打交道 ...

  3. MyBatis-框架使用和分析

      一.基础知识 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可 ...

  4. Tomcat 服务器轻松部署 SSL 证书

    Tomcat 服务器 SSL 证书安装部署 1准备服务器 购买网上各个产家的云服务器 或者在自己的电脑上装虚拟机 二者皆可,建议选择第一种,因为操作起来相对方便 2安装JDK 2.1上传JDK到Lin ...

  5. Go语言协程并发---timer秒表与定时器

    秒表 package main import ( "fmt" "time" ) /*每秒大喊我要去浪,共9次,然后退出计时*/ func main() { va ...

  6. 用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH

    用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH 确定环境变量没错,用管理员启动Appium就不会出 ...

  7. 十四、.net core(.NET 6)搭建ElasticSearch(ES)系列之给ElasticSearch添加SQL插件和浏览器插件

     给ES添加SQL插件的方法: 下载SQL插件地址:https://github.com/NLPchina/elasticsearch-sql 当前最新的是7.12版本,我的ES是7.13版本,暂且将 ...

  8. FFmpeg集成到GPU

    FFmpeg集成到GPU GPU加速视频处理集成到最流行的开源多媒体工具中. FFmpeg是最流行的开源多媒体操作工具之一,它有一个插件库,可以应用于音频和视频处理管道的各个部分,并在世界各地得到广泛 ...

  9. 那些年,我们一起做过的KNX智能化控制经典案例!

    那些年,我们一起做过的KNX经典案例! 光阴之箭已经穿越年轮,抵达2021 GVS在2008年加入KNX国际协会,成为中国首批引进KNX标准的企业,此后,还率先研发出基于KNX的核心协议栈,定标准,做 ...

  10. UF_CSYS 坐标系操作

    Open C   UF_CSYS_ask_csys_info               获取WCS坐标系的原点坐标和矩阵标识UF_CSYS_ask_matrix_of_object    获得对象 ...