美文网首页部署运维Linux运维程序员
MHA+MySQL主从配置实现MySQL高可用

MHA+MySQL主从配置实现MySQL高可用

作者: EdgarZz | 来源:发表于2018-07-10 13:38 被阅读17次

    前面文章已经介绍了MySQL的安装和主从配置

    MySQL安装

    MySQL主从配置

    主从配置应该只能算是一套容灾方案,当主库崩溃之后,我们可以将程序切换到从库以保证系统正常运行,这个切换过程是手动的

    主从配置的问题就在于主库down掉之后从库不能自动提升成为主库,今天我们就介绍一个MySQL高可用的解决方案:MHA+Mysql主从配置

    MHA - Master High Availability,MySQL高可用方面相对成熟的解决方案,是一个用于故障切换和主从提升的软件

    要搭建MHA,要求集群至少要有三个节点,即一主二从。MHA分为MHA-Manager(管理节点)和MHA-Node(数据节点)两部分,结合MySQL主从配置架构图如下(临时画的,略丑陋……):

    架构简图

    说明一下服务器情况:

    1. 一共三台服务器,系统ubuntu16.04 64位
    2. IP分别为:192.168.1.222、192.168.1.223、192.168.1.224
    3. 222为master节点,223和224都是slave节点
    4. mha-manager装在223上,三台机器都装了mha-node
    

    下面介绍MHA的安装和配置

    MHA安装

    一般我们是将Manager装在某一个Mysql从节点上,当然也可以单独装在一台机器上

    1. 下载安装包

    MHA的安装包下载需要翻墙,这里我共享一个网盘链接方便大家下载吧

    MHA-Manager:

    [https://pan.baidu.com/s/1fhIV2XGLgM9tVrKKm6Uexw](https://pan.baidu.com/s/1fhIV2XGLgM9tVrKKm6Uexw "MHA-Manager")
    密码:yoed
    

    MHA-Node:

    [https://pan.baidu.com/s/1onD8YY5P-DaV9BNObISgFQ](https://pan.baidu.com/s/1onD8YY5P-DaV9BNObISgFQ "MHA-Node")
    密码:y5ml
    

    2. 安装相关依赖

    apt-get install libdbd-mysql-perl
    apt-get install libconfig-tiny-perl
    apt-get install liblog-dispatch-perl
    apt-get install libparallel-forkmanager-perl
    

    3. 安装MHA Node

    由于MHA Manager会用到MHA Node提供的模块,不先安装MHA Node直接安装MHA Manager会报错

    cd 安装包上传目录
    dpkg -i mha4mysql-node_0.54-0_all.deb
    

    4. 安装MHA Manager

    cd 安装包上传目录
    dpkg -i mha4mysql-manager_0.55-0_all.deb
    

    MHA配置

    1. 环境配置

    MHA 集群中的各节点彼此之间均需要基于 ssh 互信通信,以实现远程控制及数据管理功能,所以MHA环境中的三台主机需要相互信任:实现三台主机之间相互免密钥登录

    登录MHA Manager机器,建议直接使用root用户

    # 生成公钥
    ssh-keygen -t rsa
    # 生成私钥
    ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.223
    # 复制给本机
    ssh root@192.168.1.223  'ifconfig'
    # 将生成的公私钥传给MHA Node机器
    scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.222:/root/.ssh/
    scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.224:/root/.ssh/
    

    分别登录MHA Node机器,同样直接使用root用户

    # 复制给本机
    # 222机器
    ssh root@192.168.1.222 'ifconfig'
    # 224机器 
    ssh root@192.168.1.224 'ifconfig'
    

    要是root登陆的话,需要修改ssh的配置文件

    vim /etc/ssh/sshd_config
    # PermitRootLogin,设置为YES,再重启SSH
    

    Manager要是装到某一台MySQL上,则需要自己和自己无密码登入,单独到一台服务器则不需要

    # 确保可以无密码与自己通信  
    ssh 192.168.1.223
    

    测试三台机器之间可以免密钥登录

    # 223
    ssh 192.168.1.222
    ssh 192.168.1.224
    # 222
    ssh 192.168.1.223
    ssh 192.168.1.224
    # 224
    ssh 192.168.1.222
    ssh 192.168.1.223
    

    2. 主从配置

    由于之后slave节点会提升为master节点,所以主从配置要做一些修改

    Master配置

    log_bin = master-bin  # 启动二进制日志
    log_bin_index = master-bin.index
    relay-log = slave-relay-bin
    relay-log-purge = 0  # 禁用或启用不再需要中继日志时是否自动清空它们
    

    Slave配置

    log_bin = master-bin
    relay-log = slave-relay-bin
    relay-log-index = slave-relay-bin.index
    relay-log-purge = 0
    read_only = 1
    

    3. MHA Manager配置

    登录master,创建mha账号并授权,也可以直接使用root账户或其他有权限的已有用户

    需要的权限:Super,select,create,insert,update,delete,drop,reload

    mysql>GRANT ALL ON *.* TO 'mhaadmin'@'192.168.1.%' IDENTIFIED BY 'mhapassword';
    mysql>FLUSH PRIVILEGES;
    

    创建相关目录

    mkdir /usr/local/masterha /usr/local/masterha/app1  # 创建数据文件目录
    mkdir /etc/masterha  # 创建配置文件目录
    

    创建配置文件

    vi /etc/masterha/app1.cnf
    

    [server default]
    user=mhaadmin  # mysql用戶名
    password=mhapassword  # mysql密码
    ssh_user=root  # ssh免密钥登录的帐号名
    repl_user=repl  # mysql复制帐号,主从配置里配的
    repl_password=mysql  # mysql复制账号密码
    ping_interval=1   # ping间隔,用来检测master是否正常,默认是3秒,尝试三次没有回应的时候自动进行failover
    
    manager_workdir=/usr/local/masterha/app1  # 数据目录
    manager_log=/usr/local/masterha/manager.log  # 日志文件
    remote_workdir=/usr/local/masterha/app1  # 另外2台机子在运行时候需要创建的目录,注意ssh-keygen帐号的权限问题
    master_binlog_dir=/var/log/mysql  # binlog目录,不指定会报错     
    
    [server1] 
    hostname=192.168.1.222
    candidate_master=1  # master机宕掉后,优先启用这台作为新master
    check_repl_delay=0  # 默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
    
    [server2] 
    hostname=192.168.1.223  
    no_master=1  # 一定不会选这个机器为master,根据情况设置 
    
    [server3]
    hostname=192.168.1.224
    # port=3306  # port默认是3306,如果是其他的,需要在这里指定,否则会报错  
    candidate_master=1
    

    启动MHA

    MHA提供了脚本测试服务是否能正常启动

    SSH检查

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

    REPLICATION检查

    masterha_check_repl --conf=/etc/masterha/app1.cnf
    
    replication check

    检查全部OK的话就可以启动服务了

    nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /usr/local/masterha/manager.log &
    

    可以查看进程

    ps aux|grep masterha
    
    masterha progress

    检查master节点状态

    masterha_check_status --conf=/etc/masterha/app1.cnf
    
    master status

    启动检查中遇到的问题

    User repl does not exist or does not have REPLICATION SLAVE privilege! Other slaves can not start replication from this host.

    开始我们在做主从配置的时候,只在master节点创建了用于复制的账号,现在slave节点也可能提升为master节点了,所以在slave节点上也要创建用于复制的账号,账号密码要与master的相同
    

    Can't exec "mysqlbinlog": No such file or directory at /usr/share/perl5/MHA/BinlogManager.pm

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

    mysql: not found mysql command failed with rc 127:0

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

    相关文章

      网友评论

        本文标题:MHA+MySQL主从配置实现MySQL高可用

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