- 浏览: 156224 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
atgfss:
采用在cookies中保存用户名和sessionid的这种方式 ...
自动登录 -
liumm19870913:
对有输入参数过程的调用
我试过那代码 , 有问题呀,funct ...
oracle 存储过程调用 -
zdsyouxiang:
内容很全面!
认识多任务、多进程、单线程、多线程
RPM 安装方法
下载
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24-6.src.rpm
注:找适合自己内核版本的
2. 安装
rpmbuild --rebuild ipvsadm-1.24-6.src.rpm
注:rpmbuild没有的话,需要自己安装rpm-build-4.4.2-48.el5.i386.rpm
rpmbuild --rebuild ipvsadm-1.24-6.src.rpm
注:会提示有警告和错误 不用理睬
3. vi /usr/src/redhat/SPECS/ipvsadm.spec
将第7行Copyright修改为License
保存退出
注:此步要看下载的ipvs版本,有的版本这里已经做过修改
4. 建立软连接
#ln -s /usr/src/kernels/2.6.18-92.el5-i686/ /usr/src/linux
注:如果/usr/src/下没有kernels目录,需要安装kernel-devel-2.6.18-92.el5.i686.rpm
5. 生成二进制安装包
#rpmbuild -ba /usr/src/redhat/SPECS/ipvsadm.spec
6. 安装ipvsadm
#rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.24-6.i386.rpm
/etc/init.d/ipvsadm start会报错
[root@localhost ~]# /etc/init.d/ipvsadm start
Clearing the current IPVS table: [确定]
Applying IPVS configuration: /etc/init.d/ipvsadm: line 62: /etc/sysconfig/ipvsadm: 没有那个文件或目录
注:遇到这个错误。运行service ipvsadm save。之后再执行service ipvsadm start
-----------------------------------------------------------------------------------
1 LVS介绍
LVS 是LINUX VIRTUL SERVER的简称,是由章文嵩博士主持的著名开放源码项目,一个实现“三高”系统的解决方案。LVS旨在解决高速发展的Web商务中日益凸现的问题:如 何在有限资金投入的情况下,最大幅度的提高Web站点的潜在服务性能。核心就是通过一组服务器来进行负载均衡,通过前端的负载调度器(Load Balancer),无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性 能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。
系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。
LVS的设计根据透明性、性能、高可用性、可管理性和可编程性的指导思想实现的。
我们把前面那台负载均衡机器叫做:director server(DR)。后面的实际服务机器叫做:real server(RS)
2 IP虚拟服务器软件IPVS
在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,它们的大致原理如下(我们将在其他章节对其工作原 理进行详细描述)
2.1.1 Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
2.1.2 Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
2.1.3 Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上
2.2 针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:
1. 轮叫(Round Robin)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2. 加权轮叫(Weighted Round Robin)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3. 最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
4. 加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5. 基于局部性的最少链接(Locality-Based Least Connections)
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7. 目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
1.1 三种IP负载均衡技术的优缺点归纳在下表中:
_
VS/NAT
VS/TUN
VS/DR
Server
any
Tunneling
Non-arp device
server network
private
LAN/WAN
LAN
server number
low (10~20)
High (100)
High (100)
server gateway
load balancer
own router
Own router
1.1.1 Virtual Server via NAT
VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器。我们在Pentium 166 处理器的主机上测得重写报文的平均延时为60us,性能更高的处理器上延时会短一些。假设TCP报文的平均长度为536 Bytes,则调度器的最大吞吐量为8.93 MBytes/s. 我们再假设每台服务器的吞吐量为800KBytes/s,这样一个调度器可以带动10台服务器。(注:这是很早以前测得的数据)
基于 VS/NAT的的集群系统可以适合许多服务器的性能要求。如果负载调度器成为系统新的瓶颈,可以有三种方法解决这个问题:混合方法、VS/TUN和 VS/DR。在DNS混合集群系统中,有若干个VS/NAT负载调度器,每个负载调度器带自己的服务器集群,同时这些负载调度器又通过RR-DNS组成简单的域名。但VS/TUN和VS/DR是提高系统吞吐量的更好方法。
对于那些将IP地址或者端口号在报文数据中传送的网络服务,需要编写相应的应用模块来转换报文数据中的IP地址或者端口号。这会带来实现的工作量,同时应用模块检查报文的开销会降低系统的吞吐率。
1.1.2 Virtual Server via IP Tunneling
在VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统,我们没对其他操作系统进行测试。因为“IP Tunneling”正成为各个操作系统的标准协议,所以VS/TUN应该会适用运行其他操作系统的后端服务器。
1.1.3 Virtual Server via Direct Routing
跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。
2 heartbeat的介绍
这 里的heartbeat就是linux-ha项目,被许多高可用系统采用。我们这里lvs必须是个高可用系统,所以我们采用heartbeat。本文也以 lvs作为高可用服务来说明heartbeat的使用。Heartbeat的高版本可以负责3个及以上的节点。本文2个节点来说明,在你的两台机器(一台 作为主节点,另一台为从节点)上运行heartbeat, 并配置好相关的选项,最重要的是lvs资源一定要配置进去。那么开始时主节点提供lvs服务,一旦主节点崩溃,那么从节点立即接管lvs服务。如果是自己 开启了其它的服务资源,那么接管的时候,该服务资源相应的tcp连接必须重连,而且主从节点的应用层逻辑状态有应用层自己保证一致。Lvs不存在应用层的 逻辑状态。
1 集群工程的搭建
1.1 软件介绍
heartbeat: 用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
LVS-ipvsadm:负载均衡软件
ldirector:有两个主要功能,一是调用ipvsadm命令生成lvs的策略,二是对realserver进行健康检测
1.2 环境介绍
ip地址规划如下:
虚拟ip vip-192.168.48.88
网关:192.168.48.1.1
四台lvs real server ip分别为:192.168.48.85,192.168.48.86,192.168.48.87,192.168.48.89
主机名
LVS-1 192.168.48.83
LVS-2 192.168.48.84
RS-1 192.168.48.85
RS-2 192.168.48.86
RS-3 192.168.48.87
RS-4 192.168.48.89
1.3 正式安装 (配置基于DR模式Lvs集群)
1.3.1 检查内核是否支持ipvs功能
modprobe -l|grep ipvs,下面是我本机输出的列表,你的有可能与不同,但只要有下列类似ip_vs输出,证明你的内核巳支持ipvs,否则你还必须下载内核原代码重新译内核。
1.3.2 yum安装软件包
1.3.2.1 #redhat上面安装centos源
[root@ns ~]# rpm -e --nodeps yum-metadata-parser
[root@ns ~]# rpm -e --nodeps yum
[root@ns ~]# rpm -e --nodeps yum-updatesd
[root@ns ~]# rpm -e --nodeps yum-rhn-plugin
[root@ns ~]# rpm -e --nodeps yum-security
[root@ns ~]# rpm -e --nodeps yum-metadata-parser
1.3.2.2 下载安装中科大2个软件包
Wget http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm
wget http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
wget http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
rpm -ivh yum-metadata-parser-1.1.2-2.el5.i386.rpm
rpm -ivh --nodeps yum-3.2.19-18.el5.centos.noarch.rpm
rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
1.3.2.3 下载中科大的yum配置文件
[root@ns ~]# cd /etc/yum.repos.d/
[root@ns ~]# wget http://centos.ustc.edu.cn/CentOS-Base.repo.5
[root@ns ~]# mv CentOS-Base.repo.5 CentOS-Base.repo
1.3.2.4 修改yum配置文件内容
在vi编辑器中进行全文件替换,保存退出。
:1,$s/$releasever/5.5/g
#更新yum 库
[root@ns ~]# yum update
1.3.3 开始安装软件包
yum install ipvsadm
yum install heartbeat
yum install heartbeat-ldirectord
chkconfig --add heartbeat
1.3.3.1 查看相关安装包
[root@LVS-1 ~]# rpm -qa|grep heartbeat
heartbeat-gui-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
[root@LVS-1 ~]# rpm -qa|grep ipvsadm
ipvsadm-1.24-10
1 开始配置lvs 主调度服务器
本文档采用的是lvs-DR模式,该模式的特点是客户端的请求从调度器进入分配到真实服务器,然后真实服务器的响应是直接交付给客户端的。
1.1 修改2个调度器的hosts文件
[root@LVS-1 ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
LVS-1 192.168.48.83
LVS-2 192.168.48.84
1.2 lvs_dr的配置
1.2.1 lvs_dr脚本代码
#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.48.88 (虚拟ip的地址)
RIP1=192.168.48.85 真实服务器1的ip地址
RIP2=192.168.48.86 真实服务器2的ip地址
#RIP3=221.236.28.106 如果有多个服务器节点的话,可以再这添加。
SERVICE=80 #http is used in this case
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "start LVS of DirectorServer"
# set ip_forward&send_redirects
echo "0" >/proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
# set the Virtual IP Address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.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:$SERVICE -s rr (如果需要session保持添加-p 默认保持300秒)
/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP1:$SERVICE -g -w 1
/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP2:$SERVICE -g -w 1
#/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP3:$SERVICE -g -w 1
/sbin/ipvsadm --set 30 120 300
#Run LVS
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS Directorserver"
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
(-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。
1.3 lvs_switch的配置
lvs_switch代码
#!/bin/sh
# description: close lo:0 and arp_ignore
VIP=192.168.48.88 (虚拟ip的地址)
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "start director server and close lo:0"
#ifconfig lo:0 down
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "start Real Server"
echo "0" >/proc/sys/net/ipv4/ip_forward
/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
;;
*)
echo "Usage: lvs {start|stop}"
exit 1
esac
1.3.1 给脚本赋予执行权限
chmod +x /etc/ha.d/resource.d/lvs_dr
chmod +x /etc/ha.d/resource.d/lvs_switch
1.3.2 把ha.cf,haresources,authkeys,ldirectord.cf都复制到/etc/ha.d/
cp -rf /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d
cp -rf /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d
cp -rf /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d
cp -rf /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d
1.3.3 authkeys的配置
配置authkeys,
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
1,2,3表示认证算法选择,这里选择了md5算法
Authkeys的权限必须是0600。
chmod 0600 authkeys
1.3.4 haresources的配置
配置haresources
该文件主节点和备份节点上要完全一致:
LVS-1 lvs_switch 192.168.48.88 lvs_dr ldirectord
语法格式:
主节点机器名 脚本名称 虚拟ip 脚本名称 ldirectord
注:节点名字就查看计算机名
uname -n (注节点必须写这个命令显示的名字)
(注:lvs_switch ,lvs_dr脚本必须位于/etc/init.d/或/etc/ha.d/resource.d下,且不能随机一启动)
1.3.5 ha.cf的配置
配置ha.cf
debugfile /var/log/ha-debug debbug日志文件路径
logfile /var/log/ha-log heartbeat 日志文件路径
logfacility local0
keepalive 2 心跳检测时间间隔
#initdead 120 heartbeat第一次启动时启动其所控资源的时间
deadtime 10 多久没有检测到心跳时宣布死亡
warntime 10 指明心跳延迟的时间为十秒。当10秒钟内备份机不能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日志,但此时不会切换服务。
udpport 28855 heartbeat监听端口
#bcast eth0 # Linux心跳路径,最好不要与正常生产网络中的设备混在一起
#mcast eth0 225.0.0.1 694 1 0 #说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 对端节点IP 采用网卡eth0的udp单播来通知心跳,ip应为对方IP
ucast eht0 192.168.48.84 (在备份dr上 这里的ip就写主dr的ip)
#注:广播,单播,多播,以上三种任选其一即可
#ping 192.168.1.1 ping我内部网关地址,主要是利用ipfail功能检测主服务器网络是否正常
auto_failback on 主节点重启成功后,资源是自动拿回到主节点还是等到副节点down调后拿回资源
watchdog /dev/watchdog 启动内核看门狗功能,能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果使用该特性,则在内核中装入softdog内核模块,用来生成实际的设备文件,输入insmod softdog加载模块。
# stonith用来保证共享存储环境中的数据完整性
node 主节点机器名 (必须同uname -n返回的主机名相同)
node 备份节点机器名
node LVS-1
node LVS-2
1.3.6 ldirectord.cf的配置
配置ldirectord.cf
# Global Directives
checktimeout=3 超时时间
checkinterval=1 检测真实服务器的间隔
fallback=127.0.0.1:80
autoreload=yes 表示修改ldirectord.cf配置文件ldirectord自动加载
logfile="/var/log/ldirectord.log"
quiescent=yes 如果真实服务器失败,ldirectord所采取的动作,注意如果主里设为yes,则必须在内核中修改下列文件:
echo "1" >/proc/sys/net/ipv4/vs/expire_quiescent_template
echo "1" >/proc/sys/net/ipv4/vs/expire_nodest_conn
# Sample for an http virtual service
virtual=虚拟IP:80
real=(真实服务器IP1):80 gate
real=(真实服务器IP2):80 gate
real= 192.168.48.85:80 gate
real= 192.168.48.86:80 gate
fallback=127.0.0.1:80 gate 如果两台真实服务器都无效,则定向本机的lo地址
service=http 指定服务类型
request="lvstest.html" 检查真实服务器时用到的页面
receive="lvstest" 所请求页面内的内容
scheduler=rr 调度方法,rr表示循环调用
#persistent=600 tcp连接时间
#netmask=255.255.255.255
protocol=tcp 协议类型
checktype=negotiate ldirectord检测真实服务器的方式
checkport=80
request="lvstest.html"
receive="lvstest”
在http配置的根目录增加lvetest.html,文件内容是lvestest
在ftp配置的根目录增加lvetest.html,文件内容是lvestest
1 真实服务器real server 配置
1.1.1 Lvs_rs的配置。
在/etc/rc.d/init.d/中新建一个脚本。
注:我会提供已经写好的脚本,只需复制就行了,脚本名字叫lvs_rs,复制到/etc/rc.d/init.d下(如下)
lvs_rs脚本代码
#!/bin/sh
# chkconfig: 2345 72 08
# description: Config realserver lo:0 port and apply arp patch
VIP=192.168.48.88 (这个是服务器虚拟ip地址)
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "lo:0 port starting"
echo "0" >/proc/sys/net/ipv4/ip_forward
/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
;;
stop)
echo "lo:0 port closing"
ifconfig lo:0 down
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
chmod +x /etc/rc.d/init.d/lvs_rs
chkconfig --add lvs_rs
将lvs_dr和lvs_switch复制到/etc/ha.d/resource.d/
注:lvs_dr和lvs_switch的脚本我会提供。(如下)
1.1.2 启动服务
主节点 备用节点都起动服务 service heartbeat start
/etc/ha.d/resource.d/ldirectord start
2 测试
查看主lvs的ip信息,现在vip在主lvs上面。
[root@LVS-1 ha.d]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:8F:E7:BB
inet addr:192.168.48.83 Bcast:192.168.48.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8f:e7bb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:89174618 errors:0 dropped:0 overruns:0 frame:0
TX packets:89490628 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1239724978 (1.1 GiB) TX bytes:1269730040 (1.1 GiB)
Interrupt:67 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:8F:E7:C5
inet addr:192.168.48.96 Bcast:192.168.48.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8f:e7c5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:434447 errors:0 dropped:0 overruns:0 frame:0
TX packets:47667 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:102561548 (97.8 MiB) TX bytes:4773970 (4.5 MiB)
Interrupt:67 Base address:0x2080
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:283823 errors:0 dropped:0 overruns:0 frame:0
TX packets:283823 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:34704953 (33.0 MiB) TX bytes:34704953 (33.0 MiB)
lo:0 Link encap:Local Loopback
inet addr:192.168.48.88 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
1.1 测试集群可用性
运行 watch ipvsadm -L -n 查看连接情况
你应该看到一个IPVS表:
关闭真实服务器上的Apache或断开它的网络连线测试ldirectord,在20秒内或你指定的checktimeout时间范围内,真实服务器的权重被设置为0,因此未来将不会有连接发向它
用vip访问只能访问到3个web站点了,因为192.168.48.86那台的httpd被我停了!
1.2 测试热备可用性
关掉主节点 查看备用节点是否能够接管 主节点的服务,通过ifconfig查看eth0:0的192.168.48.83会在某台服务器上分配上了,说明这台目前是活动服务器,而另外一台没有分配上
当我断掉lvs 主调度器后,权重指向了lvs-2
Vip现在也在eth0:0上面生效
当我恢复主lvs后,权重有继续回到主lvs上面
2 常见的错误:
通过ifconfig发现两台机器都分配上了eth0:0的192.168.0.2这个虚拟IP,并在/var/log/syslog中产生大量日志:
WARN: nodename ha uuid changed to ha2
ERROR: should_drop_message: attempted replay attack
可能原因:ha和ha2的uuid改变引起,可能ha2是通过VMware克隆复制方式产生的或hostname设置在安装heartbeat之后
解决方案:让uuid重新生成,可以先卸载heartbeat,删除/var/lib/heartbeat目录(uuid文件就在这个目录下,该目录在卸载时不被删除,需手动删除,如果不手动删除,重新安装还会使用原来uuid)
版权声明:此贴为转载,允许继续转载。
转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
本文出自 “ivon lee” 博客,
连接地址为:http://lidiantian.blog.51cto.com/456473/341574
下载
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24-6.src.rpm
注:找适合自己内核版本的
2. 安装
rpmbuild --rebuild ipvsadm-1.24-6.src.rpm
注:rpmbuild没有的话,需要自己安装rpm-build-4.4.2-48.el5.i386.rpm
rpmbuild --rebuild ipvsadm-1.24-6.src.rpm
注:会提示有警告和错误 不用理睬
3. vi /usr/src/redhat/SPECS/ipvsadm.spec
将第7行Copyright修改为License
保存退出
注:此步要看下载的ipvs版本,有的版本这里已经做过修改
4. 建立软连接
#ln -s /usr/src/kernels/2.6.18-92.el5-i686/ /usr/src/linux
注:如果/usr/src/下没有kernels目录,需要安装kernel-devel-2.6.18-92.el5.i686.rpm
5. 生成二进制安装包
#rpmbuild -ba /usr/src/redhat/SPECS/ipvsadm.spec
6. 安装ipvsadm
#rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.24-6.i386.rpm
/etc/init.d/ipvsadm start会报错
[root@localhost ~]# /etc/init.d/ipvsadm start
Clearing the current IPVS table: [确定]
Applying IPVS configuration: /etc/init.d/ipvsadm: line 62: /etc/sysconfig/ipvsadm: 没有那个文件或目录
注:遇到这个错误。运行service ipvsadm save。之后再执行service ipvsadm start
-----------------------------------------------------------------------------------
1 LVS介绍
LVS 是LINUX VIRTUL SERVER的简称,是由章文嵩博士主持的著名开放源码项目,一个实现“三高”系统的解决方案。LVS旨在解决高速发展的Web商务中日益凸现的问题:如 何在有限资金投入的情况下,最大幅度的提高Web站点的潜在服务性能。核心就是通过一组服务器来进行负载均衡,通过前端的负载调度器(Load Balancer),无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性 能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。
系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。
LVS的设计根据透明性、性能、高可用性、可管理性和可编程性的指导思想实现的。
我们把前面那台负载均衡机器叫做:director server(DR)。后面的实际服务机器叫做:real server(RS)
2 IP虚拟服务器软件IPVS
在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,它们的大致原理如下(我们将在其他章节对其工作原 理进行详细描述)
2.1.1 Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
2.1.2 Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
2.1.3 Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上
2.2 针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:
1. 轮叫(Round Robin)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2. 加权轮叫(Weighted Round Robin)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3. 最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
4. 加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5. 基于局部性的最少链接(Locality-Based Least Connections)
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7. 目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
1.1 三种IP负载均衡技术的优缺点归纳在下表中:
_
VS/NAT
VS/TUN
VS/DR
Server
any
Tunneling
Non-arp device
server network
private
LAN/WAN
LAN
server number
low (10~20)
High (100)
High (100)
server gateway
load balancer
own router
Own router
1.1.1 Virtual Server via NAT
VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器。我们在Pentium 166 处理器的主机上测得重写报文的平均延时为60us,性能更高的处理器上延时会短一些。假设TCP报文的平均长度为536 Bytes,则调度器的最大吞吐量为8.93 MBytes/s. 我们再假设每台服务器的吞吐量为800KBytes/s,这样一个调度器可以带动10台服务器。(注:这是很早以前测得的数据)
基于 VS/NAT的的集群系统可以适合许多服务器的性能要求。如果负载调度器成为系统新的瓶颈,可以有三种方法解决这个问题:混合方法、VS/TUN和 VS/DR。在DNS混合集群系统中,有若干个VS/NAT负载调度器,每个负载调度器带自己的服务器集群,同时这些负载调度器又通过RR-DNS组成简单的域名。但VS/TUN和VS/DR是提高系统吞吐量的更好方法。
对于那些将IP地址或者端口号在报文数据中传送的网络服务,需要编写相应的应用模块来转换报文数据中的IP地址或者端口号。这会带来实现的工作量,同时应用模块检查报文的开销会降低系统的吞吐率。
1.1.2 Virtual Server via IP Tunneling
在VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统,我们没对其他操作系统进行测试。因为“IP Tunneling”正成为各个操作系统的标准协议,所以VS/TUN应该会适用运行其他操作系统的后端服务器。
1.1.3 Virtual Server via Direct Routing
跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。
2 heartbeat的介绍
这 里的heartbeat就是linux-ha项目,被许多高可用系统采用。我们这里lvs必须是个高可用系统,所以我们采用heartbeat。本文也以 lvs作为高可用服务来说明heartbeat的使用。Heartbeat的高版本可以负责3个及以上的节点。本文2个节点来说明,在你的两台机器(一台 作为主节点,另一台为从节点)上运行heartbeat, 并配置好相关的选项,最重要的是lvs资源一定要配置进去。那么开始时主节点提供lvs服务,一旦主节点崩溃,那么从节点立即接管lvs服务。如果是自己 开启了其它的服务资源,那么接管的时候,该服务资源相应的tcp连接必须重连,而且主从节点的应用层逻辑状态有应用层自己保证一致。Lvs不存在应用层的 逻辑状态。
1 集群工程的搭建
1.1 软件介绍
heartbeat: 用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
LVS-ipvsadm:负载均衡软件
ldirector:有两个主要功能,一是调用ipvsadm命令生成lvs的策略,二是对realserver进行健康检测
1.2 环境介绍
ip地址规划如下:
虚拟ip vip-192.168.48.88
网关:192.168.48.1.1
四台lvs real server ip分别为:192.168.48.85,192.168.48.86,192.168.48.87,192.168.48.89
主机名
LVS-1 192.168.48.83
LVS-2 192.168.48.84
RS-1 192.168.48.85
RS-2 192.168.48.86
RS-3 192.168.48.87
RS-4 192.168.48.89
1.3 正式安装 (配置基于DR模式Lvs集群)
1.3.1 检查内核是否支持ipvs功能
modprobe -l|grep ipvs,下面是我本机输出的列表,你的有可能与不同,但只要有下列类似ip_vs输出,证明你的内核巳支持ipvs,否则你还必须下载内核原代码重新译内核。
1.3.2 yum安装软件包
1.3.2.1 #redhat上面安装centos源
[root@ns ~]# rpm -e --nodeps yum-metadata-parser
[root@ns ~]# rpm -e --nodeps yum
[root@ns ~]# rpm -e --nodeps yum-updatesd
[root@ns ~]# rpm -e --nodeps yum-rhn-plugin
[root@ns ~]# rpm -e --nodeps yum-security
[root@ns ~]# rpm -e --nodeps yum-metadata-parser
1.3.2.2 下载安装中科大2个软件包
Wget http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm
wget http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
wget http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
rpm -ivh yum-metadata-parser-1.1.2-2.el5.i386.rpm
rpm -ivh --nodeps yum-3.2.19-18.el5.centos.noarch.rpm
rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
1.3.2.3 下载中科大的yum配置文件
[root@ns ~]# cd /etc/yum.repos.d/
[root@ns ~]# wget http://centos.ustc.edu.cn/CentOS-Base.repo.5
[root@ns ~]# mv CentOS-Base.repo.5 CentOS-Base.repo
1.3.2.4 修改yum配置文件内容
在vi编辑器中进行全文件替换,保存退出。
:1,$s/$releasever/5.5/g
#更新yum 库
[root@ns ~]# yum update
1.3.3 开始安装软件包
yum install ipvsadm
yum install heartbeat
yum install heartbeat-ldirectord
chkconfig --add heartbeat
1.3.3.1 查看相关安装包
[root@LVS-1 ~]# rpm -qa|grep heartbeat
heartbeat-gui-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
[root@LVS-1 ~]# rpm -qa|grep ipvsadm
ipvsadm-1.24-10
1 开始配置lvs 主调度服务器
本文档采用的是lvs-DR模式,该模式的特点是客户端的请求从调度器进入分配到真实服务器,然后真实服务器的响应是直接交付给客户端的。
1.1 修改2个调度器的hosts文件
[root@LVS-1 ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
LVS-1 192.168.48.83
LVS-2 192.168.48.84
1.2 lvs_dr的配置
1.2.1 lvs_dr脚本代码
#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.48.88 (虚拟ip的地址)
RIP1=192.168.48.85 真实服务器1的ip地址
RIP2=192.168.48.86 真实服务器2的ip地址
#RIP3=221.236.28.106 如果有多个服务器节点的话,可以再这添加。
SERVICE=80 #http is used in this case
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "start LVS of DirectorServer"
# set ip_forward&send_redirects
echo "0" >/proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
# set the Virtual IP Address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.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:$SERVICE -s rr (如果需要session保持添加-p 默认保持300秒)
/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP1:$SERVICE -g -w 1
/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP2:$SERVICE -g -w 1
#/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP3:$SERVICE -g -w 1
/sbin/ipvsadm --set 30 120 300
#Run LVS
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS Directorserver"
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
(-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。
1.3 lvs_switch的配置
lvs_switch代码
#!/bin/sh
# description: close lo:0 and arp_ignore
VIP=192.168.48.88 (虚拟ip的地址)
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "start director server and close lo:0"
#ifconfig lo:0 down
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "start Real Server"
echo "0" >/proc/sys/net/ipv4/ip_forward
/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
;;
*)
echo "Usage: lvs {start|stop}"
exit 1
esac
1.3.1 给脚本赋予执行权限
chmod +x /etc/ha.d/resource.d/lvs_dr
chmod +x /etc/ha.d/resource.d/lvs_switch
1.3.2 把ha.cf,haresources,authkeys,ldirectord.cf都复制到/etc/ha.d/
cp -rf /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d
cp -rf /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d
cp -rf /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d
cp -rf /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d
1.3.3 authkeys的配置
配置authkeys,
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
1,2,3表示认证算法选择,这里选择了md5算法
Authkeys的权限必须是0600。
chmod 0600 authkeys
1.3.4 haresources的配置
配置haresources
该文件主节点和备份节点上要完全一致:
LVS-1 lvs_switch 192.168.48.88 lvs_dr ldirectord
语法格式:
主节点机器名 脚本名称 虚拟ip 脚本名称 ldirectord
注:节点名字就查看计算机名
uname -n (注节点必须写这个命令显示的名字)
(注:lvs_switch ,lvs_dr脚本必须位于/etc/init.d/或/etc/ha.d/resource.d下,且不能随机一启动)
1.3.5 ha.cf的配置
配置ha.cf
debugfile /var/log/ha-debug debbug日志文件路径
logfile /var/log/ha-log heartbeat 日志文件路径
logfacility local0
keepalive 2 心跳检测时间间隔
#initdead 120 heartbeat第一次启动时启动其所控资源的时间
deadtime 10 多久没有检测到心跳时宣布死亡
warntime 10 指明心跳延迟的时间为十秒。当10秒钟内备份机不能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日志,但此时不会切换服务。
udpport 28855 heartbeat监听端口
#bcast eth0 # Linux心跳路径,最好不要与正常生产网络中的设备混在一起
#mcast eth0 225.0.0.1 694 1 0 #说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 对端节点IP 采用网卡eth0的udp单播来通知心跳,ip应为对方IP
ucast eht0 192.168.48.84 (在备份dr上 这里的ip就写主dr的ip)
#注:广播,单播,多播,以上三种任选其一即可
#ping 192.168.1.1 ping我内部网关地址,主要是利用ipfail功能检测主服务器网络是否正常
auto_failback on 主节点重启成功后,资源是自动拿回到主节点还是等到副节点down调后拿回资源
watchdog /dev/watchdog 启动内核看门狗功能,能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果使用该特性,则在内核中装入softdog内核模块,用来生成实际的设备文件,输入insmod softdog加载模块。
# stonith用来保证共享存储环境中的数据完整性
node 主节点机器名 (必须同uname -n返回的主机名相同)
node 备份节点机器名
node LVS-1
node LVS-2
1.3.6 ldirectord.cf的配置
配置ldirectord.cf
# Global Directives
checktimeout=3 超时时间
checkinterval=1 检测真实服务器的间隔
fallback=127.0.0.1:80
autoreload=yes 表示修改ldirectord.cf配置文件ldirectord自动加载
logfile="/var/log/ldirectord.log"
quiescent=yes 如果真实服务器失败,ldirectord所采取的动作,注意如果主里设为yes,则必须在内核中修改下列文件:
echo "1" >/proc/sys/net/ipv4/vs/expire_quiescent_template
echo "1" >/proc/sys/net/ipv4/vs/expire_nodest_conn
# Sample for an http virtual service
virtual=虚拟IP:80
real=(真实服务器IP1):80 gate
real=(真实服务器IP2):80 gate
real= 192.168.48.85:80 gate
real= 192.168.48.86:80 gate
fallback=127.0.0.1:80 gate 如果两台真实服务器都无效,则定向本机的lo地址
service=http 指定服务类型
request="lvstest.html" 检查真实服务器时用到的页面
receive="lvstest" 所请求页面内的内容
scheduler=rr 调度方法,rr表示循环调用
#persistent=600 tcp连接时间
#netmask=255.255.255.255
protocol=tcp 协议类型
checktype=negotiate ldirectord检测真实服务器的方式
checkport=80
request="lvstest.html"
receive="lvstest”
在http配置的根目录增加lvetest.html,文件内容是lvestest
在ftp配置的根目录增加lvetest.html,文件内容是lvestest
1 真实服务器real server 配置
1.1.1 Lvs_rs的配置。
在/etc/rc.d/init.d/中新建一个脚本。
注:我会提供已经写好的脚本,只需复制就行了,脚本名字叫lvs_rs,复制到/etc/rc.d/init.d下(如下)
lvs_rs脚本代码
#!/bin/sh
# chkconfig: 2345 72 08
# description: Config realserver lo:0 port and apply arp patch
VIP=192.168.48.88 (这个是服务器虚拟ip地址)
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "lo:0 port starting"
echo "0" >/proc/sys/net/ipv4/ip_forward
/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
;;
stop)
echo "lo:0 port closing"
ifconfig lo:0 down
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
chmod +x /etc/rc.d/init.d/lvs_rs
chkconfig --add lvs_rs
将lvs_dr和lvs_switch复制到/etc/ha.d/resource.d/
注:lvs_dr和lvs_switch的脚本我会提供。(如下)
1.1.2 启动服务
主节点 备用节点都起动服务 service heartbeat start
/etc/ha.d/resource.d/ldirectord start
2 测试
查看主lvs的ip信息,现在vip在主lvs上面。
[root@LVS-1 ha.d]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:8F:E7:BB
inet addr:192.168.48.83 Bcast:192.168.48.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8f:e7bb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:89174618 errors:0 dropped:0 overruns:0 frame:0
TX packets:89490628 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1239724978 (1.1 GiB) TX bytes:1269730040 (1.1 GiB)
Interrupt:67 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:8F:E7:C5
inet addr:192.168.48.96 Bcast:192.168.48.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8f:e7c5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:434447 errors:0 dropped:0 overruns:0 frame:0
TX packets:47667 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:102561548 (97.8 MiB) TX bytes:4773970 (4.5 MiB)
Interrupt:67 Base address:0x2080
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:283823 errors:0 dropped:0 overruns:0 frame:0
TX packets:283823 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:34704953 (33.0 MiB) TX bytes:34704953 (33.0 MiB)
lo:0 Link encap:Local Loopback
inet addr:192.168.48.88 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
1.1 测试集群可用性
运行 watch ipvsadm -L -n 查看连接情况
你应该看到一个IPVS表:
关闭真实服务器上的Apache或断开它的网络连线测试ldirectord,在20秒内或你指定的checktimeout时间范围内,真实服务器的权重被设置为0,因此未来将不会有连接发向它
用vip访问只能访问到3个web站点了,因为192.168.48.86那台的httpd被我停了!
1.2 测试热备可用性
关掉主节点 查看备用节点是否能够接管 主节点的服务,通过ifconfig查看eth0:0的192.168.48.83会在某台服务器上分配上了,说明这台目前是活动服务器,而另外一台没有分配上
当我断掉lvs 主调度器后,权重指向了lvs-2
Vip现在也在eth0:0上面生效
当我恢复主lvs后,权重有继续回到主lvs上面
2 常见的错误:
通过ifconfig发现两台机器都分配上了eth0:0的192.168.0.2这个虚拟IP,并在/var/log/syslog中产生大量日志:
WARN: nodename ha uuid changed to ha2
ERROR: should_drop_message: attempted replay attack
可能原因:ha和ha2的uuid改变引起,可能ha2是通过VMware克隆复制方式产生的或hostname设置在安装heartbeat之后
解决方案:让uuid重新生成,可以先卸载heartbeat,删除/var/lib/heartbeat目录(uuid文件就在这个目录下,该目录在卸载时不被删除,需手动删除,如果不手动删除,重新安装还会使用原来uuid)
版权声明:此贴为转载,允许继续转载。
转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
本文出自 “ivon lee” 博客,
连接地址为:http://lidiantian.blog.51cto.com/456473/341574
发表评论
-
linux cpu 个数 核数 等查询
2013-11-13 13:32 829在linux系统下可以通过cat /proc/cpuinfo来 ... -
shell 入门
2011-08-24 14:09 1043鸟哥 SHELL 经典入门材料 ... -
centos mysql安装
2011-08-04 17:10 1036转自 http://blog.csdn.net/jiangfe ... -
ipvsadm 安装
2011-07-28 10:38 2813转载 http://www.csjrc.com/article ... -
commad not found
2011-07-27 11:02 930centos下 xxx commad not found ... -
ipvsadm+keepalived
2011-07-27 10:55 1579ipvsadm+keepalived 实现高可用负载均衡 2 ... -
centos ip配置
2011-07-27 09:33 1023修改IP地址 修改对应网卡的IP地址的配置文件 [root ... -
wc 命令详解
2011-06-30 09:46 1088通常利用Linux的wc命令和其他命令结合来计算行和其他信息。 ... -
Linux下安装tar.gz、rpm、tar.bz2软件包的软件
2011-06-25 09:35 10601.Linux下安装Tar.gz(Tgz)软 ... -
linux ip设置
2011-05-28 10:51 744修改ip地址 即时生效: # ifconfig eth0 19 ... -
linux 下tomcat安装
2010-04-26 19:54 842Linux下Tomcat的安装 1. ... -
linux jdk 安装
2010-04-26 18:44 1760JDK1.6在LINUX下的安装是如何进行的呢,让我们开始我们 ...
相关推荐
IPVSADM是由Liang Jin Guang开发的,它提供了对IPVS的全功能控制,包括添加、删除、修改和查看虚拟服务及真实服务器的设置。IPVS基于TCP/IP协议栈,支持多种负载均衡算法,如轮询、最少连接、短路距离等,确保了服务...
ipvsadm-1.26 linux
《IPVSADM与LVS负载均衡技术详解》 在IT领域,特别是在网络服务器管理中,负载均衡是一项至关重要的技术,它能确保服务的...因此,理解和掌握IPVSADM及LVS的相关知识,对于网络管理员和系统架构师来说具有极高的价值。
DS服务器安装了CentOS 6操作系统,并安装了ipvsadm和keepalived软件。RS服务器安装了Windows 2008 R2 Enterprise Edition操作系统,并安装了IIS服务器软件。 二、IP分配 在本文中,我们将DS服务器分配了两个IP地址...
ipvsadm的安装通常可以通过包管理器如YUM完成,例如在CentOS 6.5上执行`yum install -y ipvsadm`。如果系统中没有预装,也可以从官方网站下载源代码编译安装。 ipvsadm提供了丰富的命令行选项,用于创建、编辑、...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
3. 编译与安装:进入解压后的目录,运行`./configure`进行配置,然后执行`make`和`make install`来编译和安装IPVSADM。 4. 配置IPVS规则:使用`ipvsadm`命令行工具,根据需求设置虚拟服务器和负载均衡策略。 总结,...
- **安装 ipvsadm**: 使用 ipvsadm 工具可以方便地管理 LVS 的规则和服务。首先创建软链接 `ln –s /usr/src/kernels/2.6.18-164.el5-x86_64 /usr/src/linux`,然后解压缩 ipvsadm-1.24.tar.gz 文件并执行 "make; ...
此外,在负载调度器上还需要安装Web服务器软件Apache及相关PHP组件以提供Web服务: ```bash [root@node1 Server]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm [root@node1 Server]# rpm -ivh ...
所以,lvs需要内核有ipvs支持,确保你的内核支持ipvs后,只需安装ipvsadm就可以把一台服务器配置成负载调度器(Load Balancer)。对外提供服务的IP,也就是我们访问的IP称做VIP。调度器LB的任务主要是分发请求,真正...
首先,需要编译和安装内核,然后编译和安装ipvsadm工具。在编译和安装内核时,需要选择支持LVS的选项。然后,编辑启动配置文件,重新启动系统,并选择新的内核。 4. 配置LVS 配置LVS需要在控制器和实服务器上进行...
在这个安装配置中,我们将详细介绍如何安装和配置 lvs+heartbeat2.1.14+ldirector,包括安装 libnet、ipvsadm、heartbeat、ldirector 等软件,并配置 ipvsadm、heartbeat 和 ldirector。 一、安装 libnet libnet ...
在Linux内核2.4版本及更高版本上,LVS通常已经内置,只需安装LVS的管理工具`ipvsadm`。安装步骤如下: ```bash yum install ipvsadm ``` `ipvsadm`是用于管理和配置LVS的主要工具,它的使用方式与iptables命令类似...
**LVS-NAT安装文档及介质** Linux Virtual Server (LVS) 是一种开源的负载均衡技术,用于构建高性能、高可用性的服务器集群。NAT(网络地址转换)是LVS的一种工作模式,它通过修改数据包的源或目标IP地址来实现负载...
1. **安装Red Hat 6.5**:首先需要安装操作系统,这里选择了Red Hat 6.5作为基础平台,确保系统版本与LVS及相关软件兼容。 2. **安装依赖**:安装popt静态库,因为有些软件编译时可能需要这个库。 3. **编译安装...
### LVS 安装与配置知识点详解 #### 一、LVS简介 LVS (Linux Virtual Server) 是一种用于构建高性能、高可用性服务器集群的技术。它通过负载均衡技术将客户端请求分发到多台真实服务器上处理,从而提高系统的整体...
2. 确认系统上已安装必要的软件包,包括`ipvsadm`、`iproute2`等,如果没有,可以通过`yum install ipvsadm iproute2`进行安装。 3. 配置好网络环境,确保所有服务器之间可以互相通信,并且有明确的公网IP地址和内网...
- 使用 `yum install ipvsadm` 命令安装 IPVSADM。 #### 2. 准备二进制文件 **2.1 下载 Kubernetes、Etcd 和 Flannel 的二进制文件** - **步骤:** - 在 `masteringest01` 主机上下载所需二进制文件:Kubernetes ...
### Keepalived负载均衡安装与配置详解 #### 一、Keepalived与IPVSADM概述 **Keepalived**是一款开源的高可用解决方案,主要用于实现Linux系统的VRRP(Virtual Router Redundancy Protocol)功能,它能通过心跳...