请教关于mysql cluster 缺点集群NoOfReplicas参数问题

zhenliang8 的BLOG
用户名:zhenliang8
文章数:134
评论数:197
访问量:139781
注册日期:
阅读量:5863
阅读量:12276
阅读量:303631
阅读量:1022015
51CTO推荐博文
MySQL Cluster MySQL集群Linux最新版本7.3.2文件大小md5mysqlcluster-7.3.2-linux-x32.tar.gz431.0MB6fcd875bmysqlcluster-7.3.2-linux-x64.tar.gz441.8MB330c71a87fbf8fe0ad6e794&官方下载地址:/downloads/cluster/Window最新版本7.3.2文件大小md5mysqlcluster-7.3.2-windows-x32.msi100.2MB9daf1a2e805f9a1fecc3a1fmysqlcluster-7.3.2-windows-x64.msi95.5MB6fe30e761cb17f0c3d1c基本概念:“NDB” 是一种“内存中”的存储引擎,也是事务型存储引擎,具备ACID属性。管理(MGM)节点:负责管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令“ndb_mgmd”启动的。数据节点:用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。数据节点是用命令“ndbd”启动的。SQL节点:用来访问 Cluster数据的节点。也就是Mysql服务,可以使用service mysqld start启动。管理服务器(MGM节点)负责管理 Cluster配置文件和 Cluster日志。 Cluster中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在位置的方式。当数据节点内出现新的事件时,节点将关于这类事件的信息传输到管理服务器,然后,将这类信息写入 Cluster日志。 集群配置概述:安装版本:mysql cluster 7.3.2操作系统 :centos6.3(X64)软件名称 :mysql-cluster-gpl-7.3.2-linux-glibc2.5-x86_64.tar.gz (通用版)管理节点IP:192.168.0.202数据节点-SQL节点IP:192.168.0.203数据节点-SQL节点IP:192.168.0.204安装依赖包:yum install -y glibc perl libaio-develx32位系统要安装兼容库组:yum groupinstall “Compatibility libraries”一、管理节点安装配置1、安装mysql-clustergroupadd&mysql
useradd&-g&mysql&-s&/sbin/nologin&mysql
tar&-zxvf&mysql-cluster-gpl-7.3.2-linux-glibc2.5-x86_64.tar.gz
mv&mysql-cluster-gpl-7.3.2-linux-glibc2.5-x86_64&/usr/local/mysql-cluster
chown&-R&root.mysql&/usr/local/mysql/
chown&-R&mysql.mysql&/usr/local/mysql/data/
/usr/local/mysql/scripts/mysql_install_db&--basedir=/usr/local/mysql&--datadir=/usr/local/mysql/data&--user=mysql&&&&#初始化数据库
cp&-rf&/usr/local/mysql/bin/ndb_mgm*&/usr/local/bin/&#复制ndb节点管理命令到本地,方便使用2、修改mysql主配置文件vi&/f
&user&=&mysql
&socket&=&/tmp/mysql.sock
&basedir&=&/usr/local/mysql&#安装目录
&datadir&=&/usr/local/mysql/data&#数据库存放目录
&character-set-server=UTF8
&ndbcluster&#运行NDB存储引擎
&ndb-connectstring=192.168.0.202
&lower_case_table_names=1&#表名是否区分大小写1为不区分,不然linux下表名是区分大小写的
[MYSQL_CLUSTER]
ndb-connectstring=192.168.0.202&#Mysql&Cluster管理节点IP3、创建mysql集群配置文件mkdir&/var/lib/mysql-cluster
vi&/var/lib/mysql-cluster/config.ini
[ndbd&default]
NoOfReplicas=2&#定义在Cluster环境中相同数据的份数,最大为4
DataMemory=256M&#分配的数据内存大小,根据本机服务器内存适量来分配
IndexMemory=256M&#设定用于存放索引(非主键)数据的内存段大小
#一个NDB节点能存放的数据量是会受到DataMemory和IndexMemory两个参数设置的约束,两者任何一个达到限制数量后,都无法再增加能存储的数据量。如果继续存入数据系统会报错“table&is&full”。
[ndb_mgmd]
hostname=192.168.0.202
datadir=/var/lib/mysql-cluster/
hostname=192.168.0.203
datadir=/usr/local/mysql/data
hostname=192.168.0.204
datadir=/usr/local/mysql/data
hostname=192.168.0.203
hostname=192.168.0.204
保存退出!
chown&mysql.mysql&/var/lib/mysql-cluster/config.ini二、两台数据节点和SQL节点配置相同1、安装mysql-clustertar&-zxvf&mysql-cluster-gpl-7.3.2-linux-glibc2.5-x86_64.tar.gz
mv&mysql-cluster-gpl-7.3.2-linux-glibc2.5-x86_64&/usr/local/mysql
groupadd&mysql
useradd&-g&mysql&-s&/sbin/nologin&mysql
chown&-R&root.mysql&/usr/local/mysql
chown&-R&mysql.mysql&/usr/local/mysql/data
/usr/local/mysql/scripts/mysql_install_db&--basedir=/usr/local/mysql&--datadir=/usr/local/mysql/data&--user=mysql&&&#初始化数据库
cp&/usr/local/mysql/support-files/mysql.server&/etc/init.d/mysqld
cp&/usr/local/mysql/support-f&/f
chmod&+x/etc/init.d/mysqld2、修改mysql配置文件vi&/f
user=mysql
character_set_server=utf8
ndbcluster
ndb-connectstring=192.168.0.202
default-storage-engine=ndbcluster&#设置默认是NDB存储引擎
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
[MYSQL_CLUSTER]
ndb-connectstring=192.168.0.202&#mysql&cluster&管理节点IP三、测试(先关闭三台服务器的防火墙(IPTABLES)与 Selinux)1、启动管理节点ndb_mgmd&-f&/var/lib/mysql-cluster/config.ini&--initial
netstat&-tuplna&|&grep&1186&#默认连接端口1186,启动成功
tcp&0&0&0.0.0.0:.0.0:*&LISTEN&1369/ndb_mgmd#--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时。如果启动出现报错:把config.ini里设置的nodeid都给删除即可!2、启动两台数据节点和SQL节点数据节点:/usr/local/mysql/bin/ndbd --initialSQL节点:bin/mysqld_safe --user=mysql & 或 service mysqld start3、查看集群状态ndb_mgm -e show #显示管理节点和数据节点则配置成功4、创建一个数据库验证是否同步mysql&-u&root&-p
Mysql&create&database&
Mysql&use&
Mysql&create&table&abc&(id&int)&engine=ndbcluster;#指定数据库表的引擎为NDB,否则同步失败
Mysql&Insert&into&abc&()values&(1);
Mysql&select&*&from&abc;#此时看两个数据是否数据一致,如果一致说明集群已经成功!注意事项:1.在建表的时候一定要用ENGINE=NDB或ENGINE=NDBCLUSTER指定使用NDB集群存储引擎,或用ALTER TABLE选项更改表的存储引擎。2.NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动生成隐含的主键。3.Sql节点的用户权限表仍然采用MYISAM存储引擎保存的,所以在一个Sql节点创建的MySql用户只能访问这个节点,如果要用同样的用户访问别的Sql节点,需要在对应的Sql节点追加用户。四、管理和维护命令关闭mysql集群:ndb_mgm -e shutdown重启mysql集群:ndb_mgmd -f /var/lib/mysql-cluster/config.ini 重启数据节点:/usr/local/mysql/bin/ndbd启动SQL节点:/usr/local/mysql/bin/mysqld_safe --user=mysql & 或 service mysqld restart查看mysql状态:ndb_mgm -e show启动顺序:管理节点 -& 数据节点 -& SQL节点关闭顺序:SQL节点 -& 数据节点 -& 管理节点本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
13:14:17 13:34:097.mysql-cluster集群-安装篇
本文主要介绍Mysql-Cluster的安装,首先先简单了解一下:(linux用户,本人 debian)
MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署&内存中&的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个有自己的内存和磁盘,不存在单点故障。(百度粘贴-_-)
Mysql-cluster分为:
1. 管理节点:管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等
2. 数据节点:用于保存 Cluster的数据
3. Sql节点:用来访问 Cluster数据的节点
此安装为1个管理节点,2个数据节点,2个sql节点,安装在两台机器,一台机器:管理节点,数据节点,sql节点,另一台:数据节点,sql节点
 节点名称
 管理节点
 192.168.1.111
 数据节点1
 192.168.1.111
 数据节点2
 192.168.1.112
 Sql节点1
 192.168.1.111
 Sql节点2
 192.168.1.112
