博客很久没有更新了,原因是大多数时间都忙在研究技术上,却懒得腾时间出来把技术分享,最近在开源力量上开课《Mongodb管理与维护》,让屌丝们从0到精通,敬请关注。本博客技术原创更新滞后一些,找时间更新有关mysql,mongodb等内容,谢谢大家关注。
全部博文(75)
分类: Mysql/postgreSQL
2021-08-05 18:04:18
集群信息
角色 IP地址 ServerID 类型
Master 192.168.138.128 1 写入
Candicate master 192.168.138.129 2 读
Slave 192.168.138.130 3 读
Monitor host 192.168.138.131 监控集群组
注:操作系统均为RHEL 7
其中,master对外提供写服务,备选master提供读服务,slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master
一、在所有节点上安装MHA node
1. 在MySQL服务器上安装MHA node所需的perl模块(DBD:mysql)
# yum install perl-DBD-MySQL -y
yum install perl-ExtUtils-MakeMaker -y
yum install perl-CPAN -y
2. 在所有的节点上安装mha node
下载地址为:
# tar xvf mha4mysql-node-0.56.tar.gz
# cd mha4mysql-node-0.56
# perl Makefile.PL
# make
# make install
至此,MHA node节点安装完毕,会在/usr/local/bin下生成以下脚本文件
# ll /usr/local/bin/ total 44
-r-xr-xr-x 1 root root 16367 Jul 20 07:00 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 Jul 20 07:00 filter_mysqlbinlog
-r-xr-xr-x 1 root root 8261 Jul 20 07:00 purge_relay_logs
-r-xr-xr-x 1 root root 7525 Jul 20 07:00 save_binary_logs
二、在Monitor host节点上部署MHA Manager
# tar xvf mha4mysql-manager-0.56.tar.gz
# cd mha4mysql-manager-0.56
# perl Makefile.PL
# make
# make install
执行完毕后,会在/usr/local/bin下新增以下几个文件
# ll /usr/local/bin/
total 40
-r-xr-xr-x 1 root root 1991 Jul 20 00:50 masterha_check_repl
-r-xr-xr-x 1 root root 1775 Jul 20 00:50 masterha_check_ssh
-r-xr-xr-x 1 root root 1861 Jul 20 00:50 masterha_check_status
-r-xr-xr-x 1 root root 3197 Jul 20 00:50 masterha_conf_host
-r-xr-xr-x 1 root root 2513 Jul 20 00:50 masterha_manager
-r-xr-xr-x 1 root root 2161 Jul 20 00:50 masterha_master_monitor
-r-xr-xr-x 1 root root 2369 Jul 20 00:50 masterha_master_switch
-r-xr-xr-x 1 root root 5167 Jul 20 00:50 masterha_secondary_check
-r-xr-xr-x 1 root root 1735 Jul 20 00:50 masterha_stop
三、配置SSH登录无密码验证
1. 在manager上配置到所有Node节点的无密码验证
# ssh-keygen
一路按“Enter”
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.128
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.129
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.130
2. 在Master(192.168.138.128)上配置
# ssh-keygen
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.129
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.130
3. 在Candicate master(192.168.138.129)上配置
# ssh-keygen
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.128
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.130
4. 在Slave(192.168.138.130)上配置
# ssh-keygen
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.128
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.138.129
四、搭建主从复制环境
1. 在Master上执行备份
# mysqldump --master-data=2 --single-transaction -R --triggers -A > all.sql
其中,-R是备份存储过程,--triggers是备份触发器 -A代表全库
2. 在Master上创建复制用户
mysql> grant replication slave on *.* to 'repl'@'192.168.%' identified by 'repl'; Query OK, 0 rows affected (0.09 sec)
3. 查看备份文件all.sql中的CHANGE MASTER语句
# head -n 30 all.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=120;
4. 将备份文件复制到Candicate master和Slave上
# scp all.sql 192.168.138.129:/root/
# scp all.sql 192.168.138.130:/root/
5. 在Candicate master上搭建从库
# mysql < all.sql
mysql> CHANGE MASTER TO6. 在Slave上搭建从库
7. slave服务器设置为read only
mysql> set global read_only=1; Query OK, 0 rows affected (0.04 sec)
8. 在Master中创建监控用户
mysql> grant all privileges on *.* to 'monitor'@'%' identified by 'monitor123'; Query OK, 0 rows affected (0.07 sec)
五、 配置MHA
1. 在Monitor host(192.168.138.131)上创建MHA工作目录,并且创建相关配置文件
# mkdir -p /etc/masterha
# vim /etc/masterha/app1.cnf
[server default]注意:
1> 在编辑该文件时,后面的注释切记要去掉,MHA并不会将后面的内容识别为注释。
2> 配置文件中设置了master_ip_failover_script,secondary_check_script,master_ip_online_change_script,report_script,对应的文件见文章末 尾。
2. 设置relay log清除方式(在每个Slave上)
mysql> set global relay_log_purge=0; Query OK, 0 rows affected (0.00 sec)
MHA在发生切换过程中,从库在恢复的过程中,依赖于relay log的相关信息,所以我们这里要将relay log的自动清楚设置为OFF,采用手动清楚relay log的方式。
在默认情况下,从服务器上的中继日志会在SQL线程执行完后被自动删除。但是在MHA环境中,这些中继日志在恢复其它从服务器时可能会被用到,因此需要禁用中继日志的自动清除。改为定期手动清除SQL线程应用完的中继日志。
在ext3文件系统下,删除大的文件需要一定的时间,这样会导致严重的复制延迟,所以在Linux中,一般都是通过硬链接的方式来删除大文件。
3. 设置定期清理relay脚本
MHA节点中包含了purge_relay_logs脚本,它可以为relay log创建硬链接,执行set global relay_log_purge=1,等待几秒钟以便SQL线程切换到新的中继日志,再执行set global relay_log_purge=0。
下面看看脚本的使用方法:
# purge_relay_logs --user=monitor --password=monitor123 -disable_relay_log_purge --workdir=/tmp/
其中,
--user:mysql用户名
--password:mysql用户的密码
--host: mysqlserver地址
--workdir:指定创建relay log的硬链接的位置,默认的是/var/tmp。由于系统不同分区创建硬链接文件会失败,故需要指定具体的硬链接的位置。
--disable_relay_log_purge:默认情况下,如果relay_log_purge=1,则脚本会直接退出。通过设置这个参数,该脚本会首先将relay_log_purge设置为1,清除掉relay log后,再将该参数设置为0。
设置crontab来定期清理relay log
MHA在切换的过程中会直接调用mysqlbinlog命令,故需要在环境变量中指定mysqlbinlog的具体路径。
# vim /etc/cron.d/purge_relay_logs
0 4 * * * /usr/local/bin/purge_relay_logs --user=monitor --password=monitor123 -disable_relay_log_purge --workdir=/tmp/ >> /tmp/purge _relay_logs.log 2>&1
注意:最好是每台slave服务器在不同时间点执行该计划任务。
4. 将mysqlbinlog的路径添加到环境变量中六、 检查SSH的配置
在Monitor host上执行
# masterha_check_ssh --conf=/etc/masterha/app1.cnf
七、查看整个集群的状态
在Monitor host上执行
# masterha_check_repl --conf=/etc/masterha/app1.cnf
八、 检查MHA Manager的状态
# masterha_check_status --conf=/etc/masterha/app1.cnf app1 is stopped(2:NOT_RUNNING).
如果正常,会显示“PING_OK”,否则会显示“NOT_RUNNING”,代表MHA监控还没有开启。
九、开启MHA Manager监控
# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /masterha/app1/manager.log 2>&1 &
其中,
remove_dead_master_conf:该参数代表当发生主从切换后,老的主库的IP将会从配置文件中移除。
ignore_last_failover:在默认情况下,MHA发生切换后将会在/masterha/app1下产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件且两次切换的时间间隔不足8小时的话,将不允许触发切换。除非在第一次切换后手动rm -rf /masterha/app1/app1.failover.complete。该参数代表忽略上次MHA触发切换产生的文件。
查看MHA Manager监控是否正常
# masterha_check_status --conf=/etc/masterha/app1.cnf app1 (pid:1873) is running(0:PING_OK), master:192.168.138.128
十、 关闭MHA Manager监控
# masterha_stop --conf=/etc/masterha/app1.cnf Stopped app1 successfully. [1]+ Exit 1 nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /masterha/app1/manager.log 2>&1
至此,MHA部分配置完毕,下面,来配置VIP。
十一、VIP配置
2. 通过脚本的方式管理VIP
编辑/usr/local/bin/master_ip_failover
实际生产环境中,推荐这种方式来管理VIP,可有效防止脑裂情况的发生。
至此,MHA高可用环境基本搭建完毕。
关于MHA的常见操作,包括自动Failover,手动Failover,在线切换,