MySQL双主双从数据库集群搭建

1 引言

      在之前的文章中提到过相关搭建方法,具体请参考《MySQL主从数据库搭建》这篇文章,本文主要讲述双主双从,双主多从集群的搭建方式。 这里要问一个问题,为什么MySQL要搭建数据库集群呢?我想应该有以下几点原因:

  • 提高性能:通过搭建数据库集群,可以将负载分散到多个服务器上,从而提高了数据库的整体性能。这主要是因为集群的每个节点都可以独立地处理请求,减轻了单个服务器的负担。
  • 高可用性:在数据库集群中,如果一个节点发生故障,其他的节点可以接管并继续处理请求。这种故障转移能力可以大大提高系统的可用性和稳定性。
  • 可扩展性:数据库集群可以方便地增加或减少节点,以适应业务需求的变化。这种可扩展性使得系统能够灵活地应对不同的情况。
  • 数据备份与恢复:在数据库集群中,可以设置多个节点来存储相同的数据,从而实现数据备份和冗余。这样,即使某个节点发生故障,也可以从其他节点获取数据。
  • 负载均衡:通过集群,可以在多个节点之间分配用户请求,从而实现负载均衡。这有助于确保每个节点都保持合理的负载,避免过载的情况。
  • 安全性:集群环境中的多个节点可以提供更好的数据安全保护;例如,如果某个节点受到攻击或发生故障,其他节点可以继续处理数据,降低安全风险。
  • 容错性:在集群中,如果某个节点发生故障,其他节点可以接管并继续提供服务。这种容错能力可以提高系统的稳定性和可用性。
    总的来说,MySQL搭建数据库集群可以带来很多好处,如提高性能、高可用性、可扩展性、数据备份与恢复、负载均衡等。这些优点有助于确保系统的稳定运行和满足不断增长的业务需求
    在《文章》这篇文章中,主要讲述的是单主单从的搭建方式。

2 双主双从

      搭建双主双从需要使用6台服务器,两个主节点,每个主节点各自有两个从节点,这里采用的是docker的部署方式,如果缺乏docker运行环境,请参考《CentOS7安装Docker运行环境》这篇文章进行配置,配置完成后使用下列语句拉去MySQL镜像并创建运行MySQL镜像,这里采用了MySQL5.7.26版本进行创建。创建语句如下:

docker run -p 3306:3306 --name mysql --restart=always --privileged=true -v /mnt/mysql/log:/var/log/mysql -v /mnt/mysql/data:/var/lib/mysql -v /mnt/mysql/conf:/etc/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26

      使用docker ps 查看一下执行结果:
在这里插入图片描述
      这6台服务器都按照上述方法配置后就可以开始搭建集群了。

2.1 集群划分

      6台服务器如下表所示,读者可根据自己的实际情况选择其他的固定IP。

序号角色IP地址
1master1172.16.17.231
2master2172.16.17.232
3slave1172.16.17.233
4slave2172.16.17.234
5slave3172.16.17.235
6slave4172.16.17.236

2.2 集群架构图

      其中一个主机master1负责处理所有写请求,当master1宕机后,master2负责接替master1对外恢复数据库服务。slave1、slave2、slave3、slave4负责所有读请求,分摊读请求的压力。
在这里插入图片描述

2.3 配置

      根据前文提到的目录(/mnt/mysql/conf)下创建my.cnf文件

2.3.1 主节点

      在my.cnf文件中添加如下配置:

[mysqld]
# 设置字符集
character-set-server=utf8mb4
# 设置排序规则
collation-server=utf8mb4_general_ci
# 允许最大连接数
max_connections=200
# 设置临时表最大大小
tmp_table_size=128M
# 设置最大内存使用量
max_heap_table_size=1024M
# 服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置需要复制的数据库,这里以test为例
binlog-do-db=db1
# 设置不需要复制的数据库(可以设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information-schema
# 设置logbin格式
binlog_format=statement
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
[client]
default-character-set=utf8mb4

      以db1作为需要同步的数据库,binlog-do-db这个属性也可以根据读者需要改成自己需要同步的数据库名称。注意:log-slave-updates这个属性一定要添加不然修改master1的数据,master读取到之后,它的从机无法同步到数据。

2.3.2 从节点

      修改配置文件

vi /mnt/mysql/conf/my.cnf

      具体配置如下:

