博客
关于我
MHA高可用架构与Atlas读写分离
阅读量:796 次
发布时间:2023-02-09

本文共 5024 字,大约阅读时间需要 16 分钟。

MHA高可用性架构搭建及GTID复制技术解析

1.1 MHA简介

MHA(Master High Availability)由日本DeNA公司youshimaton开发,是MySQL高可用性领域的优秀解决方案。其主要目标是在10~30秒内完成数据库故障切换,同时保证数据一致性。MHA支持一主多从架构,通过Manager节点管理多套复制集群,无需额外服务器,性能优异且无修改复制环境需求。

1.2 环境搭建

1.2.1 系统环境

  • db01(master):CentOS 6.9,IP:10.0.0.51
  • db02(slave1)
  • db03(slave1,MHA Manager、Atlas节点)

1.2.2 MySQL软件

所有节点安装MySQL 5.6.36,支持GTID复制。

1.3 基于GTID的主从复制配置

1.3.1 先决条件

  • 主库和从库开启binlog
  • server-id各不相同
  • 创建复制用户
  • 主从复制用户:repl@'10.0.0.%',密码:123

1.3.2 配置主从复制

  • db01(master):my.cnf配置

    [mysqld]server-id=51log-bin=mysql-binbinlog_format=ROWgtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1relay_log_purge=0socket=/tmp/mysql.sock
  • db02、db03(slave):my.cnf配置

    [mysqld]server-id=52server-id=53binlog_format=ROWgtid-mode=onenforce-gtid-consistency=truelog-bin=mysql-binsocket=/tmp/mysql.sock

创建复制用户:

GRANT REPLICATION SLAVE ON *.* TO repl@'10.0.0.%' IDENTIFIED BY '123';

从库启动复制:

CHANGE MASTER TO MASTER_HOST='10.0.0.51', MASTER_USER='repl', MASTER_PASSWORD='123', MASTER_AUTO_POSITION=1;START SLAVE;

1.4 MHA部署

1.4.1 环境准备

安装依赖包:

yum install perl-DBD-MySQL -y

下载并安装MHA软件包:

wget https://github.com/mha4mysql/mha4mysql-manager/releases/download/0.56/mha4mysql-manager-0.56-0.el6.noarch.rpmrpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

安装MHA Node:

rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

创建MHA管理用户:

grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';

创建命令软链接:

ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlogln -s /application/mysql/bin/mysql /usr/bin/mysql

1.4.2 部署Manager节点

部署在db03上:

# 安装Manager依赖yum install perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y# 安装Manager软件rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

创建必要目录:

mkdir -p /etc/mhamkdir -p /var/log/mha/app1

编辑MHA Manager配置文件:

vim /etc/mha/app1.cnf

配置文件示例:

[server default]manager_log=/var/log/mha/app1/managermanager_workdir=/var/log/mha/app1master_binlog_dir=/data/mysqluser=mhapassword=mhaping_interval=2repl_password=123repl_user=replssh_user=root[server1]hostname=10.0.0.51port=3306[server2]hostname=10.0.0.52port=3306[server3]hostname=10.0.0.53port=3306

配置SSH信任关系:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsafor i in 1 2 3; do ssh-copy-id -i ~/.ssh/id_dsa.pub root@10.0.0.$i; done

启动MHA Manager:

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

1.5 虚拟IP漂移配置

1.5.1 配置VIP漂移

MHA支持通过脚本实现VIP漂移,需在app1.cnf中配置:

master_ip_failover_script=/usr/local/bin/master_ip_failover

脚本内容:

my $vip = '10.0.0.55/24';my $key = '0';my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";chmod +x /usr/local/bin/master_ip_failover

手动绑定VIP:

ifconfig eth0:0 10.0.0.55/24

1.5.2 测试VIP漂移

停止主库:

/etc/init.d/mysqld stop

验证从库状态:

mysql -umha -pmha -h127.0.0.1 -P33060

检查VIP状态:

ip a s eth0

1.6 Binlog Server配置

1.6.1 配置Binlog Server

准备db03作为Binlog Server:

mkdir -p /data/mysql/binlogchown -R mysql:mysql /data/mysql/binlog

