暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于MySQL多源复制+keepalived搭建高可用

DBEngineer 2021-07-14
414



环境准备:


系统

主机名

IP

端口号

MySQL 版本

虚拟IP

CentOS  6.9

mysqldb1

192.168.56.60

3306

5.7.18

192.168.56.100

CentOS  6.9

mysqldb2

192.168.56.59

3306

5.7.18

CentOS  6.9

mysqldb3

192.168.56.58

3306

5.7.18


一、基于keepalived双主环境搭建




1.1 配置mysql配置文件(每个节点)


开启binlog并设置为row格式

设置server-id(每个节点不同)

设置为gtid模式


1.2 创建复制账号


  • mysqldb1

登陆数据库:

mysql -S tmp/mysql3306.sock -uroot –pwanbin

创建账号:

create  user 'repl'@'%' identified by 'wanbin';

赋予复制权限:

grant  replication slave on *.* to 'repl'@'%' ;


1.3  创建备份并传输至mysqldb2


  • mysqldb1

innobackupex --defaults-file=/etc/my3306.cnf -S  /tmp/mysql3306.sock -uroot -pwanbin --stream=tar ./ | ssh root@mysqldb2  "cat - > data/backup/dbback`date +%Y%m%d_%H%M%S`.tar"


1.4  解压备份文件


  • 在 mysqldb2上

tar  -xvf dbback20170704_115934.tar -C dbback20170704_115934


1.5  删除数据文件


  • 在 mysqldb2上



mysqladmin  -S tmp/mysql3306.sock -p shutdown


cd  /data/mysql/mysql3306/data

rm  –rf *

cd  /data/mysql/mysql3306/logs

rm  –rf *

cd  /data/mysql/mysql3306/tmp

rm  –rf *



1.6  日志应用到备份中的数据文件


  • 在 mysqldb2上

innobackupex  --apply-log data/backup/dbback20170704_115934/

运行结束时提示"completed OK!"就代表应用成功.


1.7  数据恢复


  • 在 mysqldb2上

innobackupex  --defaults-file=/etc/my3306.cnf --copy-back  /data/backup/dbback20170704_115934/

在运行结束时提示"completed OK!"就代表恢复成功.

  

恢复成功后,修改文件权限:

chown  -R mysql:mysql data

chown  -R mysql:mysql logs

chown  -R mysql:mysql tmp


启动MySQL

mysqld  --defaults-file=/etc/my3306.cnf &


查看xtrabackup_info文件,得到gtid

more  /data/mysql/mysql3306/data/xtrabackup_info

进入数据库中,查看gtid:

show  variables like '%gtid%';


若为空,使用以下命令进行更改:

set  global gtid_purged='357bb198-2b0b-11e7-95ab-0800278a63b6:1';


1.8 配置slave


  • mysqldb2

CHANGE  MASTER TO master_host='192.168.56.60',

master_port=3306,

master_user='repl',

master_password='wanbin',

master_auto_position=1;


启动slave 服务

start slave


检查状态:

show slave status\G


  • mysqldb1上:

CHANGE  MASTER TO master_host='192.168.56.59',

master_port=3306,

master_user='repl',

master_password='wanbin',

master_auto_position=1;


启动slave 服务

start slave


检查状态:

show slave status\G


1.9 安装keepalived(每个环境都需安装配置)


安装keepalived

yum install -y keepalived


配置keepalived.conf文件

#全局配置 

global_defs { 

     #表示keepalived在发生诸如切换操作时发送Email给哪些地址,邮件地址可以多个,每行一个 

     notification_email {   

         wanbin@suninfo.com   

     }   

     #表示发送通知邮件时邮件源地址是谁 

     notification_email_from keepalived@suninfo.com 

     #表示发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现 

     smtp_server 127.0.0.1 

     #连接smtp连接超时时间     

     smtp_connect_timeout 30 

     #机器标识 

     router_id VI-82   

}    

