免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 33397 | 回复: 42
打印 上一主题 下一主题

mysql 5.0 集群负载均衡—经过测试 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-07 00:29 |只看该作者 |倒序浏览
mysql 5.0 集群负载均衡—经过测试
转载请注明作者和出处

参考自Nanu前辈的《MySQL集群配置》,非常感谢。
但在这篇文章中的概念有些模糊,小弟加以完善。不足之处,希望高手补充与批评!
QQ:4615075 请注明CU会员,欢迎交流!



一、介绍
========
测试环境:
Server1:ndbd 192.168.0.11
Server2:ndbd 192.168.0.12
Server3:mysqld --ndb-cluster 192.168.0.13 (ndbd_mgm ndbd_mgmd也在本机)

操作系统均为
RH ES3
kernel-2.4.21-9.EL
glibc-2.3.2-95.6

所需软件包:
mysql-max-5.0.22-linux-i686-icc-glibc23.tar.gz
下载地址:http://dev.mysql.com/downloads/mysql/5.0.html
下载时注意系统环境和软件包版本,MySQL是max版的。

首先,明确几个概念(参照下图):
ndbd: 数据库节点。
mysqld --ndb-cluster: MySQL服务器节点,程序直接访问的是这台机器的IP。默认端口仍是3306。
ndbd_mgm ndbd_mgmd: 管理节点。管理/查看各库节点和服务器节点的状态。






二、在Server1、Server2、Server3上安装MySQL
=================================
1.安装:
# mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/
# cd /usr/local/
# tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
# ln -s mysql-max-4.1.9-pc-linux-gnu-i686 mysql
# groupadd mysql
# useradd -g mysql mysql
# cd mysql
# scripts/mysql_install_db --user=mysql
# chown -R mysql:mysql .

2.编辑配置文件:
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf 在文件尾加入

# my.cnf
# example additions to my.cnf for MySQL Cluster
# (valid in MySQL 5.0)

# enable ndbcluster storage engine, and provide connectstring for
# management Server host (default port is 1186)
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.13

# provide connectstring for management Server host (default port: 1186)
[ndbd]
connect-string=192.168.0.13

# provide connectstring for management Server host (default port: 1186)
[ndb_mgm]
connect-string=192.168.0.13

# provide location of cluster configuration file
[ndb_mgmd]
config-file=/var/lib/mysql-cluster
保存&退出

3.在Server1、Server2上创建日志文件夹,默认
# mkdir /var/lib/mysql-cluster

4.在Server3上创建ndb_mgmd启动配置文件:
# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# vi config.ini
内容如下:
# file "config.ini" - 2 data nodes and 2 SQL nodes
# This file is placed in the startup directory of ndb_mgmd (the
# management server)
# The first MySQL Server can be started from any host. The second
# can be started only on the host mysqld_5.mysql.com

[NDBD DEFAULT]
NoOfReplicas= 2
DataDir= /var/lib/mysql-cluster

[NDB_MGMD]
Hostname= 192.168.0.13
DataDir= /var/lib/mysql-cluster

[NDBD]
HostName= 192.168.0.11

[NDBD]
HostName= 192.168.0.12

[MYSQLD]
[MYSQLD]
[MYSQLD]
保存&退出

[MYSQLD]
[MYSQLD]
[MYSQLD]
表示允许有三台MySQL服务器从任何IP访问数据库结点。

各参数功能,请参考http://dev.mysql.com/doc/refman/ ... config-example.html




三、启动服务
============
Server3 /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Server1 /usr/local/mysql/bin/ndbd --initial #只在第一次启动ndbd时使用--initial参数
Server2 /usr/local/mysql/bin/ndbd --initial
Server3 /usr/local/mysql/support-files/mysql.Server start



四、检查工作状态
================
回到管理节点服务器Server3上,并启动管理终端:

# /usr/bin/ndb_mgm
键入show命令查看当前工作状态:(下面是一个状态输出示例)

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.0.11)
id=3    @192.168.0.12  (Version: 5.0.22, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.13  (Version: 5.0.22)

[mysqld(API)]   3 node(s)
id=4    @192.168.0.13  (Version: 5.0.22)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)

mysqld(API)即mysqld --ndb-cluster,MySQL服务器节点。当前只有Server3 MySQL启动。

如果上面没有问题,现在开始测试MySQL:
注意,这篇文档对于MySQL并没有设置root密码,推荐你自己设置Server1、Server2、Server3的MySQL root密码。

