MySQL MHA 安装

29 篇文章 1 订阅

MHA 安装手册

MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。

Manager工具包主要包括以下几个工具:

masterha_check_ssh              检查MHA的SSH配置状况
masterha_check_repl             检查MySQL复制状况
masterha_manger                 启动MHA
masterha_check_status           检测当前MHA运行状态
masterha_master_monitor         检测master是否宕机
masterha_master_switch          控制故障转移(自动或者手动)
masterha_conf_host              添加或删除配置的server信息

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

save_binary_logs                保存和复制master的二进制日志
apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs                清除中继日志(不会阻塞SQL线程)

1.部署MHA

接下来部署MHA,具体的搭建环境如下(所有操作系统均为centos 6.2 64bit,不是必须,server03和server04是server02的从,):

角色                    ip地址          主机名          server_id              类型
Monitor host            10.10.10.155    db-manager      -                      监控复制组
Master                  10.10.10.156    db-master   1                      写入
Candicate master        10.10.10.157    db-slave01      2                      读
Slave                   10.10.10.158    db-slave02      3                      读

其中master对外提供写服务,备选master(实际的slave,主机名server03)提供读服务,
slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master

(1)在所有节点安装MHA node所需的perl模块(DBD:mysql),安装脚本如下:
    (run this shell )
    cat install.sh 
    #!/bin/bash
    wget http://xrl.us/cpanm --no-check-certificate
    mv cpanm /usr/bin
    chmod 755 /usr/bin/cpanm
    cat > /root/list << EOF
    install DBD::mysql
    EOF
    for package in `cat /root/list`
    do
        cpanm $package
    done    



如果有安装epel源,也可以使用yum安装
    安装以下perl 支持包

    yum install perl-DBD-MySQL -y

    yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
    yum install gettext-devel -y
    yum install perl-CPAN -y


在所有的节点安装mha node:


    tar xf mha4mysql-node-0.56.tar.gz
    cd mha4mysql-node-0.56
    perl Makefile.PL
    make && make install


安装完成后,会生成node 所需的工具包

[root@bd-slave02 mha4mysql-node-0.56]# ll /usr/local/bin
总用量 44
-r-xr-xr-x 1 root root 16367 1月  31 11:33 apply_diff_relay_logs
-r-xr-xr-x 1 root root  4807 1月  31 11:33 filter_mysqlbinlog
-r-xr-xr-x 1 root root  8261 1月  31 11:33 purge_relay_logs
-r-xr-xr-x 1 root root  7525 1月  31 11:33 save_binary_logs


2.安装MHA Manager

MHA Manager中主要包括了几个管理员的命令行工具,例如master_manger,master_master_switch等。MHA Manger也依赖于perl模块,具体如下:

(1)安装MHA Node软件包之前需要安装依赖。我这里使用yum完成,没有epel源的可以使用上面提到的脚本(epel源安装也简单)。注意:在MHA Manager的主机也是需要安装MHA Node。

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install perl-DBD-MySQL -y
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y


安装MHA Manager软件包:

[root@bd-master download]# tar xf mha4mysql-manager-0.56.tar.gz 
[root@bd-master download]# cd mha4mysql-manager-0.56/
[root@bd-master mha4mysql-manager-0.56]# perl Makefile.PL 
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI                   ...loaded. (1.627)
- DBD::mysql            ...loaded. (4.023)
- Time::HiRes           ...loaded. (1.9725)
- Config::Tiny          ...loaded. (2.14)
- Log::Dispatch         ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst        ...missing.     (注意: 在manager 节点,也需要安装node ,安装完后,再回来安装manager cefp )
==> Auto-install the 1 mandatory module(s) from CPAN? [y] y


安装完成后,会生成以下文件

