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- ...
随机推荐
- SpringBoot整合Dubbo配合ZooKeeper注册中心
安装ZooKeeper 我这里使用zookeeper作为服务注册中心,版本3.4.9,下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/zookeep ...
- random库的使用
一.random库介绍 random库是使用随机数的Python标准库 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素 random库主要用于生成随机数 使用random库:import ran ...
- 使用 Docker Compose 快速构建 TiDB 集群
本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...
- C#数据结构_基本概念及线性表
常见的4类数据结构: 1.集合. 2.线性结构.3.树形结构.4.图状结构. 数据结构(Data Structure)简记为 DS,是一个二元组,DS = (D,R) 其中:D 是数据元素的有限集合, ...
- JVM知识点总结
JVM总体梳理 一.jvm体系总体概览 JVM体系总体分四大块:类的加载机制.jvm内存结构.GC算法 垃圾回收.GC分析 命令调优 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点 ...
- ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名
ABP默认的MVC启动模板在登录后, 右上角显示的是用户名: 如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统. 前期准备 使用ABP CLI创建一个名 ...
- HDU - 4366 Successor DFS区间+线段树
Successor:http://acm.hdu.edu.cn/showproblem.php?pid=4366 参考:https://blog.csdn.net/colin_27/article/d ...
- HDU-1532 网络流裸题
HDU-1532 题意简单的来说就是从1点到n点,最大的流量是多少. 代码: #include<bits/stdc++.h> using namespace std; #define Fo ...
- Nginx简介及配置文件详解
http://blog.csdn.net/hzsunshine/article/details/63687054 一 Nginx简介 Nginx是一款开源代码的高性能HTTP服务器和反向代理服务 ...
- Unity - 2D中的物理关节
本文概述: 分析Unity中几个2D物理关节组件的基本功能.使用方法.运用场景等 开发环境:Unity2019.3.0a2 / VS2017 项目资源包: 2D Joints Starter 说明: ...