




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
这篇论坛文章(赛迪网技术社区)主要介绍了配置一个高可用性的MySQL服务器负载均衡群集的具体过程,详细内容请参考下文: 本文将告诉你如何配置一个三个节点的MySQL 5数据库服务器群集:两个存储节点和一个 管理节点。这个群集是由用提供“heartbeat心跳”(用来检查另外一个节点是否活动)和 “ldirectord”(将请求分发到MySQL群集的节点)的Ultra Monkey安装包的两个节点组成的 一个高可用性负载均衡器。 本文我们的每个节点使用Debian Sarge Linux系统。其它Linux发行版本的安装可能一点点 区别。MySQL的版本我们使用5.0.19。如果你不想使用MySQL 5,你也可以使用MySQL 4.1,尽 管我还没有测试过。 本文是一篇实践应用指导;它没有涉及太多的理论。关于群集的理论你可以在网上找到很多。 一 服务器 我使用下面的Debian服务器,它们都在同一个网段(本例如:192.168.0.x): : 01 MySQL 群集节点 1 : 02 MySQL 群集节点 2 : 03 负载均衡 1 / MySQL 群集管理服务器 : 04 负载均衡 2 另外我们需要一个虚拟IP地址:05。它会安排给这个MySQL群集的负载均衡,以便于 应用程序通过统一单独的IP地址来访问群集。 尽管我们想在MySQL群集中使用两个节点,但是我们仍然需要第三个节点,MySQL群集管理服务器 ,主要的一个原因是:如果其中一个MySQL群集节点坏了,而MySQL群集管理服务器没有运行,那 么两个群集节点上的数据将会不一致(“split brain”)。我们需要它来配置MySQL群集. 因此我们的安装一般需要五台机器: 2个MySQL群集节点 + 1个群集管理服务器 + 2个负载均衡 = 5 因为群集管理服务器没有使用多少资源,系统将会空着什么都不做,所以我们可以把我们的第一 个负载均衡和它一起放在同一台机器上,这样可以节约我们一台服务器,所以最好我们只需要四台 机器。 二 配置MySQL群集管理服务器 首先我们要下载MySQL 5.0.19,并安装群集管理服务器(ndb_mgmd)和群集管理客户端 (ndb_mgm - 它 可以用来监控群集的运行情况). 下面的步骤是在 (03)上进行的: : mkdir /usr/src/mysql-mgm cd /usr/src/mysql-mgm wget /get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686- glibc23.tar.gz/from//sites// 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: : mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster vi config.ini - NDBD DEFAULT NoOfReplicas=2 MYSQLD DEFAULT NDB_MGMD DEFAULT TCP DEFAULT # Section for the cluster management node NDB_MGMD # IP address of the management node (this system) HostName=03 # Section for the storage nodes NDBD # IP address of the first storage node HostName=01 DataDir= /var/lib/mysql-cluster NDBD # IP address of the second storage node HostName=02 DataDir=/var/lib/mysql-cluster # one MYSQLD per storage node MYSQLD MYSQLD - 实际应用中请将文件中的IP地址换成你相应的IP。然后我们启动群集管理服务器: : ndb_mgmd -f /var/lib/mysql-cluster/config.ini 我们应该也需要在服务器启动时能够自动启动管理服务器,所以我们创建了一个非常简单的初始化 脚本和相应的启动连接: : 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 三 配置MySQL群集节点(存储节点) 现在我们将分别在和上安装mysql-max-5.0.19: / : groupadd mysql useradd -g mysql mysql cd /usr/local/ wget /get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686- glibc23.tar.gz/from//sites// tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz ln -s mysql-max-5.0.19-linux-i686-glibc23 mysql cd mysql scripts/mysql_install_db user=mysql chown -R root:mysql . chown -R mysql data cp support-files/mysql.server /etc/init.d/ chmod 755 /etc/init.d/mysql.server update-rc.d mysql.server defaults cd /usr/local/mysql/bin mv * /usr/bin cd ./ rm -fr /usr/local/mysql/bin ln -s /usr/bin /usr/local/mysql/bin 然后我们在每个节点上创建MySQL配置文件/etc/f : vi /etc/f mysqld ndbcluster # IP address of the cluster management node ndb-connectstring=03 mysql_cluster # IP address of the cluster management node ndb-connectstring=03 确认你在群集管理服务器中输入的是正确的IP地址。 下一步我们分别在每个群集节点上创建数据目录和启动MySQL服务器: / : mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster ndbd initial /etc/init.d/mysql.server start (请记住:我们只是在第一次启动MySQL时或上面的 /var/lib/mysql-cluster/config.ini发生改变时,才使用ndbd initial) 现在,是时候给MySQL root帐号设置密码了: / : mysqladmin -u root password yourrootsqlpassword 我们需要在服务器启动时,启动群集节点,所以我们创建一个ndbd初始化脚本和相应的 系统启动连接: / : echo ndbd /etc/init.d/ndbd chmod 755 /etc/init.d/ndbd update-rc.d ndbd defaults 四 测试MySQL群集 我们的MySQL群集配置工作已经完成,现在是测试它的时间了。在群集管理服务器 ()上,运行群集管理客户端ndb_mgm来检查群集节点是否连接: : ndb_mgm 你将会看到这些: NDB Cluster Management Client ndb_mgm 在命令行输入 show; show; 输出的信息应该是这样的: ndb_mgm show; Connected to Management Server at: localhost:1186 Cluster Configuration ndbd(NDB) 2 node(s) id=2 01 (Version: 5.0.19, Nodegroup: 0, Master) id=3 02 (Version: 5.0.19, Nodegroup: 0) ndb_mgmd(MGM) 1 node(s) id=1 03 (Version: 5.0.19) mysqld(API) 2 node(s) id=4 01 (Version: 5.0.19) id=5 02 (Version: 5.0.19) ndb_mgm 如果你看到你的节点都已经连接上了。那么一切都很顺利! 输入 quit; 退出 ndb_mgm 客户端控制台。 现在我们在节点上创建一个测试数据库,并创建一个测试表, 填入一些测试数据: mysql -u root -p CREATE DATABASE mysqlclustertest; USE mysqlclustertest; CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER; INSERT INTO testtable () VALUES (1); SELECT * FROM testtable; quit; (看看上面这个CREATE语句:我们想群集起来的所有数据库的表,必须使用 ENGINE=NDBCLUSTER! 如果你使用其它的ENGINE,那么群集将不会工作!) SELECT出的结果应该是: mysql SELECT * FROM testtable; + | i | + | 1 | + 1 row in set (0.03 sec) 现在我们在节点上创建相同的数据库(是,我们仍然要创建它,但是在testtable创建之后 数据将会被复制到,因为testtable是使用ENGINE=NDBCLUSTER): : mysql -u root -p CREATE DATABASE mysqlclustertest; USE mysqlclustertest; SELECT * FROM testtable; SELECT出的结果应该是和上面的的结果相同: mysql SELECT * FROM testtable; + | i | + | 1 | + 1 row in set (0.04 sec) 我们看到数据已经从节点复制到节点了。现在我们 向testtable中插入另外一行: : INSERT INTO testtable () VALUES (2); quit; 现在让我们回到节点上,检查是否能够看见新插入的那一行: : mysql -u root -p USE mysqlclustertest; SELECT * FROM testtable; quit; 你应该看到像这样的输出: mysql SELECT * FROM testtable; + | i | + | 1 | | 2 | + 2 rows in set (0.05 sec) 所以每个群集节点都有着相同的数据! 现在让我们看看如果我们停止节点1():运行 : killall ndbd 并检查 ps aux | grep ndbd | grep -iv grep 看看所有的ndbd进程已经结束了。如果你仍然看见ndbd进程,再运行 killall ndbd 直到所有的ndbd进程都结束。 现在让在我们的管理服务器上,检查群集的状态(): : ndb_mgm 在ndb_mgm控制台上输入 show; 你应该看到这些: ndb_mgm show; Connected to Management Server at: localhost:1186 Cluster Configuration ndbd(NDB) 2 node(s) id=2 (not connected, accepting connect from 01) id=3 02 (Version: 5.0.19, Nodegroup: 0, Master) ndb_mgmd(MGM) 1 node(s) id=1 03 (Version: 5.0.19) mysqld(API) 2 node(s) id=4 01 (Version: 5.0.19) id=5 02 (Version: 5.0.19) ndb_mgm 你看见,节点没有连接上了。 输入: quit; 退出ndb_mgm控制台。 让我们检查节点: : mysql -u root -p USE mysqlclustertest; SELECT * FROM testtable; quit; SELECT查询出的结果应该依然是: mysql SELECT * FROM testtable; + | i | + | 1 | | 2 | + 2 rows in set (0.17 sec) Ok,所有的测试都正常,现在让我们再次启动节点: : ndbd 五 如何重新启动群集 现在让我们设想你由于修改了节点上的/var/lib/mysql-cluster/config.ini 或者其它原因,需要重新启动MySQL群集。为了这样做,你要使用节点上的 ndb_mgm群集管理客户端: : ndb_mgm 在ndb_mgm控制台上,你输入 shutdown; 你将看到像这样的信息: ndb_mgm shutdown; Node 3: Cluster shutdown initiated Node 2: Node shutdown completed. 2 NDB Cluster node(s) have shutdown. NDB Cluster management server shutdown. ndb_mgm 这意味着群集节点和,已经群集管理服务器都已经关闭。 运行 quit; 退出 ndb_mgm 控制台。 为启动群集管理服务器,在上这样做: : ndb_mgmd -f /var/lib/mysql-cluster/config.ini 并在 和 上运行: / : ndbd 或者,你刚修改过上的/var/lib/mysql-cluster/config.ini文件: ndbd initial 在这之后,你可以在上检查看看群集是否已经重启: : ndb_mgm 在ndb_mgm控制台,输入 show; 来查看当前群集的状态。所有节点重启后可能需要一点点时间来报告已经连接上。 输入: quit; 退出ndb_mgm控制台。 六 配置负载均衡 我们的MySQL群集已经现在完成了,你现在可以开始使用它了。然而,我们没有一个访问群集的 单独的IP地址,这意味着你必须配置应用程序一部分使用MySQL群集节点1(),另 外的部分使用节点2().当然,所有的应用程序只是需要使用一个节点,但如果你 不想在群集节点之间分流负载,那你拥有一个群集的目的是什么?另外一个问题是,如果一个群集 节点坏掉了怎么办?那么使用这个群集节点的应用程序将根本不能够工作了。 这里的解决方案是在MySQL群集前端配置一个负载均衡器来在每个MySQL群集节点之间平衡负载。 负载均衡器在群集节点之间配置一个共享的虚拟IP地址,所有你的应用程序使用这个虚拟IP地址来 访问群集。如果其中一个节点坏掉,那么你的应用程序将仍然可以工作,因为负载均衡器将请求转移 到了工作正常的另外一个节点。 现在在这个例子中负载均衡器成为了瓶颈。如果这个负载均衡器坏掉了怎么办呢?因此我们将以(active/passive) 主动/被动安装方式来配置两个负载均衡器。这意味着我们有一个负载均衡器是主动的,另外一个是 热备的,当主动的那个坏掉了,它将会变为主动。每个负载均衡器都使用heartbeat(心跳)来检查 另外一个负载均衡器的活动情况,同时负载均衡器也使用ldirectord,它负责将流量分配到群集节点。 heartbeat和ldirectord都在我们将要安装的 Ultra Monkey 安装包中。 和 节点的系统内核支持IPVS(IP虚拟服务器) 非常重要。 IPVS是在Linux内核的传输层执行负载均衡的。 6.1 安装 Ultra Monkey 好,现在让我们开始: 首先我们启用 和 节点上IPVS: / : modprobe ip_vs_dh modprobe ip_vs_ftp modprobe ip_vs modprobe ip_vs_lblc modprobe ip_vs_lblcr modprobe ip_vs_lc modprobe ip_vs_nq modprobe ip_vs_rr modprobe ip_vs_sed modprobe ip_vs_sh modprobe ip_vs_wlc modprobe ip_vs_wrr 为了在启动时IPVS模块,我们在/etc/modules列举了模块: / : vi /etc/modules ip_vs_dh ip_vs_ftp ip_vs ip_vs_lblc ip_vs_lblcr ip_vs_lc ip_vs_nq ip_vs_rr ip_vs_sed ip_vs_sh ip_vs_wlc ip_vs_wrr 现在我们编辑/etc/apt/sources.list,添加 Ultra Monkey 的下载点,然后我们安装Ultra Monkey: / : vi /etc/apt/sources.list deb /download/3/ sarge main deb-src /download/3 sarge main apt-get update apt-get install ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev 现在Ultra Monkey已经安装了,如果你看到下面这样的警告: | libsensors3 not functional | | It appears that your kernel is not compiled with sensors support. As a | result, libsensors3 will not be functional on your system. | | If you want to enable it, have a look at “I2C Hardware Sensors Chip | support” in your kernel configuration. 你可以忽略它。 回答下面的问题: Do you want to automatically load IPVS rules on boot? - No Select a daemon method. /dev/null ifup lo:0 七.启动负载均衡器并测试 现在我们启动两个负载均衡管理器: / : /etc/init.d/ldirectord stop /etc/init.d/heartbeat start 如果你没有看见错误,你需要现在重启每个负载均衡器: / : shutdown -r now 重启之后我们可以检查是否两个负载均衡器象期望一样工作: / : ip addr sh eth0 主动的负载均衡器应该列出了虚拟IP地址(05): 2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:45:fc:f8 brd ff:ff:ff:ff:ff:ff inet 03/24 brd 55 scope global eth0 inet 05/24 brd 55 scope global secondary eth0 被动(热备)的负载均衡器应该显示如下: 2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:16:c1:4e brd ff:ff:ff:ff:ff:ff inet 04/24 brd 55 scope global eth0 / : ldirectord ldirectord.cf status 主动负载均衡器上的输出: ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 1603 被动负载均衡器上的输出: ldirectord is stopped for /etc/ha.d/l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论