keepalive配置mysql自动故障转移

原创 2016年02月29日 02:16:52
  • 2640

本文先配置了一个双master环境,互为主从,然后通过Keepalive配置了一个虚拟IP,客户端通过虚拟IP连接master1,当master1宕机,自动切换到master2。一次只能连接其中一个master进行读写,所以是active-passive模式。

一 Mysql主主复制搭建

 

1.1 实验环境

两台机器事先都已经装好了mysql单实例。

二者的端口号需要保持一致,否则在最后用vip连接的时候,不能使用相同端口号连接。

1.2 实验步骤

 

1.2.1 修改配置文件

修改master1:

在[mysqld]下面添加:

server-id =  1

relay-log=/data/server/mysql_3307/binlog/ZabbixServer-relay-bin

relay-log-index=/data/server/mysql_3307/binlog/ZabbixServer-relay-bin.index

auto-increment-offset = 1

auto-increment-increment = 2

log-slave-updates=true

修改master2:

在[mysqld]下面添加:

server-id =  3

relay-log =/data/server/mysql/binlog/single-relay-bin

relay-log-index=/data/server/mysql/binlog/single-relay-bin.index

auto-increment-offset = 2

auto-increment-increment = 2

log-slave-updates=true

添加auto-increment-offset那两项,是为了避免在MySQL INSERT时主键冲突。

修改完后记得重启mysql

1.2.2 建复制用户

分别在两台mysql上执行

GRANT REPLICATION SLAVE ON *.* TO 'RepUser'@'%'identified by 'beijing';

1.2.3 指向master

两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可。否则,需要先备份主库,在备库进行恢复,从而保持数据一致,然后再指向master。

Master1:

mysql> show master status;

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

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000001 |      302|              |                  |                   |

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

1 row in set (0.00 sec)

Master2:

mysql> show master status;

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

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000001 |      120 |              |                  |                   |

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

1 row in set (0.00 sec)

#Master1指向Master2

  1. CHANGE MASTER TO MASTER_USER='RepUser',MASTER_HOST='192.168.1.21',MASTER_PASSWORD='beijing',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120;

#Master2指向Master1

  1. CHANGE MASTER TO MASTER_USER='RepUser',MASTER_HOST='192.168.1.22',MASTER_PASSWORD='beijing', MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=302;

1.2.4 分别启动slave

start slave ;

确保show slave status

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

测试两边是否同步,略。

二:配置keepalived

 

1 keepalive安装

分别在master1,master2上安装keepalive

  1. yum install -y popt-devel
  2. cd /usr/local/src
  3. wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
  4. tar zxvf keepalived-1.2.2.tar.gz
  5. cd keepalived-1.2.2
  6. ./configure --prefix=/
  7. make
  8. make install

#假如在执行./configure --prefix=/时报错: OpenSSL is not properly installed on your system !!!Can notinclude OpenSSL headers files,则yum install openssl-devel -y

2 分别在master1,master2上新建检查mysql脚本

vi /root/check_mysql.sh

内容如下

  1. MYSQL=/usr/local/mysql/bin/mysql
  2. MYSQL_HOST=localhost
  3. MYSQL_USER=root
  4. MYSQL_PASSWORD=system@123
  5. $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
  6. #$mysqlclient --host=$host --port=$port --user=$user --password=$password  -e "show databases;" > /dev/null 2>&1
  7. if [ $? == 0 ]
  8. then
  9. echo " $host mysql login successfully "
  10. exit 0
  11. else
  12. #echo " $host mysql login faild"
  13. /etc/init.d/keepalived stop
  14. exit 2
  15. fi

chmod +x /root/check_mysql.sh

3 修改配置文件

vi /etc/keepalived/keepalived.conf

master1和master2配置文件内容相同。

内容:

  1. #ConfigurationFile for keepalived
  2. global_defs {
  3. notification_email {                        ######定义接受邮件的邮箱
  4. wangjj@hrloo.com
  5. }
  6. notification_email_from jiankong@staff.tuge.com    ######定义发送邮件的邮箱
  7. smtp_server mail.tuge.com
  8. smtp_connect_timeout 10
  9. }
  10. vrrp_script check_mysql {                   ######定义监控mysql的脚本
  11. script "/root/check_mysql.sh"
  12. interval 2                             ######监控时间间隔
  13. weight 2                               ######负载参数
  14. }
  15. vrrp_instance vrrptest {                 ######定义vrrptest实例
  16. state BACKUP              ######服务器状态
  17. interface eth0                      ######使用的接口
  18. virtual_router_id 51                ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
  19. priority 150                        ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
  20. advert_int 1                        ######服务器之间的存活检查时间
  21. authentication {
  22. auth_type PASS                      ######认证类型
  23. auth_pass ufsoft       ######认证密码,一组lvs 服务器的认证密码必须一致
  24. }
  25. track_script {                              ######执行监控mysql进程的脚本
  26. check_mysql
  27. }
  28. virtual_ipaddress {                         ######虚拟IP地址
  29. 192.168.1.60
  30. }
  31. }

这里state不配置MASTER,且优先级一样,是期望在MASTER1宕机后再恢复时,不主动将MASTER状态抢过来,避免MySQL服务的波动。

由于不存在使用lvs进行负载均衡,不需要配置虚拟服务器virtual server,下同。

vi /etc/sysconfig/iptables

#注意,在两台机器上都要修改。

添加:

-A INPUT -d 192.168.1.60/32 -j ACCEPT

