mysql集群基于docker 在centos上
新博客https://blog.koreyoshi.work/
mysql集群(PXC)基于docker 在centos上
常用设计方案
Replication(复制)
- 速度快
- 弱一致性
- 低价值
- 场景:日志,新闻,帖子
PXC
- 速度慢
- 强一致性
- 高价值
- 场景:订单,账户,财务
Replication是主从,PXC是使用事务要求同步复制,各有取舍。当然PXC在标准的MySQL基础上有更多限制,例如只支持InnoDB系列的引擎,不支持XA分布式事务协议,不支持表级锁等等。并且在处理冲突方面,同时有两个事务修改同一行数据,后一个事务会被终止并抛出异常。都是为了高可用,强一致性,所以需要在不同的场景使用不同的解决方案。
Percona Xtradb Cluster,简称PXC。
是基于Galera插件的MySQL集群。
相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galera cluster最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。
而且节点与节点之间,他们相互的关系是对等的。
本身galera cluster也是一种多主架构。galera cluster最关注的是数据的一致性,
对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证MySQL集群的数据一致性。
在PXC里面任何一个节点都是可读可写的。在其他的节点一定是可以读取到这个数据。
作者:IT人故事会
链接:https://www.jianshu.com/p/c623713a532c
使用docker初步安装PXC集群
安装docker
如果不了解docker可以去看菜鸟教程中的docker教程
yum -y update
yum install -y docker安装PXC镜像
docker pull percona/percona-xtradb-cluster
直接脚本搭建
#!/bin/bash
echo "创建网络"
docker network create --subnet=172.18.0.0/24 net1
echo "创建5个docker卷"
docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5
echo "创建节点 node1"
docker run -d -p 3306:3306 --net=net1 --name=node1 \
-e CLUSTER_NAME=PXC \
-e MYSQL_ROOT_PASSWORD=a123456 \
-e XTRABACKUP_PASSWORD=a123456 \
-v v1:/var/lib/mysql \
--privileged \
--ip 172.18.0.2 \
percona/percona-xtradb-cluster
sleep 1m
echo "创建节点 node2"
docker run -d -p 3307:3306 --net=net1 --name=node2 \
-e CLUSTER_NAME=PXC \
-e MYSQL_ROOT_PASSWORD=a123456 \
-e XTRABACKUP_PASSWORD=a123456 \
-e CLUSTER_JOIN=node1 \
-v v2:/var/lib/mysql \
--privileged \
--ip 172.18.0.3 \
percona/percona-xtradb-cluster
sleep 1m
echo "创建节点 node3"
docker run -d -p 3308:3306 --net=net1 --name=node3 \
-e CLUSTER_NAME=PXC \
-e MYSQL_ROOT_PASSWORD=a123456 \
-e XTRABACKUP_PASSWORD=a123456 \
-e CLUSTER_JOIN=node1 \
-v v3:/var/lib/mysql \
--privileged \
--ip 172.18.0.4 \
percona/percona-xtradb-cluster
sleep 1m
echo "创建节点 node4"
docker run -d -p 3309:3306 --net=net1 --name=node4 \
-e CLUSTER_NAME=PXC \
-e MYSQL_ROOT_PASSWORD=a123456 \
-e XTRABACKUP_PASSWORD=a123456 \
-e CLUSTER_JOIN=node1 \
-v v4:/var/lib/mysql \
--privileged \
--ip 172.18.0.5 \
percona/percona-xtradb-cluster
sleep 1m
echo "创建节点 node5"
docker run -d -p 3310:3306 --net=net1 --name=node5 \
-e CLUSTER_NAME=PXC \
-e MYSQL_ROOT_PASSWORD=a123456 \
-e XTRABACKUP_PASSWORD=a123456 \
-e CLUSTER_JOIN=node1 \
-v v5:/var/lib/mysql \
--privileged \
--ip 172.18.0.6 \
percona/percona-xtradb-cluster这样你就可以得到5个mysql组成的PXC集群,密码均为a123456,在docker下映射的宿主机端口为3306~3310。
负载均衡方案
docker-haproxy的介绍:https://hub.docker.com/_/haproxy/
在宿主机创建配置文件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
#客户端超时(毫秒)
timeout client
#服务器超时(毫秒)
timeout server #监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:
#访问协议
mode http
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#监控界面的登陆帐户信息
stats auth admin:
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口
bind 0.0.0.0:
#网络协议
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.18.0.2: check weight maxconn
server MySQL_2 172.18.0.3: check weight maxconn
server MySQL_3 172.18.0.4: check weight maxconn
server MySQL_4 172.18.0.5: check weight maxconn
server MySQL_5 172.18.0.6: check weight maxconn
#使用keepalive检测死链
option tcpka
在docker中安装haproxy容器(注意-v 后的路径,为了配置文件所在路径)
docker run -it -d -p : \
-p : \
-v /home/haproxy/h1:/usr/local/etc/haproxy \
--name h1 --privileged --net=net1 \
--ip 172.18.0.7 haproxy
进入容器,加载配置文件
docker exec -it h1 /bin/bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
在数据库中创建一个haproxy的用户,不需要设置密码
CREATE user 'haproxy'@'%' IDENTIFIED BY '';
进入监控页面查看:url:4001/dbs
需要输入开始设置的密码,连接直接连3306就可以了。
如果要真正的使用,则需要维护haproxy的高可用,这个下次再尝试吧!
mysql集群基于docker 在centos上的更多相关文章
- mysql集群--基于centos7
1 MySQL主从备份 主机:192.168.43.8 从机:192.168.43.6 条件:主机和从机都安装了mysql,开启了二进制日志 安装mysql (mysql 和 mysql-server ...
- docker搭建基于percona-xtradb-cluster方案的mysql集群
一.部署环境 序号 hostname ip 备注 1 manager107 10.0.3.107 centos7;3.10.0-957.1.3.el7.x86_64 2 worker68 10.0.3 ...
- mysql集群安装(centos)
mysql cluster : 1. 基于NDB Cluster 的分布式数据库系统 2. mysql集群中各服务器节点不共享数据 3. 在mysql cluster中节点指的是进程,区别于其他的集群 ...
- docker 下 mysql 集群的搭建
下载程序&&创建docker容器 从mysql官网https://dev.mysql.com/downloads/cluster/上下载mysql集群库mysql-cluster-gp ...
- 1.Mysql集群------Docker下的Mysql主从复制
前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...
- 基于Ceph分布式集群实现docker跨主机共享数据卷
上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...
- Docker部署Mysql集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- docker+mysql集群+读写分离+mycat管理+垂直分库+负载均衡
依然如此,只要大家跟着我的步骤一步步来,100%是可以测试成功的 centos6.8已不再维护,可能很多人的虚拟机中无法使用yum命令下载docker, 但是阿里源还是可以用的 因为他的centos- ...
随机推荐
- .net core 添加本地dll
公司内部开发的核心类库,添加到新项目中去,可以使用如下方法. 1.设置包信息 右击项目-属性,选着打包,输入相关信息. 2.核心类库打包成 *.nupkg文件, 3.创建一个文件夹.将打包的nupkg ...
- 小白学Python(5)——python-pptx简单应用
python-pptx允许您创建新的演示文稿以及对现有演示文稿进行更改. 实际上,它只允许您对现有演示文稿进行更改:只是,如果您从一个没有幻灯片的演示文稿开始,一开始感觉就像是从头开始创建一个幻灯片. ...
- 修改jdk注册表
如果是新增jdk的话就选中java Development kit 文件夹右击新建,然后把属性配置上就可以
- odoo视图中常用widget
widget="statusbar" 头部状态条标签 widget="email" 电子邮件地址标签 widget="selection" ...
- JavaScript计算平方数的三种方法
console.log(2*10**3) console.log(2*Math.pow(10,3)) console.log(2e3) console.log(2*1e3) console.log(2 ...
- 随笔编号-02 阿里云CentOS7系列三 -- 配置防火墙
前面讲到了安装JDK以及Tomcat.但是大家会发现,当我们访问 http:// XXX.XXX.XXX.XXX:8080/80 时候,tomcat 猫并没有出现.原因就是没有设置防火墙. 再次介绍下 ...
- 装饰器修复技术@wraps
@wrap修复技术 首先我先说一下wrap的效果 如果没使用@wraps,当A调用了装饰器B的话,即使A.name,返回的会是装饰器B的函数名称,而不是A的函数名称如果使用了@wraps,当A调用了装 ...
- jqGrid根据数据动态设置rowList
superme.rowList = [10,20,50,100]; superme.rowNum = 20; 全局属性 loadComplete : function (data) { if(data ...
- JSP指令、标签以及中文乱码
JSP指令.标签以及中文乱码 一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. JSP指令的基本 ...
- 学习笔记之Java队列Queue中offer/add函数,poll/remove函数,peek/element函数的区别
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. Java中Que ...