MySQL-集群1

news2024/12/27 12:14:22

一、为什么要用mysql集群?:

mysql单体架构在企业中很少用,原因:①会形成单点故障,没有高可用的效果;②mysql本身是一个I/O能力比较差,并发能力比较差的应用服务,在较高规模的网络I/O情况下,单台数据库是无法承受企业级实战应用的;因此我们需要对数据库做集群:集中式集群、分布式集群

集中式架构:以多个客户,通过网络文件共享协议,通过远程过程调用的方式,找到NFS的挂载点,去共享资源。特点是数据的内容是一致性的,缺点是存储压力比较大。如:NFS、NAS、

分布式架构:每台服务器只存自己的一部分(元数据节点和数据节点是怎么关联,如ceph、gfs、mfs),关系型数据库不适合做分布式,因为其最致命弱点是范式要求过于严密;非关系型数据库适用于分布式架构,如:redis、elk、多实例、虚拟化、容器、半联动

微博、微信、公众号数据是半结构化数据,适合存储在非关系数据库中

半联动:优势可以实现异步处理,降低局域网中的主从复制的I/O压力、带宽压力。

二、mysql的主从复制

数据的读取和写入是以业务的方式进行的

1.MySQL复制

扩展方式: 横向扩展 ,纵向扩展

MySQL的扩展

          读写分离

          复制:每个节点都有相同的数据集

向外扩展

          二进制日志

          单向(主可以同步从、从不可以同步主,不要在从上面做相关写入的操作)

 复制的功用:

          数据分布

          负载均衡读

          备份

          高可用和故障切换(高可用:MHA、PXC)

          MySQL升级测试

一主一从

app server写入数据到master,master在进行数据同步到从服务器,然后app server 再去读就是读的从服务器。

一主多从

app server 写入master,master同步到多个slave,然后app server读的时候,可以负载均衡读三台服务器

主从复制基本原理

①主节点负责数据的写操作,此时要求主节点启用二进制日志(bin-log),此时数据库的更改写入到二进制日志中。(二进制日志功能:记录sql语句的增删改数据,就会涉及到数据更新,数据更新会写入到bin-log中)

②在MySQL主服务器上会生成开启dump Thread  将新生成的二进制日志读出来,同时通过网络发送给从节点。

③从节点开启I/O线程(I/O Thread,对接主服务器的dump线程,用于接收dump Thread传送过来的二进制日志),使用relay-log存放二进制日志。然后从服务器开启一个单独的线程(SQL Thread,用于读取relay-log  然后执行修改数据库中的数据,便实现了数据更新)

【注】:从服务器可以不用开启二进制日志,但必须开启中继日志(relay-log)

2.主从复制线程:

 主节点:

dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events

 从节点:

I/O Thread:向Master请求二进制日志事件,并保存于中继日志中

SQL Thread:从中继日志中读取日志事件,在本地完成重放

跟复制功能相关的文件:

master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等

 relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay log日志的对应关系

3.主从复制特点:

异步复制:主从数据不一致比较常见

复制架构:

Master/Slave, Master/Master, 环状复制

一主多从:从服务器还可以再有从服务器

 一从多主:适用于多个不同数据库

复制需要考虑二进制日志事件记录格式:

STATEMENT(5.0之前)、ROW(5.1之后,推荐)、MIXED

4.主从配置过程:

   MySQL Replication Master | MariaDB Knowledge Base

   MySQL :: MySQL 8.0 Reference Manual :: 19.1 Configuring Replication

主节点配置:

 (1) 启用二进制日志

         [mysqld]

          log_bin

(2) 为当前节点设置一个全局惟一的ID号

          [mysqld]

          server_id=#

log-basename=master 可选项,设置datadir中日志名称,确保不依赖主机名

(3)创建有复制权限的用户账号

 create user 'repluser'@'%';

 alter user 'repluser'@'%' identified with mysql_native_password by '123456';

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'HOST';

