新博客https://blog.koreyoshi.work/

mysql集群(PXC)基于docker 在centos上

常用设计方案

Replication(复制)

  1. 速度快
  2. 弱一致性
  3. 低价值
  4. 场景:日志,新闻,帖子

PXC

  1. 速度慢
  2. 强一致性
  3. 高价值
  4. 场景:订单,账户,财务

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教程

    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的高可用,这个下次再尝试吧!

[原链接]  https://www.jianshu.com/p/c623713a532c 

mysql集群基于docker 在centos上的更多相关文章

  1. mysql集群--基于centos7

    1 MySQL主从备份 主机:192.168.43.8 从机:192.168.43.6 条件:主机和从机都安装了mysql,开启了二进制日志 安装mysql (mysql 和 mysql-server ...

  2. 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 ...

  3. mysql集群安装(centos)

    mysql cluster : 1. 基于NDB Cluster 的分布式数据库系统 2. mysql集群中各服务器节点不共享数据 3. 在mysql cluster中节点指的是进程,区别于其他的集群 ...

  4. docker 下 mysql 集群的搭建

    下载程序&&创建docker容器 从mysql官网https://dev.mysql.com/downloads/cluster/上下载mysql集群库mysql-cluster-gp ...

  5. 1.Mysql集群------Docker下的Mysql主从复制

    前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...

  6. 基于Ceph分布式集群实现docker跨主机共享数据卷

    上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...

  7. Docker部署Mysql集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  8. Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  9. docker+mysql集群+读写分离+mycat管理+垂直分库+负载均衡

    依然如此,只要大家跟着我的步骤一步步来,100%是可以测试成功的 centos6.8已不再维护,可能很多人的虚拟机中无法使用yum命令下载docker, 但是阿里源还是可以用的 因为他的centos- ...

随机推荐

  1. SpringBoot进阶教程(六十)intellij idea project下建多个module搭建架构(上)

    在 IntelliJ IDEA 中,没有类似于 Eclipse 工作空间(Workspace)的概念,而是提出了Project和Module这两个概念.多module有一个父maven工程,多个子工程 ...

  2. 字符串匹配算法之————KMP算法

    上一篇中讲到暴力法字符串匹配算法,但是暴力法明显存在这样一个问题:一次只移动一个字符.但实际上,针对不同的匹配情况,每次移动的间隔可以更大,没有必要每次只是移动一位: 关于KMP算法的描述,推荐一篇博 ...

  3. 深入浅出TypeScript(1)

    前言 在学习TypeScript过程中,我也是遇到了很多的阻力,因为并未有太多深入挖掘的场景,之前做IONIC的时候,也只是用TS,现如今,这一个系列也是记录自己学习和收获,同时希望自己的这系列教程对 ...

  4. Java 迭代接口:Iterator、ListIterator 和 Spliterator

    1. 简介 当我们使用 for 或 while 循环来遍历一个集合的元素,Iterator 允许我们不用担心索引位置,甚至让我们不仅仅是遍历一个集合,同时还可以改变它.例如,你如果要删除循环中的元素, ...

  5. java 路径问题

    java路径存在两种写法"/"和"\\" String path="D:\\1.txt"; String path1="D:/1. ...

  6. AI资源对接需求汇总:第3期

    更好的阅读体验,请查看首发原文链接:AI资源对接需求汇总:第3期 平台介绍 平台由人工智能领域几个知名原创公众号发起,总读者约25万. 主要面向人工智能领域的从业者,涵盖图像处理.三维计算机视觉.机器 ...

  7. 05_指针之New()函数的使用

    1.new函数是一个内置函数,表达式new(T)创建一个未命名的T类型变量,初始化为T类型的零值,并返回其地址(地址类型为*T)2.p:=new(int),q:=new(int)==>p!=q ...

  8. MySQL的count(*)的优化,获取千万级数据表的总行数[转]

    一.前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去.找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数. 二.关于cou ...

  9. wps10.1中将txt转为excel

    1.将想要保存的内容保存为txt格式,用分隔符分隔好(包括空格.制表符.英文的逗号以及分号四种). 2.打开wps 3.点击数据->导入数据,选择刚才的txt文件 4.一步步操作,即可.

  10. CodeForces 283C World Eater Brothers

    World Eater Brothers 题解: 树DP, 枚举每2个点作为国家. 然后计算出最小的答案. 首先我们枚举根, 枚举根了之后, 我们算出每个点的子树内部和谐之后的值是多少. 这样val[ ...