mysql5.7.25集群部署和方案设计(附PXC一键部署脚本)
脚本后续更新及迭代将由kkitDeploy项目代替
https://github.com/luckman666/kkitdeploy_server
请大家持续关注kkitDeploy
还记得我们之前部署mysql集群有多麻烦嘛?波哥来救你们啦!~
我已将项目上传到了我的github仓库中,大家可以点击仓库地址出现的连接登录查看相应的代码!如果觉得不错别忘了转发、点赞哦!
部署步骤:
git clone https://github.com/luckman666/deploy_mysql_cluster.git
cd deploy_mysql_cluster
# 编辑bash.config参数
chmod -R .
./deploy_mysql_master.sh
以上几步就完成了一套多节点多主多从故障自动切换的mysql数据库集群。
使用及注意事项:
如果集群出现某一节点出现故障:
1、集群会立刻将其剔除集群,停止同步。
2、(主节点故障)keepalived两秒内会感知mysql故障,从集群中踢除本节点mysql,本节点降权并将VIP漂移至完好节点,整个集群继续提供服务。
3、(从节点故障)keepalived直接关闭该节点服务,将该节点剔除集群。
故障修复后加入集群方式:
恢复节点上执行此命令(注意修改参数):
docker run -d -p : -p : -p : -p : -e MYSQL_ROOT_PASSWORD="mysqlroot密码" -e CLUSTER_JOIN=主节点主机名(mysql1) -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD="mysqlroot密码" -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/backup:/data -v /etc/localtime:/etc/localtime:ro -v /var/run/docker.sock:/var/run/docker.sock --privileged -e character-set-server=utf8mb4 -e collation-server=utf8mb4_unicode_ci --name="故障节点主机名" --net=swarm_mysql docker.io/percona/percona-xtradb-cluster
同步完成后启动再keepalived
systemctl restart keepalived
检查keepalived启动状态
systemctl status keepalived
通过工具或者查看容器日志查看mysql运行是否良好!
如果发现keepalived启动后报127异常退出的错误
那么请升级系统内核至4+版本脚本内容如下:
#!/bin/bash
setupkernel(){
rpm --import [https://www.elrepo.org/RPM-GPG-KEY-elrepo.org](https://www.elrepo.org/RPM-GPG-KEY-elrepo.org)
rpm -Uvh [http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm](http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm)
yum --enablerepo=elrepo-kernel install -y kernel-lt kernel-lt-devel
grub2-set-default
reboot
}
setupkernel
设计这套mysql的集群方案主要是面向我司的账单系统。因为都是账单数据,对于数据的丢失的容忍度为0。所以采用多节点强制同步的PXC集群方式。部署采用docker方式,网络方案采用swarm的overlay网络,冗余策略是keepalived
大家可能对pxc集群方案略有陌生这里简单给大家介绍一下:
1、传统的Repliaction 集群方案(1主多从)
2、PXC 集群方案( Percona XtraDB Cluster 多主多从)
方案场景对比:



可以看到PXC是数据强一致性的集群,事务在所有集群节点要么同时提交,要么不提交。而Replication 采用异步复制,无法保证数据的一致性。
因为项目数据库是主要用来存储账单和钱款的,所以就采用了PXC的集群方式。
为什么用了swarm?
k8s确实强大但是只适合大规模集群,对于中小集群还是swarm最为合适。毕竟是docker亲生的儿子。各种角度都集成的比较好。所以在确定了mysql的集群方式为PXC后就选用了swarm来实现分布式管理(以后会单拿出一篇文章来专门写swarm)。
为什么是keepalived而不是haproxy?
因为是PXC方式,前端代码又没做读写分离,所以就采用了keepalived的方式来进行集群故障转移和反向代理工作,这样所有前端应用会使用集群中的其中一台mysql写入或读取数据。这样避免双向同步的损耗!
如果您的项目是读写分离的,那也可以用keepalived再绑定一个VIP然后放到另一个集群节点上提供读服务即可!
PS:
还有容器数据备份及集群调优会陆续发布,希望大家持续关注简书或者我的公众号哦!我会继续努力给大家提供技术干货和开发各种IT实用工具。不过千里之行始于足下,慢慢来吧!加油!
关注公众号永远走不丢!还有更实用的工具等您拿!

mysql5.7.25集群部署和方案设计(附PXC一键部署脚本)的更多相关文章
- Docker:docker部署PXC-5.7.21(mysql5.7.21)集群搭建负载均衡实现双机热部署方案
单节点数据库弊端 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 推荐Mysql集群部署方案 PXC (Percon ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- Redis从单机到集群,一步步教你环境部署以及使用
Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的.一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所以还是优先考虑了它.那么在一些场景下为了保 ...
- Redis源码解析:25集群(一)握手、心跳消息以及下线检测
Redis集群是Redis提供的分布式数据库方案,通过分片来进行数据共享,并提供复制和故障转移功能. 一:初始化 1:数据结构 在源码中,通过server.cluster记录整个集群当前的状态,比如集 ...
- 虚拟机下 solr7.1 cloud 集群搭建 (手动解压和官方脚本两种方式)
准备工作: vmware workstation 12,OS使用的是ubuntu16.04,三台虚拟机搭建一个solr集群,zookeeper共用这三台虚拟机组成zookeeper集群. zookee ...
- mysql5.7 MRG集群部署学习
文章目录 1.安装mysql 2.修改配置文件: 3.安装group_replicatin插件,启动group_replication 4.添加节点node-02 node-03: 有关复制组的相关原 ...
- jenkins集群(一) -- 在Linux上部署
一.安装好jdk.maven.git 1.安装jdk并配置好全局变量 2.安装maven:yum install maven 3.安装jdk:yum install git 二 .安装jenkins ...
- CentOS 7.4通过rpm包离线安装 Mysql8.0并部署主从复制(附从库备份脚本)
一. 部署MySQL (两个节点都做) 下载 rpm包 wget https://goodrain-pkg.oss-cn-shanghai.aliyuncs.com/mysql8.rpm tar xv ...
- 自动化集成部署udeployer 批量统一安装一键部署
通过jenkins构建项目:version版本控制:udployer自动化集成:ucop业务巡检做到高效高可用的自动化体系. 1.0版本: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一sh ...
随机推荐
- adb获取Android系统属性(adb shell getprop ***)数据来源
在Android系统中,它的根文件系统下有几个用于启动系统时需要的配置文件: /init.rc /default.prop /system/build.prop 通常我们可以通过命令getprop获取 ...
- js 中整理(一)
一. 冒泡与冒泡阻止 var arr={5,0,-56,900,12,9000,-123}; var flag=false; //大的排序次数(arr.length-1) for(var i=0; ...
- MongoDB3.6.3 windows安装配置、启动
1.官网下载MongoDB的安装包 2.安装中一直Next即可安装成功,不过需要注意的是: 可以自定义安装,选择安装路径 值得注意的还有,安装中因为下载compass十分缓慢.把下面默认选中的勾去掉 ...
- python读取一个文件的每一行判断是否为素数,并把结果写到另一个文件中
刚刚学习python的菜鸟,这道题包括:文件的读写,python的参数调用,异常的使用,函数的使用 创建一个文本文件inti_prime.txt 执行命令:python Prime.py init_p ...
- position属性中的绝对定位和相对定位
absolute(绝对定位):1.如果没有父级DIV,则会根据浏览器原始点去定位,而且跟他相邻的DIV会忽略它,定位后则可用TRBL(top,right,bottom,left)去布局.注意:TRBL ...
- 利用高德地图javascriptAPI做一个自己的地图
最近由于项目中需要制作一个地图,用来选择活动地点,我就花了两天利用高德地图的javascriptAPI自制了一个地图的demo.在这了记录一下我学习的过程. 一.进入高德地图官网,再找到高德地图的开放 ...
- scrollerView 滚动的时候改变 scrollerView 的背景色代码
要实现点击电池条的时候立即回到页面的顶部的时候注意: 只有当一个主控制器有一个scrollview 并把这个属性设置为yes,其他的scrollview.scrollsToTop = NO 这样才会响 ...
- Spring之配置文件加载方式
spring在org.springframework.core.io包中提供了多种配置文件加载方式.无论是XML.URL还是文件,都有很好的支持.比如基于URL的UrlResource.基于输入流的I ...
- ecb-2.40与cedet-1.1的兼容(转载)
转自:http://blog.csdn.net/cnsword/article/details/7474119 今天凑热闹把fedora升级到了17,emacs升级到了24,但是悲剧了,显示cedet ...
- Educational Codeforces Round 21 D - Array Division (前缀和+二分)
传送门 题意 将n个数划分为两块,最多改变一个数的位置, 问能否使两块和相等 分析 因为我们最多只能移动一个数x,那么要么将该数往前移动,要么往后移动,一开始处理不需要移动的情况 那么遍历sum[i] ...