Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124635
  • 博文数量: 69
  • 博客积分: 1550
  • 博客等级: 上尉
  • 技术积分: 676
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-22 11:13
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(5)

2008年(4)

2007年(46)

2006年(13)

我的朋友

分类: LINUX

2006-08-09 11:43:32

1、RedHat AS4已经支持ipvs
查看你的RedHat系统 是否支持ipvs方法:如果你能在目录/lib/modules/2.*.*-*/kernel/net/ipv4/ipvs中看到ip_vs_*文件,就证明你的系统已经支持ipvs
2、安装ipvs管理工具ipvsadm
    ipvsadm是配置内核流量分配策略的工具。
    下载安装包
     上传到服务器解压安装
   #tar xzvf ipvsadm-1.24.tar.gz
   #cd ipvsadm-1.24
   #ln -s /usr/src/kernels/2.6.9-5.EL-i686 /usr/src/linux
   #make
   #make install
 
   *****make时,INCLUDE默认指向/usr/src/linux,编译时会出错,因为找不到/usr/src/linux,所以通过连接,解决此问题。或者通过修改Makefile,将

修改当前目录和libipvs目录中的Makefile的:
    INCLUDE                = -I/usr/src/linux/include -I.. -I.
   为:
    INCLUDE         = -I/usr/src/kernels/2.6.9-22.EL-i686/include -I.. -I.
   ******
 
安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

现在,就可以用此服务器作为director服务器,为后端web服务器等作负载均衡了.如下:先为服务器增加虚拟ip地址192.168.1.130

          然后将访问http服务的请求转发到后端的   realserver192.168.1.135和192.168.1.136

#ifconfig eth0:0 192.168.1.130 netmask 255.255.254.0 broadcast 192.168.1.255 up

#ipvsadm -A -t 192.168.1.130:80 -s wlc

#ipvsadm -a -t 192.168.1.130:80 -r 192.168.1.135 -g

#ipvsadm -a -t 192.168.1.130:80 -r 192.168.1.136 -g

但此时,因为只有一台director服务器,容易发生单点故障,因为要对此服务器做冗余。采用HA集群来实现

3。安装heartbeat

下载软件包()

beat-stonith-1.2.3.cvs.20050927-1.centos4.i386.rpm 

***本版本采用REDHAT AS4,用centos4兼容版本****** 
  #rpm -ivh heartbeat-pils-1.2.3.cvs.20050927- 1.centos4.i386.rpm 
   #rpm -ivh net-snmp-libs-5.1.2-11.i386.rpm 
  #rpm -ivh heartbeat-stonith-1.2.3.cvs.20050927-1.centos4.i386.rpm 
  #rpm -ivh heartbeat-1.2.3.cvs.20050927-1.centos4.i386.rpm 
  #rpm -ivh perl-Net-DNS-0.48-1.i386.rpm 
  #rpm -ivh perl-Digest-HMAC-1.01-13.noarch.rpm 
  #rpm -ivh perl-Digest-SHA1-2.07-5.i386.rpm 
  #rpm -ivh perl-Digest-HMAC-1.01-13.noarch.rpm 
  #rpm -ivh perl-Net-DNS-0.48-1.i386.rpm 
  #rpm -ivh heartbeat-ldirectord-1.2.3.cvs.20050927-1.centos4.i386.rpm --nodeps

4。配置

  配置文件有3个,ha.cf haresources authkeys

  在安装完成以后生成模版,位于/usr/share/doc/heartbeat-1.2.3.cvs.20050927-1.centos4下,将这三个文件拷贝至/etc/ha.d/目录下,进行修改

   *********ha.cf*************

debugfile /var/log/ha-debug

logfile /var/log/ha-log

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport 694

ucast eth0 172.0.0.2   //ucast方式 心跳线网卡 ,对端ip

auto_failback on

node lvs1              //HA的两个节点,机器名要在hosts中定义
node lvs2
**********************************

