返回顶部
首页 > 资讯 > 数据库 >mysql双主+keepalived
  • 946
分享到

mysql双主+keepalived

2024-04-02 19:04:59 946人浏览 薄情痞子
摘要

环境 OS: Centos7Mysql 版本: mysql 5.7Keepalived: keepalived-1.2.20Mysql-vip:192.168.41.100Mysql-master1:192

环境

OS: Centos7
Mysql 版本: mysql 5.7
Keepalived: keepalived-1.2.20
Mysql-vip:192.168.41.100
Mysql-master1:192.168.41.10
Mysql-master2:192.168.41.11
实验环境关闭防火墙规则firewall-cmd


一、配置两台mysql互为主从
mysql双主+keepalived
该过程的第一部分就是 master 记录二进制日志。在每个事务更新数据完成之前, master 在
二日志记录这些改变。MySQL 将事务写入二进制日志。在事件写入二进制日志完成后, master
通知存储引擎提交事务。
下一步就是 slave 将 master 的 binary log 拷贝到它自己的中继日志。首先, slave 开始一个工
线程——I/O 线程。I/O 线程在 master 上打开一个普通的连接,然后开始 binlog dump process。
Binlog dump process 从 master 的二进制日志中读取事件,如果已经同步了 master,它会睡
眠并等待 master 产生新的事件。 I/O 线程将这些事件写入中继日志。
SQL slave thread(SQL 从线程)处理该过程的最后一步。 SQL 线程从中继日志读取事件,并
重放其中的事件而更新 slave 的数据,使其与 master 中的数据一致。 只要该线程与 I/O 线程
保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步。

1、修改mysql配置文件
两台mysql均要开启binlog日志功能,两台的server-id不能一样:
master1配置如下:
[mysqld]
log-bin = mysql-bin
binlog_fORMat = mixed
server-id = 1
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 1
重启mysqld服务
systemctl restart mysqld

master2配置如下:
log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 2
重启 mysqld 服务
systemctl restart mysqld


注: master1 和 master2 只有 server-id 不同和 auto-increment-offset 不同。
mysql 中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:
auto_increment_offset 和 auto_increment_increment。
auto-increment-increment 表示自增长字段每次递增的量,其默认值是 1。 它的值应设为整个
结构中服务器的总数,本案例用到两台服务器,所以值设为 2。
auto-increment-offset 是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都
设定了一次自动增长值 2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步
时出现主键冲突


2、将 master1 设为 master2 的主服务器
在 master1 主机上创建授权账户,允许在 master2(192.168.41.11)主机上连接
mysql双主+keepalived

在 master2 上将 master1 设为自已的主服务器并开启 slave 功能。
mysql双主+keepalived
查看从的状态, mysql>show slave status\G;以下两个值必须为 yes,代表从服务器能正常连接主
服务器
Slave_io_Running:Yes
Slave_SQL_Running:Yes
3、 将 master2 设为 master1 的主服务器
在 master2 主机上创建授权账户,允许在 master1(192.168.41.10)主机上连接
mysql双主+keepalived
在 master1 上将 master2 设为自已的主服务器并开启 slave 功能。
mysql双主+keepalived
show slave status\G 查看从的状态,以下两个值必须为 yes,代表从服务器能正常连接主服务器
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
4、测试主主同步
在 master1 上创建要同步的数据库如 test_db,并在 test_db 中创建一张测试表如 tab1
mysql双主+keepalived
查看 master2 主机是否同步了 master1 上的数据变化
mysql双主+keepalived
在 master2 主机上向 tab1 表中插入数据
mysql双主+keepalived
查看 master1 主机是否同步了 master2 上的数据变化
mysql双主+keepalived
现在任何一台 MySQL 上更新数据都会同步到另一台 MySQL, MySQL 同步完成。
注: 若主 MYSQL 服务器已经存在,只是后期才搭建从 MYSQL 服务器,在置配数据同步前应
先将主 MYSQL 服务器的要同步的数据库拷贝到从 MYSQL 服务器上(如先在主 MYSQL 上备
份数据库,再用备份在从 MYSQL 服务器上恢复)


