登录
  • 欢迎访问悠扬的技术博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站😉

Mysql高可用集群搭建(二) MHA

Mysql 悠扬 459次浏览 已收录 0个评论

1.准备工作

安装基础依赖包在所有机器上面执行,以后都不在博客里面写$符号了,和Redis官方学的,写的我好累

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum makecache

yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-ParallelForkManager perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-TestMock-LWP.noarch perl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-YAML-Tiny perl-PAR-Dist perl-Module-ScanDeps perl-Module-CoreList perl-Module-Build perl-CPAN perl-CPANPLUS perl-File-Remove perl-Module-Install

首先配置安装MHA NODE 和 MHA Manager

为了和mysql master做区分,我的manager安装到130机器,还记得在上一篇文章中 /home/local/mysql里面的安装包吗,如果找不到执行如下命令获取

cd /home/local/mysql
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz

下载好了先别急着配置manager,所有节点都需要安装mha4mysql-node,所以我们先装node  :idea: 

给你们偷个懒,有更好的方法请留言
mkdir -p /home/local/mysql/mha4mysql-node-0.58

tar -zxvf /home/local/mysql/mha4mysql-node-0.58.tar.gz -C /home/local/mysql/mha4mysql-node-0.58/ –strip-components 1 & cd /home/local/mysql/mha4mysql-node-0.58/

//卡住敲回车
perl Makefile.PL
make && make install

2.安装配置mha manager

去130上面操作,我把130选做manager节点
# 创建MHA配置文件目录 
mkdir -p /etc/mha/scripts
# 创建MHA日志目录
mkdir -p /var/log/mha/app1 

执行如下命令安装manager,这里区别一下node的安装,直接进入目录解压安装,看各位大神自己的爱好 :D 

cd /home/local/mysql/
tar -zxvf mha4mysql-manager-0.58.tar.gz
cd mha4mysql-manager-0.58/
perl Makefile.PL
make && make install
拷贝manager/scripts文件下的文件/etc/mha/scripts下,下面的文件要用
cp samples/scripts/* /etc/mha/scripts/
当然你可以看看默认的配置文件,也可以直接用我下面的进行修改,默认的配置文件在manager安装目录下的samples/conf/中

开始配置文件manager管理节点

vim /etc/masterha_default.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1.log
master_binlog_dir=/usr/local/mysql/data/
master_ip_failover_script=/etc/mha/scripts/master_ip_failover
master_ip_online_change_script=/etc/mha/scripts/master_ip_online_change
report_script = /etc/mha/scripts/send_report
ping_interval=1
remote_workdir=/tmp
repl_user=repl
repl_password=Root2020@
report_script=/etc/mha/scripts/send_report
#监控的是非主节点
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 172.168.9.142 -s 172.168.9.143
shutdown_script=””
ssh_user=root
user=manager
password=Root2020@
vim /etc/mha/app1.cnf 

[server1]
hostname=192.168.32.128
port=3306
candidate_master=1

[server2]
hostname=192.168.32.129
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.32.130
port=3306

MHA主要配置文件说明

  • manager_workdir=/var/log/masterha/app1.log:设置manager的工作目录
  • manager_log=/var/log/masterha/app1/manager.log:设置manager的日志文件
  • master_binlog_dir=/data/mysql:设置master 保存binlog的位置,以便MHA可以找到master的日志
  • master_ip_failover_script= /usr/local/bin/master_ip_failover:设置自动failover时候的切换脚本
  • master_ip_online_change_script= /usr/local/bin/master_ip_online_change:设置手动切换时候的切换脚本
  • user=root:设置监控mysql的用户
  • password=dayi123:设置监控mysql的用户,需要授权能够在manager节点远程登录
  • ping_interval=1:设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
  • remote_workdir=/tmp:设置远端mysql在发生切换时binlog的保存位置
  • repl_user=repl :设置mysql中用于复制的用户密码
  • repl_password=replication:设置mysql中用于复制的用户
  • report_script=/usr/local/send_report:设置发生切换后发送的报警的脚本
  • shutdown_script=””:设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
  • ssh_user=root //设置ssh的登录用户名
  • candidate_master=1:在节点下设置,设置当前节点为候选的master
  • slave check_repl_delay=0 :在节点配置下设置,默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master;这个选项对于对于设置了candidate_master=1的主机非常有用

3.验证MHA相关配置

#验证 ssh 信任登录是否成功
masterha_check_ssh --conf=/etc/mha/app1.cnf

我没猜错的话,你应该和我一样显示如下:

Mysql高可用集群搭建(二) MHA

别怀疑,我们都没错,我调皮一下,SSH互信,我放在这里,在进行配置 :lol: 

就在三台机器上面执行,生成秘钥,一路回车

#在130上执行
ssh-keygen -t rsa -P ''
#推送自己的公钥至128,129
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.128
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.129
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.130
#在128上执行 
ssh-keygen -t rsa -P '' 
#推送自己的公钥至130,129
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.130 
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.129
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.128
#在129上执行 
ssh-keygen -t rsa -P '' 
#推送自己的公钥至130,128
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.130 
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.129
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.128

特殊说明一下:

RSA 秘钥生成相关资料请查阅:使用ssh公钥密钥自动登陆linux服务器

重启一下服务,验证互相免密登录

每台机器都需要重启
systemctl restart sshd.service
在130上面尝试登录129,128
ssh 192.168.32.129
ssh 192.168.32.128

Mysql高可用集群搭建(二) MHA

然后回到主节点上面继续测试MHA 互信

masterha_check_ssh --conf=/etc/mha/app1.cnf

Mysql高可用集群搭建(二) MHA

检查一下,看看配置情况

masterha_check_repl --conf=/etc/mha/app1.cnf

常见问题及解决方案

Q1:There is no alive server. We can't do failover
 权限问题,1是检查masterha_default.cnf配置的用户是否正确,而是看权限是否分配正确
Q2:Can't exec "mysqlbinlog":Can't exec "mysqlbinlog":
   1.检查masterha_default.cnf配置查看binlog文件地址是否配置正确,路径正确执行2
   2.修改配置文件注释 master_ip_failover_script ,VIP漂移在文章三中配置,暂时需要先注释掉
   3.建立软连,在所有节点执行
    ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog    
    ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 

 

未完,这么简单怎么用,继续看三


版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Mysql高可用集群搭建(二) MHA
喜欢 (1)
支付宝[]
分享 (0)
悠扬
关于作者:
10年以上工作经验,从事2年微服务架构搭建工作,有大数据处理相关工作经验,使用spring全家桶包括:Spring,SpringBoot,SpringCloud 数据层组件服务使用SpringDataJpa,Mybatis以及其他第三方组件Sharding-JDBC,Sharding-Proxy分库分表。熟悉微服务,服务降级,限流,分流,做过项目源码修改,有cat,apollo,nacos使用经验,有Lostash,Elasticsearch,kibana,mysqlMHA生产实践经验,使用开源代码Apache Sarding项目,修改源码支持mysql分库分表使用年月日小时分库分表,docker做集群服务,Jekins做项目发布,GitLab做项目管理,使用docker容器部署,熟悉消息队列RabbitMQ,Kafka,ActiveMQ。RuoYi-Vue-Atomikos项目开源加入生态圈组件,项目支持分布式事务,界面添加多数据源,数据源动态配置,切面切换,多数据源事务支持,支持区域数据源配置,用于区域数据切分,数据层次分库。项目地址:https://gitee.com/zsiyang/ruoyi-vue-atomikos
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址