keepalived实现mysql双主架构

5 keepalived实现mysql双主架构

5.1 架构介绍

企业级Mysql集群具备高可用、可扩展、以管理、低成本的特点。下面将介绍企业环境中经常应用的一个解决方案,即Mysql的双主互备架构,主要设计思想是通过Mysql复制技术将两台Mysql服务器互相将对方作为自己的主服务器,自己又同时作为对方的从服务器来进行复制。这样就实现了高可用架构中的数据同步功能,同时,将采用keepalived来实现mysql的自动故障切换。在这个架构中,虽然两台Mysql服务器互为主从,但同一时刻只有一个Mysql服务器可读写,另一个Mysql服务器只能进行读操作,这样可保证数据的一致性。整个架构如下:

如上图,DB1和DB2互为主从,这样就保证了两台Mysql服务器的数据始终是同步的,同时在DB1和DB2上还需要安装高可用软件keepalived。在正常情况下,Web服务器主机仅从DB1进行数据的读写操作,DB2主负责从DB1同步数据。而Keepalived维护一个VIP,此IP用来对外部提供链接服务。同时,keepalived还负责监控DB1和DB2上Mysql数据库的运行状态。当DB1主机出现故障或者Mysql运行异常时,自动将VIP地址和Mysql服务切换到DB2上,此时Web服务器主机继续从DB2进行数据的读写操作。通过Keepalived保持了数据库服务的连续性,整个切换过程非常快,并且对前端Web服务器主机是透明的

5.2 主主互备模式配置

(略)

5.3 配置Keepalived实现Mysql双主高可用

5.3.1 安装keepalived

参考《企业级web集群——keepalived》

安装软件

wget https://www.keepalived.org/software/keepalived-2.0.1.tar.gz?[[email protected] keepalived-2.0.1]# tar -xf keepalived-2.0.1.tar.gz -C /usr/local/src/[[email protected] keepalived-2.0.1]# mkdir -p /data/keepalived[[email protected] keepalived-2.0.1]# yum install openssl-devel gcc gcc-c++ make[[email protected] keepalived-2.0.1]# ./configure --prefix=/data/keepalived/make make install

配置规范启动

[[email protected] etc]# pwd/usr/local/src/keepalived-2.0.1/keepalived/etc[[email protected] etc]# cp -R init /data/keepalived/ [[email protected] etc]# cp -R init /data/keepalived/etc/ [[email protected] etc]# cp -R init.d /data/keepalived/etc/[[email protected] etc]# ll /data/keepalived/etc/总用量 0drwxr-xr-x. 2 root root  86 4月  20 12:03 initdrwxr-xr-x. 2 root root 135 4月  20 12:03 init.ddrwxr-xr-x. 3 root root  44 4月  20 11:00 keepaliveddrwxr-xr-x. 2 root root  24 4月  20 11:00 sysconfig
[[email protected] etc]# cp /data/keepalived/etc/init.d/keepalived /etc/init.d/[[email protected] etc]# cp /data/keepalived/etc/sysconfig/keepalived /etc/sysconfig/[[email protected] etc]# mkdir /etc/keepalived[[email protected] etc]# cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/[[email protected] etc]# cp /data/keepalived/sbin/keepalived /usr/sbin/

启动

[[email protected] etc]# /etc/init.d/keepalived startStarting keepalived (via systemctl):                       [  确定  ][[email protected] etc]# ps -ef |grep keepalivedroot     14858     1  0 12:07 ?        00:00:00 /data/keepalived/sbin/keepalived -Droot     14859 14858  0 12:07 ?        00:00:00 /data/keepalived/sbin/keepalived -Droot     14860 14858  0 12:07 ?        00:00:00 /data/keepalived/sbin/keepalived -Droot     14875  1702  0 12:09 pts/1    00:00:00 grep --color=auto keepalived
5.3.2 keepalived配置

在ser01上:

[[email protected] ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalived?global_defs {    notification_email {     [email protected]     [email protected]     [email protected]    }    notification_email_from [email protected]    smtp_server 192.168.200.1    smtp_connect_timeout 30    router_id HA_MYSQL01}?vrrp_script check_mysqld {    script "/etc/keepalived/check_mysqld.sh"    interval 2}?vrrp_instance HA_1 {    state MASTER    interface eth0    virtual_router_id 51    priority 150    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {       192.168.42.201    }?    track_script {       check_mysqld    }}

在ser02上:

! Configuration File for keepalived?global_defs {    notification_email {     [email protected]     [email protected]     [email protected]    }    notification_email_from [email protected]    smtp_server 192.168.200.1    smtp_connect_timeout 30    router_id HA_MYSQL01}?vrrp_script check_mysqld {    script "/etc/keepalived/check_mysqld.sh"    interval 2}?vrrp_instance HA_1 {    state BACKUP      interface eth0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.42.201    }?    track_script {        check_mysqld    }}

监控脚本:

[[email protected] ~]# cat /etc/keepalived/check_mysqld.sh #!/bin/bashuser=rootpass[email protected]/usr/local/mysql/bin/mysql -u$user -p$pass -e "show status;" > /dev/null 2>&1if [ $? -eq 0 ];   then   MYSQL_STATUS=0   else       MYSQL_STATUS=1fiexit $MYSQL_STATUS[[email protected] ~]# chmod +x /etc/keepalived/check_mysqld.sh

