`
yangzb
  • 浏览: 3474086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

较全的LVS和HA文档

    博客分类:
  • HA
阅读更多

拓扑结构图


vip :
192.168.1.198
虚拟 ip
master:192.168.1.196
主分发服务器
slave:
192.168.1.197
备份分发服务器
real1:
192.168.1.191
响应服务器 1
real2:
192.168.1.192
响应服务器 2

实现以下目的
一)配置基于 DR 模式简单 Lvs
集群配置基于隧道模式 Lvs
二)集群配置基于高可用 Lvs+heartbeat
三)双机 lvs-ha

一、 配置基于 DR 模式 Lvs 集群

1、下载 ipvsadm 管理程序
ipvsadm-*.tar.gz

tar zxvf ipvsadm-*.tar.gz
cd ipvsadm-*
make && make install


注意在 make 时可能会出现很多错误的信息,请按照如下操作就可以心编译正常
ln -s /usr/src/kernels/2.6.9-22.EL-i686//usr/src/linux

cd ipvsadm-*

make && make install
我机器是 centos4
所以我 yum 安装
yum -y install ipvsadm
# ipvs
管理器

yum -y installlibnet
#
库文件
yum -y install e2fsprogs
#
库文件
yum -y installheartbeat
# linux-ha

yum –y installheartbeat-ldirectord

cp/usr/share/doc/heartbeat-2.1.*/ha.cf /etc/ha.d/
cp/usr/share/doc/heartbeat-2.1.*/authkeys /etc/ha.d/
cp/usr/share/doc/heartbeat-2.1.*/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-ldirectord-2.1.*/ldirectord.cf/etc/ha.d/

2 、配置 VIP 脚本

[root@ct1 ~]# more/etc/init.d/lvsdr-basic
#!/bin/sh
#
# This script willbe executed *after* all the other init scripts.
# You can put yourown initialization stuff in here if you don’t
# want to do thefull Sys V style init stuff.

VIP=192.168.1.198
RIP1=192.168.1.191
RIP2=192.168.1.192
###########################
# ifconfig a
#
#/sbin/ifconfigeth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#
############################

#/sbin/route add-host $VIP dev eth0:0
#echo “1″> /proc/sys/net/ipv4/ip_forward

/etc/rc.d/init.d/functions

case “$1″in

start)

echo “startLVS of DirectorServer”
#Set the Virtual IPAddress

/sbin/ifconfigeth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add-host $VIP dev eth0:1

#Clear IPVS Table

/sbin/ipvsadm -C

#Set Lvs

/sbin/ipvsadm -A -t$VIP:80 -s rr

/sbin/ipvsadm -a -t$VIP:80 -r $RIP1:80 -g

/sbin/ipvsadm -a -t$VIP:80 -r $RIP2:80 -g

#Run Lvs

/sbin/ipvsadm

;;

stop)

echo “closeLVS Directorserver”

/sbin/ipvsadm -C

;;

*)
echo “Usage:$0 {start|stop}”

exit 1

esac

下例是其他类似的 lvsdr 配置文件

more /etc/init.d/lvsDR
#!/bin/sh
# description: start LVS   of  Directorserver
VIP=192.168.1.198
RIP1=192.168.1.191

RIP2=192.168.1.192

. /etc/rc.d/init.d/functions

case “$1″ in
    start)
        echo ” start LVS  ofDirectorServer”
       # set the Virtual  IP Address
       /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask255.255.255.255 up
       /sbin/route add -host $VIP dev eth0:0
       #Clear IPVS table
       /sbin/ipvsadm -C
      #set LVS
      /sbin/ipvsadm -A -t $VIP:80 -s rr  (如果需要 session 保持添加 -p 默认保持 300 )
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
      #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
      #Run LVS
      /sbin/ipvsadm
      #end

        ;;
    stop)
        echo “close LVS Directorserver”
        /sbin/ipvsadm -C
        ;;
    *)
        echo “Usage: $0 {start|stop}”
        exit 1
esac

隧道模式
tun
more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS   of  Directorserver
VIP=192.168.1.198
RIP1=192.168.1.191

RIP2=192.168.1.192

. /etc/rc.d/init.d/functions

case “$1″ in
    start)
        echo ” start LVS  ofDirectorServer”
       # set the Virtual  IP Address
       /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask255.255.255.255 up
       /sbin/route add -host $VIP dev tunl0
       #Clear IPVS table
       /sbin/ipvsadm -C
      #set LVS
      /sbin/ipvsadm -A -t $VIP:80 -s rr
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
      #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
      #Run LVS
      /sbin/ipvsadm
      #end

        ;;
    stop)
        echo “close LVS Directorserver”
        ifconfig tunl0 down
        /sbin/ipvsadm -C
        ;;
    *)
        echo “Usage: $0 {start|stop}”
        exit 1
esac

-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改 rr 就可以了, ipvsadm -h 查看帮助。 -g 是使用 lvs 工作 DR 直接路由模式,也可自行修改)
如果有多个 realserver 直接添加就可以了 , 之后启动此脚本就可以了。
NAT
用法本来是因为网络 IP 地址不足而把内部保留 IP 地址通过映射转换成公网地址的一种上网方式(原地址 NAT )。如果把 NAT 的过程稍微变化,就可以成为负载均衡的一种方式。原理其实就是把从客户端发来的 IP 包的 IP 头目的地址在 DR 上换成其中一台 REAL SERVER IP 地址并发至此 REALSERVER ,而 REAL SERVER 则在处理完成后把数据经过 DR 主机发回给客户端, DR 在这个时候再把数据包的原 IP 地址改为 DR 接口上的 IP 地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过 DR
隧道模式则类似于 VPN 的方式,使用网络分层的原理,在从客户端发来的数据包的基础上,封装一个新的 IP 头标记(不完整的 IP 头,只有目的 IP 部)发给 REAL SERVER REAL SERVER 收到后,先把 DR 发过来的数据包的头给解开,还原其数据包原样,处理后,直接返回给客户端,而不需要再经过 DR
直接路由模式比较特别,很难说和什么方面相似,前 2 种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。其原理为, DR REAL SERVER 都使用同一个 IP 对外服务。但只有 DR ARP 请求进行响应,所有 REALSERVER 对本身这个 IP ARP 请求保持静默。也就是说,网关会把对这个服务 IP 的请求全部定向给 DR ,而 DR 收到数据包后根据调度算法,找出对应的 REAL SERVER ,把目的 MAC 地址改为 REAL SERVER MAC 并发给这台 REALSERVER 。这时 REAL SERVER 收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于 DR 要对二层包头进行改换,所以 DR REALSERVER 之间必须在一个广播域,也可以简单的理解为在同一台交换机上。

 

 

3 、配置 realserver 脚本

#!/bin/bash
#description : start realserver
VIP=192.168.1.198
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo “1″ >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2″ >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1″ >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2″ >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
#end
此脚本使 realserver 不响应 arp 请求,将此脚本分别在 realserver 上执行就可以了。 Ok 后写入 rc.local

测试:分别启动 realserver 上的 httpd 服务
realserver1 执行   echo “191″  /var/www/html/index.html
realserver2 执行   echo “192″  /var/www/html/index.html

打开浏览器输入 http://192.168.1.198    应该可以分别看到 :191 192.

以上是最简单的 lvs    一个 dr 2 real 2 个配置文件,几个 rpm 包。
我们需要的是高可用,主备 dr master down bak 自动接管, master 启动后 bak 交出管理权。
现在我们开始配置这样的 lvs

集群配置基于高可用 Lvs+heartbeat

主服务器配置: 
1-
修改 /etc/hosts 文件
192.168.1.196           ct1
192.168.1.197           ct2
192.168.1.191                    xxx
192.168.1.192                    xxxx
1-       
修改 haresources 文件
ct1 IPaddr::192.168.1.198 lvsdr-basic ldirectord   
a.
定义主服务器和主服务器 eth0 虚拟 ip,
b.
定义 heartbeat 启动监控的服务 ldirectord  , lvsdr-basic
3-
修改 authkeys 文件    修改权限 chmod 600 authkeys
   auth 1
   1 crc
4-
修改 ha.cf
           debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
deadtime 20
initdead 20
#bcast   eth1                                               
eth1 上发送心跳广播
ucast eth1 192.168.2.20
auto_failback on
node    ct1
node    ct2
ping_group group1 192.168.1.196 192.168.1.197
respawn root /usr/lib/heartbeat/ipfail     
apiauth ipfail gid=root uid=root

authkeys
这个配置文件非常简单,就是在 auth 选择一个值。每个值对应一种算法,这个算法是在主节点和从节点间数据校验用的。这个配置文件权限必须是 0600

chmod 0600 authkeys
配置文件的值如下:
auth 3
1 crc
#2 sha1 HI!
#3 md5 Hello!
haresources
这个文件配置的是节点要管理的资源也就你的高可用服务,这些资源在主节点 down 调时候,从节点就会开启这些资源。 Heartbeat 认为
你配置资源名称 start/stop
就可以开启 / 停止这些资源。所以让你的资源支持 start/stop 。其实这你只需要对你的应用服务作个脚本,脚本接受 start 参数就会启动应用服务,接受 stop 参数就会停止服务。个人建议,你什么都不要做,就把应用程序名当作资源名就可以了,启动资源名的时候就自动启动你的服务了。而在 down 机的时候,所有的程序都死了,根本就不需要 heartbeat 调用
你配置资源名称 stop
命令来结束程序。
在文件中找到:
#node1  10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
这一项,去掉 # 号,根据格式配置你的资源。第一字段( Node1 ):主节点名称(必须 uname –n 的保持一致);第二字段( 10.0.0.170 ):对外虚拟服务 IP ;第三字段( Filesystem::/dev/sda1::/data1::ext2 ): Filesystem 表示资源名称, /dev/sda1 表示资源启动时的第一个参数, /data1 表示第二个参数, /ext2 表示第三个参数,依此类推。

ha.cf
这个配置文件比较复杂。我只配了关键的几项:
debugfile /var/log/ha-debug
说明:调试日志文件文件,取默认值
logfile /var/log/ha-log
说明:系统运行日志文件,取默认值
logfacility local0
说明:日志等级,取默认值
keepalive 1
说明:心跳频率,自己设定。 1: 表示 1 秒; 200ms :表示 200 毫秒
deadtime 10
说明:节点死亡时间阀值,就是从节点在过了 10 后还没有收到心跳就认为主节点死亡,自己设定
warntime 5
说明:发出警告时间,自己设定
udpport 28855
说明:心跳信息传递的 udp 端口,自己设定
#bcast   eth0        # Linux
说明:采用 udp 广播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 xxx
说明:采用网卡 eth0 udp 单播来通知心跳, eth0 IP
#mcast eth0 225.0.0.1 694 1 0
说明:采用 udp 多播播来通知心跳,建议在副节点不只一台时使用
auto_failback off
说明:主节点重启成功后,资源是自动拿回到主节点还是等到副节点 down 调后拿回资源
node heartbeat1
说明:主节点名称,与 uname –n 保持一致。排在第一的默认为主节点,所以不要搞措顺序
node heartbeat2
说明:副节点名称,与 uname –n 保持一致
watchdog /dev/watchdog
说明:看门狗。如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启

以上这些是我个人认为必配项,下面这些是可选项。
stonith baytech /etc/ha.d/conf/stonith.baytech
说明:主 / 副等所有节点的一种校验。
respawn userid /path/name/to/run
说明:和 heartbeat 必须一起启动的本地服务
ping 10.10.10.254
说明:伪节点 IP ,伪节点就是其失效时主 / 副节点不会正常工作但本身不是主 / 副节点之一。
respawn hacluster /usr/lib/heartbeat/ipfail
说明:与 ping 选项一起使用,取默认值。
baud   19200
说明:串口波特率,与 serial 一起使用。
serial /dev/ttyS0  # Linux
说明:采用串口来传递心跳信息。

ldirectord.cf
  checktimeout=3
checkinterval=1
autoreload=no
logfile=”/var/log/ldirectord.log”
quiescent=no
virtual=192.168.1.198:80
        real=192.168.1.191:80 gate
        real=192.168.1.192:80 gate
        service=http                        // 服务名称 http
        request=”test.html”    //  lvs
服务器测试代码
        receive=”Test”        //
        scheduler=sh                        //
按照 source hash 调度
        protocol=tcp               
192 191 机器 apache htdocs 里建立 test.html 文件 输入 Test 确保 web 页面可访问

checktimeout=3  (一个真实的服务器被认为出错所需的时间间隔)
checkinterval=1
(发出检查的时间间隔)
#autoreload=no
(自动重载,默认值是 no ,选 yes 时配置文件发生变化后就会自动载入)
#callback=
配置文件的路径(用来重载配置文件)
fallback=127.0.0.1:80
(当所有的真实服务器出错时, web 服务重定向的地址)
#logfile=”/var/log/ldirectord.log”
(日志文件的目录)
#logfile=”local0″
#execute=”configuration”
(为这个配置文件启动 ldirectord 的实例)
quiescent=yes
(当选择 yes 时,一台真实服务器 down 以后,并不是把它从 lvs 的表中删除,而是把它的权值设为 0 ,新的链接将不可达)
virtual=192.168.1.198:80  
(虚拟的 ip 和端口号)
real=192.168.1.191:80 gate   
真实的服务器)   
real=192.168.1.192:80 gate
fallback=127.0.0.1:80 gate
checktype=negotiate
(检测类型,默认为 negotiate
service=http
checkport
80 (检查的端口号)
request=”test.html”
(负载平衡机将查询实际 server 的服务目录下面是不是     有该文件,如果有说明 server 还是在服务的,没有将认为它已经出错)
receive=”Test ”
scheduler=rr  
(调度算法)
#persistent=600
#netmask=255.255.255.255
protocol=tcp   
(协议)
3.        
启动
输入 ldirectord start 启动服务, ldirectord stop 停止服务, ldirectord rload 重新载入配置信息。

同样   bak 服务器也配置如上。   
另外, bak 服务 cd /etc/ha.d
               ln –s tmp/harc .
/etc/rc.d/rc.local
中写入 /etc/init.d/heartbeat start
主服务器 rc.local 中写入 /etc/init.d/lvsdr-basic start
                      /etc/init.d/heartbeat start
内网服务器可关闭 iptables
公网服务器最好是 heartbeat 通讯口专用   iptables 相对应的网口过滤

Ok 到此为止 高可用配完

 

 

 

下面做双机 cluster
双机 LVS-HA
       
(一)架构信息

主服务器 + 真实的 web 服务器 192.168.2.28
备服务器 + 真实的 web 服务器: 192.168.2.20
Lvs director
配置在主服务器上 , 根据源地址分配服务器。
集群的虚拟 ip 60.*.165 ,初始分配在主服务器的 eth0, 主服务器宕机后, ip 由备份服务器接管,分配在备份服务器的 eth0.

(二)集群软件安装
1-
主服务器安装 :
yum -y install ipvsadm    # ipvs
管理器    
yum -y install libnet      #
库文件
yum -y install e2fsprogs  #
库文件
yum -y install heartbeat   # linux-ha
yum –y install heartbeat-ldirectord  # connector of linux-ha and lvs   
【备份服务器不用安装】

2- 拷贝配置文件
cp /usr/share/doc/heartbeat-2.1.*/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.*/authkeys /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.*/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-ldirectord-2.1.*/ldirectord.cf /etc/ha.d/
【备份服务器不用】

( ) 集群配置
主服务器配置: 
1-
修改 /etc/hosts 文件
192.168.2.28           name1
192.168.2.20           name2

2-        修改 haresources 文件
liuyuxi IPaddr::60.*.165 lvsdr-basic ldirectord   
3-
修改 authkeys 文件    修改权限 chmod 600 authkeys
   auth 1
   1 crc
4-
修改 ha.cf
           debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
deadtime 20
initdead 20
ucast 192.168.2.20
auto_failback on
node    name1
node    name2
ping_group group1 192.168.2.28 192.168.2.20
respawn root /usr/lib/heartbeat/ipfail     
apiauth ipfail gid=root uid=root

5- ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=no
logfile=”/var/log/ldirectord.log”
quiescent=no
virtual=60.*.165:80
        real=60.*.171:80 gate
        real=60.*.164:80 gate
        service=http                       
        request=”test.html”   
        receive=”Test”        
        scheduler=sh                       
        protocol=tcp               

       
6- lvsdr-basic
/etc/init.d/lvsdr-basic
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.

VIP=60.*.165
RIP1=60.*.171
RIP2=60.*.164
###########################
# ifconfig a
#
#/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#
############################

/sbin/route add -host $VIP dev eth0:0
echo “1″ > /proc/sys/net/ipv4/ip_forward

备份服务器配置:      
1-
修改 /etc/hosts 文件    同主服务器
2-       
修改 haresources 文件
liuyuxi switchdr IPaddr::60.*.165
虚拟 ip 地址是 60.*.165
备份服务器在接管主服务器前,执行 switchdr start
备份服务器在移交主服务器前,执行 switchdr stop
switchdr
见备份服务器配置第 5 .

3- 修改 authkeys 文件    同服务器
4-
修改 font-s

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics