ClusterControl DB 集群测试

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一、摘要

分别在北京、日本、美国部署3台MySQLDB,组成一个Cluster,测试DB集群的健壮性。

Controller:10.13.25.254 北京

Nodes:

10.13.25.2—北京

10.13.25.3—北京

10.13.25.4—北京

10.13.5.2—日本

10.13.5.3—日本

10.13.5.4—日本

10.13.13.2—美国

10.13.13.3—美国

10.13.13.4—美国

二、数据库集群部署:

1、安装ClusterControl

10.13.25.254:

1
2
3
$ wget http: //www .severalnines.com /downloads/cmon/install-cc
chmod  +x  install -cc
$ . /install-cc    # as root or sudo user

这里需要注意的是,安装时尽量只保留一块网卡,如果有多块网卡,需要指定HOST。E.g.:

1
$ HOST=10.13.25.254 . /install-cc

wKioL1aQ_1GTazvjAABzE3usp08730.png


wKioL1aQ_37znrCZAABYnrDmKDM364.png


wKiom1aQ_1TCByQvAABNpa_rGdQ473.png


wKiom1aQ_1Xj54PIAABjGz_opss207.png

Controller安装过程中会一起安装Apache,完成之后点击页面操作部署集群;

参考链接:

http://severalnines.com/getting-started

2、部署MySQL集群

2.1.打开浏览器,输入:

http://10.13.25.254/clustercontrol

输入邮箱地址和密码,创建管理员用户

2.2.设置ClusterControl和nodes之间的密钥登陆:

1
2
3
ssh -keygen -t rsa  # press enter on all prompts
ssh -copy- id  -i ~/. ssh /id_rsa  [ClusterControl IP address]
ssh -copy- id  -i ~/. ssh /id_rsa  [ClusterControl IP address]   # repeat this to all target database nodes

2.3.部署新的DB Server或者已经建好的DB Server到ClusterControl,通过:

Add Existing Servers/Clusters | Create Database Cluster | Create Database Node

这里我全部新建测试MariaDB,9个Node,中日美各三个:wKiom1aRAxTi7wFTAAC0dbyGljM759.png配置好之后部署即可,程序会自动在9个server上安装DB服务并统一规划到一个Cluster里面:

wKiom1aRBMTDA7YyAABoxAfArs8391.pngwKiom1aRBJmSbsRpAABfKwv4WwE898.png

集群创建完成:

wKioL1aRBXHjqhviAAJbYZx2j7g384.png

三、集群测试

3.1.

测试工具:SYSBENCH

数据库:MariaDB-10.0.23

 sysbench版本:0.5

wsrep_sst_method=xtrabackup-v2和rsync

3.2.测试方法

1.创建Cluster:部署9台DB Server:北京3台,日本3台,达拉斯3台;9台DB Server组成一个Cluster,通过北京的Control Server进行管理;

2.创建初始化数据库:分别在9台DB上创建测试数据库,每个数据库包含8个表,10万条记录;

3.并发测试:sysbench采用16线程并发,混合读写模式(包含SELECT、UPDATE、INSERT、DELETE)分别同时从中、日、美对数据库进行操作;在操作过程中down掉中日或者中美的链路;

4.更改wsrep_sst的method值,测试以上几种情况数据库的可用性;

3.3.测试案例

1. 数据库在压测过程中,只中断中美或者中日之间的链路之后,观察中、日、美各个节点数据库的可操作性;

2. 数据库在压测过程中,同时中断中美和中日之间的链路,观察中、日、美各个节点数据库的可操作性;

3. 链路恢复之后观察中、日、美各个节点数据库是否同步成功和同步时间;

4. wsrep_sst_method分别设置为xtrabackup-v2和rsync分别进行相同的测试;   

3.4. 测试结果

1.隔离任何一个site的网络之后,被隔离的site数据库server无法进行读写操作,报错“WSREP has not yet prepared”,其他节点能够正常操作并同步;链路恢复之后,被隔离site服务恢复,并能够同步成功;

2.同时隔离两个site之后,全部site的数据库操作均被中断,链路恢复之后所有节点能够正常提供服务,并同步成功;

3.链路恢复之后,中日美各个节点之间的数据库同步,在修改大概千条记录的情况下,需要的同步时间在秒级别。

4.wsrep_sst_method分别设置为xtrabackup-v2和rsync,测试结果没有区别。

总结:在没有备用链路的情况下,该DB集群架构在任何一个site的网络被隔离之后,由于集群机制会导致被中断的节点数据库无法进行读写操作,在多节点同时对数据库进行操作的情况下不建议实施。

注:

  此测试全部用的安装完成之后的默认配置,测试结果仅供参考。

相关截图:

测试数据库:

wKioL1aRCd7iumI3AAE9itZKOwo308.png

压测过程:

wKiom1aRCdyyi0k7AAgHN5nLrAw296.png

网络隔离后读写失败:

wKioL1aRClGQlS0sAATcwZZvWAY481.png

网络恢复后同步成功:

wKiom1aRCjaRer2sAADWtIdDNiM716.png

附:

测试脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/local/envpython
  
##This script is used to test Mysql DB Cluter
  
  
from fabric.api  import  run
from fabric.context_managers  import  env
from fabric.context_managers  import  cd
  
env .hosts=[ '10.13.25.2' , '10.13.25.3' , '10.13.25.4' , '10.13.5.2' , '10.13.5.3' , '10.13.5.4' , '10.13.13.2' , '10.13.13.3' , '10.13.13.4' ]
env .user=  'root'
env .password=  'mypassword'
env .parallel= True  
#def install():
#        # First install 'sysbench' pkg(ubuntu/debian)
#        #rpm -Uvh --forcehttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm(redhat/centos) 
#        run("aptitude -y installsysbench")
#defcreateDB():
#        run("mysql -ucmon -pcds-china -e'create database sbtest'")
            # You need to create a default testdatabase called 'sbtest'
