要求:
如何实际部署一个LAMP负载均衡集群
web服务器负载均衡,连接同一台独立的mysql数据库。
安装phpwind论坛,使用域名来访问。
在网站的根目录存放一个index_session.php
思考:
php的session信息默认是以文件的形式存放的
/etc/php.ini <----session
常规的session信息保存方法:
文件形式 <---共享存储
数据库形式 <----所有web服务器都读写同一个MySQL
memcached服务 <---所有web服务器都读写同一个
内存
为了对外提供相同的服务,需要做到哪些?
论坛的用户可以上传附件,那么附件需要同步吗?怎么同步?
共享存储: nfs , iscsi(集群文件系统),mfs
httpd, php , mysql-server ,php-mysql
clients 10.1.1.115
| | |
eth0
Router
virbr1
|------------------|---------------------|
Dr R1 R2
Router
eth0 10.1.1.21
virbr1 1.1.1.1
Dr
eth0 1.1.1.128 <----www.upl.com
gw 1.1.1.1
R1
eth0 1.1.1.129
gw 1.1.1.1
lo:0 1.1.1.128/32
R2
eth0 1.1.1.130
gw 1.1.1.1
lo:0 1.1.1.128/32
Mysql
eth0 1.1.1.131
MySQL数据库:
skip-name-resolve
mysql> create database phpwind default charset utf8;
mysql> grant all on phpwind.* to bbs@'1.1.1.%'
-> identified by '123';
部署web服务器:
1、在其中一台web服务器,这里选择是R1解压代码
2、暂时让调度器DR只把请求调度给R1
# ipvsadm -e -t 1.1.1.128:80 -r 1.1.1.130 -g -w 0
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 1.1.1.128:80 rr
-> 1.1.1.130:80 Route 0 0 0 <--暂停调度
-> 1.1.1.129:80 Route 1 0 0
3、使用域名www.upl.com访问,进行向导 。
4、安装完毕之后才把R1上的网站根目录里的代码同步到R2
5、恢复DR的正常调度,可以调度给R1,R2
# vim /etc/php.ini
session.save_path = "/var/lib/php/session"
把/var/lib/php/session 挂载到共享存储。
# chmod 777 /var/lib/php/session
=====================================================================
clients 10.1.1.115
| | |
eth0
Router
virbr1
|----------|-----------|---------------------|
Dr BDr R1 R2
VIP 1.1.1.132 <----www.upl.com
Router
eth0 10.1.1.21
virbr1 1.1.1.1
Dr
eth1 1.1.1.128
gw 1.1.1.1
BDr
eth0 1.1.1.131
R1
eth0 1.1.1.129
gw 1.1.1.1
lo:0 1.1.1.132/32
R2
eth0 1.1.1.130
gw 1.1.1.1
lo:0 1.1.1.132/32
一、部署调度工具
1、
Dr、BDR都安装piranha
# yum install piranha -y
# piranha-passwd
New Password:
Verify:
Updating password for user piranha
# service piranha-gui start
# lsof -i:3636
2、在主DR进行配置,然后同步配置文件到BDR
http://1.1.1.128:3636
配置完毕,把配置文件同步到BDR
# scp /etc/sysconfig/ha/lvs.cf 1.1.1.131:/etc/sysconfig/ha/
在本次实验中,由于Dr公共网络的网卡(绑定VIP的网卡)是eth1,BDR却是eth0,所以配置文件同步过去后,需要修改一下,把里面eth1:1修改成eth0:1才使用被BDR使用。
启动pulse服务: dr、bdr都要启动
# service pulse start
3、其余步骤
为什么在该拓扑图中,调度器可以不静态绑定后端节点的MAC。
二、部署后端节点
略
# ifconfig lo:0 1.1.1.132 netmask 255.255.255.255
参考文档:27页
Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN.pdf
========================================================================
高可用集群
为了解决单点故障,使用的集群技术,叫做“高可用集群(HA)”
同一时刻只有一个节点,作为活动节点对外提供服务,另外的节点都是处于备用状态,他们构成HA集群,集群中的这些节点都是相互通过“心跳”(串口线的信号、网络组播、广播、单播)相互进行沟通,只要活动节点出故障,就会进行故障迁移,就是剩余的备用状态的这些备用节点会推举其中一台取代故障节点,继续对外提供服务。
常用的高可用集群用到的套件:
heartbeat
keepalive
rhcs套件
实验1:使用heartbeat实现web服务器的高可用。
clients
|||
vip <----浮动IP
|
|-----------------|
web1 web2 <---- 这两个节点组成了HA集群
资源:
vip 1.1.1.188
apache服务
node2.upl.com
eth0 1.1.1.129/24
node3.upl.com
eth0 1.1.1.130/24
必须两个节点同步相互绑定主机名hosts
一、所有节点安装软件heartbeat
heartbeat-2.1.3-3.el5.centos.i386.rpm
heartbeat-pils-2.1.3-3.el5.centos.i386.rpm
heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm
二、在其中一个节点配置,同步配置文件
1、主配置文件
# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
# vim /etc/ha.d/ha.cf
logfile /var/log/ha-log
keepalive 2
deadtime 12
warntime 6
initdead 60
udpport 694
ucast eth0 1.1.1.130 <--使用本机的eth0接受与发送心跳,并且把心跳发送给1.1.1.130
auto_failback on <---主节点故障修复后重新上线,会自动取回资源,备节点会重新恢复备用状态
node node2.upl.com
node node3.upl.com <---定义集群中的所有节点
ping 1.1.1.1 <----一般设定为网关
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
2、资源配置文件
资源:一个HA集群中的节点为了能够对外提供正常的服务所必须的条件,这些条件可以是,例如:
vip <----浮动IP
apache服务
mysql服务
共享存储的连接与挂载
。。。。。
这些资源往往都是通过脚本来管理:
获取apache服务,就是通过/etc/rc.d/init.d/httpd start启动
停止apache服务,就是通过/etc/rc.d/init.d/httpd stop释放资源
查看资源状态 .... status
脚本执行的时候,heartbeat会自动根据实际情况传输start,stop,status等参数,但是一些特别的参数就需要手工指定
资源对应的脚本默认情况下,heartbeat会在/etc/ha.d/resource.d/或者/etc/rc.d/init.d/目录下寻找。
格式:
#node-name resource1::参数1::参数2 resource2 ... resourceN
# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
# vim /etc/ha.d/haresources
node2.upl.com IPaddr::1.1.1.188/24/eth0 httpd
^^^主节点。
3、心跳加密配置文件
# cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
# vim /etc/ha.d/authkeys
auth 2
2 sha1 sdlkfjfk219dj!
# chmod 600 /etc/ha.d/authkeys
同步配置文件到其余节点
三、把涉及到资源测试一下,保证资源是可用。
在本实验中,就应该测试apache是否能工作正常。
测试完毕之后,所有资源都应该手工的关闭掉。因为这些资源都应该有heartbeat服务根据配置文件自动协商获取的。
四、启动
# service heartbeat start
手工把资源让给另外一个节点:
# /usr/lib/heartbeat/hb_standby <----当前活动节点
手工把资源抢到手:
# /usr/lib/heartbeat/hb_takeover
故障排除:
/var/log/ha-log