mysql MHA高可用架构搭建部署实验

来源:互联网 发布:php 文件管理 编辑:程序博客网 时间:2024/04/27 15:51


一.基本信息
OS版本:redhat 2.6.32-279.el6.x86_64
数据文件:/apps/dbdat/mariadb101_data3307
binlog位置:/apps/dbdat/mariadb101_data3307/log
mysql版本:10.1.12-MariaDB
二进制日志格式:ROW
事务隔离级别:READ-COMMITTED
主库master:10.16.24.107 port:3307
从库slave1:10.16.24.108  port:3307
从库slave2:10.16.24.109  port:3307
VIP: 10.16.24.58


二.一主二从复制环境搭建(步骤略)

搭建好一主二从复制环境,要求以下主从库上都执行:
grant replication slave on *.* to repl@'10.16.24%' identified by "replsafe";
grant all privileges on *.* to mha@'10.16.24.%' identified by 'mysql_2015';

且从库执行:
set global read_only=1;
set global relay_log_purge=0;

各主机上执行:
使普通用户有修改ip地址的权利。
chmod u+s /sbin/ifconfig
chmod u+s /sbin/ip


三.MHA安装
1.mha的manager和node包下载:
  https://code.google.com/p/mysql-master-ha/wiki/Downloads
将mha4mysql-node-0.56.tar.gz和mha4mysql-manager-0.56.tar.gz包放到/apps/sh下
分别解压:
tar -zxvf mha4mysql-node-0.56.tar.gz
tar -zxvf mha4mysql-manager-0.56.tar.gz

2.mha的manager和node包安装
每个节点都安装manager和node,但只启动slave2主机上的manager服务:
安装依赖包
#yum install cpan
# yum -y install perl-devel perl-ExtUtils-Embed
#yum install 'perl(CGI)' 'perl(LWP::UserAgent)'
#yum install -y gcc-c++
#yum install -y ncurses-devel
#yum install gcc
#perl -MCPAN -e 'install DBD:mysql'
#perl -MCPAN -e 'install DBI'

2.1 编译安装(node)
#cd /apps/sh/mha4mysql-node-0.56
#perl Makefile.PL PREFIX=/apps/sh/mha/mha_node LIB=/apps/lib/mha/mha_node
#make
#make install
将以下加入/etc/profile
export PERL5LIB=/apps/lib/mha/mha_node
执行source /etc/profile
chown -R apps:apps /apps/sh
chown -R apps:apps /apps/lib

2.2 编译安装(manger)
安装manger必要依赖包:
# perl  -MCPAN -e "install Time::HiRes"
# perl -MCPAN -e "install Config::Tiny"
# perl -MCPAN -e "install Log::Dispatch"
# perl -MCPAN -e "install Parallel::ForkManager"
编译安装manager包:
cd /apps/sh/mha4mysql-manager-0.56
#perl Makefile.PL PREFIX=/apps/sh/mha/mha_manager LIB=/apps/lib/mha/mha_manager
#make
#make install
chown -R apps:apps /apps/sh
chown -R apps:apps /apps/lib

3.配置ssh(需要保证各个节点采用非对称加密认证,在slave2主机上执行)
#su - apps
$ssh-keygen -t rsa
cd .ssh
cat id_rsa.pub>authorized_keys
rm known_hosts
chmod 600 *
cd ..
scp -r .ssh apps@10.16.24.107:/home/apps/
scp -r .ssh apps@10.16.24.108:/home/apps/
在三台机上都测试验证一次:
ssh 10.16.24.107 date
ssh 10.16.24.108 date
ssh 10.16.24.109 date

4.环境变量配置:
各节点主机:
$vi /home/apps/.bashrc
写入如下:
export PERLLIB=/apps/sh/mha/mha_node/share/perl5:/apps/lib/mha/mha_manager:/apps/lib/mha/mha_node
export PERL5LIB=/apps/lib/mha/mha_node:/apps/lib/mha/mha_manager
export PATH=/apps/sh/mha/mha_manager/bin:/apps/sh/mha/mha_node/bin:$PATH
$source /home/apps/.bashrc


四.MHA配置
mkdir -p /apps/conf/mha
mkdir -p /apps/logs/mha/app1
chown -R apps:apps /apps/conf/mha
chown -R apps:apps /apps/logs/mha/app1

建立全局配置:
vi /apps/conf/mha/masterha_base.cnf
[server default]
user=mha
password=mysql_2015
ssh_user=apps
repl_user=repl
repl_password=replsafe
secondary_check_script= masterha_secondary_check -s 10.16.24.107 -s 10.16.24.108
ping_interval=1
master_ip_failover_script= /apps/sh/mha/script/master_ip_failover
shutdown_script=""
report_script=""
master_ip_online_change_script=/apps/sh/mha/script/master_ip_online_change 

