配置高可用性的MySQL服务器负载均衡群集(3)
作者:Eric 发布时间:2009-01-04 12:43:00
你应该看到像这样的输出:
mysql> SELECT * FROM testtable;
+——+
| i |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.05 sec)
所以每个群集节点都有着相同的数据!
现在让我们看看如果我们停止节点1(sql1.example.com):运行
sql1.example.com:
killall ndbd
并检查
ps aux | grep ndbd | grep -iv grep
看看所有的ndbd进程已经结束了。如果你仍然看见ndbd进程,再运行
killall ndbd
直到所有的ndbd进程都结束。
现在让在我们的管理服务器上,检查群集的状态(loadb1.example.com):
loadb1.example.com:
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 192.168.0.101)
id=3 @192.168.0.102 (Version: 5.0.19, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.103 (Version: 5.0.19)
[mysqld(API)] 2 node(s)
id=4 @192.168.0.101 (Version: 5.0.19)
id=5 @192.168.0.102 (Version: 5.0.19)
ndb_mgm>
你看见,sql1.example.com节点没有连接上了。
输入:
quit;
退出ndb_mgm控制台。
让我们检查sql2.example.com节点:
sql2.example.com:
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,所有的测试都正常,现在让我们再次启动sql1.test.com节点:
sql1.example.com:
ndbd
五 如何重新启动群集
现在让我们设想你由于修改了loadb1.test.com节点上的/var/lib/mysql-cluster/config.ini
或者其它原因,需要重新启动MySQL群集。为了这样做,你要使用loadb1.example.com节点上的
ndb_mgm群集管理客户端:
loadb1.test.com:
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>
这意味着群集节点sql1.test.com和sql2.test.com,已经群集管理服务器都已经关闭。
运行
quit;
退出 ndb_mgm 控制台。
为启动群集管理服务器,在loadb1.test.com上这样做:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
并在sql1.test.com 和 sql2.test.com 上运行:
sql1.example.com / sql2.example.com:
ndbd
或者,你刚修改过loadb1.test.com上的/var/lib/mysql-cluster/config.ini文件:
ndbd –initial
在这之后,你可以在loadb1.test.com上检查看看群集是否已经重启:
loadb1.test.com:
ndb_mgm
在ndb_mgm控制台,输入
show;
来查看当前群集的状态。所有节点重启后可能需要一点点时间来报告已经连接上。
输入:
quit;
退出ndb_mgm控制台。
六 配置负载均衡
我们的MySQL群集已经现在完成了,你现在可以开始使用它了。然而,我们没有一个访问群集的
单独的IP地址,这意味着你必须配置应用程序一部分使用MySQL群集节点1(sql1.test.com),另
外的部分使用节点2(sql2.test.com).当然,所有的应用程序只是需要使用一个节点,但如果你
不想在群集节点之间分流负载,那你拥有一个群集的目的是什么?另外一个问题是,如果一个群集
节点坏掉了怎么办?那么使用这个群集节点的应用程序将根本不能够工作了。
这里的解决方案是在MySQL群集前端配置一个负载均衡器来在每个MySQL群集节点之间平衡负载。
负载均衡器在群集节点之间配置一个共享的虚拟IP地址,所有你的应用程序使用这个虚拟IP地址来
访问群集。如果其中一个节点坏掉,那么你的应用程序将仍然可以工作,因为负载均衡器将请求转移
到了工作正常的另外一个节点。
现在在这个例子中负载均衡器成为了瓶颈。如果这个负载均衡器坏掉了怎么办呢?因此我们将以(active/passive)
主动/被动安装方式来配置两个负载均衡器。这意味着我们有一个负载均衡器是主动的,另外一个是
热备的,当主动的那个坏掉了,它将会变为主动。每个负载均衡器都使用heartbeat(心跳)来检查
另外一个负载均衡器的活动情况,同时负载均衡器也使用ldirectord,它负责将流量分配到群集节点。
heartbeat和ldirectord都在我们将要安装的 Ultra Monkey 安装包中。
loadb1.test.com 和 loadb2.test.com 节点的系统内核支持IPVS(IP虚拟服务器) 非常重要。
IPVS是在Linux内核的传输层执行负载均衡的。
6.1 安装 Ultra Monkey
好,现在让我们开始: 首先我们启用loadb1.test.com 和 loadb2.test.com节点上IPVS:
loadb1.example.com / loadb2.example.com:
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列举了模块:
loadb1.test.com / loadb2.test.com:
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:
loadb1.test.com / loadb2.test.com:
vi /etc/apt/sources.list
deb http://www.ultramonkey.org/download/3/ sarge main
deb-src http://www.ultramonkey.org/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.
<-- none
我刚安装的libdbd-mysql-perl安装包不能够在MySQL 5(我们在MySQL群集上使用MySQL 5),
因此我们安装最新的DBD::mysql Perl安装包:


猜你喜欢
- asp之家注:学习asp,无论是做企业网站还是做个人网站一般都需要用到IP地址。如留言要记录留言者IP,用户登录也经常记录登录的IP,还有站
- 用windows账号还是可以登录的。 查找问题的过程: 第一步: 启动所有与SQL有关的服务,问题依旧; 第二步: 查看windows防火墙
- 本文实例讲述了python飞机大战pygame游戏背景设计。分享给大家供大家参考,具体如下:目标背景交替滚动的思路确定显示游戏背景01. 背
- Anaconda简介Anaconda是一个方便的python包管理和环境管理软件,一般用来配置不同的项目环境。我们常常会遇到这样的情况,正在
- torch.randn()如何创建正态分布随机数torch.randn(*size)从均值为0,方差为1的正态分布中获取随机数【sample
- 索引1、 什么是索引索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。2、 索引分类数据库中索引主要
- 本文实例讲述了Django框架实现分页显示内容的方法。分享给大家供大家参考,具体如下:分页1、作用数据加载优化2、前端引入bootstrap
- 本文实例讲述了PHP面向对象程序设计之类与反射API。分享给大家供大家参考,具体如下:了解类class_exists验证类是否存在<?
- 前言这是一个使用HttpRunner开发接口平台的简单Demo。新建Django项目安装依赖包pip install httprunner=
- 本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法。分享给大家供大家参考。具体如下:功能代码如下:import o
- 目录一、pyecharts绘制词云图WordCloud.add()方法简介二、绘制词云图对应轮廓按diamond显示三、对应完整代码如下所示
- javascript代码编写在页面中实现页内搜索功能,类似Word等文本编辑软件里的搜索功能,只要是页面中的字符(别管是显在的还是隐蔽在文本
- 本文实例为大家分享了使用RNN进行文本分类,python代码实现,供大家参考,具体内容如下1、本博客项目由来是oxford 的nlp 深度学
- 文件处理流程1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件 r模式,默认模式,文件不存在则报错w
- 格式化是通过格式操作使任意类型的数据转换成一个字符串。例如下面这样<script>console.log(chopper.for
- 当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。通常情况下,如果在WHERE
- 利用Opencv中的Houghline方法进行直线检测—python语言这是给Python部落翻译的文章,请在这里看原文。在图像处理中,霍夫
- 类与实例类与实例相互关联着:类是对象的定义,而实例是“真正的实物”,它存放了类中所定义的对象的具体信息。下面的示例展示了如何创建一个类:cl
- 目录1.垂直(纵向)切分1.1 垂直分库 1.2 垂直分表 2. 水平(横向)切分2.1 根据数值范围2.2 根据数值取
- 引言我们将学习如何构建一个终端应用程序(CLI应用程序)来管理我们的通讯录我们将使用type来构建CLI应用程序,使用Rich来创建彩色终端