下面我们就完成 keepalived 的高可用性。
keepalived 是集群管理中保证集群高可用的一个软件解决方案,其功能类似于 heartbeat,用
来防止单点故障
keepalived 是以 VRRP 协议为实现基础的, VRRP 全称 Virtual Router Redundancy Protocol,即
虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功能的路由
器组成一个路由器组,这个组里面有一个 master 和多个 backup, master 上面有一个对外提
供服务的 vip, master 会发组播(组播地址为 224.0.0.18),当 backup 收不到 vrrp 包时就认
为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话
就可以保证路由器的高可用了。
keepalived 主要有三个模块,分别是 core 、 check 和 vrrp。 core 模块为 keepalived 的核心,
负责主进程的启动、维护以及全局配置文件的加载和解析。 check 负责健康检查,包括常见
的各种检查方式。 vrrp 模块是来实现 VRRP 协议的。

二、 keepalived 的安装配置
1、在 master1 和 master2 上安装软件包 keepalived
安装 keepalived 软件包与服务控制
在编译安装 Keepalived 之前,必须先安装内核开发包 kernel-devel 以及 openssl-devel、
popt-devel 等支持库。
mysql双主+keepalived

编译安装 Keepalived
mysql双主+keepalived
注意: 如不知道 keepalived 需要哪些依赖包,可到下载后的源码解压目录下查看 INSTALL 文
件内容, +
注意:centos6 执行 make install 操作之后,会自动生成/etc/init.d/keepalived 脚本文件,但还需要手动添加
为系统服务,这样就可以使用 service、 chkconfig 工具来对 keepalived 服务程序进行管理了。
centos7:不要加----with-kernel-dircentos6加
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/3.10.0-327.el7.x86_64/ && make && make install
Master2 主机也完成 keepalived 安装,与 master1 一样,安装过程略
2、 修改 Keepalived 的配置文件
keepalived 只有一个配置文件 keepalived.conf,里面主要包括以下几个配置区域,分别是
global_defs、 vrrp_instance 和 virtual_server。
global_defs: 主要是配置故障发生时的通知对象以及机器标识。
vrrp_instance: 用来定义对外提供服务的 VIP 区域及其相关属性。
virtual_server:虚拟服务器定义
master1 主机上的 keepalived.conf 文件的修改:
vi /etc/keepalived/keepalived.conf:

! Configuration File for keepalived //!表示注释
global_defs {
router_id MYSQL-1 //表示运行 keepalived 服务器的一个标识
}
vrrp_instance VI_1 {
state BACKUP //指定 keepalived 的角色, 两台配置此处均是 BACKUP,设为 BACKUP 将
根据优先级决定主或从
interface eth0 //指定 HA 监测网络的接口
virtual_router_id 51 //虚拟路由标识,这个标识是一个数字(取值在 0-255 之间,用来区
分多个 instance 的 VRRP 组播),同一个 vrrp 实例使用唯一的
标识,确保和 master2 相同,同网内不同集群此项必须不同,否
则发生冲突。
priority 100 //用来选举 master 的,要成为 master,该项取值范围是 1-255(在此范围
之外会被识别成默认值 100) ,此处 master2 上设置为 50
advert_int 1 //发 VRRP 包的时间间隔,即多久进行一次 master 选举(可以认为是健
康查检时间间隔)
nopreempt //不抢占, 即允许一个 priority 比较低的节点作为 master,即使有 priority
更高的节点启动
authentication { //认证区域,认证类型有 PASS 和 HA(IPSEC),推荐使用 PASS(密码
只识别前 8 位)
auth_type PASS
auth_pass 1111
}virtual_ipaddress { //VIP 区域,指定 vip 地址
192.168.1.100
}
}
virtual_server 192.168.1.100 3306 { //设置虚拟服务器,需要指定虚拟 IP 地址和服务端
口, IP 与端口之间用空格隔开
delay_loop 2 //设置运行情况检查时间,单位是秒
lb_alGo rr //设置后端调度算法,这里设置为 rr,即轮询算法
lb_kind DR //设置 LVS 实现负载均衡的机制,有 NAT、 TUN、 DR 三个模式可选
persistence_timeout 60 //会话保持时间,单位是秒。这个选项对动态网页是非常有用
的,为集群系统中的 session 共享提供了一个很好的解决方
案。 有了这个会话保持功能,用户的请求会被一直分发到某个服务
节点,直到超过这个会话的保持时间。
protocol tcp //指定转发协议类型,有 TCP 和 UDP 两种
real_server 192.168.1.101 3306 { //配置服务节点 1,需要指定 real server 的真实 IP 地
址和端口, IP 与端口之间用空格隔开
注: master 2 上此处改为 192.168.1.102(即 master2 本机 ip)
weight 3 //配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,
设置权值大小为了区分不同性能的服务器
notify_down /etc/keepalived/bin/mysql.sh //检测到 realserver 的 mysql 服务 down
后执行的脚本
TCP_CHECK {
connect_timeout 3 //连接超时时间
nb_get_retry 3 //重连次数
delay_before_retry 3 //重连间隔时间
connect_port 3306 //健康检查端口
}
}
}