vi /apps/conf/mha/app1.cnf
[server default]
manager_workdir=/apps/logs/mha/app1
manager_log=/apps/logs/mha/app1/app1.log
remote_workdir=/apps/logs/mha/app1
repl_user=rep
repl_password=replsafe
[server1]
hostname=10.16.24.107
master_binlog_dir=/apps/dbdat/mariadb101_data3307/log
candidate_master=1

[server2]
hostname=10.16.24.108
master_binlog_dir=/apps/dbdat/mariadb101_data3307/log
candidate_master=1

[server3]
hostname=10.16.24.109
master_binlog_dir=/apps/dbdat/mariadb101_data3307/log
no_master=1

将配置文件copy到其它主机上:
scp /apps/conf/mha/* 10.16.24.107:/apps/conf/mha
scp /apps/conf/mha/*  10.16.24.108:/apps/conf/mha

将吴老师提供的脚本放到/apps/sh/mha/script下,更改权限
[apps@mvxl0784 script]$ ls -ltr
total 20
-rw-r--r-- 1 apps apps    53 May 25 11:36 init_vip.sh
-rw-r--r-- 1 apps apps  3976 May 25 11:37 master_ip_failover
-rw-r--r-- 1 apps apps 10388 May 25 11:37 master_ip_online_change
[apps@mvxl0784 script]$ pwd
/apps/sh/mha/script
[apps@mvxl0784 script]$ chmod u+x *

将将脚本中的IP改成实际VIP的IP,32改成24,eth0改成eth1。
然后copy到其它主机的对应位置:
[apps@mvxl0784 mha]$ scp -r script 10.16.24.107:/apps/sh/mha/
master_ip_failover                                                                                100% 3976     3.9KB/s   00:00   
master_ip_online_change                                                                           100%   10KB  10.1KB/s   00:00   
init_vip.sh                                                                                       100%   55     0.1KB/s   00:00   
[apps@mvxl0784 mha]$ scp -r script 10.16.24.108:/apps/sh/mha/
master_ip_failover                                                                                100% 3976     3.9KB/s   00:00   
master_ip_online_change                                                                           100%   10KB  10.1KB/s   00:00   
init_vip.sh                                                                                      100%   55     0.1KB/s   00:00   

五.安装检查
检查ssh:
/apps/sh/mha/mha_manager/bin/masterha_check_ssh \
--global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf

检查mysql复制:
/apps/sh/mha/mha_manager/bin/masterha_check_repl --global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf

先绑定vip:
[root@mvxl0782 script]# pwd
/apps/sh/mha/script
[root@mvxl0782 script]# ls -ltr
total 20
-rwxr--r-- 1 apps apps  3976 May 25 11:37 master_ip_failover
-rwxr--r-- 1 apps apps 10388 May 25 11:37 master_ip_online_change
-rwxr--r-- 1 apps apps    53 May 25 14:02 init_vip.sh
[root@mvxl0782 script]# ./init_vip.sh


六.启动MHA
nohup masterha_manager  --global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf >>/apps/logs/mha/manager_start.log 2>&1 &

七.常用MHA维护操作
1.检查启动的状态
masterha_check_status --global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf
2.停止mha
masterha_stop  --global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf
3.检查复制
/apps/sh/mha/mha_manager/bin/masterha_check_repl --global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf
4.检查SSH
/apps/sh/mha/mha_manager/bin/masterha_check_ssh \
--global_conf=/apps/conf/mha/masterha_base.cnf --conf=/apps/conf/mha/app1.cnf
5.手工failover
手工failover场景,master死掉,但是masterha_manager没有开启,可以通过手工failover:
masterha_master_switch --global_conf=/apps/conf/mha/masterha_base.cnf  \
--conf=/apps/conf/mha/app1.cnf --dead_master_host=10.16.147.194  \
 --master_state=dead --new_master_host=10.16.147.195  --ignore_last_failover
6. 手动在线切换
masterha_master_switch  --global_conf=/apps/conf/mha/masterha_base.cnf \
--conf=/apps/conf/mha/app1.cnf --master_state=alive  \
--new_master_host=10.16.24.108  --orig_master_is_new_slave
或者
masterha_master_switch  --global_conf=/apps/conf/mha/masterha_base.cnf \
--conf=/apps/conf/mha/app1.cnf  --master_state=alive  --new_master_host=10.16.147.194  \
--orig_master_is_new_slave --running_updates_limit=10000

--orig_master_is_new_slave切换时加上此参数是将原master变为slave节点,如果不加此参数,原来的master将不启动
--running_updates_limit=10000 切换时候选master如果有延迟的话,mha切换不能成功,加上此参数表示延迟在此时间范围内都可切换(单位为s),但是切换的时间长短是由recover时relay日志的大小决定
注意:手动在线切换mha,切换时需要将在运行的mha停掉后才能切换。

 

0 0