mysql主从搭建,模拟故障处理《实验》

三台机器:db01 db02 db03

第一步:配置关键程序软连接
ln -s /data/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /data/mysql/bin/mysql /usr/bin/mysql

第二步:三台之间互信
rm -rf /root/.ssh
ssh-keygen -t rsa
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 10.0.0.52:/root
scp -r /root/.ssh 10.0.0.53:/root

检查:是否互信
db01:
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date
第三步:安装软件
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm :见大纲

在db01 上:
MySQL
grant all privileges on . to mha@'10.0.0.%' identified by 'mha';

在db03:上
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm :见大纲
创建配置文件目录
mkdir -p /etc/mha
创建日志目录
mkdir -p /var/log/mha/app1
编辑mha配置文件
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
user=mha
password=mha
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root
[server1]
hostname=10.0.0.51
port=3306
[server2]
hostname=10.0.0.52
port=3306
[server3]
hostname=10.0.0.53
port=3306

互相检查:
masterha_check_ssh --conf=/etc/mha/app1.cnf
主从状态:
masterha_check_repl --conf=/etc/mha/app1.cnf
开启mha:
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 &
查看MHA状态:
[root@db03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:4719) is running(0:PING_OK), master:10.0.0.51
[root@db03 ~]# mysql -umha -pmha -h 10.0.0.51 -e "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 51 |
+---------------+-------+
[root@db03 ~]# mysql -umha -pmha -h 10.0.0.52 -e "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 52 |
+---------------+-------+
[root@db03 ~]# mysql -umha -pmha -h 10.0.0.53 -e "show variables like 'server_id'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 53 |
+---------------+-------+

故障以及处理:
停主库db01:
/etc/init.d/mysqld stop
修复:意思是把db02切换成主库,db01成从库
[root@db01 ~]# /etc/init.d/mysqld start
恢复主从:
MySQL
CHANGE MASTER TO
MASTER_HOST='10.0.0.52',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1,
MASTER_USER='repl',
MASTER_PASSWORD='123';
start slave ;
在db03上修改配置文件:
vim /etc/mha/app1.cnf
把以下添加回去:
[server1]
hostname=10.0.0.51
port=3306
启动MHA:
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 &

MHA 的vip功能:
外部的脚本的调用接口

  1. 参数:
    master_ip_failover_script=/usr/local/bin/master_ip_failover
  2. 注意:/usr/local/bin/master_ip_failover,必须事先准备好此脚本
  3. 将script.tar.gz 文件上传到/usr/local/bin,并解压
  4. 修改脚本内容:
    vi /usr/local/bin/master_ip_failover
    my $vip = '10.0.0.55/24';
    my $key = '1';
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
  5. 更改manager配置文件:
    vi /etc/mha/app1.cnf
    添加:
    master_ip_failover_script=/usr/local/bin/master_ip_failover
    注意:防止中文乱码 yum install dos2unix -y
    [root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover
    dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...
    [root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover

db02主库上,手工生成第一个vip地址:
ifconfig eth0:1 10.0.0.55/24

db03:重启mha
masterha_stop --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 &

此时,主库是2,1和3都是从库! 停2 55IP,就会飘到1上去。

接下来是邮件提醒:

  1. 参数:
    report_script=/usr/local/bin/send
  2. 准备邮件脚本
    send_report
    (1)准备发邮件的脚本(我们已经为大家准备好了script.tar.gz) :见大纲2019-最新
    将以上脚本解压到 /usr/local/bin
    (2)将准备好的脚本添加到mha配置文件中,让其调用
    unzip 解压,修改里面的内容,按自己 的机器操作

  3. 修改manager配置文件,调用邮件脚本
    vi /etc/mha/app1.cnf
    report_script=/usr/local/bin/send
    手动测试
    :./testpl

(3)停止MHA
masterha_stop --conf=/etc/mha/app1.cnf
(4)开启MHA
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 &

(5) 关闭主库,看警告邮件
故障修复:

  1. 恢复故障节点
    (1)实例宕掉
    /etc/init.d/mysqld start
    (2)主机损坏,有可能数据也损坏了
    备份并恢复故障节点。
    2.恢复主从环境
    看日志文件:
    CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123';
    start slave ;
    3.恢复manager
    3.1 修好的故障节点配置信息,加入到配置文件
    [server1]
    hostname=10.0.0.51
    port=3306
    3.2 启动manager
    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 &

猜你喜欢

转载自blog.51cto.com/13959927/2385625
今日推荐