master1 主机上有关 keepalived.conf 文件的具体配置如下:
mysql双主+keepalived

启动keepalived
systemctl start keepalived.service
ps -aux |grep keep

Master2 主机上的 keepalived.conf 文件的修改:
mysql双主+keepalived
启动keepalived服务
systemctl start keepalived.service
3、 #mkdir /etc/keepalived/bin
vi /etc/keepalived /bin/mysql.sh,内容如下:
mysql双主+keepalived
Master2 主机完成相同的操作
4、测试
在 master1 和 master2 分别执行 ip addr show dev eth0 命令查看 master1 和 master2 对 VIP
(群集虚拟 IP)的控制权。
Master1 主的查看结果:
mysql双主+keepalived
Master2 主的查看结果:
mysql双主+keepalived
从上图可以看出 master1 是主服务器, master2 为备用服务器。
停止 MySQL 服务,看 keepaliv ed 健康检查程序是否会触发我们编写的脚本
停止 master1 主机的 mysql 服务
mysql双主+keepalived
Master2 主的查看结果:
mysql双主+keepalived
这说明在主服务上停止 MySQL 服务,触发了我们编写的脚本,进行自动故障切换。
MySQL 远程登录测试
我们找一台安装有 MySQL 客户端,然后登录 VIP,看是否能登录,在登录之前两台 MySQL
服务器都要授权允许从远程登录。例如:
grant all on . to root@'%' identified by '123456';
在客户端上测试登录(把干才关闭master1启动):
mysql双主+keepalived
上图显示说明在客户端访问 VIP 地址,由 master1 主机提供响应的,因为 master1 当前是主
服务器, 将 master1 的 mysql 服务停止, 在客户端执行 show variables like ‘server_id’;
mysql双主+keepalived
上图显示说明在客户端的查询请求是由 master2 主机响应的。故障切换成功。
总结
Keepalived+mysql 双主一般来说,中小型规模的时候,采用这种架构是最省事的。
在 master 节点发生故障后,利用 keepalived 的高可用机制实现快速切换到备用节点。
在这个方案里,有几个需要注意的地方:
1.采用 keepalived 作为高可用方案时,两个节点最好都设置成 BACKUP 模式,避免因为意外
情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;
2.把两个节点的 auto_increment_increment(自增步长)和 auto_increment_offset(自增起
始值)设成不同值。其目的是为了避免 master 节点意外宕机时,可能会有部分 binlog 未能
及时复制到 slave 上被应用,从而会导致 slave 新写入数据的自增值和原先 master 上冲突了,
因此一开始就使其错开;当然了,如果有合适的容错机制能解决主从自增 ID 冲突的话,也
可以不这么做;
3.slave 节点服务器配置不要太差,否则更容易导致复制延迟。作为热备节点的 slave 服务器,
硬件配置不能低于 master 节点;
4.如果对延迟问题很敏感的话,可考虑使用 MariaDB 分支版本,或者直接上线 MySQL 5.7 最
新版本,利用多线程复制的方式可以很大程度降低复制延迟;

您可能感兴趣的文档:

--结束END--

本文标题: mysql双主+keepalived

