目录

  • ip规划
  • mysql双主配置
  • keepalived配置
    • mysql1中keepalived的配置
    • mysql2中keepalived的配置
  • VIP漂移检测

本文的目的是搭建一个互为主从的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 2weight 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 ]; thensystemctl stop keepalivedkillall keepalived
fi
ping 172.25.0.41 -w1 -c1 &>/dev/null
if [ $? -ne 0 ]
thensystemctl stop keepalivedkillall keepalived
fi

基于网段是否可用以及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 2weight 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 ]; thensystemctl stop keepalivedkillall keepalived
fi
ping 172.25.0.42 -w1 -c1 &>/dev/null
if [ $? -ne 0 ]
thensystemctl stop keepalivedkillall keepalived
fi

上述心跳检测脚本中,对于状态的检测写的很简单,其一是基于该服务器的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当中。
在生产环境中,利用这种机制能够实现故障转移的功能。

mysql+keepalived实现双主自由切换相关推荐

  1. Mysql+Keepalived实现双主热备

    我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短 MySQL双主复制,即互为Mast ...

  2. CENTOS利用Keepalived构建双主MySQL+双机热备

    之前的博文介绍了如何配置MYSQL双主互备. 见http://showerlee.blog.51cto.com/2047005/1187693 这里介绍如何配合前者实现Keepalived双机热备 系 ...

  3. centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备

    之前的文章介绍了如何配置MysqL双主互备,见http://www.linuxidc.com/Linux/2013-05/83784.htm 这里介绍如何配合前者实现Keepalived双机热备 系统 ...

  4. MariaDB+Keepalived 搭建双主HA数据库服务

    1.安装mysql   在linux版本下,mysql称为mariadb,可以选择在线安装,或编译安装.MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开 ...

  5. Hapoxy+keepalived实现双主高可用负载均衡

    在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepalived双主模式做了测试,双主的模式充分利用了服务器资源,这样不会导致服务器浪费. 这里举例说明: 默认情况下,第 ...

  6. Mysql集群--双主模式

    MySQL主从模式,一主多从.读写分离等.但是单主如果发生单点故障,从库切换成主库还需要作改动.因此,如果是双主或者多主,就会增加MySQL入口,提升了主库的可用性. 因此随着业务的发展,数据库架构可 ...

  7. CrossOver22MAC linux双系统自由切换Win系统

    很多人因为习惯了使用Windows系统上的软件,在使用Mac时,也想照常使用Windows上的软件,下面小编就为大家介绍一款可以在Mac和linux上使用任意Windows软件,并且不需要安装虚拟机的 ...

  8. java mysql failover_MySQL MMM 双主在Failover时挂起

    两台MySQL服务器,版本Percona 5.5.35,配置双主,装在Centos 6.4下 Master1  db1,172.21.120.160(真实IP),172.21.120.173(Writ ...

  9. MyCat学习:使用MySQL搭建主从复制(双主双从模式)

    首先,上一篇我们建立了一主一丛模式的MySQL读写分离 点击这里 那么接下来,我们搭建双主双从模式的读写分离,并且使用MyCat登录访问 原理:master1,master2,slave1,slave ...

  10. Mysql 集群双主双从安装使用详细讲解

    文章目录 下载Mysql 安装单机Mysql 配置Mysql集群 双Master配置 master1配置 master2配置 配置说明 双Slave配置 Slave1配置 Slave2配置 双 Mas ...

最新文章

  1. 手工编译Android程序
  2. DDD(Domain-Driven Design)领域驱动设计-(一)整体概述
  3. c语言五子棋光标,c语言写的鼠标操作的五子棋游戏,欢迎观赏!
  4. LeetCode之寻找峰值
  5. 关于php聊天室的实现方法,PHP聊天室简单实现
  6. svn切换项目地址(外网 > 内网)
  7. Magento查询产品时查询库存状态
  8. nginx 配置 apple-app-site-association
  9. Elasticsearch:Apache spark 大数据集成
  10. android ntfs驱动_如何在Android上读写外部NTFS外部硬盘驱动器和笔式驱动器
  11. 英语3500词(15/20)crime主题(2022.1.27)
  12. 前端速成:双月Java之旅(week5)_day4
  13. ggplot2学习笔记7:通过图层逐层构建图形
  14. java 判断是否信用卡_用java实现验证输入信用卡号码的正误
  15. 图论-单源最短路径算法(拓扑,Dijkstra,Floyd,SPFA)
  16. HTML Input标签输入限制
  17. 关于WinGate代理服务器的概述
  18. 为什么下载小电影时,进度经常会卡在99%?
  19. HTTP各种请求方法的的幂等性和安全性
  20. Android 7.0解析包时出现问题 的解决方案(应用内更新)

热门文章

  1. 《Effective Python 2nd》 读书笔记——函数
  2. Java丨Ele实验室“疫情传播仿真程序”的代码实现
  3. IT职业生涯中的必修课
  4. ROC曲线和AUC 原理与实现——Python实战
  5. 哈夫曼树以及哈夫曼编码python
  6. jquery class选择器循环_web前端教程分享Jquery常见面试题
  7. Vue 中使用element ui 自定义邮箱和手机号的效验规则
  8. Android电池管理系统系统分析
  9. P3707 [SDOI2017]相关分析
  10. Tomcat运行流程