[mysqld]
# 设置字符集
character-set-server=utf8mb4
# 设置排序规则
collation-server=utf8mb4_general_ci
# 允许最大连接数
max_connections=200
# 设置临时表最大大小
tmp_table_size=128M
# 设置最大内存使用量
max_heap_table_size=1024M
server-id=3
relay-log=mysql-relay
[client]
default-character-set=utf8mb4

      按照上面对主从节点的配置,根据架构图中标识的server-id分别修改6台服务器的MySQL配置文件。

2.3.3 重启服务

      使用下述命令分别重启6台服务器的MySQL容器

docker restart mysql

2.3.4 创建同步slave账号并授权

步骤1: 分别进入master1和master2服务器docker容器,登录MySQL

docker exec -it mysql /bin/bash
mysql -uroot -p123456

步骤2: 创建slave账号并授权

create user 'slave'@'%' IDENTIFIED by '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

2.3.5 主从配置

步骤1: 登录主节点,查询master1的状态

msql -uroot -p123456
show master status

执行结果如下:
在这里插入图片描述
      记录File和Position两列的值。用以配置从节点
步骤2:登录从节点,配置需要复制的主机
      登录从节点

msql -uroot -p123456
CHANGE MASTER TO MASTER_HOST='主节点IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='刚刚记录的File值',MASTER_LOG_POS=刚刚记录的Position值;

      示例:

CHANGE MASTER TO MASTER_HOST='172.16.17.231',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

步骤3:启动从节点复制功能

start slave;

步骤4:查看从节点状态

show slave status\G

执行结果:

*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.16.17.231Master_User: slaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: mysql-relay.000003Relay_Log_Pos: 367Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 154Relay_Log_Space: 570Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: be75605d-4620-11ee-8b15-0242ac110002Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 
1 row in set (0.00 sec)

      查看Slave_IO_Running、Slave_SQL_Running属性都是Yes,则说明主从配置成功
slave3 重复步骤1-5进行配置,slave2、salve4与slave1、slave3类似,只不过登录主机换成master2,步骤2中的ip需要换成master2的IP(172.16.17.232)

2.3.6 双主配置

      与主从配置类似,master2需要复制master1、master1需要复制master2
master2复制master1:

CHANGE MASTER TO MASTER_HOST='172.16.17.231',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

master1复制master2:

CHANGE MASTER TO MASTER_HOST='172.16.17.232',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

主节点启动从服务器复制功能:

start slave;

查看主节点从服务状态:

show slave status\G;

      具体细节语句会和实际略有出入,读者根据自己的环境调整一下IP和端口之类的参数。

额外的一些命令(如无需要可以跳过):

# 停止从服务复制功能
stop slave;
# 重新配置主从
stop slave;
reset master;

3 测试

      master1创建一张表并插入一条数据,master2、slave1、slave2、slave3、slave4也做出了相应的变更即代表成功,master2反之亦然。

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

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

相关文章

面试题:Spring 中获取 Bean 的方式有哪些?

文章目录 前言1、在初始化时保存ApplicationContext对象2、通过Spring提供的工具类获取ApplicationContext对象3、实现接口ApplicationContextAware(推荐)4、继承自抽象类ApplicationObjectSupport5、继承自抽象类WebApplicationObjectSupport6、使用Bea…

【Python深度学习第二版】学习笔记之——什么是深度学习

机器学习是将输入(比如图像)映射到目标(比如标签“猫”)的过程。 这一过程是通过观察许多输入和目标的示例来完成的。 深度神经网络通过一系列简单的数据变换(层)来实现这种输入到目标的映射,这…

RK3566RK3568 安卓11 在framework层进行串口通信

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

日期对象与节点操作

1.日期对象 1.1实例化 // 实例化const date new Date()console.log(date);// 返回指定时间const date1 new Date(2022-5-1 08:30:00)console.log(date1);1.2日期对象方法 1.3时间戳 三种获取时间戳的方法 const date new Date()console.log(date.getTime());console.log(ne…

MaskDINO环境搭建与模型测试

1、环境搭建 1、构建虚拟环境安装torch conda create -n mmdetsam python3.8 -y conda activate mmdetsampip install torch1.10.0cu102 torchvision0.11.0cu102 torchaudio0.10.0 -f https://download.pytorch.org/whl/torch_stable.html -i http://mirrors.aliyun.com/pypi…

【计算机网络学习之路】序列化,反序列化和初识协议

文章目录 前言一. 序列化和反序列化1.自己实现2. JSON 二. 初识协议结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本篇博文讲解应用层的序列化和反序列化,还有见一…

