配置MySQL实现主主互备模式并利用keepalived实现双主高可用

每台主机均需安装keepalived,mysql,安装过程这里不多介绍,不懂的可自行百度。

本次配置的环境为



DB1:192.168.31.190                DB2:192.168.31.184        MySQL VIP:192.168.31.189



1、修改MySQL配置文件

首先修改DB1的/etc/my.cnf配置文件,在"[mysqld]"段中添加一下内容:

              server-id = 1
              log-bin=mysql-bin
              relay-log = mysql-relay-bin
              replicate-wild-ignore-table=mysql.%
              replicate-wild-ignore-table=test.%
              replicate-wild-ignore-table=information_schema.%

然后修改DB2主机/etc/my.cnf配置文件,在"[mysqld]"段添加一下内容:

               server-id = 2
               log-bin=mysql-bin
               relay-log = mysql-relay-bin
               replicate-wild-ignore-table=mysql.%
               replicate-wild-ignore-table=test.%
               replicate-wild-ignore-table=information_schema.%

2、手动同步数据库

DB1和DB2数据需要保持同步,在DB1上执行操作

mysql> FLUSH TABLES WITH READ LOCK;
Query OK,0 rows affected (0.00 sec)
#然后不要退出终端,重开一个终端,执行一下命令
# cd /var/lib/
# tar zcvf mysql.tar.gz mysql
# scp mysql.tar.gz DB2:/var/lib/

将数据传输到DB2后解压覆盖然后依次重启DB1和DB2上的MySQL

3、创建复制用户并授权

在DB1MySQL执行如下操作:

mysql> grant replication slave on *.* to ‘repl_user‘@‘192.168.31.184‘ identified by ‘repl_passwd‘;
mysql> show master status;

然后在DB2的MySQL将DB1设为自己的主服务器,操作如下:

mysql> change master to     -> master_host=‘192.168.31.190‘,
    -> master_user=‘repl_user‘,
    -> master_password=‘repl_passwd‘,
    -> master_log_file=‘mysql-bin.000001‘,
    -> master_log_pos=106;
#接着启动slave服务
mysql> start slave;#查看slave运行状态
mysql> show slave status\G;

到这里,从DB1到DB2的MySQL主从复制已经完成,接下来配置DB2到DB1的mysql主从复制,过程和上面完全一样,在DB2的MySQL创建复制用户:

mysql> grant replication slave on *.* to ‘repl_user‘@‘192.168.31.190‘ identified by ‘repl_passwd‘;
mysql> show master status;

然后在DB1的MySQL将DB2设为自己的主服务器:

mysql> change master to     -> master_host=‘192.168.31.184‘,
    -> master_user=‘repl_user‘,
    -> master_password=‘repl_passwd‘,
    -> master_log_file=‘mysql-bin.000001‘,
    -> master_log_pos=436;

mysql> start slave;
mysql> show slave status\G;

接着启动slave服务。至此,MySQL双主模式的主从复制配置完毕。

4、配置keepalived实现MySQL双主高可用