*****************haresources文件*******************

lvs1 IPaddr::192.168.1.130/23/192.168.1.255 ipvsadm ldirectord::/etc/ha.d/ldirectord.cf

***lvs1指HA中的master为LVS1

***IPaddr::192.168.1.130/23/192.168.1.255  是HA的虚拟IP/掩码/广播地址

***ipvsadm 是用HA来管理的服务(在/etc/init.d和/etc/ha.d/resource中定义的服务启动脚本)

***ldirectord::/etc/ha.d/ldirectord.cf 同上,ldirectord指服务,后边是其配置文件。

********haresources文件在HA的两个节点中,必须是相同的********

************authkeys文件***************************

定义HA节点间的认证方式,必须将此文件的权限设置为600

其书写格式如下

auth
[]

下面采用CRC认证方式

auth 1

1 crc

*****************************************************

以上三个文件的配置祥见

 

5。配置ldirectord为服务转发提供HA冗余

   /usr/share/doc/heartbeat-ldirectord-1.2.3.cvs.20050927/ldirectord.cf文件为配置文件的样本。将此文件拷贝至/etc/ha.d/目录下,可以修改成其他名字,但名字必须与haresources文件中指定的配置文件名相同(如果将文件改名为,则在haresources文件中必须指定为

ldirectord::/etc/ha.d/

配置为两台web服务器(192.168.1.135/192.168.1.136)提供负载均衡

virtual=192.168.1.130:80
        real=192.168.1.135:80 gate
        real=192.168.1.136:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        request=".testpage"
        receive="ok"
#       virtualhost=some.domain.com.au
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp

virtual指定了虚拟的IP地址

real指定了后端真正web服务器的IP地址

fallback

service指定服务

request指定测试web服务器状态的请求页面(现指定为.testpage页面)

receive指定测试页面返回的值所包含的内容(现指定为“ok”)

********如果请求页面不存在,或返回值不包含“ok”则认为服务失效,将不再为其转发请求********************************

scheduler指定了算法,rr为轮训,wlc为权重

virtualhost指定虚拟主机的域名(如一台realserver上有多个站点,可以通过此域名来区分

详细请参见网站

5。在web服务器上指定测试页面

  在192.168.1.135上,执行echo “ok”> /var/www/html/.testpage

  在192.168.1.136上,执行echo “ok”> /var/www/html/.testpage

6.为web服务器增加虚拟IP地址

  在192.168.1.135上执行

  ifconfig lo:0 192.168.1.130 netmask 255.255.255.255 broadcast 192.168.1.130 up

  在192.168.1.136上执行

  ifconfig lo:0 192.168.1.130 netmask 255.255.255.255 broadcast 192.168.1.130 up

   如果是windows服务器,则需要增加windows loopback网卡(添加删除硬件-添加新硬件--microsoft loopback adapter),并将此网卡地址设置为虚拟IP地址。通过修改注册表,将掩码更改为255.255.255.255,然后重新激活(\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\Tcpip\  Parameters\Interfaces,找到相应的网卡,修改掩码)

 

7.重新启动HA-ipvsadm服务器,配置完成

8。****以上为采用DR方式,只能为与virtual IP位于同一网段的REALserver进 行负载均衡。

  ****采用NAT方式,可以将Real Server的内网地址,通过virtual的公网IP地址进行NAT翻译。除以上配置以外,还需在lvs服务器上打开ip_forward

   #echo 1 > /proc/sys/net/ipv4/ip_forward

    ldirectord.cf配置为

virtual=192.168.1.130:80
        real=192.168.1.135:80 masq
        real=192.168.1.136:80 masq
        fallback=127.0.0.1:80 masq
        service=http
        request=".testpage"
        receive="ok"
#       virtualhost=some.domain.com.au
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp

另外需要将RealServer的默认网关更改为LVS服务器。

这种方式,效率最低。适用于公网IP不够用的情况

另外,因为realserver需要指定LVS服务器的内网地址作为网关,但如果指定为主LVS服务器的地址,则主服务器出现故障是,LVS切换至辅LVS服务器,但是realserver的网关仍然指向主LVS服务器,因为切换以后出现问题,导致客户端无法访问web站点。必须在LVS服务器切换的同时,将realserver的网关地址也同时切换。实现方法如下:

修改/etc/ha.d/haresources文件,加入

lvs1 IPaddr::172.0.0.10/24/172.0.0.255

这样,切换lvs服务是会同时起动两个虚拟地址,一个为外网提供访问的地址,一个为realserver提供的网关地址(172.0.0.10)

*******采用IP/TUN方式。lvs将请求打包,通过Ip/tun方式发送至RealServer,RealServer解包后,直接将请求结果返回给客户端,而不通过lvs。这种方式可以支持lvs与Realserver不在同一网络,可以跨网络,地域来实现负载均衡

  LVS需要启用IP转发

    #echo 1 > /proc/sys/net/ipv4/ip_forward

   ldirectord.cf配置为

virtual=192.168.1.130:80
        real=192.168.1.135:80 ipip
        real=192.168.1.136:80 ipip
        fallback=127.0.0.1:80 ipip
        service=http
        request=".testpage"
        receive="ok"
#       virtualhost=some.domain.com.au
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp

realserver上

ifconfig tunl0 192.168.1.130 netmask 255.255.255.255 broadcast 192.168.1.130 up

 

9.配置完成后,重新启动,即可工作,但察看日志会有以下错误

ipvsadm: Applying IPVS configuration failed

只是因为ipvsadm启动时,默认会从/etc/sysconfig/ipvsadm读取配置文件。因为安装完成后,没有此配置文件,所以会报告错误。只需建立此文件,并将ldirectord。cf的配置按照ipvsadm的命令语法写入此文件即可

如下:

#touch /etc/sysconfig/ipvsadm

#vi /etc/sysconfig/ipvsadm

     -A -t 192.168.1.130:80 -s rr

     -a -t 192.168.1.130:80 -r 192.168.1.135:80 -g/-m/-i -w 1

     -a -t 192.168.1.130:80 -r 192.168.1.136:80 -g/-m/-i -w 1

******-g/-m/-i分别代表直接路由方式/NAT方式/IP tunl方式********


 

9。测试

  测试分为三部分进行

  1。HA调度器测试

  2。HA+ipvs测试

  3。HA+ipvs+ldirector测试

10.附录:各机器配置如下

LVS1:  eth0 192.168.1.131    eth1 172.0.0.1(心跳连接线)

LVS2:  eth0  192.168.1.133   eth1 172.0.0.2(心跳连接线)

WEB1:  eth0  192.168.1.135   lo:0 192.168.1.130

WEB2:  eth0  192.168.1.136   lo:0 192.168.1.130

VIRTUAL IP:   192.168.1.130


 

 ipvsadm命令参考
对ipvsadm 的命令参考,并根据自己使用的经验,进行了一个简单的翻译,希望
对ipvsadm 的使用者有一定的帮助。
为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍
一下:
1,virtual-service-address:是指虚拟服务器的ip 地址
2,real-service-address:是指真实服务器的ip 地址
3,scheduler:调度方法
(lna@networksbase.com 翻译 ipvsadm v1.21 2004 年4 月)
ipvsadm 的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
[timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port
[-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h
命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
以。
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l --list 显示内核虚拟服务器表
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说
明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的
VRRP 功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i --ipip 指定LVS 的工作模式为隧道模式
-m --masquerading 指定LVS 的工作模式为NAT 模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组播的同步接口
-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon 显示同步守护进程状态
--stats 显示统计信息
--rate 显示速率信息
--sort 对虚拟服务器和真实服务器排序输出
--numeric -n 输出IP 地址和端口的数字形式

集群搭建相关链接:




 (来源


阅读(1712) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~