一、安装centos6.5
https://jingyan.baidu.com/article/25648fc1a235c99191fd0008.html 小白安装centos6.5
http://www.centoscn.com/image-text/install/2014/1209/4281.html 虚拟机下安装CentOS6.5系统教程
00:50:56:2C:66:9A
二、centos6.5 安装mysql 5.5
1、先卸载5.1:yum -y remove mysql*
// 增加mysql的repo源
2、 rpm -Uvh http://mirror.steadfast.net/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
//查看yum中是否存在mysql5.5
3、 yum --enablerepo=remi,remi-test list mysql mysql-server
// 安装mysql 5.5
4、 yum --enablerepo=remi,remi-test install mysql mysql-server
5、cp /usr/share/mysql/my-medium.cnf /etc/my.cnf (改名为my.cnf作为mysql配置文件)
//配置中继日志的位置,可以默认不配。
relay_log = /var/lib/mysql/mysql-relay-bin
// 允许从库将其重放的事件也记录到自身的二进制日志中。
log_slave_updates =1
为了区分和标识mysql集群:SHOW VARIABLES LIKE 'server_id';(需要修改my.cnf 的serverid) 。
// 启动mysql
6、 /etc/init.d/mysqld start
// 设置开机启动
7、 chkconfig --levels 345 mysqld on
// 设置root密码。
8、 /usr/bin/mysql_secure_installation
// 登陆mysql
9、mysql -u root -p
10、GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'zhangtongle123' WITH GRANT OPTION ; (允许远程用户登陆)
11、FLUSH PRIVILEGES;(刷新权限)
12、exit(退出)
http://blog.csdn.net/a695017449/article/details/37900131
http://www.cnblogs.com/SQL888/p/5753134.html
三、安装依赖包
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
必装,不要问我为什么,转,执行!
四、 安装perl 环境
yum -y install cpan
yum -y install *Time*
这块全是泪~。坑我好长时间~。别问为什么要安装~,直接执行,每个节点都要装!
五、安装mha框架和环境配置
上传到centos6.5 本地目录:
mha4mysql-manager-0.56.tar.gzmha4mysql-node-0.56.tar.gz
1、先安装node包,然后在安装manager包‘
tar -zxvf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node-0.56
perl Makefile.PL
安装成功!
编译: make
make install
manager 包安装同上!
四,打通集群ssh免密码登录
参考网址:
五,配置数据库一主二从的数据库复制模式。
环境:
192.168.1.60 master 192.168.1.61 slave1 192.168.1.62 slave2 192.168.1.59 MHA
创建数据库复制账号,和监控账号。
监控账号(在生产环境监控账号一定不能是root账号,并且不要授予delrte,update权限):
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'zhangtongle123' WITH GRANT OPTION ; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'%' IDENTIFIED BY '123456';
配置为一主二从模式
开启复制链路:*( 配置从库到主库的链路:MASTER_HOST 主库IP地址。MASTER_LOG_FILE :主库的binlog文件名。MASTER_LOG_POS:log的起始位置)
1、查看主库上(master:60):MASTER_HOST 当前bin-log位置: show master status; 获得MASTER_LOG_FILE、MASTER_LOG_POS
2、在从库(slave1(61)、slave2(62))上执行:
CHANGE MASTER TO MASTER_HOST ='192.168.1.60',MASTER_USER='repl',MASTER_PASSWORD= '123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=107;
3、在slave1,slave2上:sql执行>start slave;
4、 查看复制链路: SHOW SLAVE STATUS
如果同步有误:
操作如下:
停止主从复制服务: stop slave;(停止master,slave1.slave2
清除掉同步位置:reset slave;
完全清除同步信息:reset slave all;
参考文章:https://www.ztloo.com/2017/02/26/mysql%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/( 【例9-4】复制概念和实现篇)
安装完MYSQL服务器后在本机所有操作都正常, 但在其它机器上远程访问这个MYSQL服务器时怎么都连接不上. shit!
怀疑是端口问题, 结果:
telnet 192.168.1.245 3306
发现连接不上, 原来如此是端口被防火墙限制了.
现在只需要是在防火墙中打开3306端口即可.
执行 vi /etc/sysconfig/iptables 如图:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
加入这句话就可以了, 注意这句话一定要加在最后一句话的上面. 否则不会生效.
同样如果是其它端口把"3306"换成相应端口即可.
然后重启一下防火墙
service iptables restart
六、配置MHA
将app1.cnf 上传到/etc 下进行配置。
汽车之家的测试环境配置可供参考:
第一次接触的童鞋:可以参考这两篇文章,里面有详细的解释和参数值约束问题!
http://www.linuxidc.com/Linux/2015-04/116168.htm
http://www.w2bc.com/article/178989
重点参数
MHA 重点参数详解
1、如果你的环境是链式复制架构,比如A-B-C,那么设置candidate_mast=1 如果不是,设置candidate_mast=0
2、在默认情况下,当一个slave同步延迟超过100M relay log, MHA在做故障切换时不会选择这个slave做为新的master,因为恢复需要经过很长时间。 当设置了check_repl_delay = 0, MHA将忽略被选择的slave上的同步延迟。 这个选项在设置了candidate_master = 1特声明的期望这台机器成为master的情况下特别有用。
3、在默认情况下,不会在slave存在故障的情况下(SQL Thread已经停止出错)的情况下进行Master的故障切换。 当设置了ignore_fail = 1时,MHA会在所有的机器有问题的时候也会进行故障切换。
搜索一下mysql的binlog位置:
ps -aux | grep mysql
存放到MHA:
master_ip_online_changemaster_ip_failover --------存放到/usr/local/bin 目录下
startmha.shmha_mfailover.shmha_onlinechange.sh</a--<------存放到/root/mha_sh 目录下
配置文件中需要创建的目录:mkdir -p /var/log/masterha/ 创建存储log文件目录。四个节点都要创建。
mkdir /root/mha_sh
存放到master:
vip_ipaddr.sh ----上传到 mkdir /root/vip
chmod 755 vip_ipaddr.sh
手工加载虚拟VIP进行测试:
ip addr add 192.168.1.100/32 dev eth2 //删除的话 add 替换成delete
测试MHA的ssh是否配置成功:
测试MHA 的复制:
去掉警告
在:slave1、slave2的my.cnf上配置如下:
read_only =1
log_slave_updates =1
relay_log_purge=0
出现的错误:
[error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln122] Got error when getting node version. Error:
错误原因:子节点没有安装好,重新安装重新编译就可以了。
http://blog.csdn.net/zengxuewen2045/article/details/51524880
启动:
[root@MHA mha_sh]# ./startmha.sh
验证:cd /var/log/masterha
tail -f manager.log
cat app1.master_status.health ping ok
部署完毕,成功启动!
实际验证:现在master 60 机器上的虚拟vip通过 这个是100
ip addr add 192.168.1.100/32 dev eth2
在master上,执行msyql的停止: service mysqld stop
验证:切换到管理机器-mha 59
查看日志变化,提示已经成功故障转移!如下图。
:cd /var/log/masterha
tail -f manager.log
备注:
master:60宕机了,想要与最新的slave1 主库进行同步,复制啊,咋整呢?
切换到MHA:59机器上,
在app1.cnf 配置的log目录下>grep -i 'change' manager.log 并把里面的change 语句复制出来在有故障的机器上执行。
CHANGE MASTER TO MASTER_HOST='192.168.1.61', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=107, MASTER_USER='repl', MASTER_PASSWORD='123456';
别忘了在60master执行 mysql>start slave
备注:报错了!解决: reset slave; 重新执行上面的change master语句!
手工离线切换VIP.
手工切换是通过这个脚本执行的:mha_mfailover.sh
#!/bin/bash
masterha_master_switch --conf=/etc/app1.cnf --master_state=dead --ignore_last_failover --dead_master_host=slave1 --dead_master_ip=192.168.1.61 --dead_master_port=3306
这里要指定自定义死亡的主机名称和IP地址
手工切换之前要执行这个操作:masterha_stop --conf=/etc/app1.cnf
然后关闭:slave1 数据库。:service mysqld stop
然后执行在mha_sh 目录下执行:./mha_mfailover.sh
期间有两次询问,填写yes即可。
手工从salve1:61,切换到master:60
故障转移报告:
然后在查看VIP:192.168.1.100 是否在master上
手工:
slave1:61宕机了,想要与最新的 主库master:59进行同步,复制啊,咋整呢?
1、先启动salve1的mysql》service mysqld start
2、切换到MHA:59机器上,
在app1.cnf 配置的log目录下>grep -i 'change' manager.log 并把里面的change 语句复制出来在有故障的机器上执行。
CHANGE MASTER TO MASTER_HOST='192.168.1.60', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=107, MASTER_USER='repl', MASTER_PASSWORD='123456';
手工在线切换VIP 最常用的一种非常方便,无需停用mysql,无需重新执行复制链路命令。
直接在mha机器上执行就ok!