目录

  • 一 基础环境
  • 二 实际部署
    • 2.1 安装MySQL
    • 2.2 初始化MySQL
    • 2.3 master01 my.cf配置
    • 2.4 创建账号
    • 2.5 master02 my.cf配置配置
    • 2.6 创建账号
  • 三 启动主从
    • 3.1 手动同步
    • 3.2 启动Master01的slave功能
    • 3.3 启动Master02的slave功能
  • 四 安装Heartbeat
  • 五 配置Heartbeat
    • 5.1 配置authkeys
    • 5.2 配置Heartbeat
    • 5.3 配置haresources
  • 六 验证Heartbeat
    • 6.1 master1单节点启动验证
    • 6.2 master2启动并验证
  • 七 其他优化
    • 7.1 检测脚本
    • 7.2 定时检测任务

一 基础环境

节点
系统版本
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 [root@master1 ~]# yum list installed | grep mysql	        #查看是否存在其他MySQL组件
2 [root@master1 ~]# yum -y remove mysql* #为避免冲突引,卸载已存在的组件
3 [root@master1 ~]# yum -y install mariadb mariadb-server
4 [root@master1 ~]# systemctl start mariadb.service
 
注意:以上操作在Master02主机上也需要执行。

2.2 初始化MySQL

  1 [root@master1 ~]# mysql_secure_installation		#设置root密码
2 [root@master1 ~]# systemctl restart mariadb.service
 
注意:以上操作在Master02主机上也需要执行。

2.3 master01 my.cf配置

  1 [root@master1 ~]# 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 [root@master1 ~]# 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 [root@master1 ~]# systemctl restart mariadb.service
7 [root@master1 ~]# 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 [root@master2 ~]# 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 [root@master2 ~] 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 [root@master2 ~]# systemctl restart mariadb.service
7 [root@master2 ~]# 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 [root@master1 ~]# 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 [root@Master02 ~]# 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 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/authkeys
2 auth 3
3 3 md5 Yes!
 

5.2 配置Heartbeat

  1 [root@master1 ~]# 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 [root@master1 ~]# ll /usr/local/heartbeat/etc/ha.d/resource.d/	#查看现有资源类型