def testDB():
            run('sysbench-- test = /usr/share/doc/sysbench/tests/db/oltp .lua --num-threads=16--max-requests=10000 --db-driver=mysql --mysql-user=cmon--mysql-password=cds-china --mysql-socket= /var/lib/mysql/mysql .sock \
                --mysql-port=3306 --oltp-table-size=100000 --oltp-tables-count=8   --oltp-reconnect-mode=transaction \
                --mysql-table-engine=innodb prepare')
            run('sysbench-- test = /usr/share/doc/sysbench/tests/db/oltp .lua --num-threads=16--max-requests=10000 --db-driver=mysql --mysql-user=cmon--mysql-password=cds-china --mysql-socket= /var/lib/mysql/mysql .sock \
                --mysql-port=3306 --oltp-table-size=100000 --oltp-tables-count=8   --oltp-reconnect-mode=transaction \
                --mysql-table-engine=innodb --report-interval=5 run')
            run('sysbench-- test = /usr/share/doc/sysbench/tests/db/oltp .lua --num-threads=16--max-requests=10000 --db-driver=mysql --mysql-user=cmon--mysql-password=cds-china --mysql-socket= /var/lib/mysql/mysql .sock\
                --mysql-port=3306 --oltp-table-size=100000 --oltp-tables-count=8  --oltp-reconnect-mode=transaction \
                --mysql-table-engine=innodb cleanup')

sysbench常用参数说明:

1、   --test=/usr/share/doc/sysbench/tests/db/oltp.lua,使用oltp.lua脚本进行测试.(包括SELECT/UPDATE/DELETE/INSERT等数据库混合操作)

2、   --max-requests=10000设置最大请求数;如果使用--max-time(这里设置600s),需要设置--max-request为0,默认是10000(总请求数)

3、   --oltp-table-size:指定表的大小,即表的行数

4、   --mysql-table-engine:指定存储引擎,如myisam,innodb,heap,ndbcluster,bdb,maria,falcon,pbxt

5、   --mysql-db:指定在哪个数据库创建测试表,默认为sbtest库,需要提前创建好

6、   --test:指定Lua脚本,参数选项大部分同老版本的--test=oltp help

7、   --db-driver:指定驱动,默认为Mysql

8、   --myisam-max-rows:指定Myisam表的MAX_ROWS选项

9、   --oltp-secondary:测试表将使用二级索引KEY xid (ID) 替代 PRIMARY KEY (ID),innodb引擎内部为每个表创建唯一6字节的主键索引

10、--oltp-auto-inc:设置id列为auto-incremental,值为on或off,默认为on

11、--oltp-read-only:执行仅仅SELECT测试,默认off

12、创建多个表,使用--oltp-tables-count指定,默认为1:

--num-threads=: 使用多线程创建多表,节省准备时间;--oltp-tables-count的数量应该是--num-threads的倍数。

sysbench测试过程中可能会遇到的错误:

1、PANIC: unprotected error in call to Lua API (cannot open sysbench/tests/db/oltp.lua: No such file or directory)

解决:stsbench版本问题导致,--test=/usr/share/doc/sysbench/tests/db/oltp.lua指定lua脚本的位置即可解决。

2. FATAL: unable to connect to MySQL server, aborting...
[10.13.13.4] out: FATAL: error 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
[10.13.13.4] out: FATAL: failed to execute function `prepare': /usr/share/doc/sysbench/tests/db/common.lua:103: Failed to connect to the database

[10.13.13.4] out:

一种方法更改/etc/mysql/my.cnf的socket路径,另一种方法添加sysbench参数,指定socket路径。






      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1733341,如需转载请自行联系原作者



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
62 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
2月前
|
分布式计算 大数据 Hadoop
最快方式搭建docker大数据 测试集群
【8月更文挑战第5天】快速搭建Docker大数据测试集群可采用预构建镜像与Compose文件、利用云服务如AWS的ECS、自动化工具如Ansible或参考在线教程。只需简单配置如内存分配及路径,运行`docker-compose up`即可启动含NameNode、DataNode等组件的Hadoop集群。根据需求与资源选择合适方法。
|
4月前
|
分布式计算 Shell Linux
Spark-集群安装、部署、启动、测试(1.6.3)稳定版
Spark-集群安装、部署、启动、测试(1.6.3)稳定版
52 0
|
5月前
|
分布式计算 资源调度 Hadoop
Hadoop集群基本测试
Hadoop集群基本测试
60 0
|
5月前
|
Kubernetes 测试技术 开发工具
云效我标签只有测试环境:但我其实对应了两个k8s集群(测试A,测试B)环境,这种情况怎么处理呢?
云效我标签只有测试环境:但我其实对应了两个k8s集群(测试A,测试B)环境,这种情况怎么处理呢?
136 1
|
11月前
|
存储 Kubernetes API
kubernetes集群测试方案及工具?
kubernetes集群测试方案及工具?
181 1
|
5月前
|
NoSQL 测试技术 Redis
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
205 0
|
5月前
|
分布式计算 Hadoop 数据安全/隐私保护
HDFS--HA部署安装:修改配置文件 测试集群工作状态的一些指令
HDFS--HA部署安装:修改配置文件 测试集群工作状态的一些指令
65 0
|
5月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes|k8s集群测试时的一些基本操作
云原生|kubernetes|k8s集群测试时的一些基本操作
125 0
|
12月前
|
分布式计算 Hadoop Linux
HBase集群环境搭建与测试(下)
HBase集群环境搭建与测试
107 0
下一篇
无影云桌面