【2016年11月29日】 MHA安装

    今天刚好做线上MAH,所以好好看了MHA相关的问题。写得与原版本有出处的地方,请去买书自个看哈!!

    

一、环境初始化

1.环境部署

MySQL主从从结构

VIP绑定

MHA部署

2.用户名创建及管理

3.创建一个库及初始化表结构

4.备份任务建立


+++++++++++++++++++++++++

环境介绍

test01172.16.7.151 node01 Master

test02172.16.7.152 node02Slave

test03172.16.7.153 管理节点

VIP 172.16.7.155


软件版本

mysql-5.7.14

mha-0.57

基本路径

/usr/local/mysql

mysqldir=/data/mysql/mysql_3306

tmpdir=/data/mysql/mysql_3306/tmp

logbin=/data/mysql/mysql_3306/logs

server-id ip最后一位+端口号



[1]. 环境部署

1) 安装mysql环境

1. 下载

	cd /data/server/tools && wget http://dev/mysql/com/get/Downloads/MySQL-5.7/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz

2. 解压

	cd /opt/ && mkdir mysql && cd mysql	tar -zxf /data/server/tools/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz -C .


3. 软连接

	cd /usr/local/ && ln -s /opt/mysql/mysql-5.7.14-linux-glibc2.5-x86_64 mysql	chown -R mysql:mysql /usr/local/mysql	#添加环境变量	echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile	source /etc/profile


4. 创建用户

	groupadd mysql	useradd -M -g mysql -s /sbin/nologin -d /usr/local/mysql mysql


5. 根据配置文件,创建基本目录

	mkdir /data/mysql	mkdir /data/mysql/mysql_3306	cd /data/mysql/mysql_3306	mkdir {data,logs,tmp}	chown -R mysql:mysql /data/mysql/mysql_3306	创建配置文件	(请查看附件)


6. MySQL初始化

	[ MySQL 5.7 ]	cd /usr/local/mysql/	./bin/mysqld --defaults-file=/data/mysql/mysql_3306/my_3306.cnf --initialize	# 初始化密码	# cat /data/mysql/mysql3306/data/error.log |grep password	# 2016 ...... [Note] A temporary password is generated for root@localhost: DfmzxoGVr0=l	# --initialize-insecure (初始化没有密码)	[ MySQL 5.5/5.6]	./scripts/mysql_install_db --defaults-file=/data/mysql/mysql_3306/my_3306.cnf


7.创建启动脚本

(1)自带脚本

	cd /usr/local/mysql/	support-files/mysql.server /etc/init.d/mysql 	#启动、关闭	/etc/init.d/mysql start|stop|restart



(2)手工脚本

	cd /data/mysql/mysql_3306/	echo "/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_3306/my_3306.cnf >/dev/null &" >start.sh	echo "/usr/local/mysql/bin/mysqladmin -S /data/mysql/mysql_3306/mysql.sock shutdown" >stop.sh


8. 登录初始化

	mysql -S /data/mysql/mysql_3306/mysql.sock -uroot -p(在初始化时自动生成)	alter user user() identified by "";  #设置密码为空


9. 创建用户

	grant all privileges on *.* to 'admin'@'%' identified by '123456';	grant replication slave,replication client on *.* to 'repl'@'%' identified by 'repl';	cninfo(select,update,delete)


2) 服务器之间建立主从关系

	chang master to master_host='172.16.7.151',master_user='repl',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154;	start slave;			

3) 在管理节点上安装mha

	yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-CPAN perl-*	* rpm安装	https://code.google.com/p/mysql-master-ha/	yum localinstall mha4*.rpm 	rpm -ql  mha4mysql-manager-0.56-0.el6.noarch


* tar安装

	tar -zxf mha4mysql-node-0.57.tar.gz	cd mha4mysql-node-0.57	perl Makefile.PL 	make && make install	cd ../	tar -zxf mha4mysql-manager-0.57.tar.gz	cd mha4mysql-manager-0.57	perl Makefile.PL 	make && make install		


4) 在master和slave节点安装node

* tar安装

	yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager	tar -zxf mha4mysql-node-0.57.tar.gz 	cd mha4mysql-node-0.57	perl Makefile.PL	make && make instal


* 产生ssh-key

将三台服务器SSH通过密钥认证

* 手工加载vip地址(在Master节点上手工执行)

/etc/init_vip.sh

#在master上手工加载虚拟VIP,如若没有加载,启动管理进程时将报错。

5) 在管理节点上传文件

* 检测文件

	/usr/local/bin/master_ip_failover 	/usr/local/bin/master_ip_online_change

* 配置文件

/etc/app1.cnf

6) 启动

	nohup /usr/local/bin/masterha_manager --conf=/etc/app1.cnf --ignore_last_failover </dev/null >/var/log/masterha/manager.log 2>&1 &


# 检测是否启动成功

masterha_check_status --conf=/etc/app1.cnf

# 查看状态信息

masterha_master_monitor --conf=/etc/app1.cnf 

# 关闭MHA监控进程

masterha_stop --conf=/etc/app1.cnf

* 常用命令:

#manager端命令
masterha_manager#复制启动MHA进程
masterha_master_switch#监控守护进程,将故障的master进行转移
masterha_master_monitor#监控守护进程,判断master是否崩溃
#node节点命令
save_binary_logs#保存和拷贝死掉的master上的binlog
filter_mysqlbinlog#该脚本在新版本里废弃掉了
purge_relay_logs#删除sql_thread线程执行完的relay log
apply_diff_relay_logs#识别差异binlog和relay log并应用

7) MHA架构注意事项

1. 防止网络抖动误切换(脑裂)造成数据不一致,VIP没有采用keepalived,就是怕存在网络抖动问题。如果出现脑裂,那么从库会抢夺VIP,由于主库和从库都有VIP,会造成IP冲突,影响业务。

Keepalived只能实现一个节点的监控,而通过自带脚本可以实现两个节点的监控

2. SSH

* 修改默认端口

master_ip_failover
master_ip_online_change
# MHA::ManagerUtil::exec_ssh_cmd( $orig_master_ip, '12345', "ip addr del 192.168.143.200/32 dev em2", undef 
# 替换掉所有默认22端口
# em2 替换成本机网卡即可

* 解决ssh有时会出现连接慢或不通的情况

grep 'ConnectTimeout' /etc/ssh/ssh_config 
ConnectTimeout 3
# 设置ssh连接超时时间

3. 死掉的master如何与新的Master建立同步复制关系?

在日志中找到CHANGE MASTER TO执行,即可建立新同步复制关系:
Tue Nov 29 17:00:50 2016 - [info]  All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='VCrawlerDB-S or 192.168.143.242', MASTER_PORT=3307, MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=658, MASTER_USER='sys_repl', MASTER_PASSWORD='xxx';

4. MHA结合半同步复制(semi replication)时应注意:

将DB服务器通过VLAN划分为一个独立网段,与应用隔离。(由于MHA是基于ssh公私钥认证的,一般服务器是禁止SSH互通,以避免******)

5. MHA 0.56不支持MariaDB 10的GTID复制,仅支持甲骨文MySQL的GTID复制


8) 经验

1) MHA无法回切

2) master VIP需要自己手动配置


MHA多实例也很简单,下次再更新