Chinaunix首页 | 论坛 | 博客
  • 博客访问: 810013
  • 博文数量: 142
  • 博客积分: 3505
  • 博客等级: 中校
  • 技术积分: 1501
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-30 19:30
文章分类

全部博文(142)

文章存档

2012年(33)

2011年(109)

分类: LINUX

2011-09-17 10:50:51

这是重新发布的一篇文档,真正实现了双机MySQL Cluster集群. 重点是是解决了关于仲裁的问题.从而每个单机都能够真正独立运行了.
在这里感谢mdjhaitao的实践及给我进一步实验完善的帮助.

一、介绍
这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL集群依然能够继续运行。加下后续的(keepalived+lvs+mysql cluster文档),可以实现Mysql双机的高可用及负载均衡。
安装环境及软件包:
vmware workstation 5.5.3
mysql-5.2.3-falcon-alpha.tar.gz
gentoo 2006.1
Server1: 192.168.1.111
Server2:  192.168.1.110

二、在Server1和Server2上安装MySQL
以下步骤需要在Server1和Server2上各做一次
# mv mysql-5.2.3-falcon-alpha.tar.gz  /tmp/package
# cd /tmp/package
# groupadd mysql
# useradd -g mysql mysql
# tar -zxvf mysql-5.2.3-falcon-alpha.tar.gz
# rm -f mysql-5.2.3-falcon-alpha.tar.gz
# mv mysql-5.2.3-falcon-alpha mysql
# cd mysql
# ./configure --prefix=/usr --with-extra-charsets=complex --with-plugin-ndbcluster --with-plugin-partition --with-plugin-innobase
# make && make install
#ln -s /usr/libexec/ndbd /usr/bin
#ln -s /usr/libexec/ndb_mgmd /usr/bin
#ln -s /usr/libexec/ndb_cpcd /usr/bin
#ln -s /usr/libexec/mysqld /usr/bin
#ln -s /usr/libexec/mysqlmanager /usr/bin
#mysql_install_db --user=mysql

三、安装并配置节点
以下步骤需要在Server1和Server2上各做一次
1.配置管理节点配置文件:
# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# vi config.ini
在config.ini中添加如下内容:
[ndbd default]
NoOfReplicas= 2
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512
StartPartialTimeout=100
StartPartitionedTimeout=100
ArbitrationTimeout=5000
TransactionDeadlockDetectionTimeout=5000
HeartbeatIntervalDbDb=5000
StoponError=0

[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster
[ndb_mgmd]
Id=1
HostName= 192.168.1.111
[ndb_mgmd]
Id=2
HostName= 192.168.1.110
[ndbd]
Id= 3
HostName= 192.168.1.111
[ndbd]
Id= 4
HostName= 192.168.1.110
[mysqld]
ArbitrationRank=2 (非常重要,全靠有它,才可以形成仲裁竞争,从而当另一个机子当了时,此机还可以有知道partion完整的节点)
[mysqld]
ArbitrationRank=2
[tcp default]
PortNumber= 63132

2.配置通用my.cnf文件,mysqld及ndbd,ndb_mgmd均使用此文件.
# vi /etc/my.cnf
在my.cnf中添加如下内容:
[mysqld]
default-storage-engine=ndbcluster  避免在sql语句中还要加入ENGINE=NDBCLUSTER。
ndbcluster
ndb-connectstring=192.168.1.111,192.168.1.110
[ndbd]
connect-string=192.168.1.111,192.168.1.110
[ndb_mgm]
connect-string=192.168.1.111,192.168.1.110
[ndb_mgmd]
config-file=/var/lib/mysql-cluster/config.ini
[mysql_cluster]
ndb-connectstring= 192.168.1.111,192.168.1.110

保存退出后,启动管理节点Server1为:
# ndb_mgmd --ndb_nodeid=1
启动管理节点Server2为:
# ndb_mgmd --ndb_nodeid=2

注:在启动时有一个警告提示
Cluster configuration warning:
  arbitrator with id 1 and db node with id 3 on same host 192.168.1.111
  arbitrator with id 2 and db node with id 4 on same host 192.168.1.110
  Running arbitrator on the same host as a database node may
  cause complete cluster shutdown in case of host failure.
说节点1和3,2和4的arbitrator一样,可能引起整个集群失败。(可以不用放在心上)

四、初始化集群
在Server1中
# ndbd --nodeid=3 --initial
在Server2中
# ndbd --nodeid=4 --iniitial
注:只有在第一次启动ndbd时或者对config.ini进行改动后才需要使用--initial参数!

五、检查工作状态
在任意一台机子上启动管理终端:
# ndb_mgm
键入show命令查看当前工作状态:(下面是一个状态输出示例)
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.1.111:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @192.168.1.111  (Version: 5.2.3, Nodegroup: 0, Master)
id=4    @192.168.1.110  (Version: 5.2.3, Nodegroup: 0)
[ndb_mgmd(MGM)] 2 node(s)
id=1    @192.168.1.111  (Version: 5.2.3)
id=2    @192.168.1.110  (Version: 5.2.3)
[mysqld(API)]   2 node(s)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)
ndb_mgm>

