基于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
配置内容如下:
<code class="language-apache">! 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了
两台机器记得交叉验证,以免有问题, 如果不能正常漂移,请认真检查操作步骤,是否和本文一致
原文链接:https://my.oschina.net/u/2342969/blog/2963153
基于keepalived搭建mysql双主高可用的更多相关文章
- 基于Keepalived实现LVS双主高可用集群
Reference: https://mp.weixin.qq.com/s?src=3×tamp=1512896424&ver=1&signature=L1C7us ...
- MySQL集群(四)之keepalived实现mysql双主高可用
前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Kee ...
- 使用Keepalived实现MySQL双主高可用
MySQL双主配置 环境准备: OS: CentOS7 master:192.168.1.10 backup:192.168.1.20 VIP:192.168.1.30 一.安装MySQL数据库. 在 ...
- 通过keepalived搭建MySQL双主模式的高可用集群系统
1. 配置MySQL双主模式 1.修改my.cnf配置文件 默认情况下,MySQL的配置文件是/etc/my.cnf,在配置文件的[mysqld]段添加如下内容: server-id=1 log-bi ...
- 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境
应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...
- nginx+keepalived实现nginx双主高可用的负载均衡
http://kling.blog.51cto.com/3320545/1253474 一.前言: 在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作.提供稳定可靠的服务,可以给用户带 ...
- MySQL5.7 利用keepalived来实现mysql双主高可用方案的详细过程
Reference: http://blog.csdn.net/mchdba/article/details/51377989 服务器准备 Keepalived:192.168.13.15 Keep ...
- keepalived+mysql实现双主高可用
环境: DB1:centos6.8.mysql5.5.192.168.2.204 hostname:bogon DB2:centos6.8.mysql5.5.192.168.2.205 hostn ...
- (转)基于keepalived搭建MySQL的高可用集群
基于keepalived搭建MySQL的高可用集群 原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...
随机推荐
- python合并两个字典
1.借助dict(d1.items() + d2.items())的方法 2.借助字典的update()方法,没有返回值 3.借助字典的dict(d1, **d2)方法 4.d3={**d1,**d2 ...
- 求两个排序数组的交集和并集----时间复杂度O(n+m)
问题: 给你两个排序的数组,求两个数组的交集. 比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5,n是a数组大小,m是b数组大小. 思路: (1)从b数组遍历取 ...
- Vue.js 生命周期、计算属性及侦听器
一.创建一个Vue实例 每个Vue应用都是使用Vue函数创建一个Vue实例.所有的Vue组件都是一个Vue实例,并且接受相同的选项对象(一些根实例特有的选项除外). 数据和方法 当一个实例被创建后,它 ...
- koa 项目打包(使用webpack打包koa2 框架app)
关键问题 一:所有node_modules里的模块都不进行打包 webpack的核心功能是将引用的各个模块打到一个文件里,并会将各种规范的模块进行统一的模块化处理(webpack规范). 然而node ...
- IDEA Method definition shorthands are not supported by current JavaScript version
sentinel-dashboard前端用到了AngularJS v1.4.8,在IDEA里修改js,触发js验证时有一些js文件会出现红色波浪线. 在代码行里鼠标一上去提示信息:Method def ...
- 用PHP自带函数对二维数组进行排序
经常会面临这样的需求,虽然有时候我们可以在数据库查询的时候,直接对数据进行排序,但还是无法满足日益复杂的业务需求. 这里边会用到两个函数 一个是array_column()函数,这个函数接受三个参数. ...
- 04 MySQL之函数
01-数学函数 数学函数主要用来处理数值数据. # 1.绝对值函数 ABS(x) 和 返回圆周率的函数 PI() ABS(x) 返回x的绝对值. 例: mysql> select ABS(2), ...
- powerdesigner通过er图生成mysql执行文件
PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...
- partprobe 和 partx 的用法
partprobe: 用于重读分区表,当出现删除文件后,出现仍然占用空间.可以partprobe在不重启的情况下重读分区. 将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表. -d 不更新内核 ...
- 深入解读TCP/IP
虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...