(4) 在从节点使用有复制权限的用户账号连接至主服务器,并启动复制线程

mysql> change master to

    -> master_host='192.168.10.100',

    -> master_user='repluser',

    -> master_password='123456',

    -> master_port=3306,

    -> master_log_file='mysql-bin.000001',

    -> master_log_pos=157;

高版本:

mysql> CHANGE REPLICATION SOURCE TO

    -> SOURCE_HOST='192.168.10.100',

    -> SOURCE_USER='repluser',

    -> SOURCE_PASSWORD='123456',

    -> SOURCE_PORT=3306,

    -> SOURCE_LOG_FILE='mysql-bin.000001',

    -> SOURCE_LOG_POS=157;

未开启MySQL从节点线程之前,使用show slave status\G / SHOW REPLICA STATUS\G(高版本)  查看从节点的线程是否开启和状态信息

主节点和从节点查看线程信息:show processlist;

开启从节点主从同步线程 start slaves; / START REPLICA;(高版本)

5.主从配置故障诊断:

如果主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点

①通过备份恢复数据至从服务器

②复制起始位置为备份时,二进制日志文件及其POS

步骤总结:

          ①:修改master主节点配置 server-id  log-bin

          ②:重启服务

          ③:备份master数据库,并添加--master-data=1

          ④:将备份的SQL脚本scp到新的从节点

          ⑤:从节点配置主配置文件的server-id  read-only等

          ⑥:编辑拷贝的SQL脚本,加入change master to

          ⑦:进入SQL接口临时关闭二进制日志,导入主节点所有数据,开启slave线程,再开启二进制日志。

如果要启用级联复制,需要在从服务器启用以下配置

[mysqld]

log_bin

log_slave_updates

6.复制架构中应该注意的问题

 1、限制从服务器为只读

 在从服务器上设置read_only=ON

注意:此限制对拥有SUPER权限的用户均无效

阻止所有用户, 包括主服务器复制的更新

 mysql> FLUSH TABLES WITH READ LOCK;

2、RESET SLAVE    --->清除中继日志

在从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log ,注意:需要先STOP SLAVE

RESET SLAVE ALL 清除所有从服务器上设置的主服务器同步信息如:PORT, HOST, USER和 PASSWORD 等

3、sql_slave_skip_counter = N   /   sql_replica_skip_counter = N  从服务器忽略几个主服务器的复制事件,  或者使用slave_skip_levels = ALL/CODE,global变量

4、如何保证主从复制的事务安全

Server System Variables - MariaDB Knowledge Base

在master节点启用参数:

sync_binlog=1     每次写后立即同步二进制日志到磁盘,性能差

如果用到的为InnoDB存储引擎:

innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘

innodb_support_xa=ON 默认值,分布式事务MariaDB10.3.0废除

sync_master_info=#    #次事件后master.info同步到磁盘

在slave节点启用服务器选项:

skip_slave_start=ON 不自动启动slave

 在slave节点启用参数:

sync_relay_log=#       #次写后同步relay log到磁盘

sync_relay_log_info=#   #次事务后同步relay-log.info到磁盘

三、MySQL读写分离

读写分离应用:

mysql-proxy:Oracle,https://downloads.mysql.com/archives/proxy/

Atlas:Qihoo,https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

dbproxy:美团,https://github.com/Meituan-Dianping/DBProxy

Cetus:网易乐得,https://github.com/Lede-Inc/cetus

Amoeba:https://sourceforge.net/projects/amoeba/

Cobar:阿里巴巴,Amoeba的升级版

Mycat:基于Cobar, http://www.mycat.io/

ProxySQL:https://proxysql.com/

mycat介绍:

在整个IT系统架构中,数据库是非常重要的,通常又是访问压力比较大的一个服务,除了在程序开发的本身上做优化,代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早遇到的技术。

mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用。

mycat是一个开源的分布式数据库系统,实现MYSQL协议,前端用户可以把它看作一个数据库代理。