[root@bd-master mha4mysql-manager-0.56]# ll /usr/local/bin
总用量 84
-r-xr-xr-x 1 root root 16367 1月  31 11:46 apply_diff_relay_logs
-r-xr-xr-x 1 root root  4807 1月  31 11:46 filter_mysqlbinlog
-r-xr-xr-x 1 root root  1995 1月  31 11:47 masterha_check_repl
-r-xr-xr-x 1 root root  1779 1月  31 11:47 masterha_check_ssh
-r-xr-xr-x 1 root root  1865 1月  31 11:47 masterha_check_status
-r-xr-xr-x 1 root root  3201 1月  31 11:47 masterha_conf_host
-r-xr-xr-x 1 root root  2517 1月  31 11:47 masterha_manager
-r-xr-xr-x 1 root root  2165 1月  31 11:47 masterha_master_monitor
-r-xr-xr-x 1 root root  2373 1月  31 11:47 masterha_master_switch
-r-xr-xr-x 1 root root  5171 1月  31 11:47 masterha_secondary_check
-r-xr-xr-x 1 root root  1739 1月  31 11:47 masterha_stop
-r-xr-xr-x 1 root root  8261 1月  31 11:46 purge_relay_logs
-r-xr-xr-x 1 root root  7525 1月  31 11:46 save_binary_logs
[root@bd-master mha4mysql-manager-0.56]# 


拷贝脚本到/usr/local/bin 
[root@bd-master mha4mysql-manager-0.56]# ll samples/scripts
总用量 32
-rwxr-xr-x 1 4984 users  3648 4月   1 2014 master_ip_failover
-rwxr-xr-x 1 4984 users  9870 4月   1 2014 master_ip_online_change
-rwxr-xr-x 1 4984 users 11867 4月   1 2014 power_manager
-rwxr-xr-x 1 4984 users  1360 4月   1 2014 send_report
[root@bd-master mha4mysql-manager-0.56]# cp samples/scripts/* /usr/local/bin
[root@bd-master mha4mysql-manager-0.56]# 



3.配置SSH登录无密码验证
    (节抄自以前配置oracle rac) 

    设置SSH,
    1).在主节点RAC1上以grid,oracle用户身份生成用户的公匙和私匙

    # su - oracle
    $ mkdir ~/.ssh
    $ ssh-keygen -t rsa
    $ ssh-keygen -t dsa

    2).在副节点RAC2上执行相同的操作,确保通信无阻
    # ping rac1-eth0
    # ping rac1-eth1
    # su - oracle
    $ mkdir ~/.ssh
    $ ssh-keygen -t rsa
    $ ssh-keygen -t dsa

    3).在主节点RAC1上oracle用户执行以下操作

    $ touch ~/.ssh/authorized_keys 

    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

    #将RAC2的加入
    $ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    $ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    $ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys



    4).主节点RAC1上执行检验操作
    $ ssh rac1 date
    $ ssh rac2 date
    $ ssh rac1-private date
    $ ssh rac2-private date



    5).在副节点RAC2上执行检验操作
    $ ssh rac1 date
    $ ssh rac2 date

    $ ssh rac1-private date
    $ ssh rac2-private date


4.编译安装mysql 主从架构

    见mysql 主从架构安装.log


5.配置半同步

    首先加载插件

    因用户需执行INSTALL PLUGIN, SET GLOBAL, STOP SLAVE和START SLAVE操作,所以用户需有SUPER权限。

    主:

    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

    从:

    mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';


    查看插件是否加载成功

    有两种方式

    1. 

    mysql> show plugins;

    rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL  
    2. 

    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';

    +----------------------+---------------+
    | PLUGIN_NAME          | PLUGIN_STATUS |
    +----------------------+---------------+
    | rpl_semi_sync_master | ACTIVE        |
    +----------------------+---------------+
    1 row in set (0.00 sec)


    启动半同步复制

    在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步

    主:

    mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

    从:

    mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;



    以上的启动方式是在命令行操作,也可写在配置文件中。

    主:

    plugin-load=rpl_semi_sync_master=semisync_master.so
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=1000
    从:

    plugin-load=rpl_semi_sync_slave=semisync_slave.so
    rpl_semi_sync_slave_enabled=1
    在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制

    plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl-semi-sync-master-enabled = 1
    rpl-semi-sync-slave-enabled = 1


    重启从上的IO线程

    mysql> STOP SLAVE IO_THREAD;

    mysql> START SLAVE IO_THREAD;

    如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。

    这时候,主的error.log中会打印如下信息:

    2016-08-05T10:03:40.104327Z 5 [Note] While initializing dump thread for slave with UUID <ce9aaf22-5af6-11e6-850b-000c2988bad2>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(4).
    2016-08-05T10:03:40.111175Z 4 [Note] Stop asynchronous binlog_dump to slave (server_id: 2)
    2016-08-05T10:03:40.119037Z 5 [Note] Start binlog_dump to master_thread_id(5) slave_server(2), pos(mysql-bin.000003, 621)
    2016-08-05T10:03:40.119099Z 5 [Note] Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000003, 621)


    查看半同步是否在运行

    主:

    mysql> show status like 'Rpl_semi_sync_master_status';

    +-----------------------------+-------+
    | Variable_name               | Value |
    +-----------------------------+-------+
    | Rpl_semi_sync_master_status | ON    |
    +-----------------------------+-------+
    1 row in set (0.00 sec)
    从:

    mysql> show status like 'Rpl_semi_sync_slave_status';

    +----------------------------+-------+
    | Variable_name              | Value |
    +----------------------------+-------+
    | Rpl_semi_sync_slave_status | ON    |
    +----------------------------+-------+
    1 row in set (0.20 sec)
    这两个变量常用来监控主从是否运行在半同步复制模式下。




