MHA简介和搭建

MySQL_MHA

AB复制    
主主复制  master-master        auto_increment   10   1        10  2  
ABB  一主多从

MHA    MySQL high available   mysql高可用
    ABB    0~30

    日本人,Perl语言,
    组成:manager节点    node节点
    工作过程:    MHA manager节点定时(按照一定的时间间隔)去检测复制集群中的每一个mha node(ABB),发现Adown,选出数据跟老A最接近的一台B来作为新A。去到老A,拷贝binlog到新A当中并应用binlog(保证新A与老A数据的一致性),然后将剩余的slave重新change master to,将slave的主切换为新A。

    设置注意:
        复制集群中的每个节点都有可能成为A,都得开启binlog
        ssh秘钥认证,因为当Adown后,mha要拷贝binglog到所有的节点上,而且所有的节点都有可能成为A,故每个节点都要彼此秘钥认证。
    
    failover:Adown,选出新A,并且尽可能保证数据一致,设置salve重新执行新A

    缺点:
        保证数据一致性并不总是可行的。硬件raid卡、磁盘损坏,还是会有数据丢失的情况!5.5版本支持半同步,事物提交成功的前提是master已经将binlog交给了复制进群中的一个slave。

    

实验:
    ip规划
    manager    19.240        x86_64系统
    master    19.241
    slave     19.242
    slave    19.243

    步骤规划:
    1、ssh密钥认证
    2、搭建ABB复制
    3、部署mha_manager和mha_node即配置
        安装软件包
        编辑配置文件
    4、failover测试
        关闭master,MHA切换master为242,243切换master为242
        

    1、ssh秘钥认证
        每台机器上都生成root用户的秘钥    ssk-keygen   一路回车
        将公钥彼此共享(互相推送):
#!/bin/bash
for i in 0 1 2 3
        do
                ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.19.24$i
        done

        将该脚本推送到每台机器上:
[root@MHA_240 opt]# for i in 1 2 3; do scp ssh.sh 192.168.19.24$i:/opt/ ;done

    2、ABB 一主多从架构   纯洁版(初始化)
        安装软件包:mysql-server mysql perl-*        //每台机器上都要安装
        
        恢复纯洁(每台机器)
    
        编辑配置文件:

        241:
server_id=1
log_bin=binlog
log_bin_index=binlog.index


        242:
server_id=2
log_bin=binlog
log_bin_index=binlog.index


        243:
server_id=3
log_bin=binlog
log_bin_index=binlog.index


说明:必须都开启binlog日志,复制组中的每一台机器都有可能成为master
    server_id    选择新A的依据,越小越优先


        241    创建用户并看一下master的状态
        
mysql> grant replication slave on *.* to 'sky'@'%' identified by '123';        //复制专用用户
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to 'root'@'%' identified by '123';        //给mha_manager用,因为其在failover时需要登陆上来,并且拷贝binlog到所有的slave上去。

mysql> show master status\G
*************************** 1. row ***************************
            File: binlog.000003            //主要看它,直到当前master的binlog
        Position: 369
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)


        242    配置slave
mysql> change master to  master_host='192.168.19.241', master_port=3306, master_user='sky', master_password='123', master_log_file='binlog.000003', master_log_pos=4;
Query OK, 0 rows affected (0.01 sec)

mysql> slave start;
Query OK, 0 rows affected (0.01 sec)

        243    配置slave(同上)
mysql> change master to  master_host='192.168.19.241', master_port=3306, master_user='sky', master_password='123', master_log_file='binlog.000003', master_log_pos=4;
Query OK, 0 rows affected (0.01 sec)

mysql> slave start;
Query OK, 0 rows affected (0.01 sec)

至此ABB搭建完成,建议测试一下看一看能不能同步


    3、部署mha_manager和mha_node
    mha_soft    mha_2015-01-14    两个文件夹
    mha_manager:
        cd /usr/src/mha_soft
        [root@MHA_240 mha_soft]# rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
        [root@MHA_240 mha_soft]# cd dependent/
        [root@MHA_240 dependent]# yum install -y localinstall ./*
        [root@MHA_240 mha_soft]# rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm
        
        将node包推给复制进群中的所有节点:
        [root@MHA_240 mha_soft]# for i in 1 2 3 ;do scp mha4mysql-node-0.54-0.el6.noarch.rpm 192.168.19.24$i:/usr/src ;done

    mha_node:    安装node
        [root@MHA_240 mha_soft]# rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm


    mha_manager:  
        拷贝相关文件
        [root@MHA_240 mha]# cp -pr /usr/src/mha_2015-01-14/mha/ /etc/
        
        编辑配置文件:
[server default]
#mysql admin account and password

user=root
password=123

#mha workdir  and worklog

manager_workdir=/etc/mha
manager_log=/etc/mha/manager.log

#mysql A/B account and pw

repl_user=sky
repl_password=123

#check_mha_node time
ping_interval=1

#ssh account
ssh_user=root


[server1]
hostname=192.168.19.241
ssh_port=22
master_binlog_dir=/var/lib/mysql
candidate_master=1

[server2]
hostname=192.168.19.242
ssh_port=22
master_binlog_dir=/var/lib/mysql
candidate_master=1

[server3]
hostname=192.168.19.243
ssh_port=22
master_binlog_dir=/var/lib/mysql
candidate_master=1


测试ssh:
    [root@MHA_240 mha]# masterha_check_ssh --conf=/etc/mha/mha.cnf


测试replication:
    [root@MHA_240 mha]# masterha_check_repl --conf=/etc/mha/mha.cnf

开启mha:
    开启的方式存放在/etc/mha/mha_start文件中
[root@MHA_240 mha]# nohup masterha_manager --conf=/etc/mha/mha.cnf > /tmp/mha_manager.log &1 &


    4、failover测试
        把Adown掉,看有没有选举出一个新A,并且有没有将slave重新指向新A

你可能感兴趣的:(MySQL)