-A INPUT -d 224.0.0.18 -j ACCEPT #添加VRRP通讯支持

注意:第一行中的192.168.1.60需要改成你自己的vip。

service iptables restart

5 启动keepalived

在master1、master2上分别启动:
service keepalived start

分别执行ip addr命令,可以在其中一台机器上看到虚拟IP.如:

[root@slave1 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_faststate UP qlen 1000
    link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.60/32 scope global eth0
    inet6 fe80::a00:27ff:fe04:516/64 scope link tentativedadfailed 
       valid_lft forever preferred_lft forever

说明虚拟vip连在了master1这台机器上。

如果自动只连接到了master2,关闭master2的keepalived,再启动,自动就连接到master1了。

现在都可以ping通虚拟ip了。

6 测试

停止master1服务器keepalived,检查VIP是否切换到master2服务器(用ip addr命令验证即可);

三 测试高可用环境是否配置成功

 

3.1 建允许远程访问的用户

在master1,master2创建允许远程访问的用户:

grant select,update,delete,insert on *.* to 'dandan' identified by 'dandan';

3.2 访问虚拟IP

用一台同网段的机器访问通过vip访问数据库:

mysql -u dandan-pdandan -h 192.168.1.60 --port 3307

停止master1服务器的mysql,VIP切换到了master2服务器。

在master2上查看:

  1. mysql> showprocesslist;
  2. +----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
  3. | Id | User        | Host               | db   | Command | Time | State                                                                      | Info             |
  4. +----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
  5. |  3 | root        | localhost          | dba | Query   |    0 | init                                                                       | show processlist |
  6. | 14 | systemuser |                    | NULL |Connect |  247 | Reconnecting after afailed master event read                               | NULL             |
  7. | 15 | systemuser |                    | NULL |Connect |  207 | Slave has read all relaylog; waiting for the slave I/O thread to update it | NULL             |
  8. | 90 |dandan      | 192.168.1.60:39995 |dba  | Sleep   |    8|                                                                            | NULL             |
  9. +----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+

看到了dandan的连接信息。

keepalive配置mysql自动故障转移的更多相关文章

  1. 3.16 使用Zookeeper对HDFS HA配置自动故障转移及测试

    一.说明 从上一节可看出,虽然搭建好了HA架构,但是只能手动进行active与standby的切换: 接下来看一下用zookeeper进行自动故障转移: # 在启动HA之后,两个NameNode都是s ...

  2. 基于MGR+Atlas的读写分离尝试,以及MGR+Keepalived+Atlas自动故障转移+读写分离设想

    目的是尝试altas的读写分离,现有一套搭建好做测试的MGR(单主),于是就腿搓绳,在MGR基础上搭建altas. 复制环境准备 读写分离理论上讲,跟复制模式没有关系,atlas负责的是重定向读写,至 ...

  3. Redis集群以及自动故障转移测试

    在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...

  4. 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法

    非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...

  5. SQL非域环境下带自动故障转移数据库镜像的实现方法(包括镜像服务器)

    使用数据库镜像来提高数据库的高可用性,在镜像服务器创建镜像数据库的快照以卸载报表查询对生产数据库的负载.TechNet有讲座对此技术进行介绍,但看到大家在讲座的讨论区中遇到了很多问题,下面我把在非域环 ...

  6. InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  7. (2)MongoDB副本集自动故障转移原理

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...

  8. (2)MongoDB副本集自动故障转移全流程原理

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...

  9. MongoDB 主从复制及 自动故障转移

    1.MongoDB 主从复制 MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制还允许您从 ...

随机推荐

  1. Oracle编码

    三.解决数据库乱码原理特辑内容 3.1 前言 在解决数据库乱码问题中,涉及到三个方面的字符集:1.oracel server端的字符集:2.oracle client端的字符集:3.dmp文件的字符集 ...

  2. 数字特征值-python

    #Digital eigenvalue.py number = eval(input()) count = 0 Ob = 0 Ox = 0 while number > 0: Ob = numb ...

  3. 【EMV L2】Cardholder Verification Rule(CVR) Format

    Cardholder Verification Rule(CVR)由两个字节组成: 高字节为Cardholder Verification Method (CVM) Codes,表示执行Cardhol ...

  4. Spark SQL / Catalyst 内部原理 与 RBO

    原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/spark/rbo/ 本文所述内容均基于 2018年9月10日 Spark ...

  5. JVM垃圾收集器-ParNew收集器

    今天我给大家讲讲ParNew收集器. ParNew收集器 ParNew收集器收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参 ...

  6. 报文 HTTP HTTPS

    报文是网络中交换与传输的数据单元,即站点一次性要发送的数据块.报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变. 报文也是网络传输的单位,传输过程中会不断的封装成分组.包.帧来传输, ...

  7. React Native 开发环境搭建

    1.安装 Python 2,不知道是否已支持 Python 3 2.安装 node,npm... 修改 npm 镜像,不建议使用 cnpm,cnpm 安装模块的路径与 npm 有差别 npm conf ...

  8. Tenka 1 Computer Contest C-Align

    C - Align Time limit : 2sec / Memory limit : 1024MB Score : 400 points Problem Statement You are giv ...

  9. python,pil库的小应用

    <pre>#euraxluo 5.15 #obj_1#跳一跳的外挂 from PIL import Image import subprocess import time import r ...

  10. ansible常用模块入门

    常用模块有以下几个 command copy shell crond yum service setup 1.command模块 ansible george -m command -a " ...