Heartbeat MySQL双主复制

目录


一 基础环境


节点

系统版本

MySQL版本

业务IP

心跳IP

Master01

CentOS 7.5

MySQL 5.6

192.168.88.100

192.168.77.100

Master02

CentOS 7.5

MySQL 5.6

192.168.88.101

192.168.77.101

VIP

192.168.88.88

关闭防火墙及SELinux;

配置NTP时钟同步。

二 实际部署

2.1 安装MySQL

  1 [[email protected] ~]# yum list installed | grep mysql	        #查看是否存在其他MySQL组件
  2 [[email protected] ~]# yum -y remove mysql*			#为避免冲突引,卸载已存在的组件
  3 [[email protected] ~]# yum -y install mariadb mariadb-server
  4 [[email protected] ~]# systemctl start mariadb.service

注意:以上操作在Master02主机上也需要执行。

2.2 初始化MySQL

  1 [[email protected] ~]# mysql_secure_installation		#设置root密码
  2 [[email protected] ~]# systemctl restart mariadb.service

注意:以上操作在Master02主机上也需要执行。

2.3 master01 my.cf配置

  1 [[email protected] ~]# vi /etc/my.cnf
  2 [mysqld]
  3 ……
  4 server-id=1				#设置主服务器master的id
  5 log-bin=mysql-bin			#配置二进制变更日志命名格式
  6 replicate-wild-ignore-table=mysql.%
  7 replicate-wild-ignore-table=test.%
  8 replicate-wild-ignore-table=information_schema.%

注意:

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

方法一:

不同步哪些数据库:

  1 binlog-ignore-db = mysql
  2 binlog-ignore-db = test
  3 binlog-ignore-db = information_schema

只同步哪些数据库,除此之外,其他不同步

  1 binlog-do-db = mysqltest

方法二:

建议采用以下方式配置过滤:

  1 replicate-wild-ignore-table=mysql.%	        #从库配置不同步表
  2 replicate-wild-do-table=test.%		#从库配置需要同步的表

提示:不要在主库使用binlog-ignore-db和binlog-do-db,也不要在从库使用replicate-wild-ignore和replicate-wild-do-table。

2.4 创建账号

  1 [[email protected] ~]# mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  grant replication slave on *.* to ‘repl_user‘@‘192.168.88.101‘ identified by ‘x12345678‘;
  4 MariaDB [(none)]>  grant all privileges on *.* to ‘root‘@‘192.168.88.%‘  identified by ‘x120952576‘ with grant option;
  5 MariaDB [(none)]>  flush privileges;
  6 [[email protected] ~]# systemctl restart mariadb.service
  7 [[email protected] ~]# mysql -uroot -p
  8 Enter password:
  9 MariaDB [(none)]>  show master status;

master01:

file:mysql-bin.000001

position:245

2.5 master02 my.cf配置配置

  1 [[email protected] ~]# vi /etc/my.cnf
  2 [mysqld]
  3 server-id=2				#设置主服务器master的id
  4 log-bin=mysql-bin			#配置二进制变更日志命名格式
  5 replicate-wild-ignore-table=mysql.%
  6 replicate-wild-ignore-table=test.%
  7 replicate-wild-ignore-table=information_schema.%
  8 read_only=1

2.6 创建账号

  1 [[email protected] ~] mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  grant replication slave on *.* to ‘repl_user‘@‘192.168.88.100‘ identified by ‘x12345678‘;
  4 MariaDB [(none)]>  grant all privileges on *.* to ‘root‘@‘192.168.88.%‘  identified by ‘x120952576‘ with grant option;
  5 MariaDB [(none)]>  flush privileges;
  6 [[email protected] ~]# systemctl restart mariadb.service
  7 [[email protected] ~]# mysql -uroot -p
  8 Enter password:
  9 MariaDB [(none)]>  show master status;

master02:

file:mysql-bin.000001

position:245

三 启动主从

3.1 手动同步

