如何使用MySQL 5.1设置负载平衡的MySQL群集
版本1.1
作者:Peter Okupski <okupski [at] widzew [dot] net>
本教程基于Falko Timme的MySQL Cluster 5.0教程。 它显示了如何配置具有五个节点的MySQL 5.1集群:1个管理,2个x存储节点和2个x平衡器节点。 该集群由Ultra Monkey
软件包负载平衡,该软件包提供心跳
(用于检查其他节点是否仍然存在)和ldirectord
(将请求分解到MySQL集群的节点)。
在本文中,我对所有节点使用Debian Etch 4.0。 因此,其他分布的设置可能会有所不同。 两个数据节点都是x64,以使用所有的8GB RAM。 服务器是从源编译的,所以你应该可以在任何平台上运行。 我在此设置中使用的MySQL版本是5.1.73。 这是一个发布候选人,但是我想使用5.1来利用基于内存磁盘的表。
从MySQL 5.1.6开始,可以将磁盘上的非索引列NDB表存储在磁盘上,而不是像先前版本的MySQL Cluster那样存储在RAM中。[ 更多 ]
这个howto只是让它运行的一个难题,对于许多人我建议从MySQL页面读取一些文档,以准备好如何管理整个集群,并始终知道发生了什么。
本文档不附带任何形式的保证! 记住,在生产模式使用之前,您需要进行测试和准备数据库。
1我的服务器
我将使用所有在同一个网络中的以下Debian服务器(在本例中为10.0.1.x):
-
mysql-mngt.example.com:10.0.1.30
[MySQL集群管理服务器] -
lb1.example.com:10.0.1.31
[Load Balancer 1] -
lb2.example.com:10.0.1.32
[Load Balancer 2] -
mysql-data1.example.com:10.0.1.33
[MySQL集群节点1] -
mysql-data2.example.com:10.0.1.34
[MySQL集群节点2]
除此之外,我们需要一个虚拟IP地址: 10.0.1.10 。 它将由负载平衡器分配给MySQL集群,以便应用程序具有访问集群的单个IP地址。
虽然我们希望在我们的MySQL集群中有两个MySQL集群节点,但是我们仍然需要一个第三个节点,即MySQL集群管理服务器,主要是一个原因:如果两个MySQL集群节点中的一个失败,并且管理服务器没有运行,那么两个集群节点上的数据将变得不一致(“ 分裂脑
”)。 我们还需要它来配置MySQL集群。
2个MySQL数据节点+ 1个集群管理服务器+ 2个负载平衡器= 5
这是我的硬件配置:
MySQL数据: DELL R300 Intel(R)四核Xeon(R)CPU X3353 @ 2.66GHz,2x SAS 146GB驱动器(Raid 1),8GB RAM
MySQL LoadBalancer: DELL R200 Intel(R)Xeon(R)CPU 3065 @ 2.33GHz,2x SATA 250 GB驱动器(Raid 1),1GB RAM
MySQL管理: DELL R200 Intel(R)Celeron(R)CPU 430 @ 1.80GHz,1x SATA 160 GB驱动器(Raid 1),1GB RAM
由于MySQL集群管理服务器不使用许多资源,您可以在本机上安装额外的负载平衡器,也可以使用它来监视Nagios或Cacti的整个集群。
2设置MySQL群集管理服务器
首先,我们必须下载MySQL 5.1.73(源版本),并安装集群管理服务器( ndb_mgmd
)和集群管理客户端( ndb_mgm
- 它可以用来监视集群中发生的情况)。 以下步骤在mysql-mngt.example.com
( 10.0.1.30
)上执行:
mysql-mngt.example.com:
cd /usr/src
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz
tar xvzf mysql-5.1.73.tar.gz
#Lets add proper user and group
groupadd mysql
useradd -g mysql mysql
./configure --prefix=/usr/local/mysql --enable-community-features \
--with-mysqld-user=mysql --with-mysqlmanager --with-plugins=ndbcluster
make
make install
这样我们就浪费了大约124MB的空间,因为我们不需要所有的实际的MySQL文件,但相信我只需在一个目录/ usr / local / mysql
中进行任何清理/升级,而不是搜索/ usr
中的所有文件/ bin
等等。 编译后,我们有两个目录,我们对/ usr / local / mysql / bin
和/ usr / local / mysql / libexec
感兴趣[最后一个包含ndb管理exec]。
为了让生活更轻松,我们将以下内容添加到PATH
环境中,因此我们必须编辑文件/root/.bash_profile
:
mysql-mngt.example.com:
echo "PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/libexec" >>/root/.bash_profile
echo "export PATH" >>/root/.bash_profile
接下来,我们必须创建集群配置文件/usr/local/mysql/var/mysql-cluster/config.ini:
[ 在此提示 ]
mysql-mngt.example.com:
mkdir /usr/local/mysql/var/mysql-cluster
cd /usr/local/mysql/var/mysql-cluster
vi config.ini
[NDBD DEFAULT] NoOfReplicas=2 DataMemory=80M # How much memory to allocate for data storage IndexMemory=18M # How much memory to allocate for index storage # For DataMemory and IndexMemory, we have used the # default values. Since the "world" database takes up # only about 500KB, this should be more than enough for # this example Cluster setup. [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] # Section for the cluster management node [NDB_MGMD] # IP address of the management node (this system) HostName=10.0.1.30 # Section for the storage nodes [NDBD] # IP address of the first storage node HostName=10.0.1.33 DataDir=/usr/local/mysql/var/mysql-cluster BackupDataDir=/usr/local/mysql/var/mysql-cluster/backup DataMemory=2048M [NDBD] # IP address of the second storage node HostName=10.0.1.34 DataDir=/usr/local/mysql/var/mysql-cluster BackupDataDir=/usr/local/mysql/var/mysql-cluster/backup DataMemory=2048M # one [MYSQLD] per storage node [MYSQLD] [MYSQLD] |
请将文件中的IP地址替换为您的设置。
然后我们继续到DataSQL节点进行必要的目录和文件的设置。
mysql-mngt.example.com:
/usr/local/mysql/libexec/ndb_mgmd -f /usr/local/mysql/var/mysql-cluster/config.ini
在系统引导时自动启动管理服务器是有意义的,因此我们创建了一个非常简单的初始化脚本和相应的启动链接:
mysql-mngt.example.com:
echo '/usr/local/mysql/libexec/ndb_mgmd -f /usr/local/mysql/var/mysql-cluster/config.ini' > /etc/init.d/ndb_mgmd
chmod 755 /etc/init.d/ndb_mgmd
update-rc.d ndb_mgmd defaults
3设置MySQL群集节点(存储节点)
现在我们在mysql-data1.example.com
和mysql- data2.example.com
上安装mysql-
5.1.73
:
mysql-data1.example.com / mysql-data2.example.com:
cd /usr/src
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz
tar xvzf mysql-5.1.73.tar.gz
groupadd mysql
useradd -g mysql mysql
cd /usr/src/mysql-5.1.73
./configure --prefix=/usr/local/mysql --enable-community-features --with-mysqld-user=mysql --with-plugins=ndbcluster
make
make install
/usr/src/mysql-5.1.73/scripts/mysql_install_db --user=mysql
cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql.mysql /usr/local/mysql/var
cd /usr/src/mysql-5.1.73
cp support-files/mysql.server /etc/init.d/
chmod 755 /etc/init.d/mysql.server
cd /etc/init.d
update-rc.d mysql.server defaults
然后我们在两个节点上创建MySQL配置文件/etc/my.cnf
:
mysql-data1.example.com / mysql-data2.example.com:
vi /etc/my.cnf
[client] port=3306 socket=/tmp/mysql.sock [mysqld] ndbcluster # IP address of the cluster management node ndb-connectstring=10.0.1.30 default-storage-engine=NDBCLUSTER #Those are for future tuning #max_connections=341 #query_cache_size=16M #thread_concurrency = 4 [mysql_cluster] # IP address of the cluster management node ndb-connectstring=10.0.1.30 |
确保填写MySQL集群管理服务器的正确IP地址。
让我们添加PATH env。 到数据节点:
mysql-data1.example.com / mysql-data2.example.com:
echo "PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/libexec" >>/root/.bash_profile
echo "export PATH" >>/root/.bash_profile
接下来,我们创建数据和备份目录,并在两个集群节点上启动MySQL服务器:
mysql-data1.example.com / mysql-data2.example.com:
mkdir /usr/local/mysql/var/mysql-cluster
mkdir /usr/local/mysql/var/mysql-cluster/backup
cd /var/lib/mysql-cluster
/usr/local/mysql/libexec/ndbd --initial
/etc/init.d/mysql.server start
(请注意:只有当我们第一次启动MySQL,并且mysql-mngt.example.com
上的/usr/local/mysql/mysql-cluster/config.ini
更改时,才需要运行ndbd --initial
)。
现在是为MySQL root用户设置密码的好时机
mysql-data1.example.com / mysql-data2.example.com:
mysqladmin -u root password yourrootsqlpassword
我们要在引导时启动集群节点,所以我们创建一个ndbd
init脚本和相应的系统启动链接:
mysql-data1.example.com / mysql-data2.example.com:
echo '/usr/local/mysql/libexec/ndbd' > /etc/init.d/ndbd
chmod 755 /etc/init.d/ndbd
update-rc.d ndbd defaults