三、安装步骤
1. 为d增加一个登陆用户组,两台服务器都需要
# groupadd mysql
# useradd &g mysqlmysql
2. 安装管理节点
# tar zxvf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
# mv mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64/*/opt/mysql &r
创建mysql-cluster目录,并配置config.ini
# mkdir/apps/mysql/mysql-cluster
# cd/apps/mysql/mysql-cluster
# vi config.ini
内容如下:
[ndbddefault]
NoOfReplicas=2 (代表sql节点的数量)
DataMemory=500M
indexMemory=300M
[tcpdefault]
SendBufferMemory=2M
ReceiveBufferMemory=2M
[ndb_mgmddefault]
PortNumber=1186
Datadir=/apps/mysql/mysql-cluster
[ndb_mgmd]
HostName=192.168.1.111
HostName=192.168.1.111
DataDir=/apps/mysql/data
HostName=192.168.1.112
DataDir=/apps/mysql/data
Hostname=192.168.1.111
Hostname=192.168.1.112
3. 安装数据节点
datadir=/opt/mysql/ndbdata
port =3306
ndbcluster #数据节点(因为在一台机器所以合并)
ndb-connectstring=192.168.1.111
port =3307
[mysql_cluster]
ndb-connectstring = 192.168.1.111
4. 安装sql节点
datadir=/opt/mysql/ndbdata
port =3306
ndbcluster #数据节点(因为在一台机器所有合并)
ndb-connectstring=192.168.1.111
port =3307
[mysql_cluster]
ndb-connectstring = 192.168.1.111
next:(安装mysqld)
# cd /opt/mysql
# ./scripts/mysql_install_db &user=mysql (安装到了 /opt/mysql/ndbdata)
5. 开始启动cluster
开启顺序: 管理节点-&数据节点-&sql节点
管理节点启动
# cd /opt/mysql
# ./bin/ndb_mgmd &f /apps/mysql/mysql-cluster/config.ini--configdir=/apps/mysql/mysql-cluster/--ndb-nodeid=1
数据节点启动(两个节点都要启动,不然sql节点不能启动)
# cd /opt/mysql
# ./bin/ndbd &-initial &-ndb-connectstring=192.168.1.111:1186
Sql节点启动
# cd /opt/mysql/ndbdata
# ../bin/mysqld_safe &user=mysql &
# cd /opt/mysql/
# ./bin/ndb_mgm &e show
Connectedto Management Server at: 192.168.1.111:1186
ClusterConfiguration
---------------------
[ndbd(NDB)] 1 node(s)
id=2 @192.168.1.111 (mysql-5.6.21 ndb-7.3.7, Nodegroup: 0, *)
id=3 @192.168.1.112 (mysql-5.6.21 ndb-7.3.7, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.111 (mysql-5.6.21 ndb-7.3.7)
[mysqld(API)] 1 node(s)
id=4 @192.168.1.112 (mysql-5.6.21 ndb-7.3.7)
id=5 @192.168.1.112 (mysql-5.6.21 ndb-7.3.7)
说明已经成功
Q: sql节点无法启动&Tablesnot available after 30 seconds. Considerincreasing --ndb-wait-setup value&
A: 数据节点没有全部启动
Q: sql节点启动时: &Unable to lock./ibdata1, error: 11&
A: 已经启动了
Q: 登录sql时:mysql &u root-p
1045 access denied for user 'root'@'localhost' using password yes
A: 直接 mysql &u root (需要修改配置文件)
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'查看: 3831|回复: 5
请教关于mysql cluster集群NoOfReplicas参数问题
论坛徽章:2
官方网站上说参数NoOfReplicas的值表示数据的备份份数,例如:NoOfReplicas=2,若在其中一个sql节点某张表中插入数据,则这份数据会在另外一个数据节点上保存一份,即有2份完全一样得数据存在于集群中的2个数据节点中,但是现在却出现了一个情况让我很困惑,我把参数NoOfReplicas的值配置成1,然后往其中一个节点插入数据,这时候在同一个节点组里另外一个节点上也出现了这样一份数据,这到底是怎么回事啊?配置成1和2都会有2份完全一样得数据存在于集群中,是不是不管这个参数配置成多少,当往其中一个节点插入数据时,只要是和该节点同属于一个节点组的节点上,都会有这样一份数据存在?
论坛徽章:3
我的理解是这个参数是控制数据份数的,如果是2 表有两份数据,如果是1表示只有一份数据. mycluster 中没有参数设计节点组数. 节点组数=节点数/NoOfReplicas.
所以你如果总共有两个数据节点,如果NoOfReplicas设为2, 那么意味着只有一个节点组. 如果NoOfReplicas=1,那么就有两个节点组,即有一份备份.
在这种情况下,当NoOfReplicas=2时, 你可以试验一下如果一个data node 停掉了,cluster 可以照常工作; 如果NoOfReplicas=1, 一个data node 停掉了,cluster 就会自动停掉.
论坛徽章:2
xchui702 发表于
我的理解是这个参数是控制数据份数的,如果是2 表有两份数据,如果是1表示只有一份数据. mycluster 中没有参数 ...
官网上也是这样说的,但是我现在遇到一个怪异的问题,我把NoOfReplicas参数设置成1,我有2个数据节点,按照计算公式应该有2个节点组,可是我通过管理节点查看的时候,却仍然只有一个节点组,真是没招了!
论坛徽章:3
会不会是config.ini文件没有生效?
如果是,参考一下官方文档, 可以改变启动ndb_mgmd的方式,使参数生效.
Caching of configuration data.&&In MySQL Cluster NDB 7.3, MySQL Cluster uses stateful configuration. Rather than reading the global configuration file every time the management server is restarted, the management server caches the configuration the first time it is started, and thereafter, the global configuration file is read only when one of the following conditions is true:
•The management server is started using the --initial option.&&In this case, the global configuration file is re-read, any existing cache files are deleted, and the management server creates a new configuration cache.
•The management server is started using the --reload option.&&In this case, the management server compares its cache with the global configuration file. If they differ, the management server creates a new any existing configuration cache is preserved, but not used. If the management server's cache and the global configuration file contain the same configuration data, then the existing cache is used, and no new cache is created.
•The management server is started using a --config-cache option.&&This option can be used to force the management server to bypass configuration caching altogether. In this case, the management server ignores any configuration files that may be present, always reading its configuration data from the config.ini file instead.
•No configuration cache is found.&&In this case, the management server reads the global configuration file and creates a cache containing the same configuration data as found in the file.
论坛徽章:3
可能是config.ini 参数没有生效? 可以参照官方文档改变ndb_mgmd的启动方式,让它生效.
•The management server is started using the --initial option.&&In this case, the global configuration file is re-read, any existing cache files are deleted, and the management server creates a new configuration cache.
•The management server is started using the --reload option.&&In this case, the management server compares its cache with the global configuration file. If they differ, the management server creates a new any existing configuration cache is preserved, but not used. If the management server's cache and the global configuration file contain the same configuration data, then the existing cache is used, and no new cache is created.
•The management server is started using a --config-cache option.&&This option can be used to force the management server to bypass configuration caching altogether. In this case, the management server ignores any configuration files that may be present, always reading its configuration data from the config.ini file instead.
•No configuration cache is found.&&In this case, the management server reads the global configuration file and creates a cache containing the same configuration data as found in the file.
论坛徽章:6
ndb_mgmd 启动需要初始化--initial
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号mysqlcluster集群搭建_注意数据节点和sql节点否能链接管理节点
mysqlcluster集群搭建_注意数据节点和sql节点否能链接管理节点
数据节点和 sql节点是否能链接管理节点 注意端口号 telnet
  关闭防火墙:S
本站原创或翻译的文章转载请注明来源或原文地址, 技术交流:
MYSQLcluster分布式搭建笔记
  一、注意事项
  数据节点和 sql节点是否能链接管理节点 注意端口号 telnet
  关闭防火墙:S
  Sql 节点启动时注意权限
  二、软件安装:
  (一)管理节点MGM
  配置管理节点
  首先在合适的位置,创建一个管理节点的配置文件,步骤如下:
  [ ~]# mkdir /var/lib/mysql-cluster
  [ ~]# cd /var/lib/mysql-cluster
  [ mysql-cluster]# vi config.ini
  配置文件config.ini内容如下:
  [ndbd default]
  NoOfReplicas=1
  DataMemory=80M
  IndexMemory=18M
  [ndb_mgmd]
  hostname=192.168.2.253
  datadir=/var/lib/mysql-cluster
  [ndbd]
  hostname=192.168.2.253
  datadir=/usr/local/mysql/data
  [mysqld]
  hostname=192.168.2.254
  安装管理节点,不需要mysqld二进制文件,只需要MySQL Cluster服务端程序(ndb_mgmd)和监听客户端程序(ndb_mgm)。这两个文件都在下载的MySQL-cluster文件解压后的bin文件夹中。执行如下步骤,在集群的管理节点上安装ndb_mgmd 和 ndb_mgm。
  1、改变地址到/var/tmp目录下,解压MySQL-Cluster压缩文件,取出ndb_mgm和ndb_mgmd复制到/usr/local/bin 目录下。
  [ ~]# cd /usr/local/
  [ local]# tar &xzvf mysql-cluster-gpl-7.1.13-linux-i686-glibc23.tar.gz
  [ local]# cd mysql-cluster-gpl-7.1.13-linux-i686-glibc23
  [ mysql-cluster-gpl-7.1.13-linux-i686-glibc23]# cp bin/ndb_mgm* /usr/local/bin
  2、改变路径为拷贝到的目录下,并确保这两个文件可执行。
  [ tm local p]# cd /usr/local/bin
  [ bin]# chmod +x ndb_mgm*
  3、在/usr/local下创建mysql文件夹。
  [ ~]# cd /usr/local
  [ local]# mkdir mysql
  (二)、数据节点NDBD和SQL节点
  在每一个SQl点中的/etc目录下找到my.cnf文件,并做如下配置:
  [client]
  socket=/usr/local/mysql/sock/mysql.sock
  [mysqld]
  ndbcluster
  datadir=/usr/local/mysql
  socket=/usr/local/mysql/sock/mysql.sock
  ndb-connectstring=192.168.56.88
  [mysql_cluster]
  ndb-connectstring=192.168.56.88
  在每一个数据节点中的/etc目录下找到my.cnf文件,并做如下配置:
  在每一个数据节点NDBD和SQL节点的机器上,用root用户执行下面的步骤。
  1、检查/etc/passwd 和 /etc/group 文件,是否存在mysql组和mysql用户,如果没有,用下面的创建一个mysql组,并在改组中添加mysql用户。
  [ ~]# groupadd mysql
  [ ~]# useradd &g mysql mysql
  2、改变文件夹位置到mysql压缩包的存放位置,解压文件,准备安装,步骤如下:
  [ ~]# cd /usr/local/
  [ local]# tar &xzvf mysql-cluster-gpl-7.1.13-linux-i686-glibc23.tar.gz
  3、改变位置到local文件夹,改变mysql解压后的文件夹名称为mysql,然后执行提供的脚本,创建系统数据库。
  [ local]# mv mysql-cluster-gpl-7.1.13-linux-i686-glibc23/ mysql/
  [ local]# cd mysql
  [ mysql]# mkdir sock
  [ mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql --socket=/usr/local/mysql/sock/mysql.sock
  4、为MySQL服务及数据目录设置必要的服务。
  [ mysql]# chown -R root .
  [ mysql]# chown -R mysql.mysql /usr/local/mysql/data
  [ mysql]# chown -R mysql.mysql /usr/local/mysql/sock
  [ mysql]#chgrp -R mysql .
  [ mysql]# ls -l
  5、复制MySQL的启动脚本到如下的文件夹,确保可以执行。并设置为当系统启动时,同时启动MySQL。
  [ mysql]# cp support-files/mysql.server /etc/rc.d/init.d/
  [ mysql]# chmod +x /etc/rc.d/init.d/mysql.server
  [ mysql]# chkconfig --add mysql.server
  三、Cluster环境启动
  注意启动顺序:首先是管理节点,然后是NDBD节点,最后是SQL节点。
  1、[MGM]
  [ ~]#ndb_mgmd -f /var/lib/mysql-cluster/config.ini
  2、[NDBD]
  首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。
  [ ~]#/usr/local/mysql/bin/ndbd --initial
  如果不是首次启动,则执行下面的命令。
  [ ~]# /usr/local/mysql/bin/ndbd
  3、[SQLD]
  /usr/local/mysql/bin/mysqld_safe --user=mysql &
  有可能出现上图问题,是系统数据库创建问题,只需再次创建系统数据库,方法如下:
  [ mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql
  /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql --socket=/usr/local/mysql/sock/mysql.sock
  /usr/local/mysql/bin/mysql_upgrade --user=mysql
  netstat -ntulpa
  再次启动
  /usr/local/mysql/bin/mysqld_safe --user=mysql &
  查看管理节点,启动成功:
  /etc/rc.d/init.d/mysqld stop
  /etc/rc.d/init.d/mysqld start
------分隔线----------------------------
要实现应用框架,就必须提供基本的概念抽象,如Request、Response和Session等。Reques...
Ubuntu对语音啦视频等支持还是不太好,而且我们常用的通讯工具是QQ,官方给出的Linux ...
大数据这个领域是热火朝天,而Apache Spark则是一个炙手可热大数据神器。趁着现在还比...
这篇文章主要介绍了红帽RHEL 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享,...博客访问: 688403
博文数量: 242
博客积分: 5592
博客等级: 大校
技术积分: 1967
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Mysql/postgreSQL
高可用性、负载均衡的mysql集群解决方案一、mysql的市场占有率二、mysql为什么受到如此的欢迎三、mysql数据库系统的优缺点四、网络服务器的需求五、什么是mysql的集群六、什么是负载均衡七、mysql集群部署和实现方法八、负载均衡的配置和测试九、Mysql集群系统的测试(测试方案+测试脚本+测试结果分析)l&mysql的市场占有率MySQL是世界上最流行的开源数据库,已有1100多万的击活安装,每天超过五万的下载。MySQL为全球开发者、DBA和IT管理者在可靠性、性能、易用性方面提供了选择。第三方市场调查机构Evans&Data&Corporation调查显示,过去两年内在开发者使用的所有数据库中,MySQL已经拥有了25%的市场占有率。开源已经成为当今IT结构中不可或缺的重要部分,而且开源的市场占有率将继续增加。如下图所示:l&mysql为什么受到如此的欢迎Sun公司今天1月份花了10亿美元将mysql收购,准备进军开源和数据库。数据库系统OracleSQL&ServerMySQLDB2是否免费收费收费免费收费存储过程支持支持支持支持视图支持支持支持支持快照支持支持不支持支持触发器支持支持支持支持安全强中中强复杂查询强中弱中索引丰富一般弱中数据类型多多多多事务处理强强弱中l&mysql数据库系统的优缺点每个系统都有自身的不足和发展历程,mysql也一样。优点缺点源码公开,免费跨平台为多种开发语言和包提供了API支持多线程小巧、灵活、速度较快支持各种字符集提供各种连接、优化的工具包不完善,很多数据库特性不支持只适合中小型应用,对于大型应用,可以跟其他数据库互补;数据库系统数据量只能达到千万级别;l&网络服务的需求随着Internet的飞速发展和对我们生活的深入影响,越来越多的个人在互联网上购物、娱乐、休闲、与人沟通、获取信息;越来越多的企业把他们与顾客和业务伙伴之间的联络搬到互联网上,通过网络来完成交易,建立与客户之间的联系。互联网的用户数和网络流量正以几何级数增长,这对网络服务的可伸缩性提出很高的要求。例如,比较热门的Web站点会因为被访问次数急剧增长而不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。另外,随着电子商务等关键性应用在网上运行,任何例外的服务中断都将造成不可估量的损失,服务的高可用性也越来越重要。所以,对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长,这种需求可以归结以下几点:可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的。单服务器显然不能处理不断增长的负载。这种服务器升级方法有下列不足:一是升级过程繁琐,机器切换会使服务暂时中断,并造成原有计算资源的浪费;二是越往高端的服务器,所花费的代价越大;三是一旦该服务器或应用软件失效,会导致整个服务的中断。通过高性能网络或局域网互联的服务器集群正成为实现高可伸缩的、高可用网络服务的有效结构。这种松耦合结构比紧耦合的多处理器系统具有更好的伸缩性和性能价格比,组成集群的PC服务器或RISC服务器和标准网络设备因为大规模生产,价格低,具有很高的性能价格比。但是,这里有很多挑战性的工作,如何在集群系统实现并行网络服务,它对外是透明的,它具有良好的可伸缩性和可用性。针对上述需求,我们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的服务器集群,我们称之为Linux虚拟服务器(Linux&Virtual&Server)。在LVS集群中,使得服务器集群的结构对客户是透明的,客户访问集群提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。l&什么是mysql集群分为同步集群和异步集群。同步集群(mysql&cluster)结构:(data&+&sql&+&mgm节点)特点:内存级别的,对硬件要求较低,但是对内存要求较大。换算比例为:1:1.1;数据同时放在几台服务器上,冗余较好;速度一般;建表需要声明为engine=ndbcluster扩展性强;可以实现高可用性和负载均衡,实现对大型应用的支持;必须是特定的mysql版本,如:已经编译好的max版本;配置和管理方便,不会丢失数据;异步集群(mysql&replication)结构:(master&+&slave)特点:主从数据库异步数据;数据放在几台服务器上,冗余一般;速度较快;扩展性差;无法实现高可用性和负载均衡(只能在程序级别实现读写分离,减轻对主数据库的压力);配置和管理较差,可能会丢失数据;l&什么是负载均衡通过director,将用户的请求分发到real&server服务器上,然后返回给用户。负载均衡部署灵活、能够满足各种需求。实现方式:硬件:BIG/IP、Cisco、IBM(昂贵)软件:LVS(免费)LVS系统将用户的请求的数据包在数据层和网络层进行了封装和转发,由三种方式满足各种需求。DR:直接路由Tuning:tcp/ip隧道NAT:网络地址转换需求:免费的软件包2台低端的director(active和standby)心跳线:连接2台director,检测活动情况2台以上的real&servers通用结构:有兴趣的可以分别研究上面的三种LVS结构。l&mysql集群部署和实现方法假设现在有4台服务器(mysql官方推荐的最小配置)服务器开启的服务角色192.168.131.164Ndb1MysqldMysql&APINdb_mgmd管理节点(master)HeartbeatDirector(master)192.168.131.26Ndb2MysqldMysql&APINdb_mgmd管理节点(backup)HeartbeatDirector(standby)192.168.131.77Sql1MysqldMysql&API(realserver)Ndbd存储节点Arptables访问路由192.168.131.101Sql2MysqldMysql&API(realserver)Ndbd存储节点Arptables访问路由2)服务器安装配置和网络连接(以下为所有服务器各操作一遍,共4遍)安装:将4台服务器安装CentOS&5.2,选择下面的包:,但perl-mysql-xxx的所有包需要安装支持美国英语设定主机名:Vi&/etc/sysconfig/networkHostname=xxx:wq检查主机名:Uname&-a必须和上表中的一一对应。否则有问题。Vi&/etc/hostsNdb1 192.168.131.164Ndb2 192.168.131.26Sql1
192.168.131.77Sql2
192.168.131.101建立目录:#&-p以下分别操作:以下在ndb1(164)和ndb2(26)上操作[root@ndb1&~]#&vi&/var/lib/mysql-cluster/config.ini&[NDBD&DEFAULT]NoOfReplicas=2DataMemory=800MIndexMemory=400M[MYSQLD&DEFAULT][NDB_MGMD&DEFAULT][TCP&DEFAULT]#&Section&for&the&cluster&management&node[NDB_MGMD]#&IP&address&of&the&management&node&(this&system)ID=1HostName=192.168.131.164[NDB_MGMD]#&IP&address&of&the&management&node&(this&system)ID=2HostName=192.168.131.26#&Section&for&the&storage&nodes[NDBD]#&IP&address&of&the&first&storage&nodeHostName=192.168.131.77DataDir=&/var/lib/mysql-cluster[NDBD]#&IP&address&of&the&second&storage&nodeHostName=192.168.131.101DataDir=/var/lib/mysql-cluster#&one&[MYSQLD]&per&storage&node[MYSQLD][MYSQLD][MYSQLD][MYSQLD][MYSQLD][MYSQLD][MYSQLD]:wq以下在mysql&API上操作(这里,我设定了7个API,以后可以随时加入)Mysqld&API的配置文件:Vi&/f[root@ndb1&~]#&cat&/f&[mysqld]ndbclusterndb-connectstring&=&"host=192.168.131.164,host=192.168.131.26"&[ndb_mgm]connect-string&=&"host=192.168.131.164,host=192.168.131.26"[ndbd]connect-string&=&"host=192.168.131.164,host=192.168.131.26":wq分别启动ndb_mgmd/ndbd/mysqld164/26:ndb_mgmd&-f&/var/lib/mysql-cluster/config.ini77/101:Ndbd&--initial164/26/77/101:/etc/rc.d/init.d/mysql&start在管理节点ndb1(164)和ndb2(26)上查看各节点的情况:[root@ndb1&~]#&ndb_mgm--&NDB&Cluster&--&Management&Client&--ndb_mgm>&showConnected&to&Management&Server&at:&192.168.131.164:1186Cluster&Configuration---------------------[ndbd(NDB)]&&&&&2&node(s)id=3&&&&@192.168.131.77&&(Version:&5.0.67,&Nodegroup:&0,&Master)id=4&&&&@192.168.131.101&&(Version:&5.0.67,&Nodegroup:&0)[ndb_mgmd(MGM)]&2&node(s)id=1&&&&@192.168.131.164&&(Version:&5.0.67)id=2&&&&@192.168.131.26&&(Version:&5.0.67)[mysqld(API)]&&&7&node(s)id=5&&&&@192.168.131.101&&(Version:&5.0.67)id=6&&&&@192.168.131.26&&(Version:&5.0.67)id=7&&&&@192.168.131.164&&(Version:&5.0.67)id=8&&&&@192.168.131.77&&(Version:&5.0.67)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)ndb_mgm>&以上说明一切正常。将服务增加到开机启动服务项中:164/26:rc.d/rc.d/77/101:Echo&'ndbd'&>&/etc/rc.d/init.d/ndbdChmod&755&/etc/rc.d/init.d/ndbdChkconfig&--level&2345&ndbd&onOK,到此mysql&cluster&配置完成。强调:1)由于数据放在内存中,需要在ndb节点上加大内存的数量。按照1:1.1的比例,如果数据量达到3.6GB,需要4GB的内存。2)由于NDB和mysqld(API)都很耗费内存,所以建议将NDB放在164和26上。可能启动的时候会有警告,但是没关系的。查看数据和内存情况:77:[root@sql2&~]#&toptop&-&16:39:36&up&&1:59,&&1&user,&&load&average:&1.37,&0.76,&0.60Tasks:&&80&total,&&&2&running,&&78&sleeping,&&&0&stopped,&&&0&zombieCpu(s):&&4.0%us,&&4.0%sy,&&0.0%ni,&87.3%id,&&2.9%wa,&&0.2%hi,&&1.5%si,&&0.0%stMem:&&&2075600k&total,&&2005868k&used,&&&&69732k&free,&&&&68256k&buffersSwap:&&2031608k&total,&&&&&&&&0k&used,&&2031608k&free,&&1400812k&cachedPID&USER&&&&PR&&NI&&VIRT&&RES&&SHR&S&%CPU&%MEM&&&&TIME+&&COMMAND&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2306&mysql&&&&&25&&&0&&119m&&&15m&&&3952&S&&&22&&0.8&&&&&&&&&10:20.94&mysqld&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&23791&root&&&&&&15&&&0&&1587m&&484m&&31m&R&&&20&&23.9&&&&&&&&9:34.97&ndbd由于77只有2GB的内存,而在config.ini中,把1.2GB的内存分配给了NDB,所以,加上mysqld用掉的,2GB的内存似乎已经所剩无几了。查看77上的数据大小:[root@sql2&~]#&cd&/var/lib/mysql-cluster/ndb_4_fs/[root@sql2&ndb_4_fs]#&du&-lh1.3GB连接API创建数据库:由于上面4台都做为mysqld&的API,所以创建数据库的时候,都需要创建一遍。以下操作在4台API上都需要操作:#&Mysql&-uroot&-pxxxxxxxxxxxx&-AMysql>&create&database&Mysql>&grant&all&on&*.testdatabase&to&&identified&by&'xxxxxxxxxxxxxxx';Mysql>&flush&Mysql>&create&table&test(int&(1));Mysql>&insert&into&test(1);Mysql>&以上做完以后,可以通过任意一台API上创建表,并写数据到表中,其他数据库都会同步写入。分别连接每台服务器进行检查:#&Mysql&-uroot&-pxxxxxxxxxxxx&-AMysql>&use&Mysql>&select&*&from&如果输出结果完全相同,表明mysql&cluster已经可以正常工作了。在2台API上设置LVSMysql&cluster做好以后,数据库分别建立同名的数据库以后,权限分配好,然后只要在一台上写入数据,其他的NDB就存储了相同的数据。用
程序连接任意一台API写数据,如果程序中未设置API的选择和判断,只使用了其中一个API,一旦API当机,则无法写入数据,必须修改程序。即便做了
API的判断和选择,因为没有实现负载均衡,服务器的性能没有充分利用。高可用性也没有达到目标。所以,我们现在在2台API之间做LVS。LVS采用&ultramonkey()首先在NDB1(164)和NDB2(26)上下载heartbeat的软件包:下载所有的rpm包:Cd&/usr/local/srcMkdir&heartbeatCd&heartbeat#Wget&xxx.xxx.rpm我下载了如下的软件包:[root@ndb1&heartbeat]#&ls&-lh&*.rpm&|&awk&'{print&$9}';arptables-noarp-addr-0.99.2-1.rh.el.um.1.noarch.rpmheartbeat-1.2.3.cvs..rh.el.um.4.i386.rpmheartbeat-ldirectord-1.2.3.cvs..rh.el.um.4.i386.rpmheartbeat-pils-1.2.3.cvs..rh.el.um.4.i386.rpmheartbeat-stonith-1.2.3.cvs..rh.el.um.4.i386.rpmipvsadm-1.21-1.rh.el.1.um.1.i386.rpmlibnet-1.1.2.1-1.rh.el.um.1.i386.rpmperl-Authen-SASL-2.08-1.rh.el.um.1.noarch.rpmperl-Convert-ASN1-0.18-1.rh.el.um.1.noarch.rpmperl-IO-Socket-SSL-0.96-1.rh.el.um.1.noarch.rpmperl-ldap-0.3202-1.rh.el.um.1.noarch.rpmperl-Mail-IMAPClient-2.2.9-1.rh.el.um.1.noarch.rpmperl-Net-SSLeay-1.25-1.rh.el.um.1.i386.rpmperl-Parse-RecDescent-1.94-1.el5.rf.noarch.rpmperl-Parse-RecDescent-1.94-1.rh.el.um.1.noarch.rpmperl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpmperl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpm[root@ndb1&heartbeat]#&Heartbeat中包含以下几部分:Master&Director(分发器)--&MDBackup&Director(备份分发器)--&BDReal&server&(真实服务器,可以有2个以上)--RSIP设置并确认:MD:Eth0:192.168.131.164/24/GW:192.168.131.1Eth1:10.9.30.1/24MD:Eth0:192.168.131.26/24/GW:192.168.131.1Eth1:10.9.30.2VIP:192.168.131.105/24/GW:192.168.131.1&--&用户访问的统一虚拟IPRS1:192.168.131.101/24/GW:192.168.131.1RS2:192.168.131.77/24/GW:192.168.131.1。。。等等以下操作在所有服务器上执行:主机名确认:分别执行:#uname&-a主机名对应表中所列。在MD和BD修改IP转发:#vi&modprobe.sh:wq
阅读(19996) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 jediscluster 集群 的文章

 

随机推荐