新博客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与Shiro整合权限管理实战

    SpringBoot与Shiro整合权限管理实战 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] *观看本文章需要有一定SpringBoot整合经验* Shiro框架简介 Apach ...

  2. activemq的下载与安装

    一.介绍 Apache ActiveMQ™是最流行的开源,多协议,基于Java的消息服务器.它支持行业标准协议,因此用户可以通过广泛的语言和平台获得客户选择的好处.可以使用C,C ++,Python, ...

  3. Memcached的原理分析与配置

    一.Why Memcached? • 高并发访问数据库的痛楚:死锁! • 硬盘IO之痛:本机:AspNet:HttpRuntime.Cache • 多客户端共享缓存 • Net+Memory>& ...

  4. 高并发下,调整IIS相关的设置,以提高服务器并发量

    1.修改 IIS 队列长度 参考资料:https://docs.microsoft.com/zh-cn/previous-versions/office/communications-server/d ...

  5. SPP NET (Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)

    1. https://www.cnblogs.com/gongxijun/p/7172134.html (SPP 原理) 2.https://www.cnblogs.com/chaofn/p/9305 ...

  6. Log4j2源码分析系列:(一)配置加载

    前言 在实际开发项目中,日志永远是一个绕不开的话题.本系列文章试图以slf4j和log4j2日志体系为例,从源码角度分析日志工作原理. 学习日志框架,首先要熟悉各类日志框架,这里推荐两篇文章,就不再赘 ...

  7. unity之加载场景

    游戏中的Loading分为:静态Loading和动态Loading. 简单形象的做个比喻: 静态Loading可能就是一张背景图.而动态的Loading就是在读取的同时有一个东西在“转圈”. 1.静态 ...

  8. 最近学习了JDK SPI

    JDK SPI是什么 最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什么都不知道那就尴尬了. 所以SPI是什么呢?SPI全称Se ...

  9. Unity Shader 卡通渲染 基于退化四边形的实时描边

    从csdn转移过来,顺便把写过的文章改写一下转过来. 一.边缘检测算法 3D模型描边有两种方式,一种是基于图像,即在所有3D模型渲染完成一张图片后,对这张图片进行边缘检测,最后得出描边效果.一种是基于 ...

  10. java设计模式7.策略模式、模板方法模式、观察者模式

    策略模式 策略模式的用意,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 环境角色:持有一个抽象策略角色的引用. 抽象策略 ...