如果Master01和Master02已经存在数据,则在开启主备复制之前,需要将Master01和Master02手动同步一次(/var/lib/mysql整个目录打包tar.gz),具体方法略。

注意:本实验都是重新安装的MySQL,可直接启动同步。

3.2 启动Master01的slave功能

  1 [[email protected] ~]# mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  change master to master_host=‘192.168.88.101‘,
  4 master_user=‘repl_user‘,
  5 master_password=‘x12345678‘,
  6 master_log_file=‘mysql-bin.000001‘,
  7 master_port=3306,
  8 master_log_pos=245;
  9 MariaDB [(none)]>  start slave;
 10 MariaDB [(none)]>  show slave status\G			#查看slave状态

3.3 启动Master02的slave功能

  1 [[email protected] ~]# mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  change master to master_host=‘192.168.88.100‘,
  4 master_user=‘repl_user‘,
  5 master_password=‘x12345678‘,
  6 master_log_file=‘mysql-bin.000001‘,
  7 master_log_pos=245;
  8 MariaDB [(none)]>  start slave;
  9 MariaDB [(none)]>  show slave status\G			#查看slave状态

提示:

slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。

四 安装Heartbeat

略,见《002.Heartbeat部署及httpd高可用》中的Heartbeat安装部分。

提示:相关安装及主机名等准备步骤参考《002.Heartbeat部署及httpd高可用》即可。

五 配置Heartbeat

5.1 配置authkeys

  1 [[email protected] ~]# vi /usr/local/heartbeat/etc/ha.d/authkeys
  2 auth 3
  3 3 md5 Yes!

