• MHA实验


    MHA:

    什么是MHA

    masterhigh availabulity :基于主库的高可用环境下:主从复制,故障切换

    主从的架构:

    MHA:最少要一主两从

    mysql的单点故障问题,一旦主库崩溃,MHA可以在0-30秒内可以自动完成故障切换

    MHA使用半同步的复制 只要有一台从服务器写入数据就会自动提交给客户端

    master崩溃 ,slave就会从主的二进制日志保存文件

    slave识别最新更新的日志

    差异部分同步到slave

    提升一个新的slave作为master

    其他的slave继续和新的mast

    实验准备 manager 20.0.0.0

    master

    slave

    slave2

    主从复制

    set global read_only=1;

    设置数据库为只读模式

    所有的服务器都要安装MHA依赖环境必须要epel源

    先安装node组件再装MHA

     cd /usr/local/bin/

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

    masterha_check_repl:检查mysql的复制情况

    masterha_manager:启动manager脚本

    masterha_check_status:检测MHA的运行状态

    masterha_master_monitor:检测master主机的情况,masters是否宏机

    masterha_master_switch:控制故障转移

    masterha_conf_host:添加或者删除配的server信息

    masterha_stop:停止MAH脚本

    node组件
    save_binary_logs 保存和复制mater的二进制日志
    apply_diff_relay_logs:识别二进制日志当中的差异事件,然后发送给其他的slvae
    filter_mysqlbinlog: 去除不必要的回滚(MHA已经不用了)
    purge_relay_logs:同步之后清楚中继日志(不会阻塞sql的线程

    node依赖ssh通信,每台主机实现ssh的免密登录

    master_ip_failover :自动切换时管理管理vip的脚本

    master_ip_online_change:在先切换时,vip的管理脚本

    power_manager:故障发生之后,关闭master的脚本

    my $vip = '192.168.233.100'; #设定vip地址 my $brdc = '192.168.233.255';#设定vip的广播地址 my $ifdev = 'ens33';#vip绑定的网卡

    修改 Master、Slave1、Slave2 节点的主机名
    hostnamectl set-hostname Master
    hostnamectl set-hostname Slave1
    hostnamectl set-hostname Slave2
    Master 节点

    vim /etc/my.cnf
    [mysqld]
    server-id = 1
    log_bin = master-bin
    log-slave-updates = true
    Slave1 节点

    vim /etc/my.cnf
    server-id = 2                         
    log_bin = master-bin
    relay-log = relay-log-bin
    relay-log-index = slave-relay-bin.index

    Slave2

    vim /etc/my.cnf                        
    server-id = 3 
    relay-log = relay-log-bin
    relay-log-index = slave-relay-bin.index

    在Master、Slave1、Slave2 节点上都创建两个软链接

    ln -s /usr/local/mysql/bin/mysql /usr/sbin/
    ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

    从数据库

    grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456';

    防止从库通过主机名连接不上主库
    grant all privileges on *.* to 'mha'@'master' identified by 'manager';                
    grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
    grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';
    flush privileges;

    master上查看节点

    node组件------>需要部署在所有服务器上,manager组件依赖node组件,node组件监控mysql的状态

    在slave1和1上

    change master to master_host='20.0.0.51',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1893; 

    show slave status\G;

    两个从库必须设置为只读模式:
    set global read_only=1;

    测试是否同步

    所有服务器都要安装MAH依赖环境和epel

    yum install epel-release --nogpgcheck -y

    yum install -y perl-DBD-MySQL \
    perl-Config-Tiny \
    perl-Log-Dispatch \
    perl-Parallel-ForkManager \
    perl-ExtUtils-CBuilder \
    perl-ExtUtils-MakeMaker \
    perl-CPAN

    在所有服务器上必须先安装 node 组件

    cd /opt
    tar zxvf mha4mysql-node-0.57.tar.gz
    cd mha4mysql-node-0.57
    perl Makefile.PL
    make && make install

    在 MHA manager 节点上安装 manager 组件
    cd /opt
    tar zxvf mha4mysql-manager-0.57.tar.gz
    cd mha4mysql-manager-0.57
    perl Makefile.PL
    make && make instal

    在所有服务器上配置无密码认证

    node组件靠ssh来进行通信

    在 manager 节点上复制相关脚本到/usr/local/bin 目录
    cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

    vim /usr/local/bin/master_ip_failover


    vim /etc/masterha/app1.cnf

    manager_log=/var/log/masterha/app1/manager.log #manager的管理日志

    manager_workdir=/var/log/masterha/app1 #manager的工作目录

    master_binlog_dir=/usr/local/mysql/data #保存master的二进制日志的位置,必须要和master保存的路径一致

    master_ip_failover_script=/usr/local/bin/master_ip_failover #设置自动切换脚本 master_ip_online_change_script=/usr/local/bin/master_ip_online_change #手动切换脚本

    ping_interval=1 #监控主库的发送ping包的时间间隔,1秒 尝试三次之后会切换到

    remote_workdir=/tmp #mysql在发生切换时binlog的保存位置 repl_password=123456 #登陆的用户密码 repl_user=myslave #用户名

    secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.233.22 -s 192.168.233.23 #从对主监听 从和主之间互相监听 主无需声明从服务器要在check后声明。

    shutdown_script="" #设置切换时,告警的脚本 ssh_user=root #远程登陆的用户名

    [server1] hostname=192.168.233.21 #主服务器 port=3306

    [server2] candidate_master=1 #设置候选的master 主库崩溃会切换到server2 233.22 check_repl_delay=0 #即使设置了权重,但是这个从服务器relay_logs落后master100M,也不会切换,设置为0,会忽略延迟复制,直接升为主。强制切换到设定为候选master的服务器 hostname=192.168.233.22 #备用主服务器 port=3306

    [server3] hostname=192.168.233.23 #从服务器2 port=3306

    ifconfig ens33:1 20.0.0.100/24 #在主上创建vip

    masterha_check_ssh -conf=/etc/masterha/app1.cnf

    masterha_check_repl -conf=/etc/masterha/app1.cn

    在 manager 节点上启动 MHA
    nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

    remove_dead_master_conf :表示发生主从切换 老的主库地址会从文件中删除

    /var/log/masterha/appq/manager.log : MHA的管理日志

    -ignore_last_failover:MAH检测到连续发生宕机,而且宕机时间间隔不足8小时不会进行自动切换。忽略时间间隔,只要发生故障,就会切换。

    在主服务器上把数据库停掉systemctl stop mysql

    这时候备会变成主

    修复mysql
    systemctl restart mysqld

    在现主上

    在原主上执行

    在原主库服务器 mysql1 执行同步操作
    change master to master_host='20.0.0.12',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2250;
    start slave;

    在 manager 节点vim /etc/masterha/app1.cnf

    在 manager 节点上启动 MHA
    nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
    tail -f /var/log/masterha/app1/manager.log

    原主会变成从

    现主

    原主

  • 相关阅读:
    vite + vue3.0 + ts 项目搭建
    算法设计与分析基础-重要的问题类型
    QT 插件化图像算法软件架构
    Web学习笔记-React(Redux)
    Fedora 项目近日发布了 Fedora Linux 39
    深度了解自动泊车技术及相关数据标注方法|自动驾驶
    数据结构——排序算法——桶排序
    LabVIEW卡尔曼滤波技术
    适用于顺序磁盘访问的1分钟法则
    Mysql主从复制之skip-slave-start,slave-parallel-type,slave-parallel-workers参数详解和测试
  • 原文地址:https://blog.csdn.net/m0_52416577/article/details/134402578