Mysql主主复制高可用解决方案

举报
经典鸡翅 发表于 2022/02/17 23:44:48 2022/02/17
【摘要】 前言 最近做一个项目,项目考虑了一些风险,其中就有mysql宕机的风险,mysql是申请了两台服务器。于是打算搞个主主复制,用keepalived进行漂移实现高可用。 方案可行性 首先主主复制可以保证两台机器数据同步,keeplalived通过虚拟ip,保证我们的mysql可以快速切换。方案可行。 搭建步骤 首...

前言

最近做一个项目,项目考虑了一些风险,其中就有mysql宕机的风险,mysql是申请了两台服务器。于是打算搞个主主复制,用keepalived进行漂移实现高可用。

方案可行性

首先主主复制可以保证两台机器数据同步,keeplalived通过虚拟ip,保证我们的mysql可以快速切换。方案可行。

搭建步骤

首先我们准备好两台已经搭建好的mysql服务器。
ip分别为15.1.1.46,15.1.1.50

修改配置文件

在第一台mysql服务器上的my.cf文件中,我们增加如下内容。


   
  1. server-id=1
  2. log-bin=mysql-bin
  3. binlog-ignore-db=mysql (可以不加)
  4. binlog-ignore-db=information_schema (可以不加)
  5. binlog-do-db=mydatabase (可以不加)
  6. binlog_format=STATEMENT
  7. auto-increment-increment = 2
  8. auto-increment-offset = 1

增加后的整体情况如下:


   
  1. [mysqld]
  2. server-id=1
  3. log-bin=mysql-bin
  4. binlog_format=STATEMENT
  5. auto-increment-increment = 2
  6. auto-increment-offset = 1
  7. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  8. basedir = /home/mysql-5.7.25
  9. datadir = /home/mysql-5.7.25/data
  10. port = 3306
  11. socket = /tmp/mysql.sock
  12. character-set-server=utf8
  13. log-error = /home/mysql-5.7.25/data/mysqld.log
  14. pid-file = /home/mysql-5.7.25/data/mysqld.pid

第一台机器配置完毕。
第二台机器进行如下配置:


   
  1. server-id=2
  2. log-bin=mysql-bin
  3. binlog_format=STATEMENT
  4. auto-increment-increment = 2
  5. auto-increment-offset = 2

和第一台基本一样,不过是increment不同,防止自增冲突。
整体配置文件如下:


   
  1. [mysqld]
  2. server-id=2
  3. log-bin=mysql-bin
  4. binlog_format=STATEMENT
  5. auto-increment-increment = 2
  6. auto-increment-offset = 2
  7. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  8. basedir = /home/mysql-5.7.25
  9. datadir = /home/mysql-5.7.25/data
  10. port = 3306
  11. socket = /tmp/mysql.sock
  12. character-set-server=utf8
  13. log-error = /home/mysql-5.7.25/data/mysqld.log
  14. pid-file = /home/mysql-5.7.25/data/mysqld.pid

两台机器全部重启

service mysql restart
  

第二台机器复制第一台,第一台作为主机

第一台机器执行如下:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  

展示当前bin-log位置

show master status;
  


记住上方的file 和postion
切换到第二台机器执行如下
change master to master_host='15.1.1.46',master_user='root',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
  

开启复制

start slave;
  

展示从机复制情况

show slave status\G;
  


两个都是yes证明复制成功。

第一台机器复制第二台,第二台作为主机

第二台机器执行如下:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  

展示master的位置

show master status;
  

切换到第一台机器
执行如下命令

change master to master_host='15.1.1.50',master_user='root',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=154;
  

然后开启复制
start slave;
展示从机的复制情况
show slave status\G;
如果下图中两个都是yes则证明复制成功。

使用keepalived进行漂移保证高可用

(1)安装yum包
yum install -y gcc openssl-devel popt-devel
(2)上传keepalived并解压
tar -zxvf keepalived-1.2.15.tar.gz
(3)解压keepalived并进行编译
cd keepalived-1.2.15
./configure --prefix=/usr/local/keepalived
make && make install
(4)进行配置文件的初始化复制工作
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
(5)开机自启
chkconfig --add keepalived
chkconfig keepalived on
以上步骤第二台机器也如此执行
(6)进入主机 /etc/keepalived。修改里面的 keepalived.conf文件


   
  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id MYSQL-HA
  4. }
  5. vrrp_script check_mysql {
  6. script "/home/mysql/mysql.sh"
  7. interval 1
  8. weight 2
  9. }
  10. vrrp_instance VI_1 {
  11. state MASTER
  12. interface ens33
  13. virtual_router_id 51
  14. priority 100
  15. advert_int 1
  16. authentication {
  17. auth_type PASS
  18. auth_pass 1111
  19. }
  20. track_script {
  21. check_mysql
  22. }
  23. virtual_ipaddress {
  24. 15.1.1.99
  25. }
  26. }

(7)编写监测的自杀脚本
当mysql挂掉之后,keepalived监控到mysql挂掉,keepalived才能进行漂移。


   
  1. #!/bin/bash
  2. ps -ef | grep mysqld| grep -v grep &> /dev/null
  3. if [ $? -eq 0 ]
  4. then
  5. echo "mysql服务正常运行!!!"
  6. else
  7. service keepalived stop
  8. echo "mysql服务已经停止!请及时解决!!!"
  9. fi

(8)编写从机的keepalived的脚本
上面的步骤里面的keepalived的conf按照下面的改下。其他不用动。
state MASTER 改为BACKUP
priority 100 改为90
(9)将keepalived的开启

service keepalived start
  

总结

至此mysql高可用已经搭建完毕。

文章来源: blog.csdn.net,作者:经典鸡翅,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/hanqing456/article/details/111878992

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。