MySQL数据库⾼可⽤HA实现小结

目录
  • mysql数据库⾼可⽤ha实现
    • 1、 数据库⾼可⽤分析
    • 2、mysql主从复制的容灾处理
  • 1. 什么是数据库⾼可⽤
    • 1.1. 什么是⾼可⽤集群
    • 1.2. ⾼可⽤集群的衡量标准
    • 1.3. 实现⾼可⽤的三种⽅式
    • 1.4. mysql数据的⾼可⽤实现
      • 1.4.1. 主从⽅式(⾮对称)
      • 1.4.2. 配置主从服务步骤
  • master服务器配置
    • slave服务器配置
      • 主库授权
        • 初始化数据
          • 创建复制链路
            • 从库的binlog是否写⼊?
              • 问题:只同步其中三个表
                • 1.4.2.1. gtid的⽅式来进⾏主从复制
                  • 2. 数据主从复制⽅式的容灾处理
                    • 2.1. mysql⽀持的复制格式
                      • 2.1.1. 基于语句的复制(statement)
                      • 2.1.2. 基于⾏复制(row)
                      • 2.1.3. 混合类型的复制(mixed)
                  • 2.1. mysql主从复制模式

                    mysql数据库⾼可⽤ha实现

                    1、 数据库⾼可⽤分析

                    ⾼可⽤的衡量标准
                    数据库实现⾼可⽤的⼏种⽅式
                    mysql数据库实现⾼可⽤

                    2、mysql主从复制的容灾处理

                    mysql⽀持的复制⽅式分析
                    主从场景切换⽅式
                    主从结构如何实现容灾

                    1. 什么是数据库⾼可⽤

                    1.1. 什么是⾼可⽤集群

                    n+1:n就是集群,1就是⾼可⽤,⾼可⽤的核⼼就是冗余,集群是保证服务最低使⽤标准的

                    1.2. ⾼可⽤集群的衡量标准

                    ⼀般是通过系统的可靠性和可维护性来衡量的
                    mttf:平均⽆故障时间,这是衡量可靠性的
                    mttr:衡量系统的可维护性的
                    ha=mttf/(mttf+mttr)*100%
                    sla:99.999%:表示⼀年故障时间/宕机时间不超过6分钟

                    1.3. 实现⾼可⽤的三种⽅式

                    主从⽅式(⾮对称)
                        这种⽅式的组织形式通常都是通过两个节点和⼀个或多个服务器,其中⼀台作为主节点
                    (active),另⼀台作为备份节点(standy),备份节点应该随时都在检测主节点的健康状况,当
                        主节点发⽣故障,服务会⾃动切换到备份节点保障服务正常运⾏
                    对称⽅式
                        两个节点,都运⾏着不同的服务且相互备份,相互检测对⽅的健康,当任意⼀个节点发⽣故障,这
                        个节点上的服务就会⾃动切换到另⼀节点
                    多机⽅式
                        包含多个节点多个服务,每个节点都要备份运⾏不同的服务,出现问题⾃动迁移

                    1.4. mysql数据的⾼可⽤实现

                    1.4.1. 主从⽅式(⾮对称)

                    资源:两台同版本的mysql数据库
                    主从实现的内部运⾏原理和机制
                        first step:主数据库服务器会把数据的修改记录记录进binlog⽇志,binlog⼀定要打开
                        second step:从库的i/o进⾏读取主库的binlog内容后存⼊⾃⼰的relay log中继⽇志中,这
                        个i/o线程会和主库建⽴⼀个普通的客户端连接,然后主库启动⼀个⼆进制转储线程,i/o线
                        程通过转储线程读取binlog更新事件,同步完毕后i/o进⼊sleep,有新的更新会再唤醒
                                relay log和binlog的格式是⼀样的,可以⽤mysqlbinlog读取,也可show
                                mysql> show relaylog events in ‘relay-log.000001’;
                                ⽬前数据库有两种复制⽅式
                                        binlog⽇志点position
                                        gtid⽅式也要依赖binlog
                        第三步:从服务器的sql进程会从relay log中读取事件并在从库中重放
                                从服务器执⾏重放操作时是可以在配置⾥声明是否写⼊服务器的binlog⽇志中

                    1.4.2. 配置主从服务步骤

                    1.4.2.1. binlog的⽇志点⽅式配置主从同步

                    配置主从服务器参数
                    在master服务器上创建⽤于复制并授权的数据库账号
                    备份master数据库并初始化slave服务器数据
                    启动复制链路

                    master服务器配置

                    chown -r mysql:mysql /usr/local/binlog/
                    #配置⽂件
                    server_id=163
                    log_bin=/usr/local/binlog/mysql-bin
                    12345

                    slave服务器配置

                    server_id=196
                    log_bin=/usr/local/binlog/mysql-bin
                    relay_log=/usr/local/relaylog/relay-bin
                    #当slave宕机后,如果relay log损坏了,导致⼀部分中继⽇志没有处理,则放弃所有未完成的,
                    重新获取执⾏,保证完整性
                    relay_log_recovery=1 #让从库数据只读,super⽤户,super_read_only=on
                    read_only=on
                    #从库的复制链路服务不会随数据库重启⽽重启,需要⼿动启动
                    skip_slave_start=on
                    #确保数据⼀致性,通过innodb的崩溃恢复机制来保护哦
                    master_info_repository=table
                    relay_log_info_repository=table
                    #select * from mysql.slave_master_info;
                    #select * from mysql.slave_relay_log_info;

                    主库授权

                    mysql> use msyql;
                    mysql> grant replication slave on *.* to 'syncuser'@'192.168.0.103'
                    identified by '123456';
                    mysql> flush privileges;
                    set global validate_password_policy=low;
                    set global validate_password_length=6;

                    初始化数据

                    mysqldump -uroot -p123456 --master-data=2 --single-transaction --routines -
                    -triggers --events --databases mydb > mydb.sql

                    创建复制链路

                    mysql>
                    change master to
                    master_host='192.168.0.102',
                    master_port=3306,
                    master_user='syncuser',
                    master_password='123456',
                    master_log_file='mysql-bin.000001',
                    master_log_pos=8122;
                    mysql> start slave;
                    mysql> show slave status \g;

                    从库的binlog是否写⼊?

                    默认情况下是不写⼊的:因为写⼊binlog会消耗i/o,所以性能会下降,如果需要在从库上恢复数
                    据就到relay log⾥进⾏导出处理
                    直接在从库上操作更⾏语句则会写⼊binlog
                    如果就是需要写⼊?在从库的my.cnf : log_slave_updates=on #开启同步并写⼊binlog
                    开启同步并写⼊binlog应⽤于从到从的情况

                    问题:只同步其中三个表

                    #master配置⽂件
                    #不同步哪些数据库
                    binlog-ignore-db=mysql
                    binlog-ignore-db=test
                    binlog-ignore-db=information_schema
                    #同步哪些库
                    binlog-do-db=game
                    binlog-do-db=mydb
                    
                    #slave配置⽂件
                    #复制哪些数据库
                    replicate-do-db=mydb
                    replicate-do-db=game
                    #不复制哪些数据库
                    replicate-ignore-db=mysql
                    replicate-ignore-db=test
                    
                    --replicate-wild-ignore-table=foo%.bar% 不复制使⽤表名称以开头foo且表名称以开头
                    的表的更新bar

                    1.4.2.1. gtid的⽅式来进⾏主从复制

                    不同点
                    	主从服务器的参数有不同的地⽅
                    
                    #在上⾯的基础上,需要给主从服务器都加上
                    gtid_mode=on
                    enforce_gtid_consistency=on #开启强制gtid的⼀致性确保事务		
                    
                    gtid下复制链路的启动
                    mysql>
                    change master to
                    master_host='192.168.0.102',
                    master_port=3306,
                    master_user='syncuser',
                    master_password='123456',
                    master_auto_position=1;
                    
                    启动gtid后以下数据库操作不可⽤
                    	create table tablename.... select
                    	在⼀个事务中创建临时表
                    	在⼀个transaction中更新innodb表和myisam表

                    2. 数据主从复制⽅式的容灾处理

                    2.1. mysql⽀持的复制格式

                    2.1.1. 基于语句的复制(statement)

                    优点:记录少,只记录执⾏语句,易懂
                        缺点:insert into table1(create_time) values(now()),这个now就不是当时的时间了

                    2.1.2. 基于⾏复制(row)

                    优点:⼏乎没有基于⾏复制⽆法处理的场景
                        缺点:数据量太⼤了

                    2.1.3. 混合类型的复制(mixed)

                    mixed格式默认采⽤statement,⽐如⽤到uuid(),row_count()

                    2.1. mysql主从复制模式

                    异步复制:mysql默认就是异步复制,性能最好,但主从复制的数据不⼀致性概率最⼤
                    同步复制:当客户端发过来⼀个请求后,只有当所有的从库都写到relay log中,才回复给前端事
                    务完成,性能最差,但⼀致性很强
                    半同步复制:⾄少⼀个从库完成relay log写⼊后就返回事务完成给前端
                    
                    主从上都要安装
                    mysql> install plugin rpl_semi_sync_master soname='semisync_master.so'
                    rpl_semi_sync_master_enabled
                    rpl_semi_sync_master_timeout #单位是毫秒,如果主库等待从库回复超过这个时间就⾃动切换
                    为异步

                    到此这篇关于mysql数据库⾼可⽤ha实现的文章就介绍到这了,更多相关mysql数据库⾼可⽤ha内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

                    (0)
                    上一篇 2022年3月21日
                    下一篇 2022年3月21日

                    相关推荐