快乐学习
前程无忧、中华英才非你莫属!

Day6-MySQL架构实战(MHA)

一、安装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免密码登录

参考网址:

https://www.ztloo.com/2017/03/21/%E5%B0%8F%E7%99%BD%E4%B9%9F%E8%83%BD%E7%8E%A9%E8%BD%AC%E5%A4%A7%E6%95%B0%E6%8D%AE%E9%9B%86%E7%BE%A4/

五,配置数据库一主二从的数据库复制模式。

环境:

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 下进行配置。

汽车之家的测试环境配置可供参考:

app1.cnf

第一次接触的童鞋:可以参考这两篇文章,里面有详细的解释和参数值约束问题!

 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:

app1.cnf</a--<--存放到/etc/下

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 &apos;change&apos; manager.log 并把里面的change 语句复制出来在有故障的机器上执行。

CHANGE MASTER TO MASTER_HOST=&apos;192.168.1.61&apos;, MASTER_PORT=3306, MASTER_LOG_FILE=&apos;mysql-bin.000004&apos;, MASTER_LOG_POS=107, MASTER_USER=&apos;repl&apos;, MASTER_PASSWORD=&apos;123456&apos;;

别忘了在60master执行 mysql>start  slave

备注:报错了!解决: reset slave; 重新执行上面的change master语句!

手工离线切换VIP.

mha_mfailover.sh

手工切换是通过这个脚本执行的: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 &apos;change&apos; manager.log 并把里面的change 语句复制出来在有故障的机器上执行。

CHANGE MASTER TO MASTER_HOST=&apos;192.168.1.60&apos;, MASTER_PORT=3306, MASTER_LOG_FILE=&apos;mysql-bin.000005&apos;, MASTER_LOG_POS=107, MASTER_USER=&apos;repl&apos;, MASTER_PASSWORD=&apos;123456&apos;;

手工在线切换VIP  最常用的一种非常方便,无需停用mysql,无需重新执行复制链路命令。

mha_onlinechange.sh

直接在mha机器上执行就ok!

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » Day6-MySQL架构实战(MHA)

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!