本文链接: https://lsjlt.com/news/38219.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql双主+keepalived
    环境 OS: centos7Mysql 版本: mysql 5.7Keepalived: keepalived-1.2.20Mysql-vip:192.168.41.100Mysql-master1:192...
    99+
    2024-04-02
  • keepalived+mysql双主
    keepalived+mysql双主原理:(1)主库1上的keepalived启动之后,会检查mysql服务是否活着,如果活着,keepalived进入master状态,获得VIP;(2)主库2上的keep...
    99+
    2024-04-02
  • keepalived+双主
    [root@mini1 ~]# setenforce 0[root@mini1 ~]# systemctl stop firewalld.service [root@mini1 ~]# vim /...
    99+
    2024-04-02
  • mysql+keepalived 双主热备高可用
    理论介绍: 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。MySQL双主复制,即互...
    99+
    2024-04-02
  • mysql双主配合keepalived可用简析
    一 版本。    mysql数据库版本:Preconna Server ,MariaDB还是MYSQL    1.mysql三种存储引擎 ...
    99+
    2024-04-02
  • linux上mysql MM(双主)及keepalived搭建
    一、主备机IP及VIP规划: master1 10.1.1.14 VIP 10.1.1.16 master2    10.1.1.15 VIP 10.1.1.16 二、mysq...
    99+
    2024-04-02
  • Mysql+Keepalived实现双主热备方式
    目录一、mysql安装、配置和安全启动二、 两台Mysql配置双主三、安装Keepalived四、配置Keepalived我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的...
    99+
    2024-04-02
  • MySQL数据库如何配置Keepalived双主
    下面一起来了解下MySQL数据库如何配置Keepalived双主,相信大家看完肯定会受益匪浅,文字在精不在多,希望MySQL数据库如何配置Keepalived双主这篇短内容是你想要的。1、环境设置10.0....
    99+
    2024-04-02
  • Mysql8高可用之双主+keepalived
    1. 概述 利用keepalived实现Mysql数据库的高可用,Keepalived+Mysql双主来实现MYSQL-HA,我们必须保证两台Mysql数据库的数据完全一致,实现方法是两台Mysql互为主从关系,通过keepalived配...
    99+
    2023-10-08
    mysql 数据库 linux
  • keepalived Mysql双主热备配置的示例分析
    这篇文章主要介绍keepalived Mysql双主热备配置的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 基于keepalived双主热备:...
    99+
    2024-04-02
  • mysql主主+keepalived高可用
    mysql主主+keepalived高可用 1.两台主机 host: db1 外网:11.0.0.51 内网:172.16.1.51 db2 外网:11.0.0.52 内网:172.16.1.52 ...
    99+
    2024-04-02
  • Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)
    Mysql5.5双机热备 实现方案 安装两台Mysql 安装Mysql5.5 sudo apt-get update apt-get install aptitud...
    99+
    2024-04-02
  • Keepalived+MariaDB10配置+双主+高可用数据库
    Keepalived+MariaDB10配置双主高可用数据库  OSRS子网掩码路由网关Centos6.6MariaDB10Keepalived Eth0:192.168.26...
    99+
    2024-04-02
  • centos7 mysql互为主从+keepalived
    一、互为主从配置1.1、资源情况192.168.11.177 server1192.168.11.180 server2192.168.11.210 VIP1.2、server1配置# vi /etc/my...
    99+
    2024-04-02
  • 搭建MySQL双主MM+keepalived高可用架构的具体流程
    下文我给大家简单讲讲关于搭建MySQL双主MM+keepalived高可用架构的具体流程,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完搭建MySQL双主MM+keepaliv...
    99+
    2024-04-02
  • Keepalived+Mysql如何配置主主复制
    小编给大家分享一下Keepalived+Mysql如何配置主主复制,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!安装环境:Hos...
    99+
    2024-04-02
  • mysql双主
    master01 [client]port = 3306 socket = /home/mysql/socket/mysql.sock #default-character-set=utf8 [mysql...
    99+
    2024-04-02
  • MySQL数据库--主主复制+keepalived高可用
                  MySQL数据库--主主复制+keepalived高可用之前我们有学习过mysql的主从复制,主要...
    99+
    2024-04-02
  • keepalived+vip+mysql双机高可用的示例分析
    这篇文章主要为大家展示了“keepalived+vip+mysql双机高可用的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“keepalived+vip...
    99+
    2024-04-02
  • 如何理解基于keepalived的MySQL主主复制
    这篇文章将为大家详细讲解有关如何理解基于keepalived的MySQL主主复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作