利用MySQL Cluster 7.0 + LVS 搭建高可用环境
1、前言
随着数据量规模的扩大,企业对 MySQL 的要求就不仅仅是能用了,也在寻求各种高可用方案。以前我们的大部分高可用方案其实还存在一定缺陷,例如 MySQL Replication 方案,Master 是否存活检测需要一定时间,而和 Slave 的切换也需要时间,因此其高可用程度较大依赖监控软件或自动化管理工具。而早先的 MySQL Cluster 实在不能令人满意,性能差的不行,也让我们的期待一次次落空。本次 MySQL Cluster 7.0 的推出,终于实现了质的飞跃,性能上得到了很大提高。MySQL Cluster 7.0 新特性主要体现在以下几个方面:
数据节点多线程可以在线增加节点大记录存取改进支持windows平台本身MySQL Cluster已经实现了高可用,不过由于SQL节点无法对外部负载均衡,因此我们采用 LVS 来实现这一需求。
2、安装
环境描述:
以下是代码片段: 内核:2.6.9-78.0.17.ELsmp |
各个节点描述:
| IP | 描述 |
| 192.168.0.2 | ndb mgm node |
| 192.168.0.3 | data node1, sql node 1, LVS DR Server |
| 192.168.0.4 | data node2, sql node 2 |
| 192.168.0.5 | data node3, sql node 3 |
| 192.168.0.6 | data node4, sql node 4 |
| 192.168.0.7 | sql node 5 |
| 192.168.0.8 | sql node 6 |
| 192.168.0.9 | sql node 7 |
| 192.168.0.10 | sql node 8 |
是这样安排这些服务器的,192.168.0.2 作为 MySQL Cluster 的管理节点,2 ~ 6 既做数据节点(DATA node),也做SQL节点(SQL node),7 ~ 10 也做SQL节点。LVS采用 VS/DR 的模式,因此把 192.168.0.2 也同时作为 LVS 的 DR Server。
分配好机器,接下来就是安装响应的软件包了。
2.1 LVS 安装、配置
老实说,我对LVS并不十分在行,以前折腾过一次,差点快崩溃了,后来才发现是我下载的版本太高了,没想到这次也是这样 :(,白折腾了1天。其实过程比较简单,只要下载的版本能对的上就快了。
在这里,我下载的是源码rpm包,因此需要用rpmbuild编译一次。
以下是代码片段: [yejr@imysql.cn ~]# rpm -ivhU ~/kernel-2.6.9-78.0.17.EL.src.rpm
|
看到了吧,其实很简单。网上的有些资料说要把 ipvsadm.spec 中的 Copyright 这个 Tag 改成 License,可能是因为版本较老,我用的这个版本就不需要这样。
接下来就是加载 ip_vs 模块,然后开始做 LVS DR 转发了。
以下是代码片段: [yejr@imysql.cn ~]# /sbin/modprobe ip_vs |
直接编辑 /etc/sysconfig/ipvsadm 文件:
以下是代码片段: [yejr@imysql.cn ~]# cat /etc/sysconfig/ipvsadm |
保存退出。上面显示的是 hostname 的格式,因为我都在 /etc/hosts 里设置各自对应的 hostname 了。
然后就是在 DR Server 上绑定 vip,然后打开 ip_forward,启动 ipvsadm,LVS 就可以开始工作了。
以下是代码片段: [yejr@imysql.cn ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #修改内核,打开转发 |
DR Server 上设置完后,再在 Real Server 上绑定 vip,然后测试,没问题的话,就可以用了。
| 以下是代码片段: [yejr@imysql.cn ~]# /sbin/ifconfig lo:0 192.168.0.11 netmask 255.255.255.255 broadcast 192.168.0.11 |
2.2 MySQL Cluster安装
MySQL Cluster的安装重点在于管理节点的配置文件,只要把配置文件设置好了,其他的就很快了。我在这里是直接用 rpm 包安装的,因为下载整个预编译好的 tar.gz 文件实在太大了,这点上 MySQL 是越来越臃肿了 :(
以下是代码片段: [yejr@imysql.cn ~]# cat /home/mysql/config.ini |
然后启动 ndb_mgmd 进程:
| 以下是代码片段: [yejr@imysql.cn ~]# /usr/sbin/ndb_mgmd -f /home/mysql/config.ini --configdir=/home/mysql/ |
如果是修改了配置文件里的某些参数,则需要先关闭 ndb_mgmd 进程,然后重新启动,不过必须加上 --reload 选项,因为 7.0 版本中,会把配置文件放在 cache 里,如果不注意到这点,可能会被搞得莫名其妙的。
| 以下是代码片段: [yejr@imysql.cn ~]# /usr/sbin/ndb_mgmd -f /home/mysql/config.ini --configdir=/home/mysql/ --reload |
然后在数据节点上启动 ndbd 进程:
| 以下是代码片段: [yejr@imysql.cn ~]# /usr/sbin/ndbd --initial |
首次启动,需要加上 --initial 选项,其后的启动后就不需要了。
最后,修改SQL节点上的配置文件 my.cnf,然后启动 mysqld 进程:
以下是代码片段: [yejr@imysql.cn ~]# cat /etc/my.cnf |
在管理节点上看下 cluster 的状态:
以下是代码片段: [yejr@imysql.cn ~]# ndb_mgm |
可以看到,一切正常。
3、测试
我们主要进行一下对比测试,看看新版本的 ndbcluster 引擎相对 MyISAM 和 InnoDB 到底区别多大。
3.1 mysqlslap测试结果
![]()
纵坐标是总共运行时间。
mysqlslap完整执行参数类似下面:
以下是代码片段: mysqlslap -hlocalhost -uroot --engine=myisam --auto-generate-sql-write-number=100000 --auto-generate-sql-guid-primary \ |
3.2 sysbench测试结果

纵坐标是每秒运行的事务数。
sysbench完整执行参数类似下面:
以下是代码片段: sysbench --mysql-user=root --test=oltp --mysql-host=localhost --oltp-test-mode=complex \ |
从上面的测试结果我们也可以看到,单独的mysqld实例下,MyISAM适合并发很小的业务,InnoDB适合类似连接池模式下的高并发业务,不适合非常大并发的情景,而采用了LVS后的ndbcluster则是真正的适合高并发环境,尽管其性能相对InnoDB来说不是太好,不过比以往版本也已经提升了很多,用于正式生产环境的时候真是指日可待了。
建议继续学习:
- LVS hash size解决4096个并发的问题 (阅读:5975)
- LVS & MySQL NDB Cluster (阅读:4646)
- 记一次LVS/Nginx环境下的访问控制 (阅读:4575)
- 基于MySQL的高可用可扩展架构探讨 (阅读:4503)
- LVS & MySQL NDB Cluster (阅读:4432)
- MySQL Cluster 与 MongoDB 复制及分片设计及原理 (阅读:3727)
- 怎么样让 LVS 和 realserver 工作在同一台机器上 (阅读:3694)
- MySQL Cluster致命缺点 (阅读:3551)
- 寻找适合你的MySQL高可用解决方案 (阅读:3524)
- MySQL Cluster Manager 工作原理、安装及使用 (阅读:3500)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:yejr 来源: MySQL 中文网
- 标签: Cluster LVS 高可用
- 发布时间:2009-10-19 15:41:22
-
[927] WordPress插件开发 -- 在插件使用 -
[133] 解决 nginx 反向代理网页首尾出现神秘字 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 整理了一份招PHP高级工程师的面试题 -
[50] 全站换域名时利用nginx和javascri -
[50] 海量小文件存储 -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] Innodb分表太多或者表分区太多,会导致内 -
[47] jQuery性能优化指南