按照以上的配置,虽然能够完成故障的切换,但是在数据库的应用场景中,我们不建议数据库的频繁切换,因此,我们可将其配置为keepalived的VIP不抢占模式。具体配置如下:

在ser01上:

[[email protected] keepalived]# cat keepalived.conf! Configuration File for keepalived?global_defs {    notification_email {     [email protected]     [email protected]     [email protected]    }    notification_email_from [email protected]    smtp_server 192.168.200.1    smtp_connect_timeout 30    router_id HA_MYSQL01}?vrrp_script check_mysqld {    script "/etc/keepalived/check_mysqld.sh"    interval 2}?vrrp_instance HA_1 {    state BACKUP      #在ser01和ser02上均配置为backup    interface eth0    virtual_router_id 51    priority 150    advert_int 1    nopreempt   #不抢占模式,只在优先级高的机器上设置即可,优先级低的机器上不设置。    authentication {        auth_type PASS        auth_pass 1111    }?    virtual_ipaddress {        192.168.42.201    }?    track_script {        check_mysqld    }}

在ser02上:

[[email protected] keepalived]# cat keepalived.conf ! Configuration File for keepalived?global_defs {    notification_email {     [email protected]     [email protected]     [email protected]    }    notification_email_from [email protected]    smtp_server 192.168.200.1    smtp_connect_timeout 30    router_id HA_MYSQL01}?vrrp_script check_mysqld {    script "/etc/keepalived/check_mysqld.sh"    interval 2}?vrrp_instance HA_1 {    state BACKUP      #在ser01和ser02上均配置为backup    interface eth0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.42.201    }?    track_script {        check_mysqld    }}

在优先级比较高的节点上配置成非抢占模式,使得我们故障切换后,保持在原节点上,这种场景在mysql数据库高可用方案中非常实用。

5.4 Mysql配置账号测试

5.4.1 授权账号
mysql> create user ‘keepalived‘@‘%‘ identified by ‘[email protected]‘;mysql> ALTER USER ‘keepalived‘@‘%‘ IDENTIFIED WITH mysql_native_password BY ‘[email protected]‘;mysql> flush privileges;
5.4.2 结果测试

在测试节点上用192.168.42.201,即浮动ip测试。

 mysql -h192.168.42.201 -ukeepalived [email protected]

当我们ser01失败后,ser02能够实现数据的读写;

当ser01恢复后,能够实现数据同步,vip并没有漂移到ser01,而是保持在ser02上;

当ser02故障后,VIP自然漂移到了ser01上。

原文地址:https://www.cnblogs.com/anttech/p/11296127.html

时间: 2024-08-28 10:26:37

keepalived实现mysql双主架构的相关文章

通过KeepAlived搭建MySQL双主模式的高可用集群系统

企业级MySQL集群具备高可用.可扩展.易管理.低成本的特点.下面将介绍企业环境中经常应用的一个解决方案,即MySQL的双主互备架构,主要设计思路是通过MySQL Replication技术将两台MySQL Server互相将对方作为自己的Master,自己又同时作为对方的Slave来进行复制.这样就实现了高可用构架中的数据同步功能,同时,将采用KeepAlived来实现Mysql的自动failover.在这个构架中,虽然两台MySQL Server互为主从,但同一时刻只有一个MySQL Ser

基于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

LVS+Keepalived负载均衡双主架构全攻略

二.LVS+Keepalived负载均衡双主互备架构 IP信息清单:名称 IP LVS-DR-Master 192.168.2.98 LVS-DR-Backup 192.168.2.99 LVS-DR-VIP1 192.168.2.100 LVS-DR-VIP2 192.168.2.105 Realserver01 192.168.2.101 Realserver02 192.168.2.102 Realserver03 192.168.2.103 Realserver04 192.168.2.

MySQL集群(四)之keepalived实现mysql双主高可用

前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三.第四层.第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常, 或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完

keepalived实现mysql双主高可用

一.地址规划 VIP:10.10.0.228 MasterA IP:10.10.0.224 MasterB IP:10.10.0.226 二.mysql双热热备master-master 1.安装mysql(编译或yum安装) 2.配置MasterA,修改配置文件,添加以下内容 # vim /etc/my.cnf log-bin=mysql-bin log=/home/mysqld.log server-id=1 binlog-do-db=data1 auto-increment-increme

配置Keepalived实现mysql双主高可用

本文为南非蚂蚁的书籍<循序渐进linux-第二版>-8.3.6的读笔记 在DB1和DB2上安装Keepalived软件 先安装编译工具 # yum install gcc* gcc-c++ autoconf automake 上传keepalived-1.2.19.tar.gz至/server/tools目录下 # cd /server/tools # tar zxvf keepalived-1.2.19.tar.gz # cd keepalived-1.2.19 # ./configure

MySQL系列详解七:MySQL实现双主架构演示-技术流ken

前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入口,增加高可用.不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题. MySQL双主(主主)架构方案思路是 1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另

mysql双主互备

一.安装mysql 各种方式太多了 二.摘录自:https://linux.cn/thread-14135-1-1.html 1)首先在DB1上my.cnf 中[mysqld] 字段中添加如下内容:server-id = 1 //数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;log-bin=mysql-bin //启用二进制日志: relay-log=mysql-relay-bin  //用来定义relay-log日志文件命名格式repl

MySQL双主(主主)架构方案

在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入口,增加高可用.不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题. 主从同步复制原理 在开始之前,我们先来了解主从同步复制原理. 复制分成三步: 1. master将改变记录到二进制日志(binary