核心功能是分库分表,将一个大表水平分隔为N个小表,存储在后端MySQL服务器里或者其他数据库里。

MyCat 是一个彻底开源的,面向企业应用数据库中间件 , 支持事务, 可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群, 在MyCat 中融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server ,并结合传统数据库和新型分布式数据仓库的新一代企业级数据库中间件产品 

 操作步骤:

①:mycat依赖java环境,需要安装jdk

        yum -y install java mariadb

②:tar xf Mycat-server.tar.gz -C /usr/local/

③:cd /usr/local/mycat/

④:PATH=$PATH:/usr/local/mycat/bin/      临时生效

⑤:mycat start                         先让mycat生效,预运行一下

⑥:ls /usr/local/mycat/logs/wrapper.log     运行日志查看 

    在客户机上尝试连接代理服务器       mysql -u root -h 192.168.10.130 -p -P 8066

⑦:更改mycat主配置文件和后台代理配置文件

vim /usr/local/mycat/conf/server.xml

vim /usr/local/mycat/conf/schema.xml

⑧:mycat restart     重启mycat服务

⑨:验证读写分离性效果(在mycat代理节点查询server_id验证读操作,在主节点开启通用日志,查看写操作)

【注】:mycat不仅可以实现读写分离,还可以实现主从健康状态监测,若读节点健康出问题,会将读操作转移到写节点运行。mycat无法解决主节点宕机的故障迁移,可以基于keepalived实现mycat的高可用集群。

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

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

相关文章

C#知识|将选中的账号信息展示到控制台(小示例)

哈喽,你好啊,我是雷工! 上篇学习了控件事件的统一关联, 本篇通过实例练习继续学习事件统一处理中Tag数据获取、对象的封装及泛型集合List的综合运用。 01 实现功能 在上篇的基础上实现,点击选中喜欢的账号,选中按钮底色变为蓝色,当选择完毕,点击保存选择时,将选中的…

Java InputStream实战指南:轻松读取、操作文件流

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

Themis新篇章:老牌衍生品协议登陆Blast L2,探索全新经济模型

本文将深入分析 Themis 的最新经济模型,探讨其核心概念和机制、优势与创新之处、风险与挑战。 一、引言 随着区块链技术的不断发展,DeFi 衍生品项目逐渐成为市场的焦点。而用户体验的革新,进一步的金融创新,去中心化治理方案的优…

Sharding Capital: 为什么投资全链流动性基础设施 Entangle ?

写在前面:Entangle 项目的名称取自于量子纠缠(Quantum entanglement),体现了项目对于构建连接、关联和互通的愿景。就像量子纠缠将不同的粒子联系在一起,Entangle 旨在通过其跨链流动性和合成衍生品的解决方案将不同的区块链网络连接在一起&a…

Redis高并发可用-主从复制,集群

Redis高并发可用 1 复制 默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。 1.1 复制的拓扑结构 一主一从: 主一从结构是最简单的…

Go 语言(三)【面向对象编程】

1、OOP 首先,Go 语言并不是面向对象的语言,只是可以通过一些方法来模拟面向对象。 1.1、封装 Go 语言是通过结构体(struct)来实现封装的。 1.2、继承 继承主要由下面这三种方式实现: 1.2.1、嵌套匿名字段 //Add…

ue引擎游戏开发笔记(28)——实现第三人称越肩视角

1.需求分析 实现一个第三人称越肩视角 2.操作实现 1.思路:建立一个弹簧臂和摄像机,调整两者位置达到越肩效果。 2.直接在蓝图操作:添加摄像机和弹簧臂: 3.对弹簧臂勾选使用pawn控制旋转,并适当调整摄像机和弹簧臂位置…

QT:输入类控件的使用

LineEdit 录入个人信息 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QString>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 初始化输入框ui->lineEdit…

电脑崩溃了,之前备份的GHO文件怎么恢复到新硬盘?

