本文先配置了一个双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

[sql] view plain copy
  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

[sql] view plain copy
  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

[plain] view plain copy
  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

内容如下

[plain] view plain copy

MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=cc.123  $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
#$mysqlclient --host=$host --port=$port --user=$user --password=$password  -e "show databases;" > /dev/null 2>&1
if [ $? == 0 ]
then  echo " $host mysql login successfully "  exit 0
else  #echo " $host mysql login faild"  /etc/init.d/keepalived stop  exit 2
fi

  

chmod +x /root/check_mysql.sh

3 修改配置文件

vi /etc/keepalived/keepalived.conf

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

内容:

global_defs {router_id HA_MySQL
}vrrp_script check_mysql {                   ######定义监控mysql的脚本  script "/root/check_mysql.sh"  interval 2                             ######监控时间间隔  weight 2                               ######负载参数  }
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.60.251}
}track_script {                              ######执行监控mysql进程的脚本  check_mysql
}  virtual_server 192.168.60.251 3306 {delay_loop 2lb_algo wrrlb_kind DRpersistence_timeout 60protocol TCPreal_server 192.168.60.168 3306 {weight 3notify_down /root/shutdown.shTCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 3306} }
}

  

这里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上查看:

[plain] view plain copy
  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的连接信息。

转载于:https://www.cnblogs.com/zping/p/7928805.html

keepalive配置mysql自动故障转移相关推荐

  1. MySQL 自动故障转移工具--mysqlfailover

    mysqlfailover 是mysql utilities工具包中包含的一个重要的高可用命令,用于对主从复制架构进行健康检测以及实现故障自动转移.它会定期按指定的时间间隔探测各节点的健康状态,一旦在 ...

  2. 故障转移集群无法连接到节点_Redis集群以及自动故障转移测试

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

  3. (2)MongoDB副本集自动故障转移原理(含客户端)

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

  4. postgresql 重启记录_PostgreSQL 高可用:PostgreSQL复制和自动故障转移

    原文:PostgreSQL Replication and Automatic Failover Tutorial[1] 作者:Abbas Butt 翻译整理:alitrack 1.什么是 Postg ...

  5. sql azure 语法_Azure SQL Server自动故障转移组

    sql azure 语法 In this article, we will review how to set up auto-failover groups in Azure SQL Server ...

  6. HG_REPMGR autofailvoer自动故障转移

    目录 文档用途 详细信息 文档用途 HG_REPMGR自动故障转移配置参考 详细信息 配置集群自动故障转移(failover),需要为集群中的每个节点开启 repmgrd 守护进程.当主节点出现故障后 ...

  7. [译]PG复制和自动故障转移--2

    PostgreSQL 的预写日志 (WAL) 示例 1) SELECT datname, oid FROM pg_database WHERE datname = 'postgres'; datnam ...

  8. 配置Windows Server2008故障转移集群

    Abner Kou原创 配置Windows Server2008故障转移集群 一. 问题描述 建立双节点的Windows Server 2008 故障转移集群,为Hyper-v的高可用和SQLServ ...

  9. mysql被跑死_MySQL 8.0.23中复制架构从节点自动故障转移

    接触MGR有一段时间了,MySQL 8.0.23的到来,基于MySQL Group Replicaion(MGR)的高可用架构又提供了新的架构思路.灾备机房的slave,如何更好地支持主机房的MGR? ...

最新文章

  1. 深度学习中的优化算法串讲
  2. Binary Gap(二进制空白)
  3. JAVA中复制数组的方法
  4. Hibernate HQL的update方法详解
  5. Acwing第 4 场周赛【未完结】
  6. 一行代码太长的解决方法
  7. 01_数据库连接池,数据源,ResultSetMetaData,jdbc优化
  8. mysql如何快速插入一千万条数据_如何快速安全的插入千万条数据?
  9. nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
  10. 电脑pro,拒绝等待!七彩虹全新设计师电脑ProMaster H1为创意加速
  11. linux-type命令查看类型
  12. 利用makefile构建c++项目的思路介绍
  13. linux如何制作服务,linux把jar做成服务
  14. RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用
  15. Spring.net 容器注入是替换(后处理器appConfigPropertyHolder)
  16. python训练手势分类器_从Scikit Learn中保存的训练分类器进行预测
  17. 熟练的mescroll
  18. android 钛备份,钛备份使用教程
  19. Markdown 全文检索
  20. 用浏览器控制台获取一些网页资源

热门文章

  1. vue 加载数据 影响seu_VUE常见面试题
  2. 【HANA系列】SAP HANA XS创建XSJOB后台执行
  3. Linux定时器接口
  4. 针对模拟滚动条插件(jQuery.slimscroll.js)的修改
  5. Dalvik 堆内存管理与回收
  6. KD树(k-d tree)
  7. 诗与远方:无题(十三)
  8. 工作两年多的一个菜鸟感想
  9. Notepad++在线安装使用JSON插件
  10. (江西财经大学第二届程序设计竞赛同步赛)E-是不是复读机