MySQL-集群1

一、为什么要用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的高可用集群。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

部署JVS服务出现上传文件不可用,问题原因排查。

事情的起因是这样的,部门经理让我部署一下JVS资源共享框架,项目的地址是在这里 项目资源地址 各位小伙伴们做好了,我要开始发车了,全新的“裂开之旅” 简单展示一下如何部署JVS文档 直达链接 撕裂要开始了 本来服务启动的好好…

【计算机毕业设计】基于SSM++jsp的蜀都天香酒楼网站【源码+lw+部署文档+讲解】

目录 摘要 Abstract 目 录 1绪论 1.1研究背景与意义 1.2国内外研究现状 1.3研究内容 1.4论文结构 2相关技术介绍 2.1 B/S模式 2.2 MyEclipse开发环境 2.3 MySQL数据库 2.4 Java语言 2.5 JSP技术 2.6 Tomcat服务器 3系统分析 3.1需求分析 3.2可行性分析 3.2.1经济可行性 3.2.2技…

Python运维之多进程!!

本节的快速导航目录如下喔!!! 一、创建进程的类Process 二、进程并发控制之Semaphore 三、进程同步之Lock 四、进程同步之Event 五、进程优先队列Queue 六、多进程之进程池Pool 七、多进程之数据交换Pipe 一、创建进程的类Process mu…

5.9gunplot绘图堆叠柱状图

gunplot绘图堆叠柱状图 plot"要用的数据(后缀名是.dat)" using 2 t(或者title) 跟着是要命名的属性名称 这个名称可以用.dat里的每列列名,也可以直接在后面跟着定义 plot "data.dat" using 2 t columnheader(2), using 3 t column…

PLC数据采集网关的功能和特点-天拓四方

一、引言 随着工业自动化程度的不断提高,数据在生产线上的作用愈发重要。PLC作为工业自动化的核心设备,其数据采集和处理能力直接影响到整个生产线的效率和稳定性。而PLC数据采集网关,作为连接PLC与外部系统的桥梁,正日益受到人们…

vue3—win7搭建vue3环境

背景 vue3环境要求node.js18.3及以上版本,所以我们需要安装更高版本node.js,然而win7无法支持高版本node.js。下面我介绍一种安装方法。 步骤 1、下载 node-v13.14.0-x64.msi 安装,默认安装即可。安装完成后,进入cmd&#xff0c…

Hibernate认识

一、定义 Hibernate 是一种开源的 Java 对象关系映射 (ORM) 框架,用于将面向对象的领域模型持久化到关系数据库中。它为开发人员提供了一种简便的方法来操作数据库,而无需编写繁琐的 SQL 代码。 ORM(对象关系映射):Ob…

Linux 第二十章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

提速25倍!MoonBit 新增后端支持,一周内成为热议焦点

MoonBit 新增 JS 后端支持 近期,MoonBit 迎来了重要更新:新增对 JavaScript 后端的支持,为用户带来了前所未有的性能提升。 MoonBit 诞生于2022年,是专为云计算及边缘计算设计的 AI 云原生编程语言及开发者平台。作为一门诞生于 …

Orange3数据可视化(小提琴图)

小提琴图 小提琴图和箱线图类似,用来显示数据分布和概率密度。结合了箱线图和密度图的特征,用来显示数据的分布形状。 输入 数据: 输入数据集 输出 选中的数据: 从图中选中的实例 数据: 增加了一列,显示数据点是否被选中 …

STM32--4G DTU 及 阿里云

模块概述 ATK-IDM750C/IDM751C 是正点原子(ALIENTEK)团队开发的一款高性能 4G Cat1 DTU 产品, 支持移动 4G、联通 4G 和电信 4G 手机卡。它以高速率、低延迟和无线数传作为核心功能, 可快速解决应用场景下的无线数传方案。 它支持 TCP/UDP/HTTP/MQTT/DN…

酷开科技AI技术支持,酷开系统根据你的喜好量身定制节目

在当今数字化时代,个性化推荐已成为提升消费者体验的关键因素。酷开科技的智慧AI,为消费者提供了精彩的内容推荐服务,更大地丰富了消费者的娱乐生活。 酷开系统中的AI推荐引擎通过学习消费者的观看习惯和偏好,能够快速识别其兴趣…

Python进行excel处理-01

最近干采购,每个月要对供应商的对账单,对对应的采购订单号和物料编号的价格和数量,是不是和物料管控总表里面的价格数量是不是一致,于是写了一个代码。 从总表里面找到,对账单里对应采购订单和物料编码的数据&#xf…

ACPI高级配置和电源接口规范概览

安全之安全(security)博客目录导读 目录 1 Overview 背景 What is ACPI ACPI初始化 2 Introduction 主要目标 Power management 基本原理 ACPI框架 Target Audience 3 术语 通用术语General ACPI Terminology 全局系统状态定义Global System State Definitions 设…

【全开源】JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码

一、特色功能 护理服务功能: 基础护理:提供日常生活中的基础护理服务,如洗漱、穿衣、进食等,用户可以通过小程序预约,由专业的护理人员上门提供服务。康复护理:针对术后康复或慢性病康复的老年人&#xf…

Ansys Mechanical|内嵌nCode疲劳仿真工具

疲劳分析是分析结构受到周期性载荷作用下,结构应力远小于强度极限情况,甚至结构应力比弹性极限还低的情况下就可能发生破坏的情况。Ansys nCode是国际著名的疲劳耐久性仿真分析软件,其多个版本以前已经可以和Ansys Mechanical进行无缝以进行联…

如果你这样使用电路仿真软件,你就无敌了!

在电子设计领域,电路仿真软件如同一把锋利的宝剑,掌握它,你就能在复杂的电子世界中游刃有余。今天,就让我们一起探讨如何高效利用电路仿真软件,让你在电子设计领域所向披靡! 一、熟悉软件界面与基础操作 …

Java文件与IO操作

1. 文件与IO操作 1.1 文件 什么是文件: 文件,对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文档,txt文件.excel文件...都是文件。它既可以保存一张图片,也可以保持视频,声音.… 1.1.1 文件流: 1.1.2 常用的文件操作: 创建文件对象相关构造器和方法: 案例&a…

从C向C++16——常见容器2

一.stack容器 1.stack理解 概念: stack是一种先进后出的数据结构,它只有一个出口。 它在C中也叫栈,类似于我们在《数据结构和算法》里面的栈,只不过在C中把其封装成库,我们可以直接使用。 注意:栈中只有…

【因特网中自治系统内部的路由选择,RIP 进程处理 OSPFOSPF(Open Shortest Path First)最短路径优先协议】

文章目录 因特网中自治系统内部的路由选择RIP(Routing Information Protocol)内部网关协议RIP通告(advertisements)RIP: 链路失效和恢复RIP 进程处理OSPF(Open Shortest Path First)最短路径优先协议OSPF “高级” 特性(在RIP中的…