如果上面没有问题,现在开始加入mysqld(API):
注意,这篇文档对于MySQL并没有设置root密码,推荐你自己设置Server1和Server2的MySQL root密码。
在Server1 中:
#mysqld_safe --ndb_nodeid=5 --user=mysql &
在Server2 中:
#mysqld_safe --ndb_nodeid=6 --user=mysql &
# ndb_mgm -e show
信息如下:
Connected to Management Server at: 192.168.1.111:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @192.168.1.111  (Version: 5.2.3, Nodegroup: 0, Master)
id=4    @192.168.1.110  (Version: 5.2.3, Nodegroup: 0)
[ndb_mgmd(MGM)] 2 node(s)
id=1    @192.168.1.111  (Version: 5.2.3)
id=2    @192.168.1.110  (Version: 5.2.3)
[mysqld(API)]   4 node(s)
id=5    @192.168.1.111  (Version: 5.2.3)
id=6    @192.168.1.110  (Version: 5.2.3)

ok,可以测试了:
在Server1 中
# /usr/local/mysql/bin/mysql -u root -p
>create database aa;
> use aa;
> CREATE TABLE ctest (i INT) ;
> INSERT INTO ctest () valueS (1);
> SELECT * FROM ctest;
应该可以看到1 row returned信息(返回数值1)。
如果上述正常,则换到Server2,观察效果。如果成功,则在Server2中执行INSERT再换回到Server1观察是否工作正常。
如果都没有问题,那么恭喜成功!

六、破坏性测试
将Server1或Server2的网线拔掉(即ifconfig eth0 down),观察另外一台集群服务器工作是否正常(可以使用SELECT查询测试)。测试完毕后,重新插入网线即可。
注意:在未对集群做任何读写操作前,此测试结果无效,因为,集群初始后只在/var/lib/mysql-cluster/下建了几个空目录,还没有正常协同工作,会出现整个所有存储(ndbd)节点关闭.
也可以这样测试:在Server1或Server2上:
# ps aux | grep ndbd
将会看到所有ndbd进程信息:
root      5578  0.0  0.3  6220 1964 ?        S    03:14   0:00 ndbd
root      5579  0.0 20.4 492072 102828 ?     R    03:14   0:04 ndbd
root     23532  0.0  0.1  3680  684 pts/1    S    07:59   0:00 grep ndbd
然后杀掉一个ndbd进程以达到破坏MySQL集群服务器的目的:
# kill -9 5578 5579
之后在另一台集群服务器上使用SELECT查询测试。并且在管理节点服务器的管理终端中执行show命令会看到被破坏的那台服务器的状态。
测试完成后,只需要重新启动被破坏服务器的ndbd进程即可:
# ndbd --ndb_nodeid=此存储节点的id
注意!前面说过了,此时是不用加--inital参数的!
至此,MySQL双机集群就配置完成了!
阅读(1100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~