6.配置MHA

5.1 配置文件修改
    创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。
    # mkdir -p /etc/masterha
    # cp mha4mysql-manager-0.53/samples/conf/app1.cnf 

    #配置文件
    [root@bd-master ~]# cat /etc/masterha
    masterha/             masterha_default.cnf  
    [root@bd-master ~]# cat /etc/masterha/app1.cnf 
    [server default]
    manager_workdir=/var/log/masterha/app1
    manager_log=/var/log/masterha/app1/manager.log

    master_binlog_dir=/data/mysql

    master_ip_failover_script= /usr/local/bin/master_ip_failover
    master_ip_online_change_script= /usr/local/bin/master_ip_online_change

    user=monitor
    password=monitor_password

    ping_interval=1
    remote_workdir=/tmp

    repl_user=repl
    repl_password=repl_password


    report_script=/usr/local/bin/send_report
    secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02
    shutdown_script=""
    ssh_user=root


    [server1]
    hostname=10.10.10.156
    port=3301

    [server2]
    hostname=10.10.10.157
    port=3301
    candidate_master=1
    check_repl_delay=0

    [server3]
    hostname=10.10.10.158
    port=3301

5.2设置relay log 清除方式(在每个slave)

    #mysql -uroot -p -e 'set global relay_log_purge=0'

    MHA节点中包含了pure_relay_logs命令工具,它可以为中继日志创建硬链接,执行SET GLOBAL relay_log_purge=1,
    等待几秒钟以便SQL线程切换到新的中继日志,再执行SET GLOBAL relay_log_purge=0。

5.3 设置定时清理relay 脚本
    # mkdir /data/masterha/log -p
    # mkdir /opt/shell


    # cat /opt/shell/purge_relay_log.sh 
        #!/bin/bash
        user=monitor
        passwd=monitor_password
        port=3301
        log_dir='/data/masterha/log'
        work_dir='/data'
        purge='/usr/local/bin/purge_relay_logs'

        if [ ! -d $log_dir ]
        then
           mkdir $log_dir -p
        fi

        $purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1

    #定期
    #crontab -l

        0 4 * * * /bin/bash /opt/shell/purge_relay_log.sh


    (这里我使用了monitor 用户,注意权限问题,)


5.4 检查
5.4.1 检查MHA Manger到所有MHA Node的SSH连接状态:
     masterha_check_ssh --conf=/etc/masterha/app1.cnf 

5.4.2 通过masterha_check_repl脚本查看整个集群的状态
    masterha_check_repl --conf=/etc/masterha/app1.cnf


5.4.3 检查MHA Manager的状态:
    masterha_check_status --conf=/etc/masterha/app1.cnf

6.开启MHA Manager监控

    # 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 &  


    再次检查一下启动状态:
    masterha_check_status --conf=/etc/masterha/app1.cnf

    关闭监控
    masterha_stop --conf=/etc/masterha/app1.cnf

7. VIP 配置
    7. keepalived方式管理虚拟ip,keepalived配置方法如下:

    7.1 下载软件进行并进行安装(db-master,db-slave01 两台都要安装,备选master:db-slave01,在没有切换以前是slave):
    # wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz


    # tar xf keepalived-1.2.12.tar.gz           
    # cd keepalived-1.2.12
    # ./configure --prefix=/usr/local/keepalived
    # make &&  make install
    # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    # mkdir /etc/keepalived
    # cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

    7.2 配置keepalived的配置文件,在master上配置 (db-master)



8.

参考URL:

https://www.cnblogs.com/gomysql/p/3675429.html

VIP 配置MHA

http://blog.itpub.net/29416434/viewspace-2062533/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值