在Server3中:
# /usr/local/mysql/bin/mysql
> use test;
> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
> INSERT INTO ctest () VALUES (1);
> SELECT * FROM ctest;

应该可以看到1 row returned信息(返回数值1)。

如果上述正常,则换到Server1、Server2上重复上面的测试,观察效果,数据库应该是同步刷新的。但首先要启动这两台机器的MySQL服务
# /usr/local/mysql/support-files/mysql.Server start
如果都没有问题,那么恭喜成功!

FAQ:
失败原因,可能是启动顺序不对。
查找所有ndb和sql相关进程,杀掉,重新按顺序来。
ps -aux |grep ndb
ps -aux |grep sql
kill -9 <PID> <PID> ...<PID>



五、破坏性测试
==============
将Server1或Server2的网线拔掉,观察另外一台集群服务器工作是否正常(可以使用SELECT查询测试)。测试完毕后,重新插入网线即可。

如果你接触不到物理服务器,也就是说不能拔掉网线,那也可以这样测试:
在Server1或Server2上:
ifconfig eth0 down  #如果只有一块网卡,默认是eth0

之后在Server3上使用SELECT查询测试。并且在管理节点服务器的管理终端中执行show命令会看到被破坏的那台服务器的状态。
测试完成后,只需要重新启动被破坏服务器的ndbd进程即可:
# ndbd
注意!前面说过了,此时是不用加--inital参数的!
至此,MySQL集群就配置完成,MySQL负载均衡功能完成!



如想实现Apache+PHP+MySQL集群负载均衡,只需Server3上安装Apache+PHP,并添加Server4,与其做LVS即可!

[ 本帖最后由 lihangel 于 2007-6-26 11:20 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-07 10:39 |只看该作者
好东西,收藏了

论坛徽章:
0
3 [报告]
发表于 2006-06-07 10:50 |只看该作者
不错得说

论坛徽章:
0
4 [报告]
发表于 2006-06-07 12:01 |只看该作者
不错,要是有环境,也很想试一下

论坛徽章:
0
5 [报告]
发表于 2006-06-07 13:51 |只看该作者
性能如何?

论坛徽章:
0
6 [报告]
发表于 2006-06-07 19:53 |只看该作者
将MySQL服务器做热备后,稳定性和服务的连续性应该会有保证的,速度暂时还不好说,由于条件有限,实验是在VM环境下做的。

大家有条件的速度和压力方面进行一下测试,将结果告诉大家!期盼。。。

论坛徽章:
0
7 [报告]
发表于 2006-06-09 09:33 |只看该作者
负载均衡功能可通过将Server3做热备实现

楼主想说的是双机热备server3   让它在故障时候有其他机器接管调度的任务  还是怎么样?
如果上面说负载均衡功能是否有误解?

上面的操作是对mysql 的负载均衡吗?
我不是很了解mysql 负载均衡的原理

是否有详细点的资料

以前看到过一文章  上面描述
mysql的原理和db2类似(no share storage) 和oracle 的rac完全不同
就是如果insert和update delete的时候是要同步节点的
如果是select的话就可以由调度来负载均衡

也就是说 mysql如果查询多的话  性能会好 如果是个更新为主的话 那效果可能不一定好


以上不知道是否可以得到证实
请各位回答  谢谢

论坛徽章:
0
8 [报告]
发表于 2006-06-09 14:47 |只看该作者
我说错了,将Server3做热备是保证MySQL服务的连续可用性,并不能实现负载均衡功能,楼上讲得对。

至于负载均衡功能,大家试试是不是可通过LVS做,成功后告诉大家。

[ 本帖最后由 lihangel 于 2006-6-9 15:01 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-06-09 15:04 |只看该作者
原帖由 lihangel 于 2006-6-9 14:47 发表
我说错了,将Server3做热备是保证MySQL服务的连续可用性,并不能实现负载均衡功能,楼上讲得对。

至于负载均衡功能,大家试试是不是可通过LVS做,成功后告诉大家。



mysql里面的集群是什么概念呢?
负载均衡要通过lvs来实现吗?
那上面的结构主要实现的是什么呢?是完成多机器复制还是怎么样?
开始我以为server3就是起到如同lvs里面的调度服务器的角色
那这个集群主要在完成什么功能呢?
是实时复制还是怎么样?

论坛徽章:
0
10 [报告]
发表于 2006-06-09 20:38 |只看该作者
看了几个回帖和大家的问题, 忍不住要问大家难道从来不看mysql的官方cluster介绍么?

嘿嘿.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP