利用MySQL Cluster 7.0 + LVS 搭建高可用环境
来源:互联网 发布:防水建材网络推广方案 编辑:程序博客网 时间:2024/06/06 02:45
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硬件:DELL 2950, 146G 15K RPM SAS * 6(raid 1+0), 8G Ram
各个节点描述:
IP描述192.168.0.2ndb mgm node192.168.0.3data node1, sql node 1, LVS DR Server192.168.0.4data node2, sql node 2192.168.0.5data node3, sql node 3192.168.0.6data node4, sql node 4192.168.0.7sql node 5192.168.0.8sql node 6192.168.0.9sql node 7192.168.0.10sql 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[yejr@imysql.cn ~]# cd /usr/src/redhat/SPECS[yejr@imysql.cn ~]# rpmbuild -bp kernel-2.6.spec #解开源码包,打上各种pache[yejr@imysql.cn ~]# rpm -ivhU ~/ipvsadm-1.24-5.src.rpm #安装ipvsadm的源码包[yejr@imysql.cn SPECS]# lsipvsadm.spec kernel-2.6.spec#需要做一下链接,编译ipvsadm时用得着[yejr@imysql.cn SPECS]# ln -s /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src/linux[yejr@imysql.cn SPECS]# rpm -bb ipvsadm.spec #编译出ipvsadm的rpm包[yejr@imysql.cn SPECS]# ls -l /usr/src/redhat/RPMS/x86_64/total 36-rw-r--r-- 1 root root 30941 May 4 18:06 ipvsadm-1.24-5.x86_64.rpm-rw-r--r-- 1 root root 2968 May 4 18:06 ipvsadm-debuginfo-1.24-5.x86_64.rpm[yejr@imysql.cn ~]# rpm -ivhU /usr/src/redhat/RPMS/x86_64/ipvsadm-1.24-5.x86_64.rpm
看到了吧,其实很简单。网上的有些资料说要把 ipvsadm.spec 中的 Copyright 这个 Tag 改成 License,可能是因为版本较老,我用的这个版本就不需要这样。
接下来就是加载 ip_vs 模块,然后开始做 LVS DR 转发了。
[yejr@imysql.cn ~]# /sbin/modprobe ip_vs[yejr@imysql.cn ~]# lsmod | grep ip_vsip_vs 103169 3 ip_vs_rr
直接编辑 /etc/sysconfig/ipvsadm 文件:
[yejr@imysql.cn ~]# cat /etc/sysconfig/ipvsadm-C-A -t lvs_vip:mysql -s rr-a -t lvs_vip:mysql -r ndb_data_node_1:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_data_node_2:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_data_node_3:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_data_node_4:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_sql_node_1:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_sql_node_2:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_sql_node_3:mysql -g -w 1-a -t lvs_vip:mysql -r ndb_sql_node_4:mysql -g -w 1
保存退出。上面显示的是 hostname 的格式,因为我都在 /etc/hosts 里设置各自对应的 hostname 了。
然后就是在 DR Server 上绑定 vip,然后打开 ip_forward,启动 ipvsadm,LVS 就可以开始工作了。
[yejr@imysql.cn ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #修改内核,打开转发[yejr@imysql.cn ~]# /sbin/ifconfig eth0:0 192.168.0.11 netmask 255.255.255.0 #绑定vip[yejr@imysql.cn ~]# /etc/init.d/ipvsadm start #启动ipvsadm[yejr@imysql.cn ~]# ipvsadm -L #查看列表ipvsadm -LIP Virtual Server version 1.2.0 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP lvs_vip:mysql rr-> gs_ndb_sql_node_1:mysql Route 1 0 0-> gs_ndb_sql_node_2:mysql Route 1 0 0-> gs_ndb_sql_node_3:mysql Route 1 0 0-> gs_ndb_sql_node_4:mysql Route 1 0 0-> gs_ndb_data_node_1:mysql Route 1 0 0-> gs_ndb_data_node_2:mysql Route 1 0 0-> gs_ndb_data_node_3:mysql Route 1 0 0-> gs_ndb_data_node_4:mysql Route 1 0 0[yejr@imysql.cn ~]# lsmod | ip_vs #查看已加载模块lsmod | grep ip_vsip_vs_rr 3649 1ip_vs 103169 3 ip_vs_rr
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#设定noarp[yejr@imysql.cn ~]# echo '2' > /proc/sys/net/ipv4/conf/lo/arp_announce;echo '1' > /proc/sys/net/ipv4/conf/lo/arp_ignore;echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce;echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
2.2 MySQL Cluster安装
MySQL Cluster的安装重点在于管理节点的配置文件,只要把配置文件设置好了,其他的就很快了。我在这里是直接用 rpm 包安装的,因为下载整个预编译好的 tar.gz 文件实在太大了,这点上 MySQL 是越来越臃肿了 :(
[yejr@imysql.cn ~]# cat /home/mysql/config.ini[TCP DEFAULT]SendBufferMemory=2MReceiveBufferMemory=2M[NDB_MGMD DEFAULT]PortNumber=1186Datadir=/home/mysql/[NDB_MGMD]id=1Datadir=/home/mysql/Hostname=192.168.0.2[NDBD DEFAULT]NoOfReplicas=2Datadir=/home/mysql/DataMemory=2048MIndexMemory=1024MLockPagesInMainMemory=1MaxNoOfConcurrentOperations=100000StringMemory=25MaxNoOfTables=4096MaxNoOfOrderedIndexes=2048MaxNoOfUniqueHashIndexes=512MaxNoOfAttributes=24576DiskCheckpointSpeedInRestart=100MFragmentLogFileSize=256MInitFragmentLogFiles=FULLNoOfFragmentLogFiles=6RedoBuffer=32MTimeBetweenLocalCheckpoints=20TimeBetweenGlobalCheckpoints=1000TimeBetweenEpochs=100MemReportFrequency=30BackupReportFrequency=10### Params for setting loggingLogLevelStartup=15LogLevelShutdown=15LogLevelCheckpoint=8LogLevelNodeRestart=15### Params for increasing Disk throughputBackupMaxWriteSize=1MBackupDataBufferSize=16MBackupLogBufferSize=4MBackupMemory=20M#Reports indicates that odirect=1 can cause io errors (os err code 5) on some systems. You must test.#ODirect=1### WatchdogTimeBetweenWatchdogCheckInitial=30000### TransactionInactiveTimeout - should be enabled in Production#TransactionInactiveTimeout=30000### CGE 6.3 - REALTIME EXTENSIONS#RealTimeScheduler=1#SchedulerExecutionTimer=80#SchedulerSpinTimer=40### DISK DATA#SharedGlobalMemory=384M#read my blog how to set this:#DiskPageBufferMemory=3072M### MultithreadingMaxNoOfExecutionThreads=8[NDBD]id=2Datadir=/home/mysql/Hostname=192.168.221.3#LockExecuteThreadToCPU=X#LockMaintThreadsToCPU=Y[NDBD]id=3Datadir=/home/mysql/Hostname=192.168.0.4#LockExecuteThreadToCPU=X#LockMaintThreadsToCPU=Y[NDBD]id=4Datadir=/home/mysql/Hostname=192.168.0.5#LockExecuteThreadToCPU=X#LockMaintThreadsToCPU=Y[NDBD]id=5Datadir=/home/mysql/Hostname=192.168.0.6#LockExecuteThreadToCPU=X#LockMaintThreadsToCPU=Y[MYSQLD]id=6Hostname=192.168.0.3[MYSQLD]id=7Hostname=192.168.0.4[MYSQLD]id=8Hostname=192.168.0.5[MYSQLD]id=9Hostname=192.168.0.6[MYSQLD]id=10Hostname=192.168.0.7[MYSQLD]id=11Hostname=192.168.0.8[MYSQLD]id=12Hostname=192.168.0.9[MYSQLD]id=13Hostname=192.168.0.10
然后启动 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#my.cnf[mysql_cluster]ndb-connectstring="192.168.0.2:1186"[MYSQLD]......ndb-cluster-connection-pool=1ndbclusterndb-connectstring="192.168.0.2:1186"ndb-force-send=1ndb-use-exact-count=0ndb-extra-logging=1ndb-autoincrement-prefetch-sz=256engine-condition-pushdown=1......[yejr@imysql.cn ~]# /etc/init.d/mysql start[yejr@imysql.cn ~]# mysqladmin pr+------+-------------+-----------+----+---------+------+-----------------------------------+------------------+| Id | User | Host | db | Command | Time | State | Info |+------+-------------+-----------+----+---------+------+-----------------------------------+------------------+| 1 | system user | | | Daemon | 0 | Waiting for event from ndbcluster | || 1579 | root | localhost | | Query | 0 | | show processlist |+------+-------------+-----------+----+---------+------+-----------------------------------+------------------+
在管理节点上看下 cluster 的状态:
[yejr@imysql.cn ~]# ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 4 node(s)id=2 @192.168.0.3 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 0, Master)id=3 @192.168.0.4 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 0)id=4 @192.168.0.5 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 1)id=5 @192.168.0.6 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 1)[ndb_mgmd(MGM)] 1 node(s)id=1 @192.168.0.2 (mysql-5.1.32 ndb-7.0.5)[mysqld(API)] 10 node(s)id=6 @192.168.0.3 (mysql-5.1.32 ndb-7.0.5)id=7 @192.168.0.4 (mysql-5.1.32 ndb-7.0.5)id=8 @192.168.0.5 (mysql-5.1.32 ndb-7.0.5)id=9 @192.168.0.6 (mysql-5.1.32 ndb-7.0.5)id=10 @192.168.0.7 (mysql-5.1.32 ndb-7.0.5)id=13 @192.168.0.8 (mysql-5.1.32 ndb-7.0.5)id=14 @192.168.0.9 (mysql-5.1.32 ndb-7.0.5)id=15 @192.168.0.10 (mysql-5.1.32 ndb-7.0.5)ndb_mgm> exit
可以看到,一切正常。
3、测试
我们主要进行一下对比测试,看看新版本的 ndbcluster 引擎相对 MyISAM 和 InnoDB 到底区别多大。
3.1 mysqlslap测试结果
纵坐标是总共运行时间。
mysqlslap完整执行参数类似下面:
mysqlslap -hlocalhost -uroot --engine=myisam --auto-generate-sql-write-number=100000 --auto-generate-sql-guid-primary \--concurrency=50,100,200 --number-of-queries=500000 --iterations=2 --number-char-cols=10 --number-int-cols=10 \--auto-generate-sql --create-schema=ndb --auto-generate-sql-load-type=mixed
3.2 sysbench测试结果
纵坐标是每秒运行的事务数。
sysbench完整执行参数类似下面:
sysbench --mysql-user=root --test=oltp --mysql-host=localhost --oltp-test-mode=complex \--mysql-table-engine=ndbcluster --oltp-table-size=10000000 --mysql-db=ndb --oltp-table-name=mdb_1kw \--num-threads=200 --max-requests=500000 run
从上面的测试结果我们也可以看到,单独的mysqld实例下,MyISAM适合并发很小的业务,InnoDB适合类似连接池模式下的高 并发业务,不适合非常大并发的情景,而采用了LVS后的ndbcluster则是真正的适合高并发环境,尽管其性能相对InnoDB来说不是太好,不过比 以往版本也已经提升了很多,用于正式生产环境的时候真是指日可待了。
- 利用MySQL Cluster 7.0 + LVS 搭建高可用环境
- 利用MySQL Cluster 7.0 + LVS 搭建高可用环境
- MySQL Cluster 7.0 +LVS 构建高可用环境
- keepalived+LVS+MySql Cluster 高可用配置
- 高可用 lvs环境的搭建
- 利用LVS+Keepalived实现MySQL高可用
- 利用LVS+Keepalived实现MySQL高可用
- Redis Cluster高可用(HA)集群环境搭建详细步骤
- 利用lvs+keepalived构建高可用MySQL-HA
- 利用LVS+Keepalived实现MySQL高可用1
- 三、LVS高可用搭建
- mysql高可用之PXC(Percona XtraDB Cluster)搭建
- Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群
- Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群
- mysql+keepalived高可用集群环境搭建
- mysql-cluster环境搭建
- mysql高可用之LVS + KEEPALIVE + MYSQL
- 通过keepalived搭建LVS高可用集群
- 用javascript查看谷歌地图的坐标
- 用JS去掉IE窗口的标题栏,工具栏,地址栏
- [Balkan 2011]Timeismoney
- Grsecurity ACL系统
- ubuntu11.04上cloudera cdh3u0的hadoop和hbase分布式安装
- 利用MySQL Cluster 7.0 + LVS 搭建高可用环境
- 通过SMTP SERVER 无需身份验证发送邮件
- C语言学习笔记 (二) C语言的语句
- 技术资料,海量导航
- Eclipse常用的快捷键
- NYOJ 12 喷水装置(二)
- 生成的缩略图
- Ajax+PHP打造等待进度条效果
- 红豆薏米粥:祛除体内湿气的养生秘方