精华内容
下载资源
问答
  • 主要介绍:复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等mysql复制功能介绍mysql复制功能提供分担读负载复制解决的问题实现在不同服务器上的数据分布利用二进制...

    主要介绍:复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等

    mysql复制功能介绍

    mysql复制功能提供分担读负载

    复制解决的问题

    实现在不同服务器上的数据分布

    利用二进制日志增量进行

    不需要太多的带宽

    但是使用基于行的复制在进行大批量的更改时会对带宽带来一定得压力,特别是跨IDC环境下进行复制

    实现在不同服务器上的数据分布

    实现数据读取的负载均衡

    需要其他组件配合完成

    利用DNS轮询的方式把程序的读连接到不同的备份数据库,

    使用LVS,haproxy这样的代理方式

    非共享架构,同样的数据分布在多台服务器上

    增强了数据安全性

    利用备库的备份来减少主库负载

    复制并不能代替备份

    实现数据库高可用和故障切换

    实现数据在线升级

    mysql二进制日志

    mysql服务层日志

    二进制日志

    慢查日志

    通用日志

    mysql存储引擎层日志

    innodb日志

    重做日志

    回滚日志

    记录了所有对mysql数据库的修改事件,包括增删改查事件和对表结构的修改事件

    二进制日志格式

    基于段的格式(记录sql语句)

    binlog_format = statement

    优点

    日志记录量相对较小,节约磁盘及网络i/o, 只对一条记录修改或者插入

    缺点

    必须要记录上下文信息

    保证语句在从服务器和主服务器上执行结果一致

    对于特定的函数如uuid(),user()这样非确定性函数还是无法复制,可能造成mysql复制的主备服务器数据不一致

    基于行的格式

    binlog_format = ROW

    同一sql语句修改了10000条数据的情况下,基于段的日志格式只会记录这个sql语句,基于行的日志格式会有10000条记录分别记录每一行的数据修改

    优点

    使mysql主从复制更加安全

    对每一行数据的修改比基于段的复制高效

    误操作而修改了数据库中的数据,同时又没有备份可以恢复时,我们就可以通过分析二进制日志,对日志记录的数据修改操作做反向处理的方式来达到恢复数据的目的。

    缺点

    记录日志格式较大

    binlog_row_image = [full|minimal|noblob]

    混合日志格式

    binlog_format = mixed

    特点:

    根据sql语句由系统决定在基于段和基于行的日志格式中进行选择

    数据量的大小由所执行的sql语句决定

    mysql二进制日志格式对复制的影响

    基于sql语句的复制(SBR)

    优点

    生成的日志量少,节约网络传输i/o

    并不强制要求主从数据库的表定义完全相同

    相比于基于行的复制方式更为灵活

    缺点

    对于非确定事件,无法保证主从复制数据的一致性

    对于存储过程、触发器、自定义函数进行的修改也可能造成数据不一致

    相比于基于行的复制方式在从上执行时需要更多的行锁

    基于行的复制

    优点

    可以应用于任何sql的复制包括非确定函数,存储过程等

    可以减少数据库锁的使用

    缺点

    要求主从数据的表结构相同,否则可能会中断复制

    无法在从上单独执行触发器

    mysql复制工作方式

    f706ccdaea458c4be923eeeacb99f973.png步骤

    主将变更写入二进制日志

    从读取主的二进制日志变更并写入到relay_log中

    基于日志点的复制

    基于GTID的复制

    在从上重放relay_log中的日志

    基于sql段的日志是在从库上重新执行记录的sql

    基于行的日志则是在从库上直接应用对数据库的修改

    基于日志点的复制

    123d2cfb125b0a93a0f9df1eadcb8001.png基于日志点复制配置步骤

    在主DB服务器上建立复制账号

    create user 'repl' @'ip段'identified by 'password'

    grant replication slave on . to 'repl' @'ip段‘

    配置从数据库服务器

    bin_log = mysql-bin

    server_id = 101

    relay_log = mysql-relay-bin

    log_slave_update = on

    read_only = on

    初始化从服务器数据

    mysqldump --master-data=2 -single-transaction

    xtrabackup --slave-info

    启动复制链路

    change master to master_host="master_host_ip",master_user='repl',master_password='password' master_log_file='mysql_log_file_name',master_log_pos=4;

    优缺点

    优点

    是mysql最早支持的复制技术,bug相对较少

    对sql查询没有任何限制

    处理故障比较容易

    缺点

    故障转移是重新获取新主的日志点信息比较困难

    基于GTID的复制

    5fe1902fe427030ce05a6635d5b7f79f.png什么是GTID

    GTID即全局事务id,其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的id;GTID=source_id:transaction_id

    bin_log = /usr/local/mysql/log/mysql-bin

    server_id = 100

    gtid_mode = on

    enforce-gtid-consiste

    启动基于GTID的复制

    change master to master_host="master_host_ip",master_user='repl',master_password='password',master_auto_position = 1;

    优缺点

    优点

    可以很方便的进行故障专业

    从库不会丢失主库上的任何修改

    缺点

    故障处理比较复杂

    对执行的sql有一定得限制

    选择复制模式要考虑的问题

    所使用的mysql版本

    复制架构及主从切换的方式

    所使用的高可用管理组件

    对应用的支持程度

    mysql复制拓扑

    23d2d61dfaa423a0acd267a3f1072a04.pngmysql5.7之前,一个从库只能有一个主库

    mysql5.7之后,支持一从多主架构

    一主多从的复制拓扑

    0f681960ef0624827bbce2a89a27096a.png优点

    配置简单

    可以用多个从库分担读负载

    用途

    为不同业务使用不同的从库

    将一台从库放到远程IDC,用作灾备恢复

    分担主库的读负载

    主-主复制拓扑

    9e97dd96d93c4d9201d61be80c32c785.png配置注意事项

    两个主中所操作的表最好能够分开

    使用下面两个参数控制自增id的生成

    auto_increment_increment = 2

    auto_increment_offset = 1 | 2

    主备模式下的主-主复制配置主要事项

    只有一台主服务器对外提供服务

    一台服务器处于只读状态并且只作为热备使用

    在对外提供服务的主库出现故障或是计划性的维护时才会进行切换

    使原来的备库成为主库,而原来的主库会成为新的备库,并处理只读或是下线状态,待维护完成后重新上线

    确保两台服务器上的初始数据相同

    确保两台服务器上已经启动binlog并且有不同的server_id

    在初始的备份上启用read_only

    也可以给主库分配几个从库

    5cd5bd94363ecd11bfee89c6bb9cd8a4.png级联复制

    3eaad8f2aca9f86c0a41c31adaa30b15.pngmysql复制性能优化

    影响主从延迟的因素

    f706ccdaea458c4be923eeeacb99f973.png主库写入二进制日志的时间

    解决方法:控制主库的事务大小,分割大事务

    二进制日志传输时间

    解决方法:使用mixed日志格式或设置set binlog_row_image=minimal

    默认情况下从库只有一个sql线程,主上并发的修改在从上变成了串行

    解决方法:使用多线程复制,在mysql5.7中可以按照逻辑时钟的方式来分配sql线程

    配置步骤:

    stop slave

    set global slave_parallel_type = 'logical_clock'

    set global slave_parallel_workers = 4

    start slave

    mysql复制常见问题处理

    由于数据损坏或丢失所引起的主从复制错误

    主库或者从库意外宕机引起的错误

    解决方法:

    使用跳过二进制日志事件

    注入空事务的方式先恢复中断的复制链路

    再使用其它方法来对比主从服务器上的数据

    主库上的二进制日志损坏

    备库上的中继日志损坏

    在从库上进行数据修改造成的主从复制错误

    mysql复制无法解决的问题

    分担数据库的写负载

    自动进行故障转移及主从切换

    提供读写分离功能

    高可用框架什么是高可用

    高可用H.A(High Avalilability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性

    表示高可用常用的因子

    正常可用时间

    全年时间百分比

    引起系统不可用的原因

    严重的主从延迟

    主从复制中断

    锁引起的大量阻塞

    软硬件故障造成的服务器宕机等

    如何实现高可用

    避免导致系统不可用的因素,减少系统不可用的时间

    建立完善的监控及报警系统

    对备份数据进行恢复测试

    正确配置数据库环境

    对不需要的数据进行归档和清理

    增加系统冗余,保证发生系统不可用时可以尽快恢复

    避免存在单点故障

    主从切换及故障转移

    原因

    有服务器磁盘空间耗尽、

    性能糟糕的sql

    表结构和索引没有优化

    主从数据不一致

    人为的操作失误

    单点故障

    单点故障是指在一个系统中提供相同功能的组件只有一个,如果这个组件失效了,就会影响整个系统的正常使用。组成应用系统的各个组件都有可能成为单点。

    如何避免mysql单点故障

    利用sun共享存储或drdb磁盘复制解决mysql单点故障

    sun

    b7798a507b0cf5d9480203bb8c159bb1.pngdrdb

    332b7ec793accb7e2d26ea12a71fc571.png利用多写集群或ndb集群来解决mysql单点故障

    8a53fc28b86f3d0d489e25adcf427a1a.png如何解决主服务器的单点问题

    主服务器切换后,如何通知应用新的主服务器的ip地址

    如何检查mysql主服务器是否可用

    如何处理从服务器和新主服务器之间的那种复制关系

    MMM架构介绍

    Multi-Master Replication Manager

    MMM提供了什么功能

    MMM监控mysql主从复制健康情况

    在主库出现宕机时进行故障转移并自动配置其他从对主的复制

    如何找到从库对应的新的主库日志点的日志同步点

    如果存在多个从库出现数据不一致的情况如何处理

    提供了读、写虚拟ip, 在主服务器出现问题时,可以自动迁移虚拟ip

    MMM架构

    79196b5bcd6c37c02b459183894660a0.pngMMM部署所需资源

    6df08becd4053776f32d8e618ca15a66.pngMMM优缺点

    优点

    使用perl脚本语言开发及完全开源

    提供了读写vip(虚拟ip),使服务器角色的变更对前端应用透明

    MMM提供了从服务器的延迟监控

    缺点

    发布时间比较早不支持mysql新的复制功能

    没有读负载的功能

    在进行主从切换时,容易造成数据丢失

    MMM监控服务存在单点故障

    MHA架构介绍

    Master High Avalilability

    提供的功能

    监控主数据库服务是否可用

    当主DB不可用时,从多个从服务器中选举出新的主数据库服务器

    提供了主从切换和故障转移功能

    MHA主从切换过程

    尝试从出现故障的主数据库保存二进制日志

    从多个备选从服务器中选举新的备选主服务器

    在备选主服务器和其他从服务器之间同步差异二进制数据

    应用从原db服务器上保存的二进制日志

    读写分离和负载均衡介绍

    进行mysql主从复制配置的一个主要目的:为了分担主库的读负载

    为什么要读写分离

    只能在主上进行写操作

    读操作主和从上都可以

    7f0f299c3fad83248b176948583d42b2.png读写分离的两种方式

    程序实现读写分离

    优点

    由开发人员控制什么样查询在从库中执行,因此比较灵活

    有程序直接连接数据库,所以性能损耗比较少

    缺点

    增加了开发的工作量,使程序代码更加复杂

    认为控制,容易出现错误

    中间件实现读写分离

    优点

    由中间件根据查询语法分析,自动完成读写分离

    对程序透明,对于已有程序不用做任何调整

    缺点

    增加了中间层,所以对查询效率有损耗

    对于延迟敏感业务无法自动在主库执行

    读写分离与读的负载均衡区别

    读写分离要解决的是如何在复制集群的不同角色上,去执行不同的sql语句

    读的负载均衡主要解决的是具有相同角色的数据库,如何共同分担相同的负载

    如何实现读的负载均衡

    软件

    LVS

    Haproxy

    MaxScale

    硬件

    F5

    本文仅代表作者个人观点,不代表SEO研究协会网官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱cxb5918@163.com。更多相关资讯,请到SEO研究协会网www.seoxiehui.cn学习互联网营销技术请到巨推学院www.jutuiedu.com。

    展开全文
  • mysql高可用架构详解

    千次阅读 2021-01-18 18:58:28
    高可用(High Availabiltity)应用提供持续不间断(可用)的服务的能力系统高可用性的评价通常用可用率表示造成不可用的原因硬件故障(各种)预期中的系统软硬件维护软件缺陷(应用代码,服务程序都可能存在bug)***,泄露,...

    高可用(High Availabiltity)应用提供持续不间断(可用)的服务的能力

    系统高可用性的评价通常用可用率表示

    f9e9df1aea042bfdf5838a2f68414145.png

    f5dfcfd366620257acbf39ef7e1158b9.png

    造成不可用的原因硬件故障(各种)

    预期中的系统软硬件维护

    软件缺陷(应用代码,服务程序都可能存在bug)

    ***,泄露,认为失误...等安全事件

    对于系统来说,不可用时间是各关键组件不可用时间的总和.....

    提高可用性的主要手段冗余,Redundancy

    关键软硬件通过备用冗余避免故障时长时间的不可用

    数据软件,硬件,存储的数据,都需要通过冗余确保故障时可替换

    f9e9df1aea042bfdf5838a2f68414145.png

    c489631e0c67c070b248185c61a4c932.png

    mysql高可用常见方案:数据库服务在冗余实现上有其特殊性

    数据:服务"有状态"与数据冗余

    数据库可用性考虑两部分:数据可用性,服务可用性;

    实现方式多种多样,同一种数据也会有多种实现方案

    可用性目标循序渐进

    任何故障都不会造成数据丢失->可以较快速恢复服务(高可用)

    高可用方案

    1.mysql--基于共享存储的单活方案(不常用)

    f9e9df1aea042bfdf5838a2f68414145.png

    c559f1b225967c9b2b26b245a48c89da.pngSAN,方案比较昂贵;因此不常用;

    且数据库备用机,只是机器活着,但是没有没有起mysql服务;

    因为大部分共享存储或数据库是不允许同一份数据被不同数据使用的;

    本地数据通过RAID等手段保证数据安全

    2.基于存储复制的数据冗余单活(不常用)

    4172d7392050bfdda56fc94c65a466cc.png

    f9e9df1aea042bfdf5838a2f68414145.png存在一定浪费,备用机器一直不在用,等待主机挂掉,才会使用备用机;

    而且DRBD(两台机器间通过网络,备份数据),不是100%的保证数据不丢失;

    3.基于集群提交通信协议的多主复制(一定场景适用)

    f9e9df1aea042bfdf5838a2f68414145.png

    60a0a6c0023b03f004df34477bb823f3.png

    基于主从复制的高可用方案

    4.基于Mysql主从复制(常用,普适)

    f9e9df1aea042bfdf5838a2f68414145.png

    925003e20ddcc7fea2e2686e9bf788fa.png

    备库,在线上也会提供服务,避免浪费;

    而主从复制,也保证了数据不会丢失。

    mysql主从复制高可用方案需要改进的问题主从服务器各自有IP地址,发生主从切换后应用需要修改重启;如何让应用快速找到从库;VIP/DNS

    人工判断主库是否故障再发起切换需要花较多时间如何自动探知;监控探知并自动VIP/DNS;

    主从复制存在客观延迟,切换后可能造成事务数据丢失。由于网络延时,如何避免数据丢失。

    1.为了避免应用人工修改切换IP,引入VIP(virtual ip)漂移方案:

    f9e9df1aea042bfdf5838a2f68414145.png

    f9e9df1aea042bfdf5838a2f68414145.png

    f468156442ae2db1ace95bae3b941636.png

    16ffede297200ce1935ae65eac22da36.png

    方案二:

    DNS,应用服务器,使用域名;

    平时,将域名注册在主库上,而主库挂掉,将域名注册到从库就可以了;

    2.为了减少人工介入处理的时间开销引入自动探活处理机制

    f9e9df1aea042bfdf5838a2f68414145.png

    9e47a7f797972078c1f529f77b32efac.png

    高可用中间层与RDSVIP/DNS解决 应用切换问题

    监控和管理服务器解决自动判断故障切换和VIP/DNS漂移

    VIP/DNS管理+探活+主从关系切换 = 高可用中间层

    透明切换管理+靠谱数据探活+使用切换 = 高可用中间层

    云环境+高可用中间层+底层数据库=一种PaaS=基本RDS、

    高可用中间层MHA

    自动选择复制延迟最小的从节点并试图补全日志(但大部分主机故障下行不通)

    通常要求两从以上,会进行主从关系切换

    不提供VIP管理方案

    MMM

    提供了基本的VIP管理功能

    适合双主配置的一对主机,不会主动切换主从关系

    不支持主从数据延迟判断和补全

    一般使用MHA,开源;

    3.mysql主从复制延迟

    为什么日志传输延迟

    为什么主从复制,主从库会数据不一致;

    f9e9df1aea042bfdf5838a2f68414145.png

    2b9be420e207971deac7dc36bf0e8116.png

    解决方案:

    mysql半同步技术:

    主库一次commit,要等到主库持久化完成,以及从库也持久化完成,才给主键放回commit成功。

    但是问题:

    主库等待从库的时间是不可控的;

    主库发现从库写不进去了,可以等待几秒,之后主库复制自动降级成异步复制;但这也可能导致数据不一致;

    f9e9df1aea042bfdf5838a2f68414145.png

    48c61ada00816cbc2e7537eda4037d34.png

    较完善的mysql高可用方案半同步复制+高可用中间层+VIP管理方案

    高可用中间层=靠谱探活+主从切换+使用VIP管理的接口

    例如:半同步复制+MHA(高可用中间层)+Keeplive(VIP管理方案)

    半同步复制+RDS

    总结

    高可用指标至少3个9目标4个9

    高可用核心就是使用冗余

    数据库高可用两个部分

    数据可用性--数据有状态

    服务可用性

    高可用方案

    基于SAN方案的改进,不使用SAN设备

    单活,备用机浪费

    DRBD基于两台机器间通过网络备份数据,数据不能100%保证

    SAN,设备昂贵

    单活,备用机浪费,因为同一份数据不能被不同mysql实例使用;

    本地数据可以通过RAID等手段保证

    基于共享存储SAN的单活方案

    基于DRBD存储复制的数据冗余单活

    多主复制--mysql cluster

    基于mysql主从复制(常用,普适)

    备份,在线上可提供只读服务,避免浪费;

    主从复制,也保证了数据不会丢失

    基于mysql主从复制的问题

    VIP管理方案+高可用中间层+半同步复制

    使用半同步复制技术,但也要考虑到从库宕机,主库应该自动降级成异步复制;

    使用监控服务器,自动靠谱探知+自动主从切换

    使用VIP(virtual IP)/DNS管理方案,当发生切换是,只需要将VIP从主库漂移到从库,对应用来说是透明的。主从服务器各有IP地址,发生主从切换后应用需要修改重启;

    人工判断主库是否故障,在发起切换需要时间长

    主从复制存在客观延迟,切换后可能造成事务数据丢失

    解决问题后的mysql高可用方案

    高可用中间层

    VIP/DNS管理+靠谱探活+主从关系切换=高可用中间层

    云环境+高可用中间层+底层数据库=一种paas=基本RDS

    MHA/MMM

    MHA

    自动选择复制延迟最小的从节点并试图补全日志(主机故障下行不通)

    自动探活

    自动主从切换

    不提供VIP管理方案,但提供使用VIP方案的接口

    展开全文
  • MySQL高可用架构对比

    2021-01-19 19:11:36
    MMM与MHA以及MGR,高可用架构都有如下的共同点:对主从复制集群中的Master节点进行监控自动的对Master进行迁移,通过VIP。重新配置集群中的其它slave对新的Master进行同步MMM需要两个Master,同一时间只有一个Master...

    MMM与MHA以及MGR,高可用架构都有如下的共同点:

    对主从复制集群中的Master节点进行监控

    自动的对Master进行迁移,通过VIP。

    重新配置集群中的其它slave对新的Master进行同步

    MMM

    需要两个Master,同一时间只有一个Master对外提供服务,可以说是主备模式。

    dbe467264877732cd31499445da58f27.png

    需要基础资源:

    资源

    数量

    说明

    主DB

    2

    用于主备模式的主主复制

    从DB

    0~N台

    可以根据需要配置N台从服务器

    IP地址

    2n+1

    N为MySQL服务器的数量

    监控用户

    1

    用户监控数据库状态的MySQL用户(replication)

    代理用户

    1

    用于MMM代理端改变read_only状态

    故障转移步骤:

    Slave服务器上的操作

    完成原主上已经复制的日志恢复

    使用Change Master命令配置新主

    主服务器上操作

    设置read_only关闭

    迁移VIP到新主服务器

    优点:

    提供了读写VIP的配置,试读写请求都可以达到高可用

    工具包相对比较完善,不需要额外的开发脚本

    完成故障转移之后可以对MySQL集群进行高可用监控

    缺点:

    故障简单粗暴,容易丢失事务,建议采用半同步复制方式,减少失败的概率

    目前MMM社区已经缺少维护,不支持基于GTID的复制

    适用场景:

    读写都需要高可用的

    基于日志点的复制方式

    MHA

    0caedeba6902440b9fc18e42f92988bd.png

    需要资源:

    资源

    数量

    说明

    主DB

    2

    用于主备模式的主主复制

    从DB

    2~N台

    可以根据需要配置N台从服务器

    IP地址

    n+2

    N为MySQL服务器的数量

    监控用户

    1

    用户监控数据库状态的MySQL用户(replication)

    复制用户

    1

    用于配置MySQL复制的用户

    MHA采用的是从slave中选出Master,故障转移:

    从服务器:

    选举具有最新更新的slave

    尝试从宕机的master中保存二进制日志

    应用差异的中继日志到其它的slave

    应用从master保存的二进制日志

    提升选举的slave为master

    配置其它的slave向新的master同步

    优点:

    MHA除了支持日志点的复制还支持GTID的方式

    同MMM相比,MHA会尝试从旧的Master中恢复旧的二进制日志,只是未必每次都能成功。如果希望更少的数据丢失场景,建议使用MHA架构。

    缺点:

    MHA需要自行开发VIP转移脚本。

    MHA只监控Master的状态,未监控Slave的状态

    MGR

    MGR是基于现有的MySQL架构实现的复制插件,可以实现多个主对数据进行修改,使用paxos协议复制,不同于异步复制的多Master复制集群。

    支持多主模式,但官方推荐单主模式:

    多主模式下,客户端可以随机向MySQL节点写入数据

    单主模式下,MGR集群会选出primary节点负责写请求,primary节点与其它节点都可以进行读请求处理.

    2ab2662b9dbde18c7c87f3893fd7a752.png

    // 查看MGR的组员

    select * from performance_schema.replication_group_members;

    // 查看MGR的状态

    select * from performance_schema.replication_group_member_stats;

    // 查看MGR的一些变量

    show variables like 'group%';

    // 查看服务器是否只读

    show variables like 'read_only%';

    复制代码

    优点:

    基本无延迟,延迟比异步的小很多

    支持多写模式,但是目前还不是很成熟

    数据的强一致性,可以保证数据事务不丢失

    缺点:

    仅支持innodb

    只能用在GTID模式下,且日志格式为row格式

    适用的业务场景:

    对主从延迟比较敏感

    希望对对写服务提供高可用,又不想安装第三方软件

    数据强一致的场景

    读写负载大问题

    读负载大:

    增加slave

    加中间层(MyCat,ProxySQL,Maxscale)

    读写分离

    关于写负载大:

    分库分表

    增加中间层

    最后

    展开全文
  • 系统环境及架构#主机名 系统版本 mysql版本 ip地址mysqlMaster centos7.4 mysql5.7 192.168.1.42mysqlSlave centos7.4 mysql5.7 192.168.1.43#vip:192.168.1.41在master和slave上分别进行数据库的安装yum insta...

    系统环境及架构

    #主机名 系统版本 mysql版本 ip地址

    mysqlMaster centos7.4 mysql5.7 192.168.1.42

    mysqlSlave centos7.4 mysql5.7 192.168.1.43

    #vip:192.168.1.41

    b347c432f8d50aff3754d1348e9d2fa2.png

    在master和slave上分别进行数据库的安装

    yum install epel* -y && yum clean all && yum makecache

    rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7.rpm

    yum clean all && yum makecache

    yum install gcc gcc-c++ openssl-devel mysql mysql-server mysql-devel -y

    创建数据库文件存放路径

    mkdir /data/mysql -p

    chown -R mysql:mysql /data/mysql

    配置mysql配置文件

    #在mysqlMaster上配置mysql配置文件

    vi /etc/my.cnf

    [mysqld]

    server-id = 1#全局唯一,每台都不能一样

    log-bin = mysql-bin#log-bin表示开启二进制日志记录,mysql-bin表示日志文件的命名格式,会生成mysql-bin.0001 等等

    relay-log = mysql-relay-bin#指定中继日志格式(拉取主mysql日志后,在从库上生成的日志)

    replicate-wild-ignore-table=mysql.%#指定那些库或则表不进行同步,mysql是库名,.%表示下面所有的表,mysql.user 表示不同不mysql库下的user表

    replicate-wild-ignore-table=test.%

    replicate-wild-ignore-table=information_schema.%

    #replicate-wild-do-table=boke.%#表示同步那个库

    #注意:不要在主库上使用binlog-do-db 或 binlog-ignore-db选项

    #也不要在从库上使用 replicate-do-db 或 replicate-ignore-db 选项,因为这有可能产生跨库更新失败的问题.推荐从库上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 这两个选项来解决复制过滤问题

    datadir=/data/mysql

    socket=/data/mysql/mysql.sock

    user=mysql

    symbolic-links=0

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    character-set-server=utf8

    [mysql]

    socket=/data/mysql/mysql.sock

    default-character-set=utf8

    [client]

    socket=/data/mysql/mysql.sock

    default-character-set=utf8

    user=root

    password=NCYD-tianyu@0791

    #若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到

    在mysqlSlave上配置mysql配置文件

    vi /etc/my.cnf

    [mysqld]

    server-id = 2

    log-bin = mysql-bin

    relay-log = mysql-relay-bin

    replicate-wild-ignore-table=mysql.%

    replicate-wild-ignore-table=test.%

    replicate-wild-ignore-table=information_schema.%

    datadir=/data/mysql

    socket=/data/mysql/mysql.sock

    user=mysql

    symbolic-links=0

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    character-set-server=utf8

    [mysql]

    socket=/data/mysql/mysql.sock

    default-character-set=utf8

    [client]

    socket=/data/mysql/mysql.sock

    default-character-set=utf8

    user=root

    password=NCYD-tianyu@0791

    #若是不写上这个字段,在本机用命令进入mysql会报错,提示默认路径/var/lib/mysql/mysql.sock找不到,先初始化数据库(需要进行初始化在/data/mysql目录里生成必要的信息)

    #mysql5.7.7以后的初始化方法

    mysqld --initialize --user=mysql --datadir=/data/mysql

    #mysql5.7.7以前的初始化方法

    mysql_install_db --user=mysql --datadir=/data/mysql

    分别启动主从数据库

    #在centos7里面,必须先关闭selinux,否在无法启动mysqld

    systemctl start mysqld

    分别为主从mysql做安全加固

    #查到上一步,首次启动mysql,系统自动生成的密码( cat /var/log/mysqld.log |grep pass )

    mysql_secure_installation#使用该命令更改随机root密码(修改为 NCYD-tianyu@0791 )

    手动同步数据(假如现在的环境,主上已经有数据了,从是新的)

    1:在主上数据库中创建用于复制的用户,并授权

    mysql> GRANT REPLICATION SLAVE ON *.* to 'tongbu'@'192.168.1.43' identified by '123456789';

    2:在主mysql上先锁表(使其所有表变成只读状态)

    mysql> flush tables with read lock;#不要退出终端,否在这个锁就失效了

    3:再开启另一个命令行终端,使用myqldump等工具将数据导出(或则直接打包存储mysql数据的目录,并发送到从机上)

    4:将导出数据复制到从机上,并创建新库并导入数据

    互相置从,互相置主(以达到双主模式)

    在mysqlMaster上将mysqlSlave设置为自己的主角色服务器

    mysql> show master status;#查看mysqlSlave的状态(记录File名字,和Position)

    change master to

    master_host = '192.168.1.43',

    master_user = 'tongbu',

    master_password = '123456789',

    master_log_file = 'mysql-bin.000002',

    master_log_pos = 1006;

    mysql> start slave; #启动slave端的复制进程(某些版本是:slave start; )

    mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程

    在从上将mysqlMaster设置为自己的主角色服务器

    mysql> show master status;#查看mysqlMaster的状态(记录File名字,和Position)

    change master to

    master_host = '192.168.1.42',

    master_user = 'tongbu',

    master_password = '123456789',

    master_log_file = 'mysql-bin.000002',

    master_log_pos = 1006;

    mysql> start slave; #启动slave端的复制进程

    mysql> show slave status\G #查看slaves端的I/O进程,与SQL进程

    验证是否同步

    1:第一验证在myssqlMaster上创建库,mysqlSlave上是否存在

    2:第二验证在mysqlSlave上创建库,mysqlMaster上是否存在

    安装keepalived实现VIP切换,达到高可用

    yum install keepalived -y

    #在mysqlMaster和mysqlSlave上都创建检查mysql的检查脚本,并赋予执行权限

    touch /etc/keepalived/mysql_check.sh

    chmod +x /etc/keepalived/mysql_check.sh

    vi /etc/keepalived/mysql_check.sh

    #!/bin/bash

    #slave_is=( $(mysql -uroot -pNCYD-tianyu@0791 -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') ) 在新版本的myql中,直接将密码写在命令行,会进行安全提示,解决办法是将其写在mysql的配置文件里的 [client] 字段里,写法见上面mysql的配置文件

    slave_is=( $(mysql -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') )

    if [ "${slave_is[0]}" = "Yes" -a "$slave_is[1]" = "Yes"]

    then

    exit 0

    else

    exit 1

    fi

    #注意,keepalived检查脚本vrrp_script,只认两个返回值,0表示正常,非0表示不正常(这在写脚本是要注意),不正常就要做相关的切换

    配置keepalived,以实现高可用

    vi /etc/keepalived/keepalived.conf

    global_defs {

    notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

    }

    notification_email_from Alexandre.Cassen@firewall.loc

    smtp_server 192.168.200.1

    smtp_connect_timeout 30

    router_id LVS_DEVEL

    vrrp_skip_check_adv_addr

    #vrrp_strict#注意:当你发现无法ping通虚拟VIP时,建议将此行注释掉

    vrrp_garp_interval 0

    vrrp_gna_interval 0

    }

    vrrp_script mysql_check {

    script "/etc/keepalived/mysql_check.sh"

    #这个脚本,若是发现不执行,可以检查他的权限,777是不可以的,日志提示不安全,可以直接chmod +x /etc/keepalived/mysql_check.sh 就行

    #script "shutdown -r now"#或者,直接用命令进行调试

    interval 2

    weight 2

    }

    vrrp_instance VI_1 {

    state MASTER#mysqlMaster上是MASTER;mysqlSlave上是BACKUP

    interface ens192

    virtual_router_id 52

    priority 100#mysqlMaster上是100;mysqlSlave上是90

    advert_int 1

    nopreempt#配置VIP(注意:故障切换抢占模式,尽量关闭,默认是开启的,这个参数只需要在高优先级上设置即可)

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    track_script {#调用上面定义检查mfsmaster的脚本

    mysql_check

    }

    virtual_ipaddress {

    192.168.1.41/24 dev ens192

    }

    }

    启动keepalived

    systemctl start keepalived

    展开全文
  • 本文将说明各种高可用架构以及适用场景。 一 、高可用架构 MySQL Replication 经典的主从复制,需要多个步骤手动进行配置。例如,用户管理、备份恢复、配置复制…MySQL仅提供了核心功能,整体架构需要用户自己决定...
  • 封面页书名页版权页作者简介内容简介推荐序一 一花一世界、一叶一菩提推荐序二推荐序三推荐序四推荐序五前言目录第1章 MySQL架构介绍1.1 MySQL简介1.2 MySQL主流的分支版本1.3 MySQL存储引擎1.4 MySQL逻辑架构...
  • 概述MySQL高可用,顾名思义就是当MySQL主机或服务发生任何故障时能够立马有其他主机顶替其工作,并且最低要求是要保证数据一致性。因此,对于一个MySQL高可用系统需要达到的目标有以下几点:数据一致性保证--这个是...
  • 7数据库体系结构、InnoDB存储引擎、MySQL事务和锁、性能优化、服务器全面优化、性能监控、主从复制,以及PXC集群、MHA自动故障转移群集、MGR组复制、Keepal ived+双主复制等高可用集群架构设计与实践,还有针对...
  • MySQL高可用方案 MySQL自身主从机制无法满足高可用功能,需借助第三方组件实现。 常见MySQL集群方案:MMM、MHA、MGR 基本思路及共同点: 对主从集群中的Master进行监控 通过VIP实现Master故障切换 重新配置其他...
  • MySQL Group Replication(以下简称MGR),于5.7.17版本正式GA,由Oracle官方出品,为MySQL高可用方案注入了新血液。其一致性,以及不依赖外部组件实现的自动切换、多点写入,给DBA带来了不少期待。一、背景以MHA...
  • 探索MySQL高可用架构之MHA(8)-----构建mysql高可用系列(共9篇)上一篇文章介绍了本次架构的mha读写分离!世上本来就没有十全十美的事物。你不能要求一个人没有一点缺点错误。要正视自己的长处和短处,取他人之长补己...
  • 内容来源:2017年7月22日,UCloud高级研发工程师王松磊在“饿了么技术沙龙【第九弹】上海研发中心·运维专场”进行《数据库高可用架构》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。阅读...
  • 前言:数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现...所以,一个成功的数据库架构高可用设计方面也是需要充分考虑的。本章内容将针对如何构建一个高可用MySQL 数据...
  • Friends 2021 杭州站 的演讲内容《基于 Kubernetes 的新一代 MySQL 高可用架构实现方案》。 本文是 MySQL 容器化系列的第三篇文章,主要介绍 MySQL 容器化 Helm 版本[1] 的设计思路。 Dockerfile 简介 首先 ...
  • MySQL发展至今,在高可用性方面不断前进,从最初的异步复制、半同步复制、群组复制,演进到现在的InnoDB Cluster和InnoDB Replica Set。在这一篇里将说明各种...
  • 博文目录 文章目录搭建主从集群理论基础同步原理搭建集群masterslave测试验证集群搭建扩展 搭建主从集群 理论基础 主从架构有什么用?通过搭建MySQL主从集群,可以缓解MySQL...MySQL的主从架构只是实现读写分离的一个
  • 写这篇博客是因为最近有位同事和我说他做mysqlha实验,使用的是keepalived+mysql主、从架构,使我疑惑了,与他一起再次复习mysqlha的高可用架构,知道这样的架构并不理想。我的理解是主、从复制存在时间差的,数据库...
  • {0mysql高可用架构方案之一(keepalived+主主双活),有需要的朋友可以参考下。"r2tK%Ex(M#O2K051Testing软件测试网(TtoEpw eM;~eMysql双主双活+keepalived实现可用51Testing软件测试网'xx&q3r1Way4IG7lN0xy}s...
  • 前段时间,老张给大家介绍了企业中主流MySQL高可用集群架构三部曲中的前两部,有不了解的同学可以去访问我之前的博客内容。不足之处总结:192.168.56.100node1192.168.56.101node2192.168.56.102node3这里我下载的是...
  • 文档太大,PDF格式的存档已上传到百度网盘: 链接: https://pan.baidu.com/s/1r5wDChNuOu6SZlu5PVCPAw 提取码: 7piy
  • MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。 在MySQL故障切换过程中,MHA在监控到master节点故障时...
  • MySQL高可用

    2021-01-18 19:21:33
    3,nfs高可用,keepalive使用脚本(自己编写)vrrp_script {},通过脚本返回的状态(根据keepalive自定)判断drbd的主从,然后飘动vip,同时再触发脚本,切换drbd的主从关系。(drbd不能自动切换)4、redis一主两从,使用...
  • 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行100个时间...
  • 一、MySQL MySQL小型高可用架构 方案:MySQL双主、主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失败之后需要手动恢复主从架构 MySQL中型高可用架构...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 135,880
精华内容 54,352
关键字:

mysql高可用架构设计

mysql 订阅
友情链接: GPRS_VB.rar