一个高可用示例

要求:
 如何实际部署一个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

你可能感兴趣的:(高可用,负载均衡)