mysql 双 master_Keeplived+mysql双master高可用如何实现?

本文详细介绍了如何配置MySQL双主模式,通过Keepalived实现高可用。首先,设置两台MySQL服务器互为主从,然后在两台服务器上安装并配置Keepalived,以监控MySQL服务并实现故障转移。最后,通过脚本检测MySQL服务状态,并通过调整Keepalived配置确保非抢占模式下的主库切换。
摘要由CSDN通过智能技术生成

作者:墨篱弦

简易拓扑

98cdc8b5d7d79f1fdc785f0b68031f43.png

https://oscimg.oschina.net/oscnet/up-18b70e55451e4e69d0f449e6329034bdcfa.png

实验环境

Mysql40.11(master-1) 192.168.40.11/24

Mysql40.12(master-2) 192.168.40.12/24

Keepalived 192.168.40.18/24

安装依赖环境和mysql(过程略)

配置master-1和master-2互为主从关系

修改master-1的mysql配置

vim /etc/my.cnf

#log config

log-bin=mysql-bin

relay-log=relay-log

relay-log-index=relay-log.index

server-id=11

innodb-file-per-table=ON

skip_name_resolve=ON

重启数据库

systemctl restart mysqld

连接数据库

mysql -uroot -p******

查看日志信息

show global variables like '%log%';

dade7810875b75f9e4f0f69816a6c5c5.png

https://oscimg.oschina.net/oscnet/up-64a20398db3d3663300345fe3fea58549b4.png

16b15c3f3e2322e76ee861d751c55be2.png

https://oscimg.oschina.net/oscnet/up-52bdc44bcc14d0b72aefc988ae4093ca146.png

在master-1创建有复制权限的用户

grant replication slave on *.* to 'backup'@'%' identified by 'Backup123!@#';

flush privileges;

修改master-2的mysql配置

vim /etc/my.cnf

#log config

log-bin=log-bin

relay-log=relay-log

relay-log-index=relay-log.index

server-id=12

innodb_file_per_table=ON

skip_name_resolve=ON

在master-2创建有复制权限的用户

grant replication slave on *.* to 'backup'@'%' identified by 'Backup123!@#';

flush privileges;

重启数据库

systemctl restart mysqld

连接数据库

mysql -uroot -p123456

查看日志信息

show global variables like '%log%';

5fda20c7b330b50beccca08686212c6f.png

e336ad6373abefca75b281dd61a67121.png

在master-1上查看log-bin文件名和pos值

show master status;

e826f8907c1b1f3350462b32ed3c7cc1.png

在master-2上开启主从

mysql> change master to

-> master_host='192.168.40.11',

-> master_user='backup',

-> master_password='Backup123!@#',

-> master_log_file='mysql-bin.000001',

-> master_log_pos=591;

start slave;

查看主从状态

show slave status\G

a5b1e2b4cbfc2cc7ab1743dac362f301.png

master-1与master-2主从关系建立成功

同理现在创建master-2与master-1的主从关系

在master-2上查看log-bin文件名和pos值

show master status;

e826f8907c1b1f3350462b32ed3c7cc1.png

在master-1上开启主从

mysql> change master to

-> master_host='192.168.40.12',

-> master_user='backup',

-> master_password='Backup123!@#',

-> master_log_file=' log-bin.000003',

-> master_log_pos=591;

start slave;

查看主从状态

3599b4ad70fcd3deb76fd08ed2439a21.png

验证master-1和master-2是否互为主从

创建远程访问账号

grant all privileges on *.*to 'test'@'%' identified by '123qwe!@#QWE' with grant option;

端口为默认端口号

show global variables like '%port%';

fe2ac68d52892b79a82597a12b8939d1.png

在master-1创建新库 123

3c5cbd70ec92936a6d8eabc22876c414.png

在master-2上查看数据库是否同步过来

d13b72469e133c43f3ea123a25b9fec0.png

img

在master-2上的数据库123上创建新表321

9d271cb0d0dd71ff8c6f347dd51c21ff.png

在master-1上的数据库123查看是否同步过来了新表

9782be8b6be208bc8ea9b18459187725.png

img

验证通过,master-1和master-2互为主从关系

在两台服务器上分别安装keepalived(过程略)

给master-1和master-2分别安装keepalived

Master-1安装keepalived

安装依赖坏境

yum -y install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel

创建/data/keepalived,创建/software

mkdir –p /data/keepalived

mkdir –p /software

上传安装包到/software, 解压安装包, 进入keepalived-2.1.5目录

tar -zxvf keepalived-2.1.5.tar.gz

cd keepalived-2.1.5

编译安装

./configure --prefix=/data/keepalived --sysconf=/etc

make & manke install

进入安装后的路径

cd /data/keepalived/

创建软连接,覆盖软连接

ln -s sbin/keepalived /sbin/

ln -snf sbin/keepalived /sbin

复制运行命令

cp /software/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d

chkconfig --add keepalived

添加到系统服务(开机启动),启动服务

chkconfig keepalived on

service keepalived start

Master-2安装和master-1相同

在master-1上创建chk_mysqld检测mysql是否运行的脚本,添加脚本执行权限

vim chk_mysqld.sh

#!/bin/bash

A=`ps -C mysqld --no-header|wc -l`

if [ $A -eq 0 ];then

systemctl start mysqld

sleep 2

if [ `ps -C mysqld --no-header|wc -l` -eq 0 ];then

killall keepalived

fi

fi

chmod 775 chk_mysqld.sh

配置master-1的keepalived

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id MYSQL

}

vrrp_script chk_mysqld {

script "/root/chk_mysqld.sh"

interval 10

weight -5

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 18

priority 100

advert_int 1

nopreempt

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.40.18/24

}

track_script {

chk_mysqld

}

}

重启keepalived,查看是否拿到虚拟IP

service keepalived restart

ip add

7bfd80af12828b79c62701c769440f9e.png

在master-2上创建chk_mysqld检测mysql是否运行的脚本,添加脚本执行权限

vim chk_mysqld.sh

#!/bin/bash

A=`ps -C mysqld --no-header|wc -l`

if [ $A -eq 0 ];then

systemctl start mysqld

sleep 2

if [ `ps -C mysqld --no-header|wc -l` -eq 0 ];then

killall keepalived

fi

fi

chmod 775 chk_mysqld.sh

配置master-2的keepalived

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id MYSQL

}

vrrp_script chk_mysqld {

script "/root/chk_mysqld.sh"

interval 10

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 18

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.40.18/24

}

track_script {

chk_mysqld

}

}

重启keepalived,查看是否拿到虚拟IP

service keepalived restart

ip add #因为设置了非抢占,默认谁优先开机启动完成,谁为主库,谁拿到vip

验证keepalived的非抢占

重启master-1并查看master网络信息

1e46755881b44dc0acf62fa5721f99b4.png

在查看master-1网络信息

ff1958e75e21eb9085f49be87637297b.png

验证数据库

目前主库在40.12

68f87425e95ff7cdd82d123ec397ced6.png

重启master-2看数据库是否会自动切换到master-1上

8c23bb5bc49453d9f22db1ada2b6651b.png

数据库发生了切换期间出现过一次丢包

2d4ad46c82c8cea0ac033924ecda4cca.png

对数据的影响还未验证。。

还可以测试下,如果直接down网口的情况下 服务器以及数据库是否能实现自动切换?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值