当前位置: 主页 > 编程知识 > Mysql数据库 > 配置高可用性的MySQL服务器负载均衡群集的具体过程

配置高可用性的MySQL服务器负载均衡群集的具体过程

时间:2009-12-28来源:站长资讯网 点击:

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群集。

 

站长资讯网
.
分页: [1] [2] [3] [4]
TAG: MySQL 服务器 负载均衡
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言