MySQL-5.7高可用MHA架构搭建部署

一、MHA

1.1.简介:

MHA(Master High Availability)在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. 该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

1.2.MHA优点

1:主从切换非常迅速,通常10-30s

2:最大程度上解决数据一致性的问题

3:不需要修改当前已有的MySQL架构和配置

4:不需要另外多余的服务器

5:没有性能损耗

6:没有存储引擎限制

7:默认有异步复制和半同步复制

1.3MHA故障切换流程:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log)到其他的slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新的master;

(6)使其他的slave连接新的master进行复制;

1.4.MHA组成

(1)Manager工具:

– masterha_check_ssh : 检查MHA的SSH配置。

– masterha_check_repl : 检查MySQL复制。

– masterha_manager : 启动MHA。

– masterha_check_status : 检测当前MHA运行状态。

– masterha_master_monitor : 监测master是否宕机。

– masterha_master_switch : 控制故障转移(自动或手动)。

– masterha_conf_host : 添加或删除配置的server信息。

(2)Node工具(这些工具通常由MHAManager的脚本触发,无需人手操作)。

– save_binary_logs : 保存和复制master的二进制日志。

– apply_diffff_relay_logs : 识别差异的中继日志事件并应用于其它slave。

– fifilter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)。

– purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。

(3)自定义扩展:

-secondary_check_script:通过多条网络路由检测master的可用性;

-master_ip_failover_script:更新application使用的masterip;(需要修改)

-shutdown_script:强制关闭master节点;

-report_script:发送报告;

-init_conf_load_script:加载初始配置参数;

-master_ip_online_change:更新master节点ip地址;(需要修改)

二、MySQL&MHA环境准备及步骤

主机名 ip server_id 角色
mha-master 192.168.200.101 1 mha-node&mysql-master
mha-slave1 192.168.200.102 2 mha-node&mysql-slave
mha-slave2 192.168.200.103 3 mha-node&mysql-slave
mha-manager 192.168.200.104 mha-manager&mha-node
1.配置基础环境
//四台环境一致
cat /etc/redhat-release
ping -c 4 baidu.com

[root@localhost ~]# sestatus
SELinux status: disabled
iptables -nvL

[root@localhost ~]# ulimit -n
65535
[root@localhost ~]# hostname --all-ip
192.168.200.101
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 113M 1.5G 9.6M 217M 1.5G
Swap: 3.9G 0B 3.9G
#关闭防火墙&安全机制
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
2.修改主机名&生成密钥
//host1-host4
hostnamectl set-hostname mha-master && bash
hostnamectl set-hostname mha-slave1 && bash
hostnamectl set-hostname mha-slave2 && bash
hostnamectl set-hostname mha-manager && bash

ssh-keygen -t rsa
ssh-copy-id mha-master
ssh-copy-id mha-slave1
ssh-copy-id mha-slave2
ssh-copy-id mha-manager
3.修改四台主机hosts同步
 [root@mha-manager ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.101 mha-master
192.168.200.102 mha-slave1
192.168.200.103 mha-slave2
192.168.200.104 mha-manager

//ping测试
[root@mha-manager ~]# for i in {master,slave1,slave2,manager}; do ping -c 1 mha-$i; done
4.安装MySQL host1~host3
yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

yum -y install --nogpgcheck mysql-community-server
5.修改配置文件启动 host1~host3
[root@mha-master ~]# cp /etc/my.cnf{,.back}
[root@mha-master ~]# mkdir -pv /data/mysql/logs
mkdir: 已创建目录 "/data"
mkdir: 已创建目录 "/data/mysql"
mkdir: 已创建目录 "/data/mysql/logs"
[root@mha-master ~]# chown -R mysql:mysql /data/mysql/

//这条命令很长,注意到最后 修改server-id=1 主从顺序
[root@mha-master ~]# cat >> /etc/my.cnf << EOF
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysql]
port=3306
bind-address=0.0.0.0
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
character_set_server=utf8
init_connect='SET NAMES utf8'
user = mysql
datadir=/data/mysql/data
socket=/var/lib/mysql/mysql.sock
max_connections = 2000
relay-log=/data/mysql/data/relay-log
log-bin=/data/mysql/data/mysql-bin
max_binlog_size = 500M
binlog_cache_size = 128K
binlog-ignore-db = mysql
expire_logs_days = 7
binlog_format=
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值