当前位置:   article > 正文

基于阿里云SLB部署ECS自建MySQL高可用(SLB功能测试篇)_阿里云slb 做负载均接mysql 8

阿里云slb 做负载均接mysql 8

目录

 

背景介绍  

阿里云SLB简介

环境介绍 

创建测试表

测试脚本准备

模拟故障切换


背景介绍  

最近要在阿里云的ECS上部署MySQL高可用架构,因为阿里云上不能使用Keepalived提供VIP(虚拟IP),没有VIP就无法自动完成故障转移,经过调研发现阿里云产品SLB大致可以满足需求,SLB可以进行流量分发,消除单点故障实现服务高可用。所以打算使用阿里云产品SLB(负载均衡)替代VIP。本篇博客主要是验证SLB主备模式下如果主库服务宕机,数据库的写入和查询请求是否可以自动转移至备库。如果可以,后面ECS自建高可用的方案就是使用SLB+MHA来实现主库高可用。

SLB阿里云官方介绍

阿里云SLB简介

负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。

注意:

创建SLB时要要使用主备服务器组,主服务器对应MHA中的主库服务器,备服务器对应MHA中的备主,这样平时流量就会发送到主库,当出现故障的时候发生切换将流量发送到备主。其余的创建可以咨询公司的OP同事或者阿里云的技术人员。

环境介绍 

IPSLB中的角色数据库架构(MHA)中的角色简称
10.96.0.202SLB地址VIP202
10.96.1.114  主服务器主库服务器4
10.96.1.115备服务器备主服务器5
10.96.1.116没有添加至SLB中从库服务器6

创建测试表

表结构说明:测试表中添加时间戳的列,方便记录插入时间和切换日志进行比对,另外的一个字段是num数字类型,可以使用for循环持续向表中插入数据

  1. create database test;
  2. use test;
  3. CREATE TABLE `hatest` (
  4. `ID` BIGINT (20) NOT NULL AUTO_INCREMENT,
  5. num BIGINT (20) NOT NULL,
  6. `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  7. `UPDATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  8. PRIMARY KEY (`ID`)
  9. ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 ROW_FORMAT = DYNAMIC COMMENT = '用户表';

测试脚本准备

安装依赖包:

pip install PyMySQL

  1. # Author admin
  2. # DATE 2020/9/10
  3. # -*- coding:UTF-8 -*-
  4. import pymysql
  5. import time,datetime
  6. import logging
  7. import os
  8. logging.basicConfig(filename=os.path.join(os.getcwd(),'ha.log'),level=logging.DEBUG)
  9. def insert():
  10. while True:
  11. try:
  12. conn = pymysql.connect(host='10.96.0.202',port=3306,user='dba',password='dba',database='test',charset='utf8')
  13. cursor = conn.cursor()
  14. for num in range(0,10000000):
  15. data_time = time.strftime("%Y-%m-%d %H:%M:%S")
  16. sql1="insert into hatest(num) values(%d);"%num
  17. sql2 = "show variables like 'server_id';"
  18. cursor.execute(sql1)
  19. data_time = datetime.datetime.now()
  20. cursor.execute(sql2)
  21. server_id = cursor.fetchone()
  22. logging.warning('%s server_id is %s'%(datetime.datetime.now(),server_id[1]))
  23. conn.commit()
  24. cursor.close()
  25. except Exception as e:
  26. logger_info = "%s %s" %(datetime.datetime.now(),e)
  27. logging.warning(logger_info)
  28. insert()

脚本说明 :使用SLB地址 10.96.0.202 往数据库中插入1000万数据,在插入期间手动停止4服务器上的数据库服务,验证SLB切换后5可以继续插入数据。在每次插入数据后会记录数据库的server_Id到日志中用来标识写入的是哪个数据库,并将切换时的错误记录到日志中

模拟故障切换

启动脚本

手动停止4上mysql服务

观察日志以及表中数据

测试

 

22:17开始脚本 持续写入

22:18:11 4上 停止数据库 /etc/init.d/mysqld stop  日志和数据库的表中都显示在18分11秒停止写入

ha.log

数据库中表

22:18:11持续至22:18:20,数据库无法写入 
22:18:20 SLB完成主备切换 5数据库开始写入 ,日志数据库表中显示在18分20秒开始写入5环境


22:19 4上启动 /etc/init.d/mysqld start

22:19:10秒 4环境数据库服务启动 ,5环境停止写入,但是4环境没有开始写入

 验证完成

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/41826
推荐阅读
相关标签
  

闽ICP备14008679号