启动Binlog Server:

cd /data/mysql/binlogmysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &

1.6.2 测试Binlog备份

查看Binlog目录:

ll /data/mysql/binlog

刷新Binlog:

mysql -uroot -p123 -e "flush logs;"

验证备份文件:

ll /data/mysql/binlog

1.7 MySQL中间件Atlas

1.7.1 Atlas简介

Atlas是Qihoo 360公司开发的MySQL中间件,支持读写分离、从库负载均衡、自动分表等功能,适合复杂的高并发场景。

1.7.2 Atlas配置

安装Atlas:

wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpmrpm -ivh Atlas-2.2.1.el6.x86_64.rpm

配置Atlas:

vim /usr/local/mysql-proxy/conf/test.cnf

配置文件示例:

[mysql-proxy]admin-username=useradmin-password=pwdproxy-backend-addresses=10.0.0.55:3306proxy-read-only-backend-addresses=10.0.0.52:3306,10.0.0.53:3306client-ips=192.168.1.2,192.168.1.0/24daemon=truekeepalive=trueevent-threads=8log-level=messagelog-path=/usr/local/mysql-proxy/logsql-log=onproxy-address=0.0.0.0:33060admin-address=0.0.0.0:2345charset=utf8

启动Atlas:

/usr/local/mysql-proxy/bin/mysql-proxyd test start

1.7.3 Atlas管理操作

登录Atlas管理界面:

mysql -umha -pmha -h127.0.0.1 -P2345

查看后端状态:

SELECT * FROM backends;

平滑摘除数据库:

REMOVE BACKEND 2;

保存配置并添加新节点:

SAVE CONFIG;ADD SLAVE 10.0.0.52:3306;

1.8 Atlas-Sharding版本

1.8.1 版本介绍

Atlas-Sharding实现水平切分,将大数据表分布到多个数据库组,支持Range和Hash两种切分方式,适合应对大数据查询压力。

1.8.2 架构示例

配置文件:

[shardrule-0]table=test.sharding_testtype=rangeshard-key=idgroups=0:0-999,1:1000-1999[group-0]proxy-backend-addresses=192.168.0.15:3306proxy-read-only-backend-addresses=192.168.0.16:3306[group-1]proxy-backend-addresses=192.168.0.17:3306proxy-read-only-backend-addresses=192.168.0.18:3306

1.8.3 使用限制

  • 支持的语句:SELECT、INSERT、DELETE、UPDATE
  • 不支持DDL和跨库事务
  • Hash切分暂不支持数据迁移

1.9 参考文献

[1] https://www.cnblogs.com/cenalulu/p/4309009.html

[2] https://yq.aliyun.com/articles/57731
[3] https://www.jianshu.com/p/b68e429d09c7
[4] https://www.cnblogs.com/yyhh/archive/2015/12/29/5084844.html
[5] https://blog.csdn.net/jhq0113/article/details/44302703
[6] https://blog.csdn.net/jhq0113/article/details/44239823
[7] https://www.guokr.com/blog/475765/
[8] https://blog.csdn.net/bluishglc/article/details/6161475/

你可能感兴趣的文章
Mac M1 安装 TensorFlow 使用Python3.8
查看>>
Mac M1 芯片不兼容node-sass
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
Mac mini7.1 2014年末 安装单windows 10系统
查看>>
Mac mini7.1 2014年末系统损坏开机跳出闪动带问候文件夹
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
mac node版本管理
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
Mac OS X 上 Python 的框架和非框架构建之间的差异
查看>>
Mac OS X下Sublime Text (V2.0.1)破解
查看>>
Mac OS X汇编语言常识
查看>>
Mac os 如何安装SVN
查看>>
Mac OS下错误The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方法
查看>>
Mac os如何安装绿盾客户端
查看>>
mac xmind 激活
查看>>
MAC 上的 Selenium,消息:“chromedriver“可执行文件可能具有错误的权限
查看>>
Mac 下 Python+Selenium 自动上传西瓜视频
查看>>
mac 下 react Native ios环境搭建
查看>>
Mac 下使用sourcetree操作git教程
查看>>
mac 下如何建立vue-cli项目
查看>>