2 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/haresources
3 master1.yewu.com IPaddr::192.168.88.88/24/eth0 mariadb
4 [root@master1 ~]# scp /usr/local/heartbeat/etc/ha.d/{ha.cf,haresources,authkeys} 192.168.88.101:/usr/local/heartbeat/etc/ha.d/ #将所有配置复制至master2节点
5 [root@master2 ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
6 ucast eth1 192.168.77.100 #置对方机器心跳检测的IP
7 [root@master1 ~]# systemctl stop mariadb.service
8 [root@master1 ~]# systemctl disable mariadb.service
9 [root@master2 ~]# systemctl stop mariadb.service
10 [root@master2 ~]# systemctl disable mariadb.service
 
提示:关闭MySQL启动及自启动,从而使mariadb基于Heartbeat资源形式唤醒;
Heartbeat的haresources调用/etc/init.d下的脚本来启动资源,基于CentOS7系统不存在此脚本,可手动写入一个启动脚本,MariaDB的启动脚本可留言索要,两个脚本都可用。

六 验证Heartbeat

6.1 master1单节点启动验证

  1 [root@master1 ~]# systemctl start heartbeat.service
2 [root@master1 ~]# systemctl enable heartbeat.service
3 [root@master1 ~]# tail -f /var/log/ha-log #验证日志
 
  1 [root@master1 ~]# ifconfig				#查看活的的vip
端口测试:tcping.exe 192.168.88.88 3306

6.2 master2启动并验证

  1 [root@master2 ~]# systemctl start heartbeat.service
2 [root@master1 ~]# tail -f /var/log/ha-log #观察master2节点启动后的master1日志
 
端口测试:tcping.exe 192.168.88.88 3306
  1 [root@master1 ~]# shutdownr			#模拟master1节点宕机
2 [root@master2 ~]# tail -f /var/log/ha-log #观察master2节点的切换log
 
  1 [root@master2 ~]# 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="baojingtongzhi@163.com"
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 [root@master2 ~]# crontab -e
2 */1 * * * * /root/mysql_down.sh >>/root/check_mysql.log

原文转自:https://www.cnblogs.com/itzgr/p/10233932.html
作者:木二

Heartbeat MySQL双主复制的更多相关文章

  1. 003.Heartbeat MySQL双主复制

    一 基础环境 节点 系统版本 MySQL版本 业务IP 心跳IP Master01 CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Master0 ...

  2. 分布式数据存储 - MySQL双主复制

    上篇文章<分布式数据存储 - MySQL主从复制>,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...

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

    MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...

  4. MySQL双主复制

    原文发表于cu:2017-06-12 本文简单介绍MySQL双主复制原理及1个简单是双主复制验证. 一.MySQL双主复制原理 1. 双主复制原理 master-master复制的两台服务器,既是ma ...

  5. mysql双主复制总结

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

  6. linux环境下配置mysql双主复制

    简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...

  7. mysql 双主复制 centos7

    mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 1 ...

  8. 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境

    应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...

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

    环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux ...

随机推荐

  1. Linkerd 金丝雀部署与 A/B 测试

    本指南向您展示如何使用 Linkerd 和 Flagger 来自动化金丝雀部署与 A/B 测试. 前提条件 Flagger 需要 Kubernetes 集群 v1.16 或更新版本和 Linkerd ...

  2. 简单图解OSI七层网络模型

    Open Systems Interconnection(OSI)定义了一个网络框架:其以层为单位实现了各种协议,同时会将控制权逐层传递. 目前OSI主要作为教学工具被使用,其在概念上将计算机网络结构 ...

  3. 多项式求值问题(horner规则)——Python实现

    # 多项式求值(Horner规则) # 输入:A[a0,a1,a2...an],x的值 # 输出:给定的x下多项式的值p   # Horner迭代形式实现 1 # 在此修改初值 2 A = [2, 6 ...

  4. webSocket实现多人聊天功能

    webSocket实现多人在线聊天 主要思路如下: 1.使用vue构建简单的聊天室界面 2.基于nodeJs 的webSocket开启一个socket后台服务,前端使用H5的webSocket来创建一 ...

  5. 【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明

    SpringCloud分布式应用微服务系统架构图: SpringCloud分布式应用微服务系统组件列表: 微服务框架组件:Spring Boot2 + SpringCloud Hoxton.SR8 + ...

  6. JAVAWEB - Servlet原理及其使用>从零开始学JAVA系列

    目录 Servlet原理及其使用 什么是Servlet Servlet的使用 编写一个Servlet,使用继承HttpServlet的方式 配置web.xml 很简单的几个JSP文件 小提示,如果继承 ...

  7. 从零开始学习JAVA(入门基础)

    目录 博主从零开始学习JAVA(入门基础) 1.搭建JAVA开发环境 卸载JDK(未安装的请忽略) 安装JDK 2.编程语言中,何为编译型与解释型 编译型 解释型 3.第一个JAVA应用程序 4.JA ...

  8. [.NET大牛之路 005] .NET 的执行模型

    .NET大牛之路 • 王亮@精致码农 • 2021.07.06 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经发展到 ...

  9. BurpSuite 2020.5安装教程

    Burpsuite2020.5安装教程 Burpsuite2020.5需要在Java11的环境下才可正常运行. 所以首先安装Java11: 安装Java11 Java SE的安装非常简单,直接下一步, ...

  10. 音视频开发之H.264 入门知识

    大家如果有做过音视频相关的项目,那么肯定对 H.264 相关的概念了解的比较通透,这里我为什么还要写这样一篇文章呢?一来是为了对知识的总结,二来是为了给刚入门音视频的同学一个参考. 基础概念 H.26 ...