centos 下 mysql+keepalived实现双主自由切换
目录
本文的目的是搭建一个互为主从的mysql高可用架构,用来保证mysql服务器宕机的时候,能够自动的切换的另一台mysql服务器。
ip规划
主机名 | ip地址 | 角色 |
---|---|---|
mysql1 | RIP:172.25.0.41 VIP 172.25.0.200 | 主服务器1 |
mysql2 | Rip:172.25.0.42 VIP 172.25.0.200 | 主服务器2 |
mysql双主配置
第一步,修改mysql1配置文件,如下所示。
[root@mysql1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
server-id = 1
log-bin = binlog
relay_log = mysql-relay-bin
log_slave_updates =1
auto_increment_increment=2
#表示自增长ID的数量,即步进
auto_increment_offset=1
##自增长ID起始位置
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid #
# include all files from the config directory
#
!includedir /etc/my.cnf.d
第二步:修改mysql2的配置文件,如下:
[root@mysql2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
server-id=2
#配置server-id,标识从服务器
relay_log = mysql-relay-bin
#打开Mysql中继日志
log_bin =mysql-bin
#打开从服务器的二进制日志
log_slave_updates =1
#使得更新的数据写进二进制日志中
auto_increment_increment=2
#表示自增长ID的数量,即步进
auto_increment_offset=2
#自增长ID起始位置 [mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid #
# include all files from the config directory
#
!includedir /etc/my.cnf.d
第三步:在mysql1上创建复制账号,在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。 MariaDB [(none)]> grant replication slave ,replication client on *.* to slave@'172.25.%.%' identified by 'centos';
第四步:启动从服务器配置线程,在mysql2上配置
MariaDB [(none)]> change master to
master_host='172.25.0.41',
master_user='slave',
master_password='centos',
master_log_file='binlog.000003',
#指明初始复制时的mysql1中的binlog文件
master_log_pos=245;
#指明初始复制时binlog文件的位置
开启slave线程 MariaDB [(none)]> start slave;
第五步:上述已搭建好mysql1和mysql2的主从,接下来配置mysql2和mysql1的主从,使其能够互为主从。在mysq1上指定mysql2为主。
MariaDB [(none)]> change master to
master_host='172.25.0.42',
master_user='slave',
master_password='centos',
master_log_file='mysql-bin.000003',
master_log_pos=486688;
#指明复制时的起始文件和起始位置。
开启slave进程 MariaDB [(none)]> start slave;
keepalived配置
keepalived能够实现mysql1和mysql2共享一个虚拟ip,当前端访问数据库的时候,可以直接指向这个ip地址,若mysql1宕机了,VIP资源可以直接共享给mysql2.
mysql1中keepalived的配置
第一步:编辑keepalived的配置文件
! Configuration File for keepalived
global_defs {
#设置报警通知邮件地址,可以设置多个
notification_email {
root@localhost
}
#设置邮件的发送地址
notification_email_from mysql@xiaomi.com
#设置smtp server的地址,该地址必须是存在的
smtp_server 127.0.0.1
#设置连接smtp server的超时时间
smtp_connect_timeout 30
#运行Keepalived服务器的标识,发邮件时显示在邮件标题中的信息
router_id mysql_ha
}
# 检测脚本
vrrp_script chk_mysql {
script "/etc/keepalived/mysqlcheck/check_slave.sh"
interval 2
weight 2
}
#定义VRRP实例,实例名自定义
vrrp_instance mysql-ha {
#指定Keepalived的角色,MASTER主机 BACKUP备份
state BACKUP #此处两个都设置为BACKUP
#指定HA监测的接口
interface ens34
#虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样
virtual_router_id 68
#优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器
priority 100 #从服务器99
#设置主备之间同步检查的时间间隔单位秒
advert_int 1
#设置不抢占模式(DB1设置即可)
nopreempt
#设置验证类型和密码
authentication {
#验证类型有两种{PASS|HA}
auth_type PASS
#设置验证密码,在一个实例中主备密码保持一样
auth_pass centos
}
track_script {
chk_mysql # 执行监控的服务
}
#定义虚拟IP地址,可以有多个,每行一个
virtual_ipaddress {
172.25.0.200
}
}
第二步:编写心跳检测脚本:
[root@mysql1 /etc/keepalived/mysqlcheck]# vim /etc/keepalived/mysqlcheck/check_slave.sh #!/bin/bash
#This scripts is check for Mysql Slave status
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
killall keepalived
fi
ping 172.25.0.41 -w1 -c1 &>/dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
killall keepalived
fi
需要为此.sh文件添加可执行权限
chmod +x /etc/keepalived/mysqlcheck/check_slave.sh
基于网段是否可用以及mysql数据库是否工作来判断服务器的心跳
mysql2中keepalived的配置
第一步:编辑keepalived中的配置文件
[root@mysql2 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived
global_defs {
#设置报警通知邮件地址,可以设置多个
notification_email {
root@localhost
}
#设置邮件的发送地址
notification_email_from mysql@xiaomi.com
#设置smtp server的地址,该地址必须是存在的
smtp_server 127.0.0.1
#设置连接smtp server的超时时间
smtp_connect_timeout 30
#运行Keepalived服务器的标识,发邮件时显示在邮件标题中的信息
router_id mysql_ha
}
# 检测脚本
vrrp_script chk_mysql {
script "/etc/keepalived/mysqlcheck/check_slave.sh"
interval 2
weight 2
}
#定义VRRP实例,实例名自定义
vrrp_instance mysql-ha {
#指定Keepalived的角色,MASTER主机 BACKUP备份
state BACKUP #此处两个都设置为BACKUP
#指定HA监测的接口
interface ens34
#虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样
virtual_router_id 68
#优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器
priority 90 #从服务器99
#设置主备之间同步检查的时间间隔单位秒
advert_int 1
#设置不抢占模式(DB1设置即可)
#nopreempt
#设置验证类型和密码
authentication {
#验证类型有两种{PASS|HA}
auth_type PASS
#设置验证密码,在一个实例中主备密码保持一样
auth_pass centos
}
track_script {
chk_mysql # 执行监控的服务
}
#定义虚拟IP地址,可以有多个,每行一个
virtual_ipaddress {
172.25.0.200
}
}
第二步:编写检测脚本:
[root@mysql2 ~]# vim /etc/keepalived/mysqlcheck/check_slave.sh #!/bin/bash
#This scripts is check for Mysql Slave status
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
killall keepalived
fi
ping 172.25.0.42 -w1 -c1 &>/dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
killall keepalived
fi
需要为此.sh文件添加可执行权限
chmod +x /etc/keepalived/mysqlcheck/check_slave.sh
上述心跳检测脚本中,对于状态的检测写的很简单,其一是基于该服务器的mysql是否开启,其二是基于该网段是否可以ping通。可以根据自己的需求,将该脚本设计的更复杂一些。比如根据数据库的插入、删除等是否可用、主从线程是否开启等进行细分。提高检测的精准度。
VIP漂移检测
mysql1和mysql2中同时开启keepalived服务和msyql服务
查看mysql1中的ip地址: [root@mysql1 ~]# ip a s
由上图可知,此时的VIP是在mysql1中的。
停止mysql1中的mysql服务,再观察mysql1和mysql2的ip状况。
mysql1:
MySQL2:
可以看到VIP资源已经由mysql1转移到了mysql2当中。
在生产环境中,利用这种机制能够实现故障转移的功能。
centos 下 mysql+keepalived实现双主自由切换的更多相关文章
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
- 基于 MySQL 5.6 keepalived的双主搭建
环境介绍: 说明 IP 节点1 192.168.56.56 节点2 192.168.56.57 w_ip 192.168.56.6 安装keepalived tar -zxvf keepalived- ...
- 【 Linux 】Keepalived实现双主模型高可用集群
要求: 1. 两台web服务器安装wordpress,数据库通过nfs共享 2. 使用keepalived实现双主模型 环境: 主机: 系统:CentOS6.7 x64 ...
- Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡
周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...
- CentOS 下 MySQL DateBasic 抢救
CentOS 下 MySQL DateBasic 抢救 强 Kill 数据库进程. 分析问题:确定报错内容 报错信息:The server quit without updating PID file ...
- CentOS下MySQL 5.7编译安装
CentOS下MySQL 5.7编译安装 文章目录 安装依赖包 下载相应源码包 添加mysql用户 预编译 编译安装 启动脚本,设置开机自启动 /etc/my.cnf,仅供参考 初始化数据库 设置 ...
- CentOS下Mysql安装教程
CentOS下Mysql安装教程 本人学习Linux时使用的是CentOs5.5版本,在该环境中,Mysql的安装方法有很多种,下面我只讲我这次成功了的方法,作为一个记录,供大家参考,同时给自己做一个 ...
- CentOS 下mysql ERROR&n…
CentOS 下mysql ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO) 描述:在操作数据库时会出 ...
- CentOS 下 MySQL 5.6 基于 RPM 的下载、安装、配置
CentOS 下 MySQL 5.6 基于 RPM 的下载.安装.配置 系统: CentOS 7 x86_64 MySQL 版本: 5.6.40 安装方式: RPM 下载 下载地址 操作系统 选择 R ...
随机推荐
- 闲话函数式变成与OOP
函数式编程扫盲篇 推薦參考文獻地址:http://byvoid.github.io/slides/apio-fp/index.html 1. 概论 在过去的近十年的时间里,面向对象编程大行其道.以至于 ...
- npm 升级自身
用cue-cli 生成新项目 提示升级npm 解决方案: npm install -g npm 呵呵呵,简直太简单了 然而今天是2016.11.11
- HDU 5901 Count primes 论文题
Count primes 题目连接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5901 Description Easy question! C ...
- oracle创建透明网关出现的问题
解决方案:创建HS_TRANSACTION_LOG表 DROP TABLE HS_TRANSACTION_LOG go CREATE TABLE HS_TRANSACTION_LOG( GLOBAL_ ...
- 你的java/c/c++程序崩溃了?揭秘段错误(Segmentation fault)(3)
前言 接上两篇: 你的C/C++程序为什么无法运行?揭秘Segmentation fault (1) 你的C/C++程序为什么无法运行?揭秘Segmentation fault (2) 写到这里,越跟 ...
- 一种高效的序列化方式——MessagePack
最近在弄一些数据分析方面的内容,发现很多时候数据瓶颈在模块之间的数据序列化和反序列化上了,原来项目中用的是Json,找了一圈发现Json.net在Json序列化库中已经是性能的佼佼者了,便准备从序列化 ...
- 利用webBrowser获取页面iframe中的内容
1.获取frame的document HtmlDocument htmlDoc = webBrowser1.Document; htmlDoc = webBrowser1.Document.Wind ...
- 怎样把XP系统装到USB里?
怎么样在usb(usb闪存)里面装XP系统? 就是把usb当硬盘用 不买硬盘. U盘肯定装不了系统,装进去了也肯定蓝屏.为什么?因为USB得数据传输太慢,不会超过10M/S的,而你的IDE口或者SAT ...
- 在 DELPHI 中 procedure 型变量与 method 型变量的区别
Procedure型变量: 在DELPHI中,函数.过程的地址可以赋给一个特殊类型的变量,变量可用如下方式声明: var p : procedure(num:integer); //过程 或: var ...
- asp.net core读取appsettings.json,如何读取多环境开发配置
摘要 在读取appsettings.json文件中配置的时候,觉得最简单的方式就是使用asp.net core注入的方式进行读取了. 步骤 首先根据配置项的结构定义一个配置类,比如叫AppSettin ...