zoukankan      html  css  js  c++  java
  • 《MySQL数据库》MySQL MHA高可用搭建

    前言

    MySQL高可用,顾名思义就是当MySQL主机或服务发生任何故障时能够立马有其他主机顶替其工作,并且最低要求是要保证数据一致性。简单点说MHA就是为了保证MySQL的主从复制功能,不会因为主节点宕机而需要手工切换主从,MHA会自动切换主从。

    环境搭建

    前提:

    1. GTID主从(一主N从)搭建:https://www.cnblogs.com/jssj/p/13546087.html

    2. 设置软链接:ln -s /usr/local/mysql/mysql-5.7.22-linux-glibc2.12-x86_64/bin/mysqlbinlog    /usr/bin/mysqlbinlog

    3. 设置免密登入(manage节点操作):

    ssh-keygen -t rsa                                   生成秘钥,按多次回车直到秘钥生成

    ssh-copy-id 149.225.47.23                    连接远程机器,第一次需要输入密码, 再次使用命令(ssh -l root 149.225.47.23) 就可以直接登录,不需要密码了

    各个服务器之间都设置免密登入,一定要测试个节点之间是否已经可以免密登录,包含自身节点。

    还可以使用一下方式配置免密登录

    rm -rf /root/.ssh 
    ssh-keygen
    cd /root/.ssh 
    mv id_rsa.pub authorized_keys
    scp  -r  /root/.ssh  127.0.0.1:/root 
    scp  -r  /root/.ssh  127.0.0.2:/root

    软件安装:

    1. 安装MHA需要的依赖包(各节点都需要)

    yum install perl-DBD-MySQL -y

    2. MHA服务端需要安装的依赖包(一般从库中选一个当成服务端)

    yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y

    3. MHA下载和安装

    GitHub下载地址 :https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

    百度网盘:链接: https://pan.baidu.com/s/1R45S6hxyj_T6gPsil3QuDQ 提取码: yctx

    各个节点安装:

    rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

    manage节点安装:

    rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

    4. 主库(主从的主库)设置用户

    grant all privileges on *.* to mha@'%' identified by 'mha';

    5. 设置配置文件

    manage 节点

    mkdir -p /etc/mha            -- 创建目录
    mkdir -p /var/log/mha/app1      -- 创建日志目录

    编写配置文件:

    vim /etc/mha/app1.cnf

    文件内容

    [server default]
    manager_log=/var/log/mha/app1/manager        
    manager_workdir=/var/log/mha/app1            
    master_binlog_dir=/data/binlog         -- 主库binlog 位置点
    user=mha                                   
    password=mha                               
    ping_interval=2          -- 监控间隔时间
    repl_password=repl
    repl_user=repl
    ssh_user=root                               
    [server1]                                   
    hostname=127.0.0.51
    port=3306                                  
    [server2]            
    hostname=127.0.0.52
    port=3306

    在验证一下环境是否正常:

    masterha_check_ssh  --conf=/etc/mha/app1.cnf
    masterha_check_repl  --conf=/etc/mha/app1.cnf

    一切准备就绪启动:

    nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

    检查启动状态:

    masterha_check_status --conf=/etc/mha/app1.cnf

    环境搭建初步完成,以上环境已经是一个可以使用的单次高可用的环境。下面补充几点增强功能。

    1. 保证日志完整:

    前提:找一台机器部署了MySQL应用的,开启GTID,作为保存主库binlog日志的地方。

    mkdir main_binlog_bak   -- 创建文件并且赋权
    chown -R mysql.mysql /usr/local/mysql/main_binlog_bak

    然后再master节点的配置文件上面配置一下信息:

    [binlog1]
    no_master=1    -- 该台机器不能作为备用主库
    hostname=127.0.0.4      -- 配置存在binlog的ip地址
    master_binlog_dir=/usr/local/mysql/main_binlog_bak   -- 该路径存放binlog日志文件

    cd /usr/local/mysql/main_binlog_bak     -- 必须进入到自己创建好的目录然后执行下面命令:

    mysqlbinlog  -R --host=127.0.0.51 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &       -- ip数主库的, 用户密码就直接使用mha, mysql-bin.000001 现有主库使用的binlog 就可以了

    可以通过主库 flush logs; 命令验证该功能。

    2. 主库宕机发送邮件功能

    前提:linux支持发送邮件

    在配置文件 /etc/mha/app1.cnf 里面配置:

    report_script=/usr/local/bin/send      -- 发送邮箱的目录

    3.  VIP漂移实现,略。

    重启MHA服务。

    模拟故障:主动停掉主库服务。

    查看日志:/var/log/mha/app1/manager的切换信息。

    通过:查看配置配置文件可以检查主从情况

    vim /etc/mha/app1.cnf

    原主库配置已经被删除。ok

    故障之后如何选择主库:

    1. 有指定走指定

    2. 没有指定,看日志情况,日志最接近主库的。 日志量一样,根据配置的先后顺序。

    原理

    MHA如何工作呢?

    1. 监控主库运行情况。

    通过:masterha_master_monitor 心跳检测脚本,默认检查4次,都失败,就认为主库宕机,进行故障转移。

    2. 主库宕机后,恢复数据和重新设置主库。

    2.1 主库宕机后,选择哪个从库为主库的逻辑为: 1. 优先级(人为设置)candidate_master = 1但是如果选择的备库日志与主库差距太大,也不会被选择,check_repl_delay=0 开启就不检查日志,一定是选择的是主库,参数设置都可以设置在app1.cnf 的[server1] 节点里面 2.日志量最接近的,3. 日志量一样,按照配置顺序。

    2.2 恢复日志:1.能够连接SSH ,可以从主库获取日志恢复(GTID)通过save_binary_logs脚本,保存到从库的/var/tmp 目录下,2. SSH连不上了,只能保证从库一致 通过脚本apply_diff_relay_logs 恢复。

    3. 主从身份切换,新主库和剩余从库构建新的主从环境。 并且通过脚本:masterha_conf_host 将原主库的配置清除。

    4. 只能处理一次。

    This moment will nap, you will have a dream; But this moment study,you will interpret a dream.
  • 相关阅读:
    【Sparse】关于__attribute__((bitwise)),__le32,__be32等的理解【转】
    设备树中ranges属性分析(1)【转】
    Linux内核API sprint_symbol【转】
    Linux内核--网络协议栈深入分析(二)--sk_buff的操作函数【转】
    浅析SkipList跳跃表原理及代码实现【转】
    关于kernel module签名【转】
    apt-get 更新指定软件_Linux系统 aptget 命令的使用:安装、更新、卸载软件包【转】
    如何挂载ubi文件系统【转】
    伙伴系统之伙伴系统概述--Linux内存管理(十五)【转】
    精确时间协议PTP研究【转】
  • 原文地址:https://www.cnblogs.com/jssj/p/13604640.html
Copyright © 2011-2022 走看看