vrrp_instance VI-82 {   

     state BACKUP           #state指定instance的初始状态,但这里指定的不算,还是得通过优先级竞选来确定。两台配置此处均是BACKUP   

     interface eth1        #实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的 

     virtual_router_id 82   #这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址 

     priority 90            #设置本节点的优先级,优先级高的为master  

     advert_int 1           #检查间隔,默认为1   

     authentication {       #这里设置认证   

         auth_type PASS   

         auth_pass 1111   

     }   

     virtual_ipaddress {    #这里设置的就是VIP,也就是虚拟IP地址 

         192.168.56.100   

     }   

}     

virtual_server 192.168.56.100 3306 {   

     delay_loop 2  #每个2秒检查一次real_server状态   

     lb_algo wrr       

     lb_kind DR        

     persistence_timeout 60   #会话保持时间   

     protocol TCP   

     real_server 192.168.56.59  3306 {    #设置每个节点真实IP

         weight 3   

         notify_down etc/keepalived/MySQL.sh #检测到服务down后执行的脚本   

         TCP_CHECK {   

            connect_timeout 10     #连接超时时间   

            nb_get_retry 3         #重连次数   

            delay_before_retry 3   #重连间隔时间   

            connect_port 3306      #健康检查端口   

         }   

     } 

}       


编辑MySQL.sh文件: 

pkill keepalived

赋予执行权限:

chmod +x MySQL.sh


启动keepalived

keepalived –D


1.10  测试


观察/var/log/messeges文件,确认虚IP所在节点,然后测试以下:

tail -100f var/log/messeges


虚拟ipmysqldb1上。


1)停掉eth1网卡,观察虚IP是否自动切换。

ifconfig eth1 down

虚拟IP自动切换到59服务器上


2)kill keepalived进程,观察虚IP是否自动切换。

pkill  keepalived

虚拟IP自动切换到60服务器上


3)停掉mysql数据库,观察虚IP是否自动切换。


mysqldb1上执行

mysqladmin -S tmp/mysql3306.sock  -pwanbin shutdown

虚拟IP自动切换到mysqldb1


二、基于keepalived三主环境搭建



2.1 配置slave服务


1mysqldb1上执行

# mysql  -S tmp/mysql3306.sock -uroot -pwanbin


mysql>change  master to master_host='192.168.56.59', master_port=3306, master_user='repl',  master_password='wanbin',master_auto_position=1 for channel  '192_168_56_59_3306';


mysql>change  master to master_host='192.168.56.58', master_port=3306, master_user='repl',  master_password='wanbin',master_auto_position=1 for channel  '192_168_56_58_3306';


mysql>start  slave;


mysql>show  slave status\G


2mysqldb2上执行:

mysql  -S tmp/mysql3306.sock -uroot -pwanbin


mysql>change  master to master_host='192.168.56.60', master_port=3306, master_user='repl',  master_password='wanbin',master_auto_position=1 for channel  '192_168_56_60_3306';


mysql>change  master to master_host='192.168.56.58', master_port=3306, master_user='repl',  master_password='wanbin',master_auto_position=1 for channel  '192_168_56_58_3306';


mysql>start  slave;


mysql>show  slave status\G



3mysqldb3上执行:

mysql  -S tmp/mysql3306.sock -uroot -pwanbin


mysql>change  master to master_host='192.168.56.60', master_port=3306, master_user='repl',  master_password='wanbin',master_auto_position=1 for channel  '192_168_56_60_3306';


mysql>change  master to master_host='192.168.56.59', master_port=3306, master_user='repl',  master_password='wanbin',master_auto_position=1 for channel  '192_168_56_59_3306';


mysql>start  slave;


mysql>show  slave status\G



2.2 配置keepalived


同双主配置中的keepalived


2.3 启动keepalived


keepalived  –D


2.4 测试


观察/var/log/messages文件

tail  -100f var/log/messages



虚拟IP在mysqldb3上。


1)mysqldb3停掉eth1网卡,观察虚IP是否自动切换。

ifconfig eth1 down


虚拟IP自动切换至mysqldb1


2)mysqldb1kill keepalived进程,观察虚IP是否自动切换。

pkill  keepalived



虚拟IP自动切换至mysqldb2


3)mysqldb2上停掉mysql数据库,观察虚IP是否自动切换。

mysqladmin -S /tmp/mysql3306.sock  -pwanbin shutdown



虚拟IP自动切换至mysqldb1



文章转载自DBEngineer,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论