Mycat(三)读写分离双主双从

文章目录

  • 搭建双主双从
    • 双主机配置
    • 双从机配置
    • 双从配置
    • 两个主机互相复制
    • 停止从服务复制功能
    • 重新配置主从
  • 修改 Mycat 的集群配置实现多种主从
    • 双主双从集群角色划分
    • 增加两个数据源
    • 修改集群配置文件
    • 读写分离配置扩展
      • (1)读写分离(一主一从,无备)(m是主,s是从)
      • (2)读写分离(一主一从,一备)(m是主,s是从备)
      • (3)读写分离(一主一从,一备)(m是主,s是从,b是备)
      • (4)MHA(一主一从,一备)(m是主,s是从,b是备,READ_ONLY判断主)
      • (5)MGR(一主一从,一备)(m是主,s是从,b是备,READ_ONLY判断主)
      • (6)GARELA_CLUSTER(一主一从,一备)(m是主,s是从,b多主)

本篇和Mycat(二)中搭建一主一从内容上部分重合,记录一下集群配置
https://www.bilibili.com/video/BV1iT41157JX/

搭建双主双从

一个主机 m1 用于处理所有写请求,它的从机 s1 和另一台主机 m2 还有它的从机 s2负责所有读请求。当 m1 主机宕机后,m2 主机负责写请求,m1、m2 互为备机。
在这里插入图片描述

编号角色IP 地址机器名
1Master1192.168.140.100atguigu01
2Slave1192.168.140.99atguigu02
3Master2192.168.140.98atguigu03
4Slave2192.168.140.97atguigu04

双主机配置

可参考Mycat(二)中的配置,注意log-slave-updates、auto-increment-increment、auto-increment-offset

Master1配置

#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库(不填即全部)
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是
1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1

Master2配置

vim /etc/my.cnf
#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是
1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2

双从机配置

vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
Slave2配置
修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay

双主机、双从机重启 mysql 服务
主机从机都关闭防火墙
在两台主机上建立帐户并授权 slave

#在主机MySQL里执行授权命令
CREATE USER 'slave2'@'%' IDENTIFIED BY '123123';
GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave2'@'%' IDENTIFIED WITH mysql_native_password BY '123123';
#查询Master1的状态
show master status;#查询Master2的状态
show master status;

分别记录下File和Position的值
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

双从配置

Slava1 复制 Master1,Slava2 复制 Master2

Slava1的复制命令

#复制主机的命令
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

Slava1的复制命令
在这里插入图片描述

Slava2的复制命令
在这里插入图片描述

#启动两台从服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;
#下面两个参数都是Yes,则说明主从配置成功!
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

两个主机互相复制

Master2 复制 Master1,Master1 复制 Master2

Master2的复制命令
在这里插入图片描述

Master1的复制命令
在这里插入图片描述

#启动两台从服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;

停止从服务复制功能

stop slave;

重新配置主从

stop slave;
reset master;

修改 Mycat 的集群配置实现多种主从

Mycat2.0的特点是集群概念,和mysql主从复制、集群配合实现多节点读写分离

双主双从集群角色划分

*m1:主机
*m2:备机,也负责读
*s1,s2:从机

增加两个数据源

/*+ mycat:createDataSource{ "name":"rwSepw2",
"url":"jdbc:mysql://192.168.140.98:3306/mydb1?useSSL=false&characterEncodin
g=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root",
"password":"123123" } */;
/*+ mycat:createDataSource{ "name":"rwSepr2",
"url":"jdbc:mysql://192.168.140.97:3306/mydb1?useSSL=false&characterEncodin
g=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root",
"password":"123123" } */;

修改集群配置文件

