- 浏览: 191310 次
- 性别:
- 来自: 杭州
最新评论
-
wendongcc:
在哪里可以下载呀
Flex Builder 3 正式版破解补丁! -
IT_LDB:
mark!
Tomcat线程挂起与DBCP数据库连接池的配置优化 -
晓晨Happy:
非常有用,感谢。
Flash CS3 中fl.*类库在 FB 中如何使用 -
learnload:
的确能用,谢谢!
Flex Builder 3 正式版破解补丁! -
yinger_fei:
thanks for sharing.
Tomcat线程挂起与DBCP数据库连接池的配置优化
最近在研究Mysql的群集技术,这篇文章很有价值,保留下来。
这篇论坛文章(赛迪网技术社区)主要介绍了配置一个高可用性的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):
sql1.test.com: 192.168.0.101 MySQL 群集节点 1
sql2.test.com: 192.168.0.102 MySQL 群集节点 2
loadb1.test.com: 192.168.0.103 负载均衡 1 / MySQL 群集管理服务器
loadb2.test.com: 192.168.0.104 负载均衡 2
另外我们需要一个虚拟IP地址:192.168.0.105。它会安排给这个MySQL群集的负载均衡,以便于
应用程序通过统一单独的IP地址来访问群集。
尽管我们想在MySQL群集中使用两个节点,但是我们仍然需要第三个节点,MySQL群集管理服务器
,主要的一个原因是:如果其中一个MySQL群集节点坏了,而MySQL群集管理服务器没有运行,那
么两个群集节点上的数据将会不一致(“split brain”)。我们需要它来配置MySQL群集.
因此我们的安装一般需要五台机器:
2个MySQL群集节点 + 1个群集管理服务器 + 2个负载均衡 = 5
因为群集管理服务器没有使用多少资源,系统将会空着什么都不做,所以我们可以把我们的第一
个负载均衡和它一起放在同一台机器上,这样可以节约我们一台服务器,所以最好我们只需要四台
机器。
二 配置MySQL群集管理服务器
首先我们要下载MySQL 5.0.19,并安装群集管理服务器(ndb_mgmd)和群集管理客户端 (ndb_mgm - 它
可以用来监控群集的运行情况). 下面的步骤是在loadb1.test.com (192.168.0.103)上进行的:
loadb1.test.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.test.com:
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=192.168.0.103
# Section for the storage nodes
[NDBD]
# IP address of the first storage node
HostName=192.168.0.101
DataDir= /var/lib/mysql-cluster
[NDBD]
# IP address of the second storage node
HostName=192.168.0.102
DataDir=/var/lib/mysql-cluster
# one [MYSQLD] per storage node
[MYSQLD]
[MYSQLD]
———-
实际应用中请将文件中的IP地址换成你相应的IP。
然后我们启动群集管理服务器:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
我们应该也需要在服务器启动时能够自动启动管理服务器,所以我们创建了一个非常简单的初始化
脚本和相应的启动连接:
loadb1.test.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
三 配置MySQL群集节点(存储节点)
现在我们将分别在sql1.test.com和sql2.test.com上安装mysql-max-5.0.19:
sql1.example.com / sql2.example.com:
groupadd mysql
useradd -g mysql mysql
cd /usr/local/
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
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/my.cnf :
vi /etc/my.cnf
–
[mysqld]
ndbcluster
# IP address of the cluster management node
ndb-connectstring=192.168.0.103
[mysql_cluster]
# IP address of the cluster management node
ndb-connectstring=192.168.0.103
–
确认你在群集管理服务器中输入的是正确的IP地址。
下一步我们分别在每个群集节点上创建数据目录和启动MySQL服务器:
sql1.test.com / sql2.test.com:
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
ndbd –initial
/etc/init.d/mysql.server start
(请记住:我们只是在第一次启动MySQL时或loadb1.test.com上面的
/var/lib/mysql-cluster/config.ini发生改变时,才使用ndbd –initial)
现在,是时候给MySQL root帐号设置密码了:
sql1.test.com / sql2.test.com:
mysqladmin -u root password yourrootsqlpassword
我们需要在服务器启动时,启动群集节点,所以我们创建一个ndbd初始化脚本和相应的
系统启动连接:
sql1.test.com / sql2.test.com:
echo ‘ndbd’ > /etc/init.d/ndbd
chmod 755 /etc/init.d/ndbd
update-rc.d ndbd defaults
四 测试MySQL群集
我们的MySQL群集配置工作已经完成,现在是测试它的时间了。在群集管理服务器
(loadb1.test.com)上,运行群集管理客户端ndb_mgm来检查群集节点是否连接:
loadb1.test.com:
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 @192.168.0.101 (Version: 5.0.19, Nodegroup: 0, Master)
id=3 @192.168.0.102 (Version: 5.0.19, Nodegroup: 0)
[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>
如果你看到你的节点都已经连接上了。那么一切都很顺利!
输入
quit;
退出 ndb_mgm 客户端控制台。
现在我们在sql1.test.com节点上创建一个测试数据库,并创建一个测试表,
填入一些测试数据:
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)
现在我们在sql2.test.com节点上创建相同的数据库(是,我们仍然要创建它,但是在testtable创建之后
数据将会被复制到sql2.test.com,因为testtable是使用ENGINE=NDBCLUSTER):
sql2.test.com:
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
SELECT * FROM testtable;
SELECT出的结果应该是和上面的sql1.test.com的结果相同:
mysql> SELECT * FROM testtable;
+——+
| i |
+——+
| 1 |
+——+
1 row in set (0.04 sec)
我们看到数据已经从sql1.test.com节点复制到sql2.example.com节点了。现在我们
向testtable中插入另外一行:
sql2.test.com:
INSERT INTO testtable () VALUES (2);
quit;
现在让我们回到sql1.example.com节点上,检查是否能够看见新插入的那一行:
sql1.example.com:
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(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安装包:
loadb1.test.com / loadb2.test.com:
cd /tmp
wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0002.tar.gz
tar xvfz DBD-mysql-3.0002.tar.gz
cd DBD-mysql-3.0002
perl Makefile.PL
make
make install
我们必须先启用packet forwarding:
loadb1.example.com / loadb2.example.com:
vi /etc/sysctl.conf
# Enables packet forwardingnet.ipv4.ip_forward = 1
6.2 配置heartbeat(心跳)
我们通过创建三个文件(loadb1.test.com 和 loadb2.test.com的文件必须完全一样)来配置heartbeat:
loadb1.test.com / loadb2.test.com:
vi /etc/ha.d/ha.cf
logfacility local0
bcast eth0
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node loadb1
node loadb2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
请记住:你必须列出节点名称(本例中是loadb1 和 loadb2)
uname -n
除了这些,我们不需要对这个文件做任何修改。
vi /etc/ha.d/haresources
loadb1 \
ldirectord::ldirectord.cf \
LVSSyncDaemonSwap::master \
IPaddr2::192.168.0.105/24/eth0/192.168.0.255
你必须列举其中一个负载均衡节点名称(这里是:loadb1),并且列出
虚拟IP地址(192.168.0.105)和广播地址(192.168.0.255).
vi /etc/ha.d/authkeys
auth 3
3 md5 somerandomstring
somerandomstring是loadb1 和 loadb2 用来相互认证的两个heartbeat守护进程的密码。
这里设置成你自己的密码。你可以选择3种加密方式。我一般使用md5来加密。
/etc/ha.d/authkeys应该是root帐号只读,这里我们这样做:
loadb1.test.com / loadb2.test.com:
chmod 600 /etc/ha.d/authkeys
6.3 配置 ldirectord
现在我们为ldirectord创建配置文件, 负载均衡器:
loadb1.example.com / loadb2.example.com:
vi /etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=10
checkinterval=2
autoreload=no
logfile="local0"
quiescent=yes
virtual = 192.168.0.105:3306
service = mysql
real = 192.168.0.101:3306 gate
real = 192.168.0.102:3306 gate
checktype = negotiate
login = "ldirector"
passwd = "ldirectorpassword"
database = "ldirectordb"
request = "SELECT * FROM connectioncheck"
scheduler = wrr
请填入正确的虚拟IP地址(192.168.0.105)和正确的MySQL群集节点的IP地址(192.168.0.101 和 192.168.0.102)。
3306是MySQL运行时默认的端口。我们也指定了一个MySQL用户(ldirector)和密码(ldirectorpassword),一个数据库(ldirectordb)和
一条SQL查询。ldirectord 使用这些信息来测试MySQL群集节点,以此来检查它们的是否一直可用。下一步我们将用ldirector用户来
创建ldirectordb数据库。
现在我们为heartbeat创建系统必需的启动连接,并移除ldirectord(因为ldirectord将由heartbeat来启动):
loadb1.test.com / loadb2.test.com:
update-rc.d -f heartbeat remove
update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .
update-rc.d -f ldirectord remove
6.4 创建数据库ldirector
下面我们在MySQL群集节点sql1.test.com 和 sql2.test.com上创建ldirector数据库。这个数据库将会用于我们的负载均衡器来检查
MySQL群集节点的可用性。
sql1.test.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';
FLUSH PRIVILEGES;
CREATE DATABASE ldirectordb;
USE ldirectordb;
CREATE TABLE connectioncheck (i INT) ENGINE=NDBCLUSTER;
INSERT INTO connectioncheck () VALUES (1);
quit;
sql2.test.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';
FLUSH PRIVILEGES;
CREATE DATABASE ldirectordb;
quit;
6.4 为负载均衡准备MySQL群集节点
最后我们必须配置MySQL群集节点sql1.test.com 和 sql2.test.com来接受虚拟IP地址192.168.0.105。
sql1.test.com / sql2.test.com:
apt-get install iproute
在/etc/sysctl.conf里面添加下面的内容:
vi /etc/sysctl.conf
# Enable configuration of arp_ignore option
net.ipv4.conf.all.arp_ignore = 1
# When an arp request is received on eth0, only respond if that address is
# configured on eth0. In particular, do not respond if the address is
# configured on lo
net.ipv4.conf.eth0.arp_ignore = 1
# Ditto for eth1, add for all ARPing interfaces
#net.ipv4.conf.eth1.arp_ignore = 1
# Enable configuration of arp_announce option
net.ipv4.conf.all.arp_announce = 2
# When making an ARP request sent through eth0 Always use an address that
# is configured on eth0 as the source address of the ARP request. If this
# is not set, and packets are being sent out eth0 for an address that is on
# lo, and an arp request is required, then the address on lo will be used.
# As the source IP address of arp requests is entered into the ARP cache on
# the destination, it has the effect of announcing this address. This is
# not desirable in this case as adresses on lo on the real-servers should
# be announced only by the linux-director.
net.ipv4.conf.eth0.arp_announce = 2
# Ditto for eth1, add for all ARPing interfaces
#net.ipv4.conf.eth1.arp_announce = 2
sysctl -p
将下面这段加入到/etc/network/interfaces:
sql1.test.com / sql2.test.com:
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.168.0.105
netmask 255.255.255.255
pre-up sysctl -p > /dev/null
ifup lo:0
七.启动负载均衡器并测试
现在我们启动两个负载均衡管理器:
loadb1.test.com / loadb2.test.com:
/etc/init.d/ldirectord stop
/etc/init.d/heartbeat start
如果你没有看见错误,你需要现在重启每个负载均衡器:
loadb1.test.com / loadb2.test.com:
shutdown -r now
重启之后我们可以检查是否两个负载均衡器象期望一样工作:
loadb1.test.com / loadb2.test.com:
ip addr sh eth0
主动的负载均衡器应该列出了虚拟IP地址(192.168.0.105):
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 192.168.0.103/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.105/24 brd 192.168.0.255 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 192.168.0.104/24 brd 192.168.0.255 scope global eth0
loadb1.test.com / loadb2.test.com:
ldirectord ldirectord.cf status
主动负载均衡器上的输出:
ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 1603
被动负载均衡器上的输出:
ldirectord is stopped for /etc/ha.d/ldirectord.cf
loadb1.example.com / loadb2.example.com:
ipvsadm -L -n
主动负载均衡器上的输出:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.105:3306 wrr
-> 192.168.0.101:3306 Route 1 0 0
-> 192.168.0.102:3306 Route 1 0 0
被动负载均衡器上的输出:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
loadb1.test.com / loadb2.test.com:
/etc/ha.d/resource.d/LVSSyncDaemonSwap master status
主动负载均衡器上的输出:
master running
(ipvs_syncmaster pid: 1766)
被动负载均衡器上的输出:
master stopped
(ipvs_syncbackup pid: 1440)
如果你的测试都是正常的,你现在可以从相同网络(192.168.0.x)中的其它服务器用虚拟IP地址192.168.0.105来访问MySQL数据库:
mysql -h 192.168.0.105 -u ldirector -p
(请记住:你的MySQL客户端必须至少是4.1版本的;旧的版本不能运行MySQL5。)
你现在可以关掉一个MySQL群集节点来测试;你应该仍然可以连接到MySQL数据库。
八 注解
运行一个MySQL群集时,这里有一些重要的东西需要记住:
–所有的数据都是存在内存! 因此你的群集节点上需要大容量的内存。这里有每个节点需要内存
容量的计算公式:
(数据库大小SizeofDatabase * 复制数量NumberOfReplicas * 1.1 ) / 数据节点数量NumberOfDataNodes
所以如果你有一个数据库的大小是1GB,你应该为每个节点配备1.1GB内存!
–群集管理节点在监听1186端口上的任意连接。所以这意味着不是很安全,所以你应当在一个独立的网络上运行MySQL群集。
相关推荐
整合上述知识点,可以了解到文档所涉及的MySQL负载均衡群集配置主要包括以下几部分: - MySQL版本的选择与安装 - 高可用性解决方案的搭建(Heartbeat和UltraMonkey) - 心跳检测机制的配置 - 负载均衡节点的配置与...
MySQL 负载均衡群集(LVS)是基于 Linux 操作系统的高可用性解决方案,旨在提高 MySQL 数据库的可扩展性、灵活性和可靠性。LVS 通过在多个 MySQL 服务器之间分配负载,实现负载均衡,提高数据库的整体性能和可用性。 ...
- 将LVS与Keepalived结合使用,可以构建一个高度可靠、性能强大的高可用性负载均衡系统。 - LVS 负责将流量分发到后端的MySQL服务器,Keepalived 则负责监控这些服务器的状态,并在必要时进行故障切换,保证服务的...
4. 故障转移(Failover):故障转移是高可用性系统的关键组件,它在主节点发生故障时,自动将服务切换到预先配置的备用节点。这个过程需要尽可能快速和无缝,以避免对用户的服务体验造成影响。对于MySQL而言,故障...
此配置旨在实现数据库服务的高可用性和负载均衡,确保数据的一致性和系统的稳定性。 **实验环境** - **操作系统**: Red Hat AS 4 Update 2 - **数据库版本**: MySQL 5.0.22 - **服务器**: 共三台服务器,分别为PC1...
1. **配置MySQL主从复制**:设置MySQL服务器之间的binlog同步,确保数据的实时复制。 2. **部署LVS**:在独立的服务器上安装和配置LVS,设置负载均衡策略,如轮询、最少连接数等。 3. **部署Keepalived或替代方案**...
这种方式能够显著提高资源利用率,同时提供高可用性和负载均衡能力。在MSSQL中,这通常通过搭建AA集群(Active-Active Cluster)来实现,集群中的每个节点都能够处理读写请求,从而达到资源的最大化利用。 #### ...
1. MySQL数据库的复制:在配置高可用性之前,了解MySQL的复制原理是基础。MySQL复制是将主数据库上的数据更改通过日志记录下来,并将这些更改应用到一个或多个从数据库上的过程。这种复制技术可以用于备份、报告、...
本文主要探讨了如何利用Java应用程序构建一个高并发、高可用性的集群服务器,并详细介绍了采用的技术和实施步骤。 首先,该集群服务器采用了Linux操作系统作为基础平台,结合Nginx作为负载均衡器,MySQL作为数据库...
Keepalived是一款用于实现高可用性和负载均衡的开源软件,特别适合与LVS一起使用,共同构建高可用的服务集群。 **Keepalived的作用**: - **健康检查**:通过定期发送检查请求来监控后端服务器的状态。 - **故障...
为了实现高可用性和容错性,整个集群需要进行定期的监控和维护,确保所有组件都能正常工作。同时,安全措施也非常重要,包括加密通信、限制访问和定期更新软件来防止潜在的安全威胁。 总的来说,OpenSips与...
在Debian操作系统上使用DRBD(Distributed Replicated Block Device)实现MySQL群集是为了提高数据库服务的高可用性和数据安全性。DRBD是一种分布式存储技术,它可以实现在多个节点之间实时同步数据,从而在一台...
- 整个电子政务网服务器系统设计满足用户跨平台需求,构建了三大核心集群:WEB服务器负载均衡集群、MySQL高可用数据库服务器集群和高可用负载均衡服务器集群。 - 这种架构增强了系统的稳定性和可用性,确保政务网...
NDB 存储引擎保证了数据的一致性和高可用性,同时提供了故障切换和负载均衡的能力。 MySQL Cluster 支持的操作系统包括 Linux、Mac OS X 和 Solaris,有些用户报告在 FreeBSD 上也能运行,但官方并未正式支持。由于...
它利用NDB Cluster存储引擎,可以在一个集群中运行多个MySQL服务器,确保数据的高可用性和高性能。 MySQL Cluster的核心特性是其无共享架构,这意味着每个组件都有自己的内存和磁盘,避免了单点故障,提高了系统的...
总之,MySQL数据库的高可用性是通过复制、负载均衡、群集等技术来实现的,结合适当的监控和备份策略,可以为业务提供连续的服务并保障数据安全。对于大型、关键性的应用,了解和实施这些高可用方案是确保系统稳定...
【高性能MySQL 第三版读书笔记 一至六】主要涵盖了MySQL服务器优化、操作系统和硬件优化、复制技术、可扩展性方案、MySQL分支与变种以及高可用性策略等多个方面。以下是对这些知识点的详细说明: 1. **优化服务器...
5. **主从复制**:MySQL的主从复制是实现高可用性和负载均衡的重要手段。主从架构中,数据写入主服务器,然后同步到从服务器,确保数据一致性和冗余。书中会详细介绍复制的配置、监控和故障恢复方法。 6. **分区与...
通过复制、群集和负载均衡等技术,即使在部分组件出现故障的情况下,系统也能够持续提供服务,从而避免单点故障造成的服务中断。 综上所述,高性能MySQL数据库的实现涉及众多的方面,从基础的硬件选择到复杂的查询...
- LVS 是一种基于IP层的负载均衡技术,可以实现服务器群集的负载均衡和高可用性。 - 在此环境中,LVS采用了VS/DR(Direct Routing)模式,这种模式下,LVS节点将数据包直接路由到真实服务器,减少了网络延迟,提高...