如何设置负载均衡的MySQL集群
版本1.0
作者:Falko Timme
本教程将介绍如何配置具有三个节点的MySQL 5集群:两个存储节点和一个管理节点。 此群集由高可用性负载平衡器负载平衡,实际上有两个节点使用Ultra Monkey
包,它提供心跳
(用于检查其他节点是否仍然存在)和ldirectord
(将请求分解为节点的MySQL集群)。
在本文中,我对所有节点使用Debian Sarge。 因此,其他分布的设置可能会有所不同。 我在这个设置中使用的MySQL版本是5.0.19。 如果你不想使用MySQL 5,你也可以使用MySQL 4.1,尽管我还没有测试它。
这是一个实践指南; 它不包括理论背景。 他们在网络上的许多其他文档中被处理。
本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1我的服务器
我使用以下Debian服务器都在同一个网络(本例中为192.168.0.x):
-
sql1.example.com:192.168.0.101
MySQL群集节点1 -
sql2.example.com:192.168.0.102
MySQL集群节点2 -
loadb1.example.com:192.168.0.103
负载均衡器1 / MySQL集群管理服务器 -
loadb2.example.com:192.168.0.104
负载平衡器2
除此之外,我们需要一个虚拟IP地址: 192.168.0.105
。 它将由负载平衡器分配给MySQL集群,以便应用程序具有访问集群的单个IP地址。
虽然我们希望在我们的MySQL集群中有两个MySQL集群节点,但是我们仍然需要一个第三个节点,即MySQL集群管理服务器,主要是一个原因:如果两个MySQL集群节点中的一个失败,并且管理服务器没有运行,那么两个集群节点上的数据将变得不一致(“ 分裂脑
”)。 我们还需要它来配置MySQL集群。
所以通常我们需要五台机器进行设置:
2 MySQL cluster nodes + 1 cluster management server + 2 Load Balancers = 5
由于MySQL集群管理服务器不使用许多资源,系统只会坐在那里什么都不做,我们可以将第一个负载平衡器放在同一台机器上,这样可以节省我们一台机器,所以我们最终得到了四台机器。
2设置MySQL群集管理服务器
首先,我们必须下载MySQL 5.0.19( 最大版本!),并安装集群管理服务器( ndb_mgmd
)和集群管理客户机( ndb_mgm
- 可以用来监视集群中发生的情况)。 在loadb1.example.com
( 192.168.0.103
)上执行以下步骤:
loadb1.example.com:
mkdir /usr/src/mysql-mgm
cd /usr/src/mysql-mgm
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-\
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz
cd mysql-max-5.0.19-linux-i686-glibc23
mv bin/ndb_mgm /usr/bin
mv bin/ndb_mgmd /usr/bin
chmod 755 /usr/bin/ndb_mg*
cd /usr/src
rm -rf /usr/src/mysql-mgm
接下来,我们必须创建集群配置文件/var/lib/mysql-cluster/config.ini
:
loadb1.example.com:
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
[NDBD DEFAULT] |
请妥善替换文件中的IP地址。
然后我们启动集群管理服务器:
loadb1.example.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
在系统引导时自动启动管理服务器是有意义的,因此我们创建了一个非常简单的初始化脚本和相应的启动链接:
loadb1.example.com:
echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini' > /etc/init.d/ndb_mgmd
chmod 755 /etc/init.d/ndb_mgmd
update-rc.d ndb_mgmd defaults