作者介绍

毛思平,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软负载怎么选?相关推荐

  1. mysql5.7版本源_用最新MySQL 8.0的源安裝MySQL 5.7版本(CentOS 7環境下)

    起因: 從官網下了MySQL最新8.0版本的源,安裝了MySQL 8.0.13,但是發現版本太新了跟其他軟件不兼容,而且改了半天其他軟件配置都沒改好(囧rz)...算了,卸載了8.0,還是安回5.7的 ...

  2. 发布json数据_技术分享 | MySQL 8.0.17 GA 发布!

    昨日 MySQL 官网正式发布 8.0.17 / 5.7.27 / 5.6.45 三个(维护)版本,距离上一个 GA 版本(8.0.16)发布时隔仅 88 天! MySQL 各开发团队的博客网站,同一 ...

  3. MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生

    原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生 背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication) ...

  4. mysql8不区分大小写_技术译文 | MySQL 8.0.19 GA!

    作者:Geir Hoydalsvik 原文:https://mysqlserverteam.com/the-mysql-8-0-19-maintenance-release-is-generally- ...

  5. mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法

    我们行MGR年底要上线了,每天都要看官方文档学习,做测试,坚持每天写一个小知识点,有想一起学习的么~ MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_on ...

  6. turbolinux mysql 5.0 cluste_--mysql 5.0 集群负载均衡—经过测试

    一.介绍 ======== 测试环境: Server1:ndbd 192.168.0.11 Server2:ndbd 192.168.0.12 Server3:mysqld --ndb-cluster ...

  7. 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 ...

  8. mysql更改加密方式后密码错误_关于解决mysql 8.0及以上 修改加密方式以及密码

    如果密码已经忘记 或者修改过加密方式后出现密码错误 不用卸载mysql 直接将解压后的mysql文件都删除 ,并将压缩包重新解压再此文件夹中 然后重新安装mysql Windows 上安装 MySQL ...

  9. mysql proxy 编译安装_编译安装MySQL Proxy 0.8.1常见报错分析

    此文属于网络收集而来,具体出处由于日子过于久远,无法准确的定位,如果本文章作者看到,可以联系我Mail:BOB.WU@LIVE.COM进行备注或者删除. 发布此文,是因为这些报错大家确实经常见到,也是 ...

  10. 单点登陆_别再问我单点登陆

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

最新文章

  1. Spark集群部署(standLone)模式
  2. 理正地基基础计算机辅助设计的英文缩写,理正基础CAD软件介绍理正基础CAD软件介绍.pdf...
  3. Flink window 用法介绍
  4. html5初始结构,分子动力学初始结构构建程序Packmol的使用
  5. php黑名单绕过,利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
  6. staruml顺序图转通信图_【航图详解】ICAO机场图!
  7. poi设置excel表格边框
  8. 京东宙斯php,京东联盟API申请
  9. TCP/IP协议讲解
  10. QQ桌球瞄准器的球心计算算法
  11. 2021WSB-day3-1 - Arun Ross 老师讲解Privacy Preserving Biometrics
  12. 交通安全精华主题汇总(至2023年01月29日)
  13. MyEclipse2019 4破解
  14. 变压器的阻抗匹配作用
  15. 微信公众号怎么做地推活动?效果极佳又安全!
  16. 【MP4 QuickTime隐写】tcsteg、jpegEOFx、detect anomalies in video files
  17. 苹果笔记本android_studio快捷键
  18. MT6572 pixel显 示错位
  19. 服务器数据防泄漏,深信达-MCK
  20. 云计算机房计算机等级保护三级,等级保护制度第三级要求

热门文章

  1. 安徽出台医疗大数据应用发展实施意见
  2. 笔记7:winfrom的一些知识点(一)
  3. 检测是否安装了 .NET Framework 3.5
  4. 沈熙-JavaScript引擎原理及优化
  5. 30.yii2 --- 全文检索简介
  6. 2.Linux/Unix 系统编程手册(上) -- 基本概念
  7. 1.卷1(套接字联网API)---简介
  8. 10.iterm 2 install rz , sz
  9. 10.生命周期和Zend引擎
  10. 6. Browser 对象 - Screen 对象(2)