5.2 配置Heartbeat

  1 [[email protected] ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
  2 logfile /var/log/ha-log			#记录Heartbeat其他相关日志信息
  3 logfacility     local0			#设置heartbeat的日志,这里用的是系统日志
  4 keepalive 2				        #设定心跳(监测)时间间隔为2秒
  5 deadtime 15				        #宣告死亡时间
  6 warntime 10				        #心跳延时时间
  7 initdead 60				        #初始化时间
  8 udpport 694				        #用于通信的UDP端口
  9 bcast   eth1				#接受广播心跳的网卡接口
 10 ucast eth1 192.168.77.101		        #置对方机器心跳检测的IP
 11 auto_failback off			        #关闭自动切回恢复正常的主节点
 12 node master1.yewu.com			#集群节点的名称,必须匹配uname -n的结果。
 13 node master2.yewu.com
 14 ping 192.168.88.1
 15 respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail

注意: 主机和备机之间进行心跳检测,当备机无法检测到主机的心跳,则开启vip;

如果主机和备机都没有挂掉,由于通信问题导致相互无法连接,则会出现裂脑,即主备都对外声明了vip,导致数据出现故障 ,因此建议主机和备机间应该采用专门只是用于检测心跳的网卡(网络),其他数据(业务)网络应该独立于此心跳网络。

5.3 配置haresources

  1 [[email protected] ~]# ll /usr/local/heartbeat/etc/ha.d/resource.d/	#查看现有资源类型
  2 [[email protected] ~]# vi /usr/local/heartbeat/etc/ha.d/haresources
  3 master1.yewu.com IPaddr::192.168.88.88/24/eth0 mariadb
  4 [[email protected] ~]# scp /usr/local/heartbeat/etc/ha.d/{ha.cf,haresources,authkeys} 192.168.88.101:/usr/local/heartbeat/etc/ha.d/		                                                #将所有配置复制至master2节点
  5 [[email protected] ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
  6 ucast eth1 192.168.77.100		                                #置对方机器心跳检测的IP
  7 [[email protected] ~]# systemctl stop mariadb.service
  8 [[email protected] ~]# systemctl disable mariadb.service
  9 [[email protected] ~]# systemctl stop mariadb.service
 10 [[email protected] ~]# systemctl disable mariadb.service

提示:关闭MySQL启动及自启动,从而使mariadb基于Heartbeat资源形式唤醒;

Heartbeat的haresources调用/etc/init.d下的脚本来启动资源,基于CentOS7系统不存在此脚本,可手动写入一个启动脚本,MariaDB的启动脚本可留言索要,两个脚本都可用。

六 验证Heartbeat

6.1 master1单节点启动验证

  1 [[email protected] ~]# systemctl start heartbeat.service
  2 [[email protected] ~]# systemctl enable heartbeat.service
  3 [[email protected] ~]# tail -f /var/log/ha-log		#验证日志

  1 [[email protected] ~]# ifconfig				#查看活的的vip

端口测试:tcping.exe 192.168.88.88 3306

6.2 master2启动并验证

  1 [[email protected] ~]# systemctl start heartbeat.service
  2 [[email protected] ~]# tail -f /var/log/ha-log	#观察master2节点启动后的master1日志

端口测试:tcping.exe 192.168.88.88 3306

  1 [[email protected] ~]# shutdownr			#模拟master1节点宕机
  2 [[email protected] ~]# tail -f /var/log/ha-log	#观察master2节点的切换log

  1 [[email protected] ~]# ifconfig			#master2节点会自动接管vip

端口测试:tcping.exe 192.168.88.88 3306

提示:由于配置了auto_failback off,在master1节点恢复后资源依旧会保留至master2节点;

对于集群上节点之间的切换实质上是资源的接管,通常包括VIP分配回收,磁盘卸载挂载,以及服务的启停等;

对于备用节点,其相应的共享磁盘状态为不可读写,服务处于停止状态;

Heartbeat现有项目已拆分,建议使用pacemaker+corosync,可参考RH436相关文档。

七 其他优化

7.1 检测脚本

heartbeat只检测心跳,即可检测设备是否宕机,然后宕机后进行切换,而不会检测上层应用,如MySQL。可手动写入一个脚本检测服务状态,如MySQL。若mysql服务宕掉,则kill掉heartbeat进程从而实现故障转移(类似keepalived),参考脚本如下:

脚本一:# cat mysql_down.sh

  1 #!/bin/sh
  2 #****************************************************************#
  3 # ScriptName: mysql_down.sh
  4 # Author: xhy
  5 # Create Date: 2018-12-20 16:40
  6 # Modify Author: xhy
  7 # Modify Date: 2018-12-20 16:40
  8 # Version:
  9 #***************************************************************#
 10 Date=$(date +%F" "%T)
 11 IP=$(ifconfig eth0 |grep "inet addr" |cut -d":" -f2 |awk ‘{print $1}‘)
 12 Mail="[email protected]"
 13 pkill keepalived
 14 echo "$Date $IP The mysql service failure,kill keepalived." |mail -s "Master-Backup MySQL Monitor" $Mail

脚本二:# cat mysql_down.sh

  1 #!/bin/sh
  2 #****************************************************************#
  3 # ScriptName: mysql_down.sh
  4 # Author: xhy
  5 # Create Date: 2018-12-20 16:40
  6 # Modify Author: xhy
  7 # Modify Date: 2018-12-20 16:40
  8 # Version:
  9 #***************************************************************#
 10 MYSQL=/usr/bin/mysql
 11 MYSQL_HOST=localhost
 12 MYSQL_USER=root
 13 MYSQL_PASSWORD=x120952576
 14 date=`date +%y%m%d-%H:%M:`
 15 echo $date
 16 $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
 17 #$mysqlclient --host=$host --port=$port--user=$user --password=$password  -e"show databases;" > /dev/null 2>&1
 18 if [ $? == 0 ]
 19 then
 20    echo " $host mysql login successfully "
 21    exit 0
 22 else
 23    echo " $host mysql login faild"
 24    /etc/init.d/heartbeat stop
 25    exit 2
 26 fi

7.2 定时检测任务

  1 [[email protected] ~]# crontab -e
  2 */1 * * * * /root/mysql_down.sh >>/root/check_mysql.log

原文地址:https://www.cnblogs.com/drizzle-xu/p/10276313.html

时间: 2024-10-12 17:00:09

Heartbeat MySQL双主复制的相关文章

heartbeat+mysql双主复制实现高可用

实验环境 一:搭建主主复制环境 1.1实验环境 两台机器事先都已经装好了MySQL单实例. IP: 10.192.203.201 10.192.203.202 端口都是3307. 二者的端口号需要保持一致,否则在最后用vip连接的时候,不能使用相同端口号连接. 1.2实验步骤 1.2.1修改配置文件 修改master1: 在[mysqld]下面添加: server-id = 1 relay-log=/data/server/mysql_3307/binlog/ZabbixServer-relay

keepalived+mysql双主复制高可用方案

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.

MySQL双主复制

原文发表于cu:2017-06-12 本文简单介绍MySQL双主复制原理及1个简单是双主复制验证. MySQL双主复制原理 双主复制原理 master-master复制的两台服务器,既是master,又是另一台服务器的slave,本质上互为主从. 验证环境 操作系统 CentOS-6.7-x86_64 MySQL版本 MySQL版本是5.6.36: https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz 拓扑图 采用VMwar

mysql双主复制模型

实验环境:centos6.6 mariaDB 10.0.10二进制安装 这里不再说明安装过程直接开始配置主从节点 节点1:172.16.30.1 [[email protected] ~]# vim /etc/mysql/my.cnf thread_concurrency = 4 datadir = /mydata/data  #数据库存放目录 innodb_file_per_table = 1 ##innodb引擎单表单文件 log-bin=/mydata/binlogs/mysql-bin 

mysql双主复制总结

双主复制: 1).在两台服务器上各自建立一个具有复制权限的用户: 2).修改配置文件: # 主服务器A上 [mysqld] server-id = 10 log-bin = mysql-bin relay-log = relay-mysql auto-increment-offset = 1 # 起始值 auto-increment-increment = 2 # 步长 # 主服务器B上 [mysqld] server-id = 20 log-bin = mysql-bin relay-log

