`
wangking717
  • 浏览: 263139 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

高可用的Mysql双机热备(Mysql_HA)

 
阅读更多
 
mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器。
  
下面要讲的,除了“主主互备”以外,还加了keepalived。进行容灾的控制。
 
通常说的「双机热备」是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

使用KeepAlived实现高可用的MYSQL_HA集群环境中,MySQL为(Master/Master)主/主同步复制关系,保证MYSQL服务器数据的一致性,用KeepAlived提供虚拟IP,通过KeepAlived来进行故障监控,实现Mysql故障时自动切换。

布署环境拓朴如下:

Mysql VIP :192.168.187.61
Master1:192.168.187.129
Master2:192.168.187.132

OS 环境:Cent OS 6.5

Mysql版本:Mysql5.5.31

 



 

一:设置配置文件:

Mysql是通过日志进行同步复制的,先建立日志文件

 

touch /var/log/mysql/mysql-bin.log   //建立日志文件,请设置权限,如777
chown mysql.mysql /var/log/mysql/mysql-bin.log  //将日志文件的所属用户和用户组更改成mysql

 在两台要进行备份的mysql服务器上的my.cnf文件进行配置如下(将下面的配置分别加入相关服务器的my.cnf,放在配置文件的[mysqld_safe]上面):

Master1(192.168.187.129)

Master(192.168.187.132)

#主标服务标识号,必需唯一

server-id = 1

#因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G

log-bin=/var/log/mysql/mysql-bin.log

#要同步的库名

binlog-do-db = test

#不记录日志的库,即不需要同步的库

binlog-ignore-db=mysql

#用从属服务器上的日志功能

log-slave-updates

#经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。

sync_binlog=1

# auto_increment,控制自增列AUTO_INCREMENT的行为

用于MASTER-MASTER之间的复制,防止出现重复值,

auto_increment_increment=n有多少台服务器,n就设置为多少,

auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID

auto_increment_offset=1

auto_increment_increment=2

#进行镜像处理的数据库

replicate-do-db = test

#不进行镜像处理的数据库

replicate-ignore-db= mysql

#主标服务标识号,必需唯一

server-id = 2

#因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G

log-bin=/var/log/mysql/mysql-bin.log

#要同步的库名

binlog-do-db = test

#不记录日志的库,即不需要同步的库

binlog-ignore-db=mysql

#用从属服务器上的日志功能

log-slave-updates

#经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。

sync_binlog=1

# auto_increment,控制自增列AUTO_INCREMENT的行为

用于MASTER-MASTER之间的复制,防止出现重复值,

auto_increment_increment=n有多少台服务器,n就设置为多少,

auto_increment_offset=2设置步长,这里设置为2,这样Master的auto_increment字段产生的数值是:2, 4, 6, 8, …等奇数ID

auto_increment_offset=2

auto_increment_increment=2

#进行镜像处理的数据库

replicate-do-db = test

#不进行镜像处理的数据库

replicate-ignore-db= mysql

 

 

二:查看配置情况

按上面的配置将两台服务器配置好以后,重新启动mysql服务,用showmaster status查看一下两台服务器的Master配置情况,可以看出已经配置成功,如下:

NO1:Master1(192.168.187.129)的情况

 

# mysql –u root –p 1234

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001|      107 | test         | mysql            |

+------------------+----------+--------------+------------------+

 

 

NO2:Master2(192.168.187.132)的情况

 

# mysql –u root –p 1234

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000002|      125 | test         | mysql            |

+------------------+----------+--------------+------------------+

 

 

三:建立权限帐户,实现同步

 

Master1(192.168.187.129)

Master2(192.168.187.132)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

mysql> FLUSH PRIVILEGES;

#在MYSQL中设置对端Master2的复制账号

 

mysql> change master to master_host='192.168.187.132', master_user='slave', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=125;

mysql> start slave;

#启动从服务器复制功能

 

mysql> show slave status;

#检测slave状态,如果Slave_IO_Running: Yes    Slave_SQL_Running: Yes    Seconds_Behind_Master: 0就证明已经同步了

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

mysql> FLUSH PRIVILEGES;

#在MYSQL中设置对端Master1的复制账号

 

mysql> change master to master_host='192.168.187.129', master_user='slave', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=107;

mysql> start slave;

#启动从服务器复制功能

 

mysql> show slave status;

#检测slave状态,如果Slave_IO_Running: Yes    Slave_SQL_Running: Yes    Seconds_Behind_Master: 0就证明已经同步了

 

 

四:测试同步效果

在Master1上创建表:

mysql -uroot -p1234;

use test;

CREATE TABLE `card` (
   `card_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
   `card_number` varchar(100) DEFAULT NULL COMMENT '卡号',
   PRIMARY KEY (`card_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

insert  into `card`(`card_number`) values ('haha1');
insert  into `card`(`card_number`) values ('haha2');

 执行完毕后,master2下如果对应的card表已经生成,并且也有相应的数据,证明同步成功,相应在master2上执行任何操作,master1也会相应修改。

 

五:配置keepalived实现热备

 

A) 安装keepalived

yum -y install keepalived

B) 修改配置

[root@masterr ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     test@qq.com
   }
   notification_email_from admin@test.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id MYSQL_HA  #标识,双主相同
}

vrrp_instance VI_1 {
    state BACKUP     #两台都设置BACKUP
    interface eth0
    virtual_router_id 51   #主备相同
    priority 100    #优先级,backup设置90
    advert_int 1    #组播信息发送间隔,两个节点设置必须一样
    nopreempt       #不主动抢占资源,只在master这台优先级高的设置,backup不设置
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.187.61  #指定VIP,两个节点设置必须一样
    }
}

virtual_server 192.168.187.61 3306 {
    delay_loop 2     #每个2秒检查一次real_server状态
    #lb_algo rr      #LVS算法,用不到,我们就关闭了
    #lb_kind NAT     #LVS模式,如果不关闭,备用服务器不能通过VIP连接本机MySQL
    persistence_timeout 50 #会话保持时间
    protocol TCP     #使用的协议是TCP还是UDP

    real_server 192.168.187.132 3306 {  //这里填写各自的真实内网IP地址
        weight 3         #权重
        notify_down /usr/local/keepalived/mysql.sh    #当mysq服down时,执行此脚本,杀死keepalived实现切换
        TCP_CHECK {
            connect_timeout 3    #连接超时
            nb_get_retry 3       #重试次数
            delay_before_retry 3 #重试间隔时间
        }
    }
}

 

C) 配置keepalived脚本

[root@masterr ~] vim /usr/local/keepalived/mysql.sh
#!/bin/bash
pkill keepalived
[root@masterr ~]# chmod +x /usr/local/keepalived/mysql.sh
[root@masterr ~]# /etc/init.d/keepalived start

 

六:测试高可用性

1、通过Mysql客户端通过VIP连接,看是否连接成功。

2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。

3、可通过查看/var/log/messges日志,看出主备切换过程

4、master服务器故障恢复后,是否主动抢占资源,成为活动服务器。

 

  • 大小: 26.4 KB
分享到:
评论

相关推荐

    mysql双机热备实现方案【可测试】

    MySQL双机热备是一种高可用性(High Availability, HA)解决方案,旨在确保关键业务服务的连续性。它通过在两台服务器之间建立实时数据同步来实现,当主服务器发生故障时,备用服务器能够无缝接管服务,避免服务中断。...

    mysql双机热备.ppt

    MySQL双机热备是一种高可用性的解决方案,用于确保数据库服务在一台服务器出现故障时能无缝切换到另一台服务器,避免单点故障导致的业务中断。该方案通常结合Linux的心跳(HA)软件来监测服务器状态,并实现IP的自动...

    mysql 双机热备

    MySQL双机热备是一种高可用性解决方案,旨在确保数据库服务的连续性和可靠性。它通过Linux HA(High Availability)软件Heartbeat实现在多台服务器之间的自动切换,一旦主服务器出现故障,能够迅速将服务转移到备用...

    Rose双机热备软件安装的指南_共享磁盘阵列方式.doc

    总的来说,Rose双机热备软件结合共享存储阵列的方式,为需要高可用性的企业提供了一套经济、高效的解决方案,保障了业务连续性和数据安全,降低了系统故障的风险,是企业关键业务运营的理想选择。

    rossmirrorha 双机热备

    - **RossMirrorHA 简介**:RossMirrorHA 是一种用于实现数据库双机热备的软件解决方案,它能够提供对 MySQL 数据库的热备份配置支持。 - **适用版本**:根据文档描述,本配置文档适用于 RossMirrorHA 4.0 版本和 ...

    HeartBeat+PHP+MySQL双机热备自动切换配置

    HeartBeat+PHP+MySQL双机热备自动切换配置是一种高可用性的解决方案,用于确保在服务器出现故障时,服务能够不间断地运行,减少业务中断的风险。该配置主要涉及三个核心组件:HeartBeat、PHP 和 MySQL,以及辅助工具...

    linux双机热备 运维趋势 第8期

    **双机热备**是一种常见的高可用性解决方案,它通过配置两台或多台服务器来确保服务的不间断运行。其中一台服务器作为主服务器提供服务,另一台或几台作为备用服务器处于待命状态。一旦主服务器发生故障,备用服务器...

    MySQL双机互备热备自动切换.pdf

    本文档将详细介绍一种实现MySQL双机互备热备自动切换的方案,以提高数据库系统的可用性和实时性,有效缩短故障恢复时间。 ### MySQL双机互备热备自动切换方案 该方案主要基于MySQL的主从复制结构,通过配置主库和...

    Rose双机热备软件安装指南-共享磁盘阵列方式.pdf

    "Rose双机热备软件安装指南-共享磁盘阵列方式.pdf" 本文档介绍了Rose双机热备软件安装指南-共享磁盘...9. 工作原理:RoseHA双机热备解决方案的工作原理是基于共享存储设备的双机热备方式,实现高可用性系统解决方案。

    MySQL数据库双机热备服务器配置.docx

    MySQL数据库双机热备服务器配置是一项关键任务,用于确保数据的高可用性和连续性。这种配置通常涉及到两台服务器,它们共享同一份数据库,并通过心跳机制监控彼此的状态,以实现故障切换。以下是对整个配置过程的...

    阿里云服务器手动实现mysql双机热备的两种方式

    双机热备是一种高可用性方案,两台服务器互为备份,当主服务器故障时,备份服务器自动接管,保持服务不间断。 在阿里云环境中,由于不支持Keepalived虚拟IP,因此无法直接使用Keepalived实现MySQL双机热备。不过,...

    HA for Windows2003 双机热备方案.doc

    蓝科泰达推出的双机容错打包解决方案结合了硬件和软件的高可用性,旨在提供可靠且经济实惠的双机热备选择。 **需求分析** 1. **异常终端检测**:系统需要能够自动检测并识别各种异常,包括硬件、网络和应用程序故障...

    服务器双机热备解决方案[借鉴].pdf

    1. 双机热备的概念:双机热备(High Availability, HA)是一种确保企业关键应用服务连续性、高可用性的技术方案。当主服务器出现故障时,备用服务器能够迅速接管服务,以最小的停机时间,保持业务的连续运行。方案中...

    RHEL5(X64)双机热备 ——安装数据库

    在IT行业中,尤其是在企业级服务器部署中,双机热备是一种常见的高可用性解决方案,它能够确保关键服务在一台服务器故障时自动切换到另一台,从而保持业务连续性。本篇我们将聚焦于如何在RHEL5(Red Hat Enterprise ...

    Windows server通过自身故障转移群集技术实现高可用详细步骤(mysql举例)

    在构建高可用性环境时,Windows Server 2016 的故障转移群集技术是一个强大的解决方案,尤其适用于数据库服务如 MySQL 的双机热备。以下将详细解释如何通过该技术实现高可用性。 首先,双机热备是确保关键服务在一...

    Rose双机热备软件安装指南共享磁盘阵列方式.docx

    Rose双机热备解决方案是基于共享存储的双机热备系统,旨在提供高可用性和数据安全的解决方案。该解决方案基于存储共享的双机热备,双机系统的两台服务器都与共享存储设备连接,用户的操作系统、应用软件和双机软件...

    unbuntu 10.04 LTS上配置简单双机热备方案

    在高可用性要求的应用场景中,双机热备方案是保障服务连续性的常用技术手段之一。通过本文档,您将了解到如何在 Ubuntu 10.04 LTS 系统上构建一个基于 Tomcat 6.0 和 MySQL 5.1 的简单双机热备方案,以实现 IP 失效...

    Rose双机热备软件安装指南-共享磁盘阵列方式之欧阳文创编.docx

    总的来说,Rose的共享存储双机热备方案提供了一种经济高效的方法,解决了企业在资源有限的情况下对高可用性和数据安全的需求。其优点包括对服务器硬件配置要求不高,快速构建双机系统,以及高效稳定的软件系统。Rose...

    linux双机热备

    双机热备是一种高可用性(HA)方案,通常用于确保关键服务或应用程序在一台服务器(主服务器)发生故障时,另一台服务器(备用服务器)能够无缝接管,从而减少系统停机时间和数据丢失的风险。这种配置尤其适用于数据库...

Global site tag (gtag.js) - Google Analytics