keepalive配置mysql自动故障转移
keepalive配置mysql自动故障转移
- 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
- 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
- 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
- yum install -y popt-devel
- cd /usr/local/src
- wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
- tar zxvf keepalived-1.2.2.tar.gz
- cd keepalived-1.2.2
- ./configure --prefix=/
- make
- 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
内容如下
- MYSQL=/usr/local/mysql/bin/mysql
- MYSQL_HOST=localhost
- MYSQL_USER=root
- MYSQL_PASSWORD=system@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配置文件内容相同。
内容:
- #ConfigurationFile for keepalived
- global_defs {
- notification_email { ######定义接受邮件的邮箱
- wangjj@hrloo.com
- }
- notification_email_from jiankong@staff.tuge.com ######定义发送邮件的邮箱
- smtp_server mail.tuge.com
- smtp_connect_timeout 10
- }
- vrrp_script check_mysql { ######定义监控mysql的脚本
- script "/root/check_mysql.sh"
- interval 2 ######监控时间间隔
- weight 2 ######负载参数
- }
- vrrp_instance vrrptest { ######定义vrrptest实例
- state BACKUP ######服务器状态
- interface eth0 ######使用的接口
- virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
- priority 150 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
- advert_int 1 ######服务器之间的存活检查时间
- authentication {
- auth_type PASS ######认证类型
- auth_pass ufsoft ######认证密码,一组lvs 服务器的认证密码必须一致
- }
- track_script { ######执行监控mysql进程的脚本
- check_mysql
- }
- virtual_ipaddress { ######虚拟IP地址
- 192.168.1.60
- }
- }
这里state不配置MASTER,且优先级一样,是期望在MASTER1宕机后再恢复时,不主动将MASTER状态抢过来,避免MySQL服务的波动。
由于不存在使用lvs进行负载均衡,不需要配置虚拟服务器virtual server,下同。
4 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上查看:
- mysql> showprocesslist;
- +----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
- | Id | User | Host | db | Command | Time | State | Info |
- +----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
- | 3 | root | localhost | dba | Query | 0 | init | show processlist |
- | 14 | systemuser | | NULL |Connect | 247 | Reconnecting after afailed master event read | NULL |
- | 15 | systemuser | | NULL |Connect | 207 | Slave has read all relaylog; waiting for the slave I/O thread to update it | NULL |
- | 90 |dandan | 192.168.1.60:39995 |dba | Sleep | 8| | NULL |
- +----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
看到了dandan的连接信息。
keepalive配置mysql自动故障转移的更多相关文章
- 3.16 使用Zookeeper对HDFS HA配置自动故障转移及测试
一.说明 从上一节可看出,虽然搭建好了HA架构,但是只能手动进行active与standby的切换: 接下来看一下用zookeeper进行自动故障转移: # 在启动HA之后,两个NameNode都是s ...
- 基于MGR+Atlas的读写分离尝试,以及MGR+Keepalived+Atlas自动故障转移+读写分离设想
目的是尝试altas的读写分离,现有一套搭建好做测试的MGR(单主),于是就腿搓绳,在MGR基础上搭建altas. 复制环境准备 读写分离理论上讲,跟复制模式没有关系,atlas负责的是重定向读写,至 ...
- Redis集群以及自动故障转移测试
在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...
- 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法
非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...
- SQL非域环境下带自动故障转移数据库镜像的实现方法(包括镜像服务器)
使用数据库镜像来提高数据库的高可用性,在镜像服务器创建镜像数据库的快照以卸载报表查询对生产数据库的负载.TechNet有讲座对此技术进行介绍,但看到大家在讲座的讨论区中遇到了很多问题,下面我把在非域环 ...
- InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移
系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...
- (2)MongoDB副本集自动故障转移原理
前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...
- (2)MongoDB副本集自动故障转移全流程原理
前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...
- MongoDB 主从复制及 自动故障转移
1.MongoDB 主从复制 MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制还允许您从 ...
随机推荐
- jmeter链接数据库
1.下载jar包“mysql-connector-java-8.0.12”包放入lib文件中 2.启动jemeter,添加线程组 3.在线程组下添加 JDBC Connection Configura ...
- javascript方法篇-String
一.String 实例方法(或非静态方法) const str = "Hello World"; toLowerCase();将英文大写字母转换成小些字母.比如: const ne ...
- UCloud数据盘扩容步骤
1. 扩容目的 由于服务器数据盘存储空间不足导致系统无法正常的.为了彻底解决此问题,我们需要对服务器数据盘进行扩容. 2. 扩容步骤 2.1. 关机(如下图) 2.2. 创建快照(如下图) 2 ...
- 利用Python中的for循环和while循环,打印各种方向的九九乘法表。
哈喽大家好,今天,可乐来给大家分享一下Python中用for循环和while循环打印九九乘法表的操作.由于本人也是刚刚接触Python不长时间,代码也是自己编写的,所以有什么不足之处还请大家多多指教. ...
- 个人 git-hub使用方法
注册码云 安装git hub git init here 创建本地仓库(repository),将会在文件夹下创建一个 .git 文件夹,.git 文件夹里存储了所有的版本信息.标记等 ...
- javascript之网页跑马灯
---恢复内容开始--- <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- linux systemd详解
CentOS 7 使用systemd替换了SysV.Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务. s ...
- CentOS7虚拟机克隆,且成功互ping
第一步:克隆 https://blog.csdn.net/mijichui2153/article/details/80918285 打开VMware,确认已经完成安装配置的CentOS7虚拟机在关闭 ...
- npm -D -S 的区别
npm -D -S 的区别 我们在使用npm install 安装模块或插件的时候,有两种命令把他们写入到 package.json 文件里面去,比如: --save-dev --save 在 p ...
- Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架
一.软件测试 1.软件测试的概念及分类 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终 ...