单点登陆_规避单点故障,MySQL 8.0 MGR软负载怎么选?
作者介绍
毛思平,12年IT工作经验,7年数据库管理维护经验,现就职于中国农业银行软开中心,从事数据库应用研究。
一、背景简介
近期笔者所在部门计划批量上线一批基于MySQL 8.0社区版的系统,数据库部署架构为MySQL MGR一主两从并由MySQL Router组件实现读写分离,为了规避MySQL Router单点故障,提高系统稳定性架构设计过程中增加了软负载和以及Keepalived,并将软负载及Keepalived部署在管理节点,管理节点主备部署达到高可用目的,整体架构如下图。
另外目前市场上负载软件比较多但大部分面向web应用,笔者梳理发现Haproxy和Nginx在数据库方面有一定应用案例,尤其Haproxy在MySQL主从复制方面应用较广。那么这两款软负载是否可以应用在MySQL8.0 MGR上,谁的性能更好呢,该如何选择呢?带着疑问笔者做了一系列性能比较。
二、环境配置
硬件配置颖
测试硬件环境均采用虚拟机,具体配置如下表:
序号 |
节点 |
CPU |
内存 |
磁盘 |
IP |
1 |
管理节点1 |
2 |
4G |
32G |
10.*.*.216 |
2 |
管理节点2 |
2 |
4G |
32G |
10.*.*.217 |
3 |
数据库节点1 |
2 |
8G |
128G |
10.*.*.210 |
3 |
数据库节点2 |
2 |
8G |
128G |
10.*.*.211 |
5 |
数据库节点3 |
2 |
8G |
128G |
10.*.*.212 |
6 |
虚拟IP |
- |
- |
- |
10.*.*.218 |
软件配置颖
参与测试软件版本配置如下表:
序号 |
节点 |
版本 |
1 |
操作系统 |
CentOS 8.0 |
2 |
数据库 |
MYSQL 8.0.18 |
3 |
keepalived |
2.0.10 |
3 |
haproxy |
1.8.15 |
5 |
ngnix |
1.18.0 |
三、软件配置
关于MySQL MGR配置网上有很多相关教程此处不赘述,以下是关于软负载及高可用插件关键配置。
Keepalived配置颖
完成keepalived软件安装后,只需要在/etc/keepalived目录下修改keepalived.conf文件,修改完成后执行systemctl start keepalived即可,需要修改地方如下:
vrrp_instance VI_1 {
state MASTER #不用修改,本方案采用争抢模式管理节点主备一致
interface ens192 #在用网卡名称
virtual_router_id 51 #虚拟路由ID取值0-255
priority 100 #优先级 本方案采用争抢模式管理节点主备一致
advert_int 1 #探活频率 单位秒
authentication { #认证机制及密码
auth_type PASS
auth_pass 11111111 }
virtual_ipaddress { #虚拟地址配置
10.*.*.218 }
track_script { #自定义探活方法
chk_alived
}
vrrp_script chk_haproxy {
script "/etc/keepalived/checkalived.sh" #探活脚本位置
interval 3 #重新探活时间间隔
weight -5 #失败后权重设置
}
探活脚本Checkalived.sh配置如下以Nginx为例:
#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
systemctl stop keepalived #当发现Nginx不存在时停止该节点Keepalived由备节点接管
fi
以上配置主备管理节点一致即可。
Haproxy配置颖
完成Haproxy安装后,只需在/etc/haproxy修改haproxy.cfg文件后执行systemctl start haproxy即可。配置文件主要修改以下内容:
listen mysqlrw
bind :3366 #虚拟IP读写访问端口
mode tcp #访问协议
balance roundrobin #负载均衡算法
#数据库ip 地址及访问断开,300为软负载最大连接数
server mysql1 10.*.*.210:6446 check port 6446 maxconn 300
server mysql2 10.*.*.211:6446 check port 6446 maxconn 300
server mysql3 10.*.*.212:6446 check port 6446 maxconn 300
listen mysqlro
bind :3367 #虚拟IP读访问端口
mode tcp #访问协议
balance roundrobin #负载均衡算法
server mysql1 10.*.*.210:6447 check port 6447 maxconn 300
server mysql2 10.*.*.211:6447 check port 6447 maxconn 300
server mysql3 10.*.*.212:6447 check port 6447 maxconn 300
listen stats #图形展示界面地址及端口
bind 10.230.137.218:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /dbs
stats realm XingCloud\ Haproxy
stats auth admin:admin
stats hide-version
stats admin if TRUE
Nginx配置颖
完成Haproxy安装后,只需在/etc/nginx/conf下修改nginx.conf,在stream方法下添加以下内容即可,添加完成后执行systemctl start nginx即可启动服务,添加如下:
stream {-
upstream db{
server 10.*.*.210:6446;
server 10.*.*.211:6446;
server 10.*.*.212:6446;
}
server{
listen 3366;
proxy_pass db;
proxy_connect_timeout 2s;
access_log /usr/local/nginx/logs/access3366_log mysql; --读写日志输出路径
}
upstream dbro{
server 10.*.*.210:6447;
server 10.*.*.211:6447;
server 10.*.*.212:6447;
}
server{
listen 3367;
proxy_pass dbro;
proxy_connect_timeout 2s;
access_log /usr/local/nginx/logs/access3367_log mysql; --读日志输出路径
}
}
四、测试方法
测试功能点 |
测试方法 |
判断依据 |
负载软件负载分发是否均衡 |
批量执行数据库查询操作,检测负载软件负载分发情况。 |
各个数据库节点均匀获得分发会话。 |
负载软件是否能识别MySQL Router单点故障 |
通过Kill掉任意数据库节点单个MySQL Router进程,检测负载软件负载分发情况。 |
无MySQL Router故障节点,各数据库匀获得相同分发会话。 |
负载软件负载分发性能比较 |
批量执行数据库查询操作,统计同等会话量,负载软件耗时。 |
同会话数量会话分发耗时短的负载能力更强。 |
负载软件高可用验证 |
通过Kill掉管理节点负载进程模拟负载软件故障,通过虚拟IP登陆数据库验证备管理节点是否正常。 |
虚拟IP登陆数据库正常,表明备节点软负载正常分发会话。 |
五、测试结果
负载软件负载分发是否均衡颖
通过编写批量执行SQL的形式,访问数据库,并统计两款负载软件各节点分发情况。Haproxy通过软件自带图行界面统计,Nginx由于采用的是免费版通过后台日志统计负载分发情况。
批量SQL核心算法如下:
echo -e
while true
do
mysql -u$USER -p$PASSWORD -h$ROUTE_HOST -P$RW_PORT --protocol=TCP -e"${SQL_TEXT1}"
let COUNT+=1
if [ $COUNT -ge $SESS_NUM ]
then
break
fi
done
Haproxy发起64次查询后各个节点会话分发情况,如下图。
Nginx发起64次查询后各个节点会话分发情况,如下图。
测试结果如下:
负载软件是否能识别MySQL Router单点故障颖
选择任意数据库节点,Kill -9 杀死MySQL Router进程,同样的方法测试验证负载软件会话分发情况,测试结果如下。
负载软件负载分发性能比较颖
通过批量执行空查询SQL:select @@hostname,统计相同并发下不同负载软件分发耗时测算负载软件负载分发效率,测试结果如下:
负载软件高可用验证颖
当在主节点杀死负载程序后,虚拟IP切换到了备节点,通过虚拟IP能正常登陆数据库,以Nginx为例。
1)在主管理节点杀死Nginx进程:
2)在主节点查看虚拟IP是否存在:
3)在备节点查看虚拟IP是否切换过来,判断Keepalived是否主备切换。
4)在以虚拟IP登陆数据库验证备节点负载分发是否正常。
由上测试可以看出该架构满足软负载高可用需求,即管理节点软负载故障,备节点通过keepalived探测异常后接管升级成主。同样方法测试Haproxy也满足,在此不赘述。
六、结论
功能方面,Haproxy和Nginx两款软负载软件均能实现多并发读写均衡分发,在MySQL Router出现故障时Haproxy和Nginx均能识别故障并转移连接到正常运行节点。Haproxy和Nginx均能在keepalived下实现高可用。
性能方面,在并发能力发面,同等软硬件条件Haproxy与Nginx相差不大,相同并发量两个负载软件分发耗时相近。
易用性方面,Haproxy提供图形界面能直观查看各个服务端口负载分配情况,连接时长,失败连接次数,并能直观显示故障节点等。Nginx无图形管理界面,需要单独加载日志监控模块,需要手动配置日志输出,从后台日志查找个节点连接情况比较麻烦。
高可用性方面,两款软负载+Keepalived均能规避MySQL Router单点故障,同时主备模式的设计使负载软件自身也具备高可用,避免单点故障对整个集群架构造成影响。
单点登陆_规避单点故障,MySQL 8.0 MGR软负载怎么选?相关推荐
- mysql5.7版本源_用最新MySQL 8.0的源安裝MySQL 5.7版本(CentOS 7環境下)
起因: 從官網下了MySQL最新8.0版本的源,安裝了MySQL 8.0.13,但是發現版本太新了跟其他軟件不兼容,而且改了半天其他軟件配置都沒改好(囧rz)...算了,卸載了8.0,還是安回5.7的 ...
- 发布json数据_技术分享 | MySQL 8.0.17 GA 发布!
昨日 MySQL 官网正式发布 8.0.17 / 5.7.27 / 5.6.45 三个(维护)版本,距离上一个 GA 版本(8.0.16)发布时隔仅 88 天! MySQL 各开发团队的博客网站,同一 ...
- MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生
原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生 背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication) ...
- mysql8不区分大小写_技术译文 | MySQL 8.0.19 GA!
作者:Geir Hoydalsvik 原文:https://mysqlserverteam.com/the-mysql-8-0-19-maintenance-release-is-generally- ...
- mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法
我们行MGR年底要上线了,每天都要看官方文档学习,做测试,坚持每天写一个小知识点,有想一起学习的么~ MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_on ...
- turbolinux mysql 5.0 cluste_--mysql 5.0 集群负载均衡—经过测试
一.介绍 ======== 测试环境: Server1:ndbd 192.168.0.11 Server2:ndbd 192.168.0.12 Server3:mysqld --ndb-cluster ...
- mysql注入5.0以上_[Injection]对MYSQL 5.0服务器以上版本注入
How to do a SQL Injection for MYSQL Server 5.0+ 1. Find a vulnerable add a ' at the end of the site ...
- mysql更改加密方式后密码错误_关于解决mysql 8.0及以上 修改加密方式以及密码
如果密码已经忘记 或者修改过加密方式后出现密码错误 不用卸载mysql 直接将解压后的mysql文件都删除 ,并将压缩包重新解压再此文件夹中 然后重新安装mysql Windows 上安装 MySQL ...
- mysql proxy 编译安装_编译安装MySQL Proxy 0.8.1常见报错分析
此文属于网络收集而来,具体出处由于日子过于久远,无法准确的定位,如果本文章作者看到,可以联系我Mail:BOB.WU@LIVE.COM进行备注或者删除. 发布此文,是因为这些报错大家确实经常见到,也是 ...
- 单点登陆_别再问我单点登陆
一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...
最新文章
- Spark集群部署(standLone)模式
- 理正地基基础计算机辅助设计的英文缩写,理正基础CAD软件介绍理正基础CAD软件介绍.pdf...
- Flink window 用法介绍
- html5初始结构,分子动力学初始结构构建程序Packmol的使用
- php黑名单绕过,利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
- staruml顺序图转通信图_【航图详解】ICAO机场图!
- poi设置excel表格边框
- 京东宙斯php,京东联盟API申请
- TCP/IP协议讲解
- QQ桌球瞄准器的球心计算算法
- 2021WSB-day3-1 - Arun Ross 老师讲解Privacy Preserving Biometrics
- 交通安全精华主题汇总(至2023年01月29日)
- MyEclipse2019 4破解
- 变压器的阻抗匹配作用
- 微信公众号怎么做地推活动?效果极佳又安全!
- 【MP4 QuickTime隐写】tcsteg、jpegEOFx、detect anomalies in video files
- 苹果笔记本android_studio快捷键
- MT6572 pixel显 示错位
- 服务器数据防泄漏,深信达-MCK
- 云计算机房计算机等级保护三级,等级保护制度第三级要求
热门文章
- 安徽出台医疗大数据应用发展实施意见
- 笔记7:winfrom的一些知识点(一)
- 检测是否安装了 .NET Framework 3.5
- 沈熙-JavaScript引擎原理及优化
- 30.yii2 --- 全文检索简介
- 2.Linux/Unix 系统编程手册(上) -- 基本概念
- 1.卷1(套接字联网API)---简介
- 10.iterm 2 install rz , sz
- 10.生命周期和Zend引擎
- 6. Browser 对象 - Screen 对象(2)