CentOS7 中 Docker-ce 配置 MyCat 分片 - 基于多个 MySQL 主从复制

MyCat 基于一套主从复制存储集群已经配好可用:

CentOS7 中 Docker-ce 安装配置 MyCat - 基于 MySQL 主从复制_太阳火神的美丽人生-CSDN博客MySql 5.7 主从复制架构完成后,作为物理存储,可以给 MyCat 逻辑存储提供物理支撑。cat /data/mycat/server.xml ..https://blog.csdn.net/opengl_es/article/details/122774006?spm=1001.2014.3001.5501

因为 MyCat 是基于分库机制的,使用一套集群,指定分片在同一数据主机的不同库,也可以实现分片,但 IO 和网络的负载并没有分减,反而可能更加重,毕竟多一个环节,多一份负担。

CentOS7 配置 MySQL5.7 一主多从_太阳火神的美丽人生-CSDN博客主服务器 /etc/my.cnf配置:cat /etc/my.cnf[mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/data/mysql/datasocket=/tmp/mysql.sockserver_id=6port=3306# 主服务器id,如果配置无法启动,请删除此注释server-id=101# log-bin 二进制日志文件名log-bin=mysql-bin# 实现级联同步 A > B &g...https://blog.csdn.net/opengl_es/article/details/122770367?spm=1001.2014.3001.5501

实际有效的方式就是,分片分在不同的主机上,才能真正体现把大吞吐、大并发,大而化小,负载均衡到多个节点以成倍降低单个节点的负载压力。

当然了,一台 64G 内存的笔记本,搭建多少虚机,最终都是走的同一个 IO ,网络 IO 可能会相对好些吧,毕竟走虚拟网络,不用走物理网卡,可能会对网络 IO 是有所裨益的。IO,IO,IO,我们做了这么多工作,都是在解决资源瓶颈问题,在同一时间大量不均衡资源占用的冲突问题。分下去!分下去!分下去!就这样而已。对于引用 Redis 集群的内存、磁盘缓存系统来说,物理IO可能影响不会太大,但你得知道,所有内存请求,仍然跑在同一总线上。所以,我觉得 ESIX 这种虚机系统对于 存储 IO 的瓶颈,从理论上来讲,好像并没有太大的功劳,反而是增加了负担,而分布式的主旨,是利用廉价的设备来分担这些突发负荷,所以对于一台高性能高配置的主机来说,真的风险从未转嫁过。然而,对于大量主机的云平台,确可以做到这一点,毕竟,你的多个虚机可以在多个真实主机上,而所有用户,都在使用同样的方案,这样来看,对于同一用户,是真正的分流,而对于所有用户来看,也确没有太大影响。所以,当量在的时侯,局限的问题就不再是问题。就像是买基金的散户,为什么可以确保你万无一失?不是说你买的那支风险不大,而是这风险被化到了多少支而已,永远不把鸡蛋放到一个篮子里,摔了一个篮子,基本没有影响。而一支惨了,确有无数的散户一起承担,只是或多或少,有所差异,让你感觉到,你确实买错了一支,而买对的,也没有太大大的暴利而已。

大数据时代,需要安全,需要并发及时响应的计算能力,需要。。。,那么这一切,都是在以分而化之的方式来予以解决。这是什么,?能想到吗?不再细说。。。

分片规则,可以将一张表中的数据,按照某一个业务字段,最大限度地均衡分布到分片节点上,才能确保负载被相对平衡地负担,而检索压力,也会按此分片规则分配到对应的分片节点,而分片节点的检索又分配到了两个只读从机上。

由于主机写入数据向从机同步有一个小延时,当某种原因,延时过大时,可能从机不能马上反应出主机刚写入的数据,那么从机查不到,从主机查能确保及时响应,而同步时延过程中的负载压力也不会很大,对于主机的负担也不会过重,甚至有些从业务层面去做异步事务处理提示,也能巧妙避过。更何况如果用 MQ 做削峰填谷,其业务流程设计更需要这种异步业务设计,主从同步的延时也就不算什么了。

如果确实需要有场景需要从机未及时同步时仍要能查得到,那么先从主机查也是可以解决业务需要的。Nginx 有一个 MyCat 插件,可以在从机未查到时,转而到主机去查找数据,这可能也得进行实时性较高业务域的限定,以使这种场景需求不被扩大化。这种情况下,就需要对业务流程进行合理的分解,实时性较高的业务场景,单独组建 MyCat 集群,再依托 MySQL 主从或主主集群进行分片消化压力。MyCat 集群使用 KeepLive 和 HaProxy 完成浮动 IP 的平衡负载分配,以及故障隔离,使得高可用与负载均衡得以稳定应用。

前述主从复制架构:

MySql 主机1:192.168.42.101

MySql 从机1:192.168.42.102

MySql 从机2:192.168.42.103

以上三者的虚机目录复制并重配IP:

MySql 主机2:192.168.42.111

MySql 从机1:192.168.42.112

MySql 从机2:192.168.42.113

查看主机2的 master 状态:

show master status ;

依照上面主机2最新 master 状态 File、Position 更新下面语句:

show slave status ;
stop slave;

change master to 
master_host='192.168.42.111',
master_port=3306,
master_user='mysync',
master_password='123456',
master_log_file='mysql-bin.000004',
master_log_pos=1128;

start slave;
show slave status ;

在主机上创建库、表,插入、删除、更改数据,核对两从机的同步情况:

-- 创建数据库并选择为当前库
CREATE SCHEMA `test` DEFAULT CHARACTER SET utf8mb4 ;
use test;

-- 创建表
drop table if exists test;
create table test(
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=innodb AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

-- 插入自增测试数据
insert into test.test (name) values('阿拉是东北那嘎达的测试数据!');

如果主从不同步了,或者从机状态不对了,那两个 YES 消失了,考虑重新同步:

重置主机,并查看记录状态值备用:(确保无任何DML操作,否则同步位置会发生变化)

reset master;
show master status;

停止并重置从机,按主机状态重新配置从机,再启动从机:

-- 停止从机,重置同步配置,加 all 则清除,查看从机状态配置应为空
stop slave;
reset slave all;
show slave status;

-- 按前置重置后的主机状态值更改如下最后两个参数值,查看从机当前配置状态
change master to 
master_host='192.168.42.101',
master_user='mysync',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=154;

show slave status;

-- 启动从机,稍等片刻再查看从机状态,确保 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes
start slave;
show slave status;

以上过程,完全可以做个多数据源程序,进行跨库同步管理,时刻监视从机状态,实时预警,确认后自动重置主从。

你可能感兴趣的:(mysql,架构,数据库)