mysql keepalived配置_使用keepalived搭建mysql双主高可用

原标题:使用keepalived搭建mysql双主高可用

目录

概述

环境准备

keepalived搭建

mysql搭建

mysql双主搭建

mysql双主高可用搭建

概述

传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能把人肉去恢复故障,既不想引用中间件也不想人肉恢复故障,可以折中选择双主方案,本文将介绍通过keepalived搭建mysql双主方案。

本例中vip为:172.16.0.169, 两台mysql实例服务器ip分别为:172.16.0.1和172.16.0.2

转帖请注明来源: https://my.oschina.net/u/2342969/blog/2963153

环境准备

最小化安装centos7

mysql-5.7.23

keepalived 1.4.5

虚拟ip(下文简称vip):172.16.0.169

keepalived搭建

点击查看keepalived搭建教程,博主亲自操作过来的,如有疑问欢迎随时私信或者评论

mysql单机搭建

点击查看mysql搭建教程,博主亲自操作过来的,如有疑问欢迎随时私信或者评论

双主搭建

本方案仅限两台均是全新安装的mysql,如果是旧mysql实例和新mysql实例改为双主,在新mysql实例中记得导入旧mysql实例的数据,另外可能同步复制还会报异常,自行解决一下。

环境安装检查

两台mysql实例均可以访问

keepalived可以正常漂移

数据库配置更改

#vim /etc/my.cnf

进入mysql配置修改一下配置:

server-id 两台mysql要不一样,一般是ip最后一位。注意命名规范不要加下划线/中横线/点等特殊符号

#skip_slave_start = 1 注释掉这个配置

创建复制账号

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'172.16.0.%' identified by 'repl_password';

mysql> flush privileges;

mysql> select @@server_id;

两台mysql分别执行以上语句,语句解析:

创建mysql复制账号

repl_user: 复制权限账号的用户名,可自行更改

172.16.0.%: 此处使用的通配符,也可以写固定ip,可同步的mysql实例ip

repl_password: 复制权限账号的密码,自行更改

select @@server_id; 查询出的结果一定要不一样

配置互为主备

mysql> CHANGE MASTER TO MASTER_HOST="对方ip", MASTER_USER="repl_user", MASTER_PASSWORD="repl_password", MASTER_PORT=3316, MASTER_AUTO_POSITION = 1;

mysql> start slave;

mysql> show slave status\G;

两台mysql分别执行以上sql,语句解析:

互相设置对方为主节点,自己为备节点

MASTER_HOST:对方ip

MASTER_USER:对方复制权限账号用户名,即上一步设置的用户名

MASTER_PASSWORD:对方复制权限账号密码,即上一步设置的密码

MASTER_PORT:对方mysql实例的端口, 如果开了防火墙一定要记得打开端口

show slave status\G; 注意查看Slave_IO_Running 和 Slave_SQL_Running 状态如果有一个为no 就代表配置失败

检查点:

Master_Host: 是否是对方ip

Master_User: 是否是对方的复制账号的用户名

Master_Port: 是否是对方mysql实例的端口号

Last_SQL_Errno:最近sql错误条数,正常情况为0

Last_SQL_Error:最新sql错误详细信息,正常情况为空

如果有异常,根据异常信息解决掉问题后,执行一下命令

mysql> stop slave;

mysql> reset master;

两台mysql分别执行以上命令,再执行一下上一步的配置。

验证

在任意一台mysql创建数据库,另一台也会同步到

在任意一台mysql创建表,另一台也会同步到

在任意一台mysql表中插入数据,另一台也会同步到

双主高可用

修改keepalived配置

# vim /etc/keepalived/keepalived.conf

配置内容如下:

! Configuration File for keepalived

global_defs {

router_id MYSQL-1 ## 名称自定义,两台机器需要不一样

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 60

priority 100 # 两台机器需要一个大一个小,数值大的先启动,哪台先启动vip会先在哪台机器

advert_int 1

nopreempt

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

172.16.0.169 # 填写自己的vip

}

}

virtual_server 172.16.0.169 3316 { # 填写自己的vip 和mysql端口

delay_loop 2

#lb_algo rr

#lb_kind DR

persistence_timeout 60

protocol TCP

real_server 172.16.0.1 3316 { # 填写mysql服务器真实ip 和mysql端口

weight 3

notify_down /etc/keepalived/checkmysql.sh # 检查mysql是否存活脚本,根据脚本位置自行填写

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3316 # mysql的端口号

}

}

}

注意: 上面配置注释的部分,两台机器根据实际情况修改,配置文件中的注释一定要去掉,以免出现奇怪问题

编写mysql监测脚本

#vim /etc/keepalived/checkmysql.sh

脚本内容如下:

#!/bin/sh

datetime=`date +20\%y\%m\%d_\%H\%M\%S`

isok=$(/usr/local/mysql/bin/mysql -h localhost -u数据库账号 -p数据库密码 -P数据库端口 -S /tmp/mysql3316.sock 2>/dev/null -e 'select 1' |sed -n '2p')

function error_query(){

systemctl stop keepalived

echo $datetime >> /etc/keepalived/keepalived.log

echo "mysql down, keepalived 切换" >> /etc/keepalived/keepalived.log

}

echo "isok: $isok" >> /etc/keepalived/keepalived.log

if [ "$isok" != "1" ]

then

error_query

fi

注意:根据实际情况调整脚本中的中文部分

给脚本赋权限:

# chmod +x /etc/keepalived/*.sh

验证

一定要先阅读博文[centos7 下源码安装keepalived踩坑记],根据这篇博文中"操作keepalived"章节操作keepalived

两台服务器分别启动keepalived, 注意先启动keepalived配置中priority 数值大的

停掉vip所在机器的mysql实例,查看另外一台机器ip是否有vip了

两台机器记得交叉验证,以免有问题, 如果不能正常漂移,请认真检查操作步骤,是否和本文一致返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值