设为首页 收藏本站
查看: 2742|回复: 0

[经验分享] ClusterControl DB 集群测试

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-1-11 08:50:31 | 显示全部楼层 |阅读模式
一、摘要

分别在北京、日本、美国部署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.jpg

wKioL1aQ_37znrCZAABYnrDmKDM364.jpg

wKiom1aQ_1TCByQvAABNpa_rGdQ473.jpg

wKiom1aQ_1Xj54PIAABjGz_opss207.jpg
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.jpg 配置好之后部署即可,程序会自动在9个server上安装DB服务并统一规划到一个Cluster里面:
wKiom1aRBMTDA7YyAABoxAfArs8391.jpg wKiom1aRBJmSbsRpAABfKwv4WwE898.jpg
集群创建完成:
wKioL1aRBXHjqhviAAJbYZx2j7g384.jpg
三、集群测试
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.jpg
压测过程:
wKiom1aRCdyyi0k7AAgHN5nLrAw296.jpg
网络隔离后读写失败:

wKioL1aRClGQlS0sAATcwZZvWAY481.jpg
网络恢复后同步成功:
wKiom1aRCjaRer2sAADWtIdDNiM716.jpg
附:
测试脚本
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/ ... ease-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路径。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-162814-1-1.html 上篇帖子: corosycn&pacemaker的高可用web集群 下篇帖子: 安装spark的时候出错!求大神给我看看 谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表