mysql 双主复制 centos7

mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 10.1.1.116 2. 修改配置文件 2.1 在 10.1.1.115 找到 /etc/my.cnf , 在[mysqld]下添加下列属性 server-id=10 log-bin=mysql-bin binlog-do-db=retail #需要同步的数据库名,如果有多个数据库,可重复此参数,每

【20181204】 MySQL 双主复制是如何避免回环复制的

问题原因 想要了解这个问题的原因在于有一次面试的时候,面试官问我一个问题,就是MySQL的双主复制的时候是如何避免回环复制这个问题的,说老实话在基于GTID复制的时候我还是比较了解的,因为GTID复制是MySQL本身是不会执行已经执行过的GTID事务,即使MySQL本身并不会执行已经执行过的GTID事务,但是还是会形成一个回环复制.那么MySQL到底是如何解决回环复制的呢? 猜想 在我们搭建主从的时候我们可以清楚的知道,要想成功的搭建主从,那么主从的server_id必须不能一模一样的,所以猜想

keeplived + mysql双主复制部署 --原创

环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux 7.4  mysql 5.7.1 keepalived VIP 192.168.100.12     配置本地yum仓库 vim /etc/yum.repo.d/public-yum-ol7.repo [yum_repo] name=yum_repo baseurl=file:///share/re

mysql学习-mysql8.0配置双主复制+keepalived实现高可用架构

一般小型公司数据库,使用主从复制即可保证数据库的高可用,但是一旦主数据库故障,切换到从库需要一定的时间,这样就导致了停机时间过长,不能及时恢复业务.使用双主(master)配合keepalived这种mysql高可用架构也是基于主从复制的原理而搭建的.这是一种简单.便捷的解决方案,在高可用集群环境中,keepalived使用vip,利用keepalived自带的服务监控功能和自定义脚本来实现mysql故障时自动切换. 1.mysql双主复制介绍 双主复制,就是相互做主从复制,每个master既是