首先在DB1上配置/etc/keepalived/keepalived.conf,内容如下

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 LVS_DEVEL
}
vrrp_script check_mysqld {
script  "/etc/keepalived/mysqlcheck/check_slave.pl 127.0.0.1"#检测mysql复制状态脚本
interval 2
weight 21
}
vrrp_instance HA_1 {
    state BACKUP   #在DB1和DB2均为BACKUP
    interface eth1
    virtual_router_id 80
    priority 100
    advert_int 2
    nopreempt   #不抢占模式,只在优先级高的机器设置
    authentication {
         auth_type PASS
         auth_pass qweasdzxc
   track_script {
   check_mysqld
   }
    virtual_ipaddress {
        192.168.31.189/24 dev eth1  #mysql对外服务IP,即VIP
    }
    }

其中,/etc/keepalived/mysqlcheck/check_slave.pl文件的内容如下:

#!/usr/bin/perl -w
use DBI;
use DBD::mysql;
#CONFIG VARIABLES
$SBM = 120;
$db = "ixdba";
$host = $ARGV[0];
$port = 3306;
$user = "root";
$pw = "915389546";
#SQL query
$query = "show slave status";
$dbh = DBI->connect("DBI:mysql:$db:$host:$port",$user,$pw,{ RaiseError => 0,PrintError => 0 });
if (!defined($dbh)) {
   exit 1;
}
$sqlQuery = $dbh->prepare($query);
$sqlQuery->execute;
$Slave_IO_Running = "";
$Slave_SQL_Running = "";
$Seconds_Behind_Master = "";
while (my $ref = $sqlQuery->fetchrow_hashref()) {
     $Slave_IO_Running = $ref->{‘Slave_IO_Running‘};
     $Slave_SQL_Running = $ref->{‘Slave_SQL_Running‘};
     $Seconds_Behind_Master = $ref->{‘Second_Behind_Master‘};
}
$sqlQuery->finish;
$dbh->disconnect();
if ( $Slave_IO_Running eq "NO" || $Slave_SQL_Running eq "NO" ) {
   exit 1;
} else {
   if ( $Seconds_Behind__Master > $SBM) {
     exit 1;
   }  else {
          exit 0;
   }
}

接着将keepalived和check_slave.pl复制到DB2服务器上对应的位置,然后将keepalived文件中的priority值修改为90,还需去掉nopreempt选项,然后分别在DB1和DB2上启动keepalived服务。

5、测试主从同步功能

首先从第三台服务器远程登录VIP为“192.168.31.188“的数据库,操作过程如下:

[[email protected]~]#mysql -uroot -p -h 192.168.31.188Enter password:

MySQL [(none)]> show variables like "%hostname%";
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| hostname      | DB1            |
+---------------+----------------+
1 row in set (0.01 sec)
MySQL [(none)]> show variables like "%server_id%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.01 sec)#可以看到成功通过VIP登录,并且登录了DB1服务器。#接下来测试复制数据功能
MySQL [(none)]> create database repldb;
Query OK, 1 row affected (0.12 sec)
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| repldb             |
| test               |
+--------------------+
5 rows in set (0.01 sec)
MySQL [(none)]> use repldb;
Database changed
MySQL [repldb]> create table repl_table(id int,email varchar(80),password varchar(40) not null);
Query OK, 0 rows affected (0.03 sec)
MySQL [repldb]> show tables;
+------------------+
| Tables_in_repldb |
+------------------+
| repl_table       |
+------------------+
1 row in set (0.00 sec)
MySQL [repldb]> insert into repl_table (id,email,password) values(1,"[email protected]","123456");
Query OK, 1 row affected (0.00 sec)

然后登录DB2主机的MySQL查看,可以发现数据实现了同步。

6、故障转移测试

首先远程通过VIP地址登录MySQL系统,不要退出这个连接,然后在DB1服务器的MySQL命令行执行如下操作:

mysql>slave stop;

然后回到远程连接的MySQL数据库执行如下操作:

MySQL [(none)]> show variables like "%hostname%";
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| hostname      | DB2            |
+---------------+----------------+
1 row in set (0.01 sec)
MySQL [(none)]> show variables like "%server_id%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.01 sec)

可以发现在DB1发现故障之后MySQL服务从DB1切换到了DB2服务器,至此,所有配置完成。

时间: 2024-08-07 20:18:14

配置MySQL实现主主互备模式并利用keepalived实现双主高可用的相关文章

mysql主主互备模式配置

本文为南非蚂蚁的书籍<循序渐进linux-第二版>-8.3.5的读笔记 mysql双主互备架构图 mysql主主互备模式配置 环境: DB1:主服务器  centos6.6  mysql5.1.73 IP:10.24.24.111 DB2:从服务器  centos6.6  mysql5.1.73 IP:10.24.24.112 mysql VIP:10.24.24.112 ---------------------------------------- centos6.x安装mysql # y

Keepalived+MySQL主主互备模式实现高可用 &nbsp; &nbsp; &nbsp;

MySQL的高可用方案很多,这是一个配置简单而且实用的高可用解决方案. 实验架构图: 修改DB1配置文件增加以下几项: [mysqld] log-bin=mysql-bin relay-log=mysql-relay-bin server-id=1 replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.% 修改DB2

Mysql + keepalived 实现双主热备读写分离【转】

Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12,Keepalived-1.2.7环境简介:1.Master-A 192.168.1.168 (Mysql+Keepalived)2.Master-B 192.168.1.169 (Mysql+Keepalived)3.写入VIP 192.168.100 (168主,169从)4.读取VIP 192.1

gitlab搭建之互备模式

gitlab搭建之互备模式 gitlab搭建之互备模式 前言:gitlab目前默认的部署方式是本地单机部署,为了提高gitlab环境的可靠性和稳定性,必须构建一套互备搭建方案:借助gitolilte的mirror功能可以实现此功能: 搭建环境: 2台服务器 -- RedHat 5.4 内核版本 -- linux 2.6.18 x86_64 概要: 1. 搭建两套gitlab标准环境 2. 构建互备模式 1. 搭建两套gitlab标准环境 参考之前博文:http://www.cnblogs.com

Keepalived单双主模型配置

Keepalived单双主模型配置 Keepalived单主配置实例: 一.安装keepalived包 [[email protected] ~]# hostnamectl set-hostname keepalived-1 [[email protected] ~]# yum install keepalived.x86_64 主配置文件:/etc/keepalived/keepalived.conf主程序文件:/usr/sbin/keepalived 二.进行配置主配置文件: 主keepal

Keepalived+Haproxy双主高可用负载均衡web和mysql综合实验

日期及版本:2014.5.4v1.0 架构图 实验目的: 1.Haproxy+Keepalived双主双机高可用模型,keepalived为Haproxy主从提供高可用保证haproxy-master若挂掉haproxy-backup能无缝接管,haproxy为后端Web提供负载均衡,缓解并发压力,实现WEB站点负载均衡+高可用性: 2. Haproxy反代web做动静分离: 3. Haproxy反代mysql 算法leastconn和roundrobin的不同效果: 系统环境: OS:cent

【 Linux 】Keepalived实现双主模型高可用集群

要求:    1. 两台web服务器安装wordpress,数据库通过nfs共享    2. 使用keepalived实现双主模型 环境:    主机:        系统:CentOS6.7 x64        1. node1: 192.168.2.11  node2: 192.168.2.12 vip: 192.168.2.200        service iptables stop        selinux: disabled 一.两台主机分别配置lamp架构,并使用nfs实现

keepalived基于双主模型实现nginx的高可用(2)

Keepalived: keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务. 当keepalived基于主备模

Oracle HA双机主备基于共享存储模式并利用keepalived管理实现高可用

HA概述 HA(High Available)即由两台计算机组成并对外提供一组相同的服务,也叫做一主一备模式.正常情况下由主服务器提供服务,备服务器处于待机备用,备机可以随时接替主服务器的工作.也就是当主服务器宕机或所提供的服务不可用时,备用服务器会主动激活并且替换主服务器继续提供服务,这时主服务器上的服务资源包括网络(IP).存储.服务(Web/数据库)就会转移到备机接管,从而提供不间断的服务.基于此,便可以将服务器的宕机时间减少到最低,对业务实现不中断或短暂中断. 由一组计算机(多台)组成一