Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621722
  • 博文数量: 43
  • 博客积分: 4250
  • 博客等级: 上校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 04:09
文章分类
文章存档

2009年(2)

2008年(5)

2007年(29)

2006年(7)

我的朋友

分类: Mysql/postgreSQL

2007-03-28 13:47:23

一、介绍
这篇文档旨在介绍如何设计MySQL集群,制做集群模板,有效规避mysql限制。(此文为二管理,四存储,八数据的模块制作)
安装环境及软件包:
vmware workstation 5.5.3
mysql-5.2.3-falcon-alpha.tar.gz
gentoo 2006.1
(每机单网卡多ip)
Server1: 192.168.1.111 (ndb_mgmd, id=1)
Server1: 192.168.1.112 (ndbd ,id=3)
server1: 192.168.1.113  (ndbd,id=4)
Server2:  192.168.1.110 (ndb_mgmd,id=2)
server2: 192.168.1.109 (ndbd,id=5)
server2: 192.168.1.108 (ndbd,id=6)
 
二、在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= 4  (此文有四个存储节点,replicas为4,每个都是单独的replicas组)
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512
[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.112
[ndbd]
Id= 4
HostName= 192.168.1.113
[ndbd]
Id= 5
HostName= 192.168.1.109
[ndbd]
Id= 6
HostName= 192.168.1.108
[mysqld]
[mysqld]
[mysqld]
[mysqld]
[mysqld]
[mysqld]
[mysqld]
[mysqld]  共八个mysqld定义
[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
四、初始化集群
在Server1中
# ndbd --bind_address=192.168.1.112 --nodeid=3 --initial
#ndbd  --bind_address=192.168.1.113--nodeid=4 --initial
在Server2中
#ndbd  --bind_address=192.168.1.109 --nodeid=5 --initial
#ndbd  --bind_address=192.168.1.108 --nodeid=6 --initial
注:只有在第一次启动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)]     4 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)
id=5    @192.168.1.109  (Version: 5.2.3, Nodegroup: 0)
id=6    @192.168.1.108  (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)]   8 node(s)
id=7 (not connected, accepting connect from any host)
id=8 (not connected, accepting connect from any host)
id=9 (not connected, accepting connect from any host)
id=10 (not connected, accepting connect from any host)
id=11 (not connected, accepting connect from any host)
id=12 (not connected, accepting connect from any host)
id=13 (not connected, accepting connect from any host)
id=14 (not connected, accepting connect from any host)
ndb_mgm>
 
如果上面没有问题,现在开始加入mysqld(API):
注意,这篇文档对于MySQL并没有设置root密码,推荐你自己设置Server1和Server2的MySQL root密码。
在Server1 中:
 #mysqld_safe --ndb_nodeid=7 --user=mysql &
在Server2 中:
#mysqld_safe --ndb_nodeid=8 --user=mysql &
# ndb_mgm -e show
信息如下:
Connected to Management Server at: 192.168.1.111:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     4 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)
id=5    @192.168.1.109  (Version: 5.2.3, Nodegroup: 0)
id=6    @192.168.1.108  (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)
id=7 (not connected, accepting connect from any host)
id=8 (not connected, accepting connect from any host)
id=9 (not connected, accepting connect from any host)
id=10 (not connected, accepting connect from any host)
id=11 (not connected, accepting connect from any host)
id=12 (not connected, accepting connect from any host)
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观察是否工作正常。
如果都没有问题,那么恭喜成功!至此模板制作完成。
 注意:在模板制作完成的过程中,测试过程完成了对集群的初次读写,若跳过测试(跳过读写),在集群未协同工作前进行下面的操作,则进行下面的操作毫无意义。因为,集群初始后只在/var/lib/mysql-cluster/下建了几个空目录,还没有正常协同工作.
 
六、备份/var/lib/mysql-cluster/下的相应ndb_*_fs,留做以后使用。
七、原理:
ndbd --initial初始集群结构,在官方文档中增加节点要bakcup后restore要initial的主要是存储节点,管理节点和数据节点都可用集群restart实现.
而存储节点特点是只要一个replica组有效,则整个集群就可以正常工作,因此,在模板完成后,未使用的存储节点就可以当做故障节点,当启用时,存储节点可以通过其内部达到同步.
缺点,在集群启动时,每个未使用存储节点默认等待启用时间为60秒,造成集群启动时间加长,可以能通过设置参数设小,不推荐。
此设置为replica为4(最大值),若有8个存储节点,则至少要启动一个replica组(2个ndbd即存储节点).
八、 实现:
数据节点不用说了,管理节点两个也够用了,主要是存储节点了。
根据上面的步骤搭建一台服务器,拷贝相应的ndb_*_fs到/var/lib/mysql-cluster/下,机器ip符合config.ini中的定义,好了,可以启用了,简单吧。
对于现有设计,可以按官方文档增加修改节点的工作时,参考此文档,预留相应的空闲节点,为以后的工作增加便利。
 
阅读(2488) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~