前言 之前咱们说到用WinPE系统给电脑做一个GHO镜像备份&#xff0c;这个备份可以用于硬盘完全崩溃换盘的情况下使用。 那么这个GHO镜像文件怎么用呢&#xff1f; 咱们今天详细来讲讲&#xff01; 如果你的电脑系统硬盘崩溃了或者是坏掉了&#xff0c;那么就需要使用之前备份…

Git的基本操作和使用

git分支指令 列出所有本地分支 git branchmaster是绿的 前面有个 表示当前分支是master* 列出所有远程分支 git branch -r列出所有本地分支和远程分支 git branch -a新建一个分支&#xff0c;但依然停留在当前分支 git branch [branch-name]新建一个分支&#xff0c;并切…

Redis__三大日志

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a;Redis__三大日志 ⏱️ 创作时间&#xff1a;2024年04月30日 ———————————————— 对于MySQL来说, 有…

政安晨:【Keras机器学习示例演绎】(三十)—— 使用变换器进行视频分类

目录 数据收集 设置 定义超参数 数据准备 构建基于变换器的模型 培训的效用函数 模型训练和推理 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不…

C语言/数据结构——每日一题(环形链表的约瑟夫问题)

一.前言 今天在牛客网上面看到了一道环形链表题&#xff0c;想着和大家们分享一下。可能我有点笨&#xff0c;那道题的链接我没搞好&#xff0c;所以很抱歉&#xff0c;只能麻烦大家们看一下截屏的题目信息了。废话不多数&#xff0c;让我们开始今天的题目分享吧。 二.正文 …

论文笔记(四十五)Attention Is All You Need

Attention Is All You Need 文章概括摘要1. 介绍2. 背景3. 模型架构3.1 编码器和解码器堆栈3.2 Attention3.2.1 按比例点积Attention3.2.2 Multi-Head Attention3.2.3 注意力在模型中的应用 3.3 定位前馈网络3.4 嵌入与 Softmax3.5 位置编码 4 为什么 Self-Attention5. Trainin…

手撕vector的模拟实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Python梯度提升决策树库之lightgbm使用详解

概要 LightGBM是一个快速、分布式、高性能的梯度提升决策树(Gradient Boosting Decision Tree)库,它在机器学习和数据挖掘领域被广泛应用。本文将介绍LightGBM库的安装方法、主要特性、基本功能、高级功能、以及在实际应用中的场景和总结。 安装 首先,需要安装LightGBM库…

【doghead】ubuntu构建libuv

按照官方的文档2024年3月的版本。首先构建libuv 最终构建的还得了test 构建过程 zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/thunderbolt/ayame/zhb-bifrost$ ls Bifrost-202403 README.md draw player-only worker 大神的带宽估计.png zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/…

python学习笔记B-20:序列实战--处理千年虫

将2位数表达的年份&#xff0c;转换为用4位数表达&#xff1a; print("将列表中的2位数年份转换为4位数年份") lst[88,89,90,00,99] print(lst) for index in range(len(lst)):if len(str(lst[index]))2:lst[index] 1900int(lst[index])elif len(str(lst[index]))1…

AI学习指南-人工智能概述

欢迎来到人工智能的奇妙世界&#xff01;如果你是初学者&#xff0c;那么你来对地方了。今天&#xff0c;我们将一起探索人工智能&#xff08;AI&#xff09;的基本概念&#xff0c;看看它是如何分类的&#xff0c;它的应用有哪些&#xff0c;以及未来可能的发展方向。准备好了…

7个策略,让你的可视化大屏打动人心!

要打动人心的可视化大屏&#xff0c;可以采取以下策略&#xff1a; 引人入目的设计&#xff1a; 选择鲜明而吸引人的颜色和视觉效果&#xff0c;使用引人注目的动画和过渡效果&#xff0c;以及吸引眼球的图形和图案设计。通过精心设计的布局和排版&#xff0c;确保信息清晰可…