« 上一篇下一篇 »

使用Docker搭建集群mysql数据库简易教程

 一、什么是MySQL集群
 MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。
 数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。
 无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。
 通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。


二、架构图

三、如何创建mysql集群

1.创建mysql集群
下载pxc镜像
docker pull percona/percona-xtradb-cluster
创建内部网络:出于安全考虑,需要给PXC集群实例创建Docker内部网络
创建命令:docker network create net1
创建指定网段:docker network create --subnet=172.18.0.0/24 net1
查看网络属性:docker network inspect net1
删除网络:docker network rm net1

创建docker卷(容器中的PXC节点映射数据目录的解决办法)
docker volume create --name v1

创建PXC容器(只需要像PXC镜像传入运行参数就能创建出PXC容器)
node1节点:
docker run -d -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=数据库密码 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=数据库节点之间同步的密码 \
--privileged --name=node1 --net=net1 --ip=172.18.0.0/24 pxc

node2到node5节点
docker run -d -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=数据库密码 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=数据库节点之间同步的密码 \
-e CLUSTER_JOIN=node1 \
--privileged --name=node# --net=net1 --ip=172.18.0.0/24 pxc

2.数据库负载均衡:
下载haproxy镜像
docker pull haproxy
docker images查看镜像
创建Haproxy配置文件
在宿主机上创建:touch /home/soft/haproxy.cfg
配置文件可以参考:https:/zhangge.net/5125.html

 

 小结:

为了减少事务丢失,mysql集群实现延迟写入(默认延迟两秒,可配置),这样就可以在故障发生时完成检查点写入,而不会丢失最后一个检查点。一般单个数据节点故障不会导致任何数据丢失,因为集群内部采用同步数据复制。