美文网首页
SUSE12 MySQL高可用架构 MHA环境 部署

SUSE12 MySQL高可用架构 MHA环境 部署

作者: shiyajing | 来源:发表于2021-06-07 18:52 被阅读0次

    一、MHA介绍

          MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。

          MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。管理节点可以单独部署在一台独立的机器上来管理多个master-slave集群,也可以部署在一台slave节点上。数据节点运行在每台mysql服务器上。Manager会定期检查master,若出现故障时,会自动将最新数据的slave提升为新的master,然后将其他的slave指向新的master。整个故障转移程序完全透明。

          目前MHA主要支持一主多从的架构。要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。

    二、MHA工作架构说明

    展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:

    相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。工作流程主要如下:

    1)从宕机崩溃的master保存二进制日志事件(binlog events);

    2)识别含有最新更新的slave;

    3)应用差异的中继日志(relay log)到其他的slave;

    4)应用从master保存的二进制日志事件(binlog events);

    5)提升一个slave为新的master;

    6)使其他的slave连接新的master进行复制;

    2.1      MHA工作原理

    1 从宕机崩溃的master保存二进制日志事件(binlog events)

     2识别含有最新更新的slave

     3应用差异的中继日志(relay log)到其他的slave

     4应用从master保存的二进制日志事件(binlog events)

     5提升一个slave为新的master

     6使其他的slave连接新的master进行复制

    2.2     MHAManager工具包

      1. masterha_check_ssh:检查MHA的SSH配置状况

      2. masterha_check_repl:检查MySQL的复制状况

      3. masterha_manager:启动MHA

      4. masterha_check_status:检测当前MHA运行状态

      5. masterha_master_monitor:检测master是否宕机

      6. masterha_master_switch:控制故障转移(自动或手动)

      7. masterha_conf_host:添加或删除配置的server信息

      8. masterha_stop:关闭MHA

    Node工具包(这些工具通常由MHAManager的脚本触发,无需人为操作)主要包括以下几个工具:

    save_binary_logs(保存二进制日志)             保存和复制master的二进制日志

    apply_diff_relay_logs(应用差异中继日志)     识别差异的中继日志事件并将其差异的事件应用于其他的slave

    filter_mysqlbinlog                          去除不必要的ROLLBACK事件(MHA已不再使用这个工具)

    purge_relay_logs(清理中继日志)               清除中继日志(不会阻塞SQL线程)

    MHA如何保持数据的一致性呢?主要通过MHA node的以下几个工具实现,但是这些工具由mha manager触发:

    save_binary_logs         如果master的二进制日志可以存取的话,保存复制master的二进制日志,最大程度保证数据不丢失

    apply_diff_relay_logs    相对于最新的slave,生成差异的中继日志并将所有差异事件应用到其他所有的slave

    注意:

    对比的是relay log,relay log越新就越接近于master,才能保证数据是最新的。

    purge_relay_logs删除中继日志而不阻塞sql线程

    2.3 MHA处理过程

    ====== monitor node 监控节点======

    (1) 监控所有节点,重点是master

    (2) 监控到master宕机(实例(ssh能),主机(ssh不能连))

    (3) 监控主从状态

    ====== failover 故障转移======

    (3) 对比各节点的GTID号码。

    (3) 数据补偿1:如果ssh能连,从节点立即保存自己缺失部分的二进制日志

    (4) 选主:对比各节点的GTID号码即可,选一个最接近于主库数据的从节点,恢复缺失的日志,并将从库切换为主库stop slave  reset slave all

    (5) 数据补偿2:如果ssh不能连,计算两个从库的relaylog的差异,恢复到数据少的从库中.

    (6) 2号从库change master to 到新主,开启新的主从关系

    ====== 应用透明=====

    (7) 使用vip机制实现应用透明

    ====== 补充功能======

    (8) 自动修复主库(加入集群)待开发...

    (9) 二次数据补偿的问题(binlog server)

    (10) 提醒功能(send_report)

    (11) 权重的问题

    2.4      MHA的优势

    1)故障切换快

    在主从复制集群中,只要从库在复制上没有延迟,MHA通常可以在数秒内实现故障切换。9-10秒内检查到master故障,可以选择在7-10秒关闭master以避免出现裂脑,几秒钟内,将差异中继日志(relay log)应用到新的master上,因此总的宕机时间通常为10-30秒。恢复新的master后,MHA并行的恢复其余的slave。即使在有数万台slave,也不会影响master的恢复时间。DeNA在超过150个MySQL(主要5.0/5.1版本)主从环境下使用了MHA。当mater故障后,MHA在4秒内就完成了故障切换。在传统的主动/被动集群解决方案中,4秒内完成故障切换是不可能的。

    2)master故障不会导致数据不一致

    当目前的master出现故障时,MHA自动识别slave之间中继日志(relay log)的不同,并应用到所有的slave中。这样所有的salve能够保持同步,只要所有的slave处于存活状态。和Semi-Synchronous Replication一起使用,(几乎)可以保证没有数据丢失。

    3)无需修改当前的MySQL设置

    MHA的设计的重要原则之一就是尽可能地简单易用。MHA工作在传统的MySQL版本5.0和之后版本的主从复制环境中。和其它高可用解决方法比,MHA并不需要改变MySQL的部署环境。MHA适用于异步和半同步的主从复制。启动/停止/升级/降级/安装/卸载MHA不需要改变(包扩启动/停止)MySQL复制。当需要升级MHA到新的版本,不需要停止MySQL,仅仅替换到新版本的MHA,然后重启MHA Manager就好了。

    MHA运行在MySQL 5.0开始的原生版本上。一些其它的MySQL高可用解决方案需要特定的版本(比如MySQL集群、带全局事务ID的MySQL等等),但并不仅仅为了master的高可用才迁移应用的。在大多数情况下,已经部署了比较旧MySQL应用,并且不想仅仅为了实现Master的高可用,花太多的时间迁移到不同的存储引擎或更新的前沿发行版。MHA工作的包括5.0/5.1/5.5的原生版本的MySQL上,所以并不需要迁移。

    4)无需增加大量的服务器

    MHA由MHA Manager和MHA Node组成。MHA Node运行在需要故障切换/恢复的MySQL服务器上,因此并不需要额外增加服务器。MHA Manager运行在特定的服务器上,因此需要增加一台(实现高可用需要2台),但是MHA Manager可以监控大量(甚至上百台)单独的master,因此,并不需要增加大量的服务器。即使在一台slave上运行MHA Manager也是可以的。综上,实现MHA并没用额外增加大量的服务。

    5)无性能下降

    MHA适用与异步或半同步的MySQL复制。监控master时,MHA仅仅是每隔几秒(默认是3秒)发送一个ping包,并不发送重查询。可以得到像原生MySQL复制一样快的性能。

    6)适用于任何存储引擎

    MHA可以运行在只要MySQL复制运行的存储引擎上,并不仅限制于InnoDB,即使在不易迁移的传统的MyISAM引擎环境,一样可以使用MHA。

    三、安装Mysql

    使用root创建用户

    useradd -m mysql

    修改密码

    passwd mysql

    下载https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.13-1.sles12.x86_64.rpm-bundle.tar

    解压

    tar xvf mysql-8.0.13-1.sles12.x86_64.rpm-bundle.tar

    mysql-community-server-8.0.13-1.sles12.x86_64.rpm

    mysql-community-devel-8.0.13-1.sles12.x86_64.rpm

    mysql-community-libs-8.0.13-1.sles12.x86_64.rpm

    mysql-community-client-8.0.13-1.sles12.x86_64.rpm

    mysql-community-common-8.0.13-1.sles12.x86_64.rpm

    mysql-community-test-8.0.13-1.sles12.x86_64.rpm

    3.1      安装

    先查询是否安装mysql

    rpm -qa | grep -i mysql

    如未安装则跳过执行安装命令。

    利用rpm卸载mysql

    rpm -e --nodepsmysql-community-client-5.7.28-1.el7.x86_64

    rpm -e --nodepsmysql-community-devel-5.7.28-1.el7.x86_64

    rpm -e --nodeps mysql-community-libs-5.7.28-1.el7.x86_64

    rpm -e --nodepsmysql-community-common-5.7.28-1.el7.x86_64

    rpm -e --nodepsmysql-community-server-5.7.28-1.el7.x86_64

    下面就利用安装命令来安装MySQL8.0x:

    rpm -ivh mysql-community-common-8.0.13-1.sles12.x86_64.rpm

    rpm -ivh mysql-community-libs-8.0.13-1.sles12.x86_64.rpm

    rpm -ivh mysql-community-client-8.0.13-1.sles12.x86_64.rpm

    rpm -ivh mysql-community-server-8.0.13-1.sles12.x86_64.rpm

    rpm -ivh mysql-community-devel-8.0.13-1.sles12.x86_64.rpm

    下面就利用安装命令来安装MySQL5.7x:

    rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm

    rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm

    rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm

    rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm --force --nodeps

    rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm

    3.2      创建用户组和用户

    创建用户组:groupadd mysql

    创建用户:useradd -r -g mysql mysql

    注:由于SUSE采用的是rpm安装,所以此系统已经创建好了,可以跳过次步骤。如果无则使用上诉命令进行创建

    给mysql用户指定专用用户组和用户

    首先创建data文件夹。(注:mysql的表文件都在这个目录下)

    这个data文件夹得根据硬盘的位置来

    df -h

    由于是本地虚拟机环境,生产环境可安装实际硬盘目录来创建data目录。

    mkdir -p /home/mysql/data

    指定用户和用户组

    cd /usr/local/

    mkdir -p mysql

    chown -R mysql mysql/

    chgrp -R mysql mysql/

    随便也设置一下data的,注mysql目录根据自己实际硬盘的要求更改目录

    cd /home/mysql

    chgrp -R mysql tmp/

    chown -R mysql tmp/

    chown -R mysqlmysql/

    chgrp-R mysql mysql/

    3.3      初始化用户

    vim /etc/my.cnf 内容如下

    # For advice on how to change settings please see

    # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

    [mysqld]

    #

    # Remove leading # and set to the amount of RAM for the most important data

    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

    # innodb_buffer_pool_size = 128M

    #

    # Remove the leading "# " to disable binary logging

    # Binary logging captures changes between backups and is enabled by

    # default. It's default setting is log_bin=binlog

    # disable_log_bin

    #

    # Remove leading # to set options mainly useful for reporting servers.

    # The server defaults are faster for transactions and fast SELECTs.

    # Adjust sizes as needed, experiment to find the optimal values.

    # join_buffer_size = 128M

    # sort_buffer_size = 2M

    # read_rnd_buffer_size = 2M

    #

    # Remove leading # to revert to previous value for default_authentication_plugin,

    # this will increase compatibility with older clients. For background, see:

    # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin

    # default-authentication-plugin=mysql_native_password

    #设置数据存放位置

    #basedir=/var/lib/mysql

    datadir=/home/mysql/data

    tmpdir=/home/mysql/tmp

    socket=/var/lib/mysql/mysql.sock

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

    port=3306

    default_storage_engine=InnoDB

    lower_case_table_names=1

    innodb_buffer_pool_size = 1G

    #事务日志文件大小,循环写的方式,把数据文件的随机IO转为几乎顺序的IO,默认是两个5M的文件,

    #对于生产环境来说至少要几百甚至上G的大小(需要重启)

    innodb_log_file_size = 512M

    #内存日志缓冲区,在缓冲满/事务提交/1秒钟Innodb会刷写缓冲区内容到日志文件

    innodb_log_buffer_size=16M

    character-set-server = utf8mb4

    collation-server = utf8mb4_bin

    ############## binlog ################

    server-id = 130

    log_bin = mysql-bin

    binlog_format = row

    sync_binlog = 1

    expire_logs_days =7

    #最大连接数,默认是100,生产可设置500~5000,取决于服务器的负载能力,一般来说1000足够

    max_connections=1000

    #mysql在服务端的线程缓存池存放的最大线程数,并不是越大越好,通常并发在100-120可设置为20,

    #并发在500-700,可设置200,256的上限值是个不错的估值

    thread_cache_size=256

    #socket=/var/lib/mysql/mysql.sock

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

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

    [client]

    socket=/var/lib/mysql/mysql.sock

    port=3306

    执行初始化命令:

    sudo mysqld --initialize --user=mysql --datadir=/home/mysql/data/ --lc_messages=en_US

    初始化成功,查看初始密码

    cat /var/log/mysql/mysqld.log | grep password

    这个是密码root@localhost: 9.sF=eBDO,k*

    依次查看

    启动MySQL服务

    systemctl start mysql

    停止MySQL服务

    systemctl stop mysql

    配置为开机启动

    systemctl enable mysql

    使用初始密码登录MySQL

    mysql -u root -p

    验证登录成功了,接下来修改root密码

    Mysql5.7x版本执行以上命令:

    修改密码:set password=password("root");

    登录授权:grant all privileges on *.* to 'root'@'%' identified by 'root';

    授权生效:flush privileges;

    Mysql8.0x版本执行以上命令:

    第一次需要修改密码

    ALTER USER 'root'@'localhost' IDENTIFIEDWITH mysql_native_password BY 'root';

    修改密码:create user 'root'@'%' identified with mysql_native_password by'root';

    登录授权:grant all privileges on *.* to 'root'@'%' with grant option;

    授权生效:flush privileges;

    关闭防火墙

    不同的MySQL直接要互相访问,需要关闭Linux的防火墙

    suse12下操作为:

    关闭防火墙

    systemctl stopSuSEfirewall2.service

    取消开机启动防火墙

    systemctl disableSuSEfirewall2.service

    开启防火墙

    systemctl enableSuSEfirewall2.service

    开机启动防火墙

    systemctl startSuSEfirewall2.service

    四、主从配置

    4.1      Master节点

    查看server_id

    show variables like 'server_id';

    修改Master配置文件

    vim /etc/my.cnf

    [mysqld]

    log_bin=mysql-bin

    server-id=130

    sync-binlog=1 # 每次写入都同步到binlog

    binlog-ignore-db=performance_schema # 忽略不同步

    binlog-ignore-db=information_schema

    binlog-ignore-db=mysql

    binlog-ignore-db=sys

    # binlog-do-db=test  #需要主从复制的数据库

    # 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存

    binlog_cache_size=1M

    # 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)

    binlog_format=row

    # 设置二进制日志自动删除/过期的天数,避免占用磁盘空间。默认值为0,表示不自动删除。

    expire_logs_days=7

    重启服务

    systemctl restart mysql

    主库给从库授权

    Mysql8.0x执行以下命令

    create user 'canal_repl_user'@'%' identified with mysql_native_password by '123456';

    GRANT REPLICATION SLAVE ON *.* TO 'canal_repl_user'@'%';

    flush privileges;

    Mysql5.7x执行以下命令

    create user canal_repl_user;

    grant replication slave on *.*  to canal_repl_user identified by '111111';

    flush privileges;

    show master status;

    4.2      Slave节点

    修改Slave配置文件,设置为134

    vim /etc/my.cnf

    [mysqld]

    log_bin=mysql-bin

    server-id=134

    sync-binlog=1 # 每次写入都同步到binlog

    binlog-ignore-db=performance_schema # 忽略不同步

    binlog-ignore-db=information_schema

    binlog-ignore-db=sys

    binlog-ignore-db=mysql

    binlog_cache_size=1M

    binlog_format=row

    expire_logs_days=7

    relay_log=mysql-relay-bin  #中继日志名字

    relay_log_purge=0

    read_only=2

    manager-slave节点

    修改manager-slave配置文件, server-id设置为160

    vim /etc/my.cnf

    [mysqld]

    log_bin=mysql-bin

    server-id=160

    sync-binlog=1 # 每次写入都同步到binlog

    binlog-ignore-db=performance_schema # 忽略不同步

    binlog-ignore-db=information_schema

    binlog-ignore-db=sys

    binlog-ignore-db=mysql

    binlog_cache_size=1M

    binlog_format=row

    expire_logs_days=7

    relay_log=mysql-relay-bin  #中继日志名字

    relay_log_purge=0

    read_only=2

    分别重启节点Slave和节点manager-slave

    systemctl restart mysql

    注:三台机器的配置可根据实际要求进行修改,网上一搜一大堆,这里不做过多的解释,如有疑问请留言。

    4.3      开启同步

    在Slave节点的MySQL命令行执行如下命令:

    change master to master_host='192.168.142.133',master_port=3306,master_user='canal_repl_user',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1072;

    start slave;  // 开启同步

    查看主从复制信息

    SHOW SLAVE STATUS\G;

    create database syj_test defaultcharacter set utf8mb4 collate utf8mb4_bin;

    create user 'syj_test'@'%' identified withmysql_native_password by 'syj_test';

    grant all privileges on syj_test.* to'syj_test'@'%' with grant option;

    flush privileges;

    4.4 半同步复制

    1)半同步复制配置参数说明

    主库半同步复制可配置的参数较少,可通过“show global variables like '%semi%';”查看

    注意MySQL5.7的增强半同步较MySQL5.6多了如下两参数:

    rpl_semi_sync_master_wait_for_slave_count: 至少有N个slave接收到日志,Default 1.

    rpl_semi_sync_master_wait_point: AFTER_SYNC(5.7的默认值,写入relaylog后,master commit), AFTER_COMMIT 等同于5.6的半同步。

    2)主库半同步复制状态说明

    主库半同步复制状态的参数较多,可通过“show global status like '%semi%';”查看。

    3)主库半同步复制状态说明

    登录MySQL主库,安装半同步插件。

    [if !supportLists]1.     [endif]链接Mysql数据库,安装插件rpl_remi_sync_master install plugin rpl_semi_sync_master soname'semisynv_mster.so';

    [if !supportLists]2.     [endif]查看插件是否安装show plugins;

    [if !supportLists]3.     [endif]启用插件 set global rpl_semi_sync_master_enabled = ON; # 注意= 与字符和数字之间有空格,否则会报

    [if !supportLists]4.     [endif]安装完成后,查看插件的状态

    半同步配置文件

    #master

    #my.cnf

    [mysqld]

    rpl_semi_sync_master_enabled = ON

    rpl_semi_sync_master_timeout = 1000

    安装半同步插件

    #master

    install plugin rpl_semi_sync_master soname'semisync_master.so';

    set global rpl_semi_sync_master_enabled =ON;

    检查是否生效:

    select * from mysql.plugin;

    show global status like '%semi%';    ---查看主库半同步复制的状态参数

    show global variables like '%semi%';   ---查看主库半同步复制的相关参数设置

    配置从库

    进入数据库,安装并启用插件rpl_semi_sync_slave,相关的操作可以参考配置主服务器的1&2

    mysql> install pluginrpl_semi_sync_slave soname 'semisync_slave.so';

    mysql> SET GLOBALrpl_semi_sync_slave_enabled = ON;

    需要注意,在Master中使用的是master 模块,在从服务器中使用的是slave模块.

    查看semi插件的状态

    show global status like '%semi%';  

    半同步配置文件:

    #my.cnf

    [mysqld]

    rpl_semi_sync_slave_enabled = ON

    如果在一个正在运行的Slave上开启半同步复制的功能,那么在配置半同步以后,需要重启停止Slave的I/O线程:

    从库上执行:

    #从库上执行

    mysql> stop slave io_thread;   ---停止IO线程

    mysql> start slave io_thread;   ---启动IO线程

    mysql> show slave status\G;

    主库上查看半同步状态

    查看主库上面的半同步插件是否开启,输出如下,注意第一个参数clients的值变为1了(之前是0),表示主从半同步复制连接成功。

    show global status like '%Rpl_semi_sync_master_clients%';

    半同步测试

    写入数据之后在查看

    #主库

    show global status like '%semi%';

    测试半同步复制超时

    stop slave io_thread;

    #半同步失败退化了异步

    在主库更新

    insert into 表

    show global status like '%semi%';

    测试可知,从库停止IO线程复制之后,第一次执行insert操作时等待了10秒之后才提交完事务,但是第二次insert的操作就很快了。因为第一次等待从库超时之后,半同步复制状态自动转换为异步了,所以第二次及以后都会很快了。

    开启从库的IO线程复制状态

    start slave io_thread;

    再次查看主库的半同步状态

    show global status like '%semi%';

    4.5 MHA半同步复制说明

    为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成mysql的半同步复制。

    注:mysql半同步插件是由google提供,具体位置/usr/local/mysql/lib/plugin下,一个是master用的semisync_master.so,一个是slave用的semisync_slave.so,下面我们就来具体配置一下。如果不清楚Plugin的目录,用如下查找:

    mysql>show variables like'%have_dynamic%';

    SUSE系统异于常人,根据实际情况来操作

    分别在主从节点上安装相关的插件(master,slave1,slave2)在mysql上安装插件需要数据库支持动态载入。检查是否支持,用如下检测:

    show variables like '%have_dynamic%';

    所有mysql数据库服务器,安装半同步插件(semisync_master.so,semisync_slave.so):

    mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

    Query OK, 0 rows affected (0.30 sec)

    mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

    Query OK, 0 rows affected (0.00 sec)

    其他mysql主机采用同样的方法安装。

    #确保每台mysql主机都正确安装plugin:

    mysql> show plugins;

    #查看半同步相关信息:

    show variables like '%rpl_semi_sync%';

    注:若主mysql服务器已经存在,只是后期才搭建从mysql服务器,在配置数据同步前应先将主mysql服务器的要同步的数据库拷贝到从mysql服务器上(如先在主mysql上备份数据库,再用备份在从mysql服务器上恢复)

    这里配置可根据实际情况进行删减

    master mysql主机:

    [root@master ~]# vim /etc/my.cnf

    添加内容如下:

    server-id=130

    log-bin=mysql-bin

    binlog_format=row

    log-bin-index=mysql-bin.index

    rpl_semi_sync_master_enabled=1

    rpl_semi_sync_master_timeout=10000

    rpl_semi_sync_slave_enabled=1

    relay_log_purge=0

    relay-log=relay-bin

    relay-log-index=slave-relay-bin.index

    注: rpl_semi_sync_master_enabled=1 1表是启用,0表示关闭 ,

    rpl_semi_sync_master_timeout=10000

    :毫秒单位 ,该参数主服务器等待确认消息10秒后,不再等待,变为异步方式。

    注:relay_log_purge=0,禁止sql线程在执行完一个relay log后自动将其删除,对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能。

    systemctl restart mysql

    Slave1主机:

    server-id=135

    log-bin=mysql-bin

    binlog_format=row

    log-bin-index=mysql-bin.index

    relay_log_purge=0

    relay-log=relay-bin

    relay-log-index=slave-relay-bin.index

    rpl_semi_sync_master_enabled=1

    rpl_semi_sync_master_timeout=10000

    rpl_semi_sync_slave_enabled=1

    systemctl restart mysql

    Slave2主机:

    server-id=136

    log-bin=mysql-bin

    relay-log=relay-bin

    relay-log-index=slave-relay-bin.index

    read_only = 1

    rpl_semi_sync_slave_enabled = 1

    systemctl restart mysql

    关于半同步参数说明值得关注

    Rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式

    Rpl_semi_sync_master_clients:显示有多少个从服务器配置为半同步复制模式

    Rpl_semi_sync_master_yes_tx:显示从服务器确认成功提交的数量

    Rpl_semi_sync_master_no_tx:显示从服务器确认不成功提交的数量

    Rpl_semi_sync_master_tx_avg_wait_time:事务因开启semi_sync,平均需要额外等待的时间

    Rpl_semi_sync_master_net_avg_wait_time:事务进入等待队列后,到网络平均等待时间。

    #查看半同步相关信息

    mysql> show variables like'%rpl_semi_sync%';

    mysql> show status like'%rpl_semi_sync%';

    创建主从复制的账号

    create user 'canal_repl_user'@'%'identified with mysql_native_password by '123456';

    GRANT REPLICATION SLAVE ON *.* TO'canal_repl_user'@'%';

    flush privileges;

    mysql> show master status;

    在两台从机执行以下命令:

    change master to master_host='192.168.142.133',master_port=3306,master_user='canal_repl_user',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=841;

    start slave;

    查看Candicate

    masterslave2两个从服务器的状态

    SHOW SLAVE STATUS\G;

    说明运行正常

    #查看master服务器的半同步状态

    show status like '%rpl_semi_sync%';

    五、MHA高可用环境部署记录

    5.1      机器环境

    目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。

    | 机器名称 | IP | 角色 |

    | ---- | ---- | ---- |

    | SUSE12-MySQL-Master | 192.168.142.133-Master | 主库,写入,数据节点 |

    | SUSE12-MySQL-Slave | 192.168.142.135-Slave |  从库读,数据节点,备选Master(candicate master)|

    | SUSE12-MySQL-Slave-Manager | 192.168.142.136-Manager | 从库,管理机读,数据节点,也作为Manager server(即也作为manager节点) |

    相关文章

      网友评论

          本文标题:SUSE12 MySQL高可用架构 MHA环境 部署

          本文链接:https://www.haomeiwen.com/subject/kbfreltx.html