uniapp页面使用多个echarts出现数据渲染错乱问题解决

首先,uniapp当中使用echarts是在通过使用renderjs的script模板的前提下实现的,在官方提供的案例当中,核心代码是这一部分: 但如果将其封装为组件,并在一个页面当中引用多次来生成多个charts图标,那么这个时…

字符串哈希

引例 题目描述 给定一个字符串 A A A 和一个字符串 B B B,求 B B B 在 A A A 中的出现次数。 A A A 和 B B B 中的字符均为英语大写字母或小写字母。 A A A 中不同位置出现的 B B B 可重叠。 输入格式 输入共两行,分别是字符串 A A A 和字符串…

企业微信,打造高效私域运营的重要工具!

随着数字时代的来临,私域运营已经成为了企业运营的重要环节。私域运营的核心在于人的运营,如何将目标用户牢牢地锁在自己的阵地上,并能够高效地运转起来,这是私域运营的关键所在。而企业微信,作为连接个人微信和企业微…

linux关于网络的一部分操作

目录 linux系统中一些简单的网络知识以及操作命令 查看ip命令 ping:检测与目标主机的连通性(现在很多服务器允许访问,但不允许ping发送的icmp包,防止探测) netstat:查看当前网络状态信息,包括服务及使用的端口 固定…

大地测量乙级资质申请条件

整理一期关于测绘资质大地测量乙级资质的申请要求 测绘资质是由测绘资质主管部门自然资源部制定的 想要了解标准、正规的申请条件,可以到当地省份的政务网搜索测绘资质办理相关标准(例如下图) 1、通用标准 http://gi.mnr.gov.cn/202106/P02…

在uniCloud中使用正则表达式进行文本匹配和处理的方法

1. 正则表达式基础 正则表达式是一种用来匹配字符串的模式。它由普通字符(例如字符 a 到 z)和特殊字符(称为"元字符")组成。以下是一些基本的正则表达式示例: 匹配邮箱的正则表达式:/^[\w-](\.…

2023关键事件

情境/背景: SAP系统未提供配置BOM解析功能,多个业务部长多次开会强调系统没有配置BOM查询功能,严重影响供应链物料管理。目标/任务: 实现SAP系统中配置BOM解析功能自开发定制程序行动/举措: 花费大量业余时间&#xff…

Python与设计模式--模板模式

23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…

java 鸿鹄云商 SAAS云产品概述 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城免费搭建

【SAAS云平台】打造全行业全渠道全场景的SaaS产品,为店铺经营场景提供一体化解决方案;门店经营区域化、网店经营一体化,本地化、全方位、一站式服务,为多门店提供统一运营解决方案;提供丰富多样的营销玩法覆盖所有经营…

一秒开挂!纯 Python 开发 Web 应用

你好,我是 EarlGrey,喜欢翻译点东西,偶尔写写代码。 点击下方卡片关注我,一起向上进击,提升自我。后台回复关键词“电子书”,送你一份我收藏的电子书合集。 PyWebIO 是一个用于构建交互式 Web 应用程序的 P…

漫动作杂志漫动作杂志社漫动作编辑部2023年第10期目录

漫步艺海 钟日恒作品欣赏 (0001) 钟日恒 白建宁作品欣赏 (0003) 白建宁 史君仪作品欣赏 (0006) 史君仪 黄韬、时钺博作品欣赏 (0007) 黄韬;时钺博 刘合栋、方晓玲作品欣赏 (0008) 刘合栋;方晓玲 宗家禾作品欣赏 (0009) 宗家禾 漫游美术《漫动作》投稿&…

API网关

API网关的作用 下图显示了详细信息。 步骤 1 - 客户端向 API 网关发送 HTTP 请求。 步骤 2 - API 网关解析并验证 HTTP 请求中的属性。 步骤 3 - API 网关执行允许列表/拒绝列表检查。 步骤 4 - API 网关与身份提供商对话以进行身份​​验证和授权。 步骤 5 - 将速率限制规…

蓝桥杯第一天-----时间显示

文章目录 前言一、题目描述二、测试用例三、题目分析四、具体代码实现总结 前言 本章中将相信介绍蓝桥杯中关于时间显示的题目。 链接:https://www.lanqiao.cn/problems/1452/learning/ 一、题目描述 二、测试用例 三、题目分析 1.输入的时间为毫秒,毫…

大数据学习(26)-spark SQL核心总结

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…