vim /usr/local/mycat/conf/clusters/prototype.cluster.json
{"clusterType": "MASTER_SLAVE","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["rwSepw","rwSepw2"],"replicas": ["rwSepw2","rwSepr","rwSepr2"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

重启Mycat生效

读写分离配置扩展

通过对集群配置的修改,可以根据需求实现更多种情况的读写分离配置,总结如下

(1)读写分离(一主一从,无备)(m是主,s是从)

{"clusterType": "MASTER_SLAVE","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["m"],"replicas": ["s"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

(2)读写分离(一主一从,一备)(m是主,s是从备)

{"clusterType": "MASTER_SLAVE","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["m","s"],"replicas": ["s"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

(3)读写分离(一主一从,一备)(m是主,s是从,b是备)

{"clusterType": "MASTER_SLAVE","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["m","b"],"replicas": ["s"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

(4)MHA(一主一从,一备)(m是主,s是从,b是备,READ_ONLY判断主)

{"clusterType": "MHA","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["m","b"],"replicas": ["s"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

(5)MGR(一主一从,一备)(m是主,s是从,b是备,READ_ONLY判断主)

{"clusterType": "MGR","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["m","b"],"replicas": ["s"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

(6)GARELA_CLUSTER(一主一从,一备)(m是主,s是从,b多主)

{"clusterType": "GARELA_CLUSTER","heartbeat": {"heartbeatTimeout": 1000,"maxRetryCount": 3,"minSwitchTimeInterval": 300,"slaveThreshold": 0},"masters": ["m","b"],"replicas": ["s"],"maxCon": 200,"name": "prototype","readBalanceType": "BALANCE_ALL","switchType": "SWITCH","timer": {"initialDelay": 30,"period": 5,"timeUnit": "SECONDS"}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「C/C++ 01」scanf()与回车滞留问题

目录 〇、scanf()接收用户输入的流程 一、回车的缓冲区滞留问题是什么? 二、为什么? 三、四个解决方法: 1. 在前面的scanf()中加上\n 2. 在scanf("%c")中添加空格 3. 使用getchar()来吸收回车 4. 使用fflush()清空缓冲区 〇、scan…

【火柴题】如何移动一根火柴将2变成5

这里写目录标题 如何移动一根棍子将2变成51、变成第五个字母E2、变成罗马数字5 V3、变成手写体54、商用字体55、古尔穆基数字、藏文数字56、希伯来数字5 如何不动棍子将2变成5使用镜子使用装水的水杯小孔成像透视 如何移动一根棍子将2变成5 1、变成第五个字母E E 2、变成罗马…

【FPGA设计】单端口RAM双端口RAM

When I was young, my dad liked to tell me, “If you don’t ask the question, you won’t get the answer.” Today, I have a deeper understanding of his message – and I have applied his wisdom to many areas in my life. Harry Foster 概述 大家知道,RAM IP核分…

什么是scrum中的3355?

(学校作业) Scrum中的3355是指Scrum框架中的三个核心角色、三个工件、五个关键事件和五个价值观。 三个核心角色包括: 产品负责人(Product Owner):主要负责确定产品的功能和达到要求的标准,指…

力扣HOT100 - 207. 课程表

解题思路&#xff1a; class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {int[] inDegree new int[numCourses];//存每个结点的入度List<List<Integer>> res new ArrayList<>();//存结点之间依赖关系Queue<Integer>…

获客难题怎么破?揭秘那些企业高效拓客的背后秘密

在当今的商业环境中&#xff0c;客户资源的获取是企业生存和发展的关键。然而&#xff0c;传统的获客方式往往既耗时又费力&#xff0c;且效率不高。随着科技的进步和大数据的普及&#xff0c;一种新兴的获客工具——自动获客软件应运而生&#xff0c;它以其精准高效的特点&…

百度文库公测智能漫画和智能话本,有兴趣的可以申请一下

百度文库上线智能文库和智能话本功能&#xff0c;目前处于公测中&#xff0c;我刚申请&#xff0c;还在审核中。 智能漫画&#xff0c;参照官网的示例截图&#xff0c;生成的图片看起来不错&#xff0c;没试用过所以不太清楚他的操作模式是什么 智能话本&#xff0c;生成的话…

【高校科研前沿】华东师大白开旭教授博士研究生李珂为一作在RSE发表团队最新成果:基于波谱特征优化的全球大气甲烷智能反演技术

文章简介 论文名称&#xff1a;Developing unbiased estimation of atmospheric methane via machine learning and multiobjective programming based on TROPOMI and GOSAT data&#xff08;基于TROPOMI和GOSAT数据&#xff0c;通过机器学习和多目标规划实现大气甲烷的无偏估…

使用python写一个识别车牌原理

车牌识别&#xff08;License Plate Recognition, LPR&#xff09;通常涉及几个关键步骤&#xff1a;图像预处理、车牌定位、字符分割和字符识别。以下是一个简化的原理说明和Python代码示例&#xff0c;帮助你理解如何使用Python进行车牌识别。 1. 图像预处理 灰度化&#xf…

python学习笔记----函数(五)

一、函数介绍 在 Python 中&#xff0c;函数是一个组织好的、可重用的代码块&#xff0c;用来执行一个单一的、相关的动作。函数提供了代码的模块化和代码复用的能力。它可以接受输入参数&#xff0c;并可以返回一个结果。函数在 Python 编程中是基本的构建块之一。 二、函数…

Docker深入探索:网络与资源控制、数据管理与容器互联以及镜像生成

目录 一、 Docker网络 &#xff08;一&#xff09;Docker网络实现原理 &#xff08;二&#xff09;Docker网络模式 1. Bridge网络&#xff08;默认&#xff09; 2. Host网络 3. None网络 4. Container网络 5. 自定义网络 二、资源控制 &#xff08;一&#xff09;cgr…

LangChain Routing 学习笔记

LangChain Routing 学习笔记 0. 引言1. 使用提示词2. 使用 RunnableLambda 0. 引言 在使用大语言模型开发应用时&#xff0c;其中一个场景就是根据不同的输入&#xff0c;调用&#xff08;或者说路由到&#xff09;不同的逻辑。这就好比我们以前开发时经常使用的if ... else .…

搜索引擎的定义与运行原理

搜索引擎是一种用于在互联网或特定数据源中搜索信息的工具&#xff0c;它通过自动化程序&#xff08;称为爬虫或蜘蛛&#xff09;从网页或数据库中收集信息&#xff0c;并根据用户输入的关键词或短语返回相关的搜索结果。其运行原理可以简单概括如下&#xff1a; 爬取网页&…

cf914div2C

考虑相邻的两堆石子如果是2 3,那么先手可以选2,然后3变成1,这时后手只能选1,考虑2 4的情况,先手选1,剩下1 3,后手只能选1,剩下一个2,先手选1,剩1,后手只能选1.所以只要第一个数不为1的情况下,先手必胜,那么问题变成了找到mex(第一个未出现的数字),如果这个数字为偶数,先手是Bob…

电池管理协议SMBus/I2C在STM32CubeMX配置使用-读取SN8765电池组

一、前言 目前有个电源组需要通过i2c进行读取&#xff0c;获取一些电池信息&#xff0c;采用SMBus协议进行读取&#xff0c;其可以看作i2c的子集&#xff0c;可以直接通过i2c的接口进行读写。SMBus建立在被广泛采用的I2C总线之上&#xff0c;并定义了OSI&#xff08;开放系统互…

进行RLC防孤岛负载测试的步骤和规范

RLC防孤岛负载测试是用于检测并防止电力系统出现孤岛现象的测试方法&#xff0c;孤岛现象是指当电网因故障或停电而与主电网断开连接时&#xff0c;部分电力设备仍在运行&#xff0c;形成一个没有与主电网连接的独立电网。这种情况下&#xff0c;如果电力设备不能及时检测到孤岛…

dmdbchk检查数据库完整性正确性(达梦数据库)

dmdbchk检查数据库完整性正确性- - 达梦数据库 1 简介2 使用 dmdbchk3 dmdbchk 报告解读4 达梦数据库学习使用列表 1 简介 dmdbchk 是 DM 提供的用于检查数据库完整性、正确性的命令行工具。在服务器正常关闭后的脱机情况下&#xff0c;用户可以使用 dmdbchk 对数据库进行校验…

职场人是如何被拉开差距的?

事实上&#xff0c;职场人的差距从第一天就拉开了。 心理学里有一个词&#xff0c;叫做“首因效应&#xff0c;说的是人们在第一次接触时形成的印象&#xff0c;将会决定后续认知的基调。 入职第一天&#xff0c;从自我介绍开始&#xff0c;展示自己的特长&#xff0c;给大家…

IOT病毒分析

前言&#xff1a; 最近审计报警日志&#xff0c;发现了一个IOT病毒&#xff0c;利用的是CVE-2023-1389漏洞扫描tplink&#xff0c;进行攻击&#xff0c;有点意思&#xff0c;拿出来分析下。 发现&#xff1a; 查看流量日志&#xff0c;发现了一个有问题的访问&#xff1a; 访…

彻底理解Python相关的排序方法

左手编程&#xff0c;右手年华。大家好&#xff0c;我是一点&#xff0c;关注我&#xff0c;带你走入编程的世界。 公众号&#xff1a;一点sir&#xff0c;关注领取python编程资料 在Python中&#xff0c;列表排序是一项基础而重要的任务&#xff0c;它允许你对一系列元素进行有…