keepalived+lvs
来源:互联网 发布:js 数组 map方法 编辑:程序博客网 时间:2024/05/29 16:44
arptables命令用来设置、维护和检查Linux内核中的arp包过滤规则表。
-A:向规则链中追加规则;
-D:从指定的链中删除规则;
-l:向规则链中插入一条新的规则;
-R:替换指定规则;
-P:设置规则链的默认策略;
-F:刷新指定规则链,将其中的所有规则链删除,但是不改变规则链的默认策略;
-Z:将规则链计数器清零;
-L:显示规则链中的规则列表;
-X:删除指定的空用户自定义规则链;
-h:显示指令帮助信息;
-j:指定满足规则的添加时的目标;
-s:指定要匹配ARP包的源ip地址;
-d:指定要匹配ARP包的目的IP地址。
来自: http://man.linuxde.net/arptables
LVS 是一个开源的软件,可以实现LINUX平台下的简单负载均衡。首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
IPVS是LVS集群系统的核心软件,它的主要作用是:
安装在Load Balancer上,把发往Virtual IP的请求转发到Real Server上。
IPVS的负载均衡机制有三种,这里使用IP Tunneling机制:
一,NAT模式(VS-NAT)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
二、IP隧道模式(VS-TUN)
原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
三、直接路由模式(VS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
Virtual Server via NAT
Virtual Server via IP Tunneling
Virtual Server via Direct Routing
IPVS的负载调度算法有十种:
轮叫(Round Robin)
加权轮叫(Weighted Round Robin)
最少链接(Least Connections)
加权最少链接(Weighted Least Connections)
基于局部性的最少链接(Locality-Based Least Connections)
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
目标地址散列(Destination Hashing )
源地址散列(Source Hashing)
最短期望延迟(Shortest Expected Delay)
无须队列等待(Never Queue)
lvS的特点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生;
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
3、工作稳定,自身有完整的双机热备方案;
4、无流量,保证了均衡器IO的性能不会收到大流量的影响;
5、应用范围比较广,可以对所有应用做负载均衡;
6、LVS需要向IDC多申请一个IP来做Visual IP,因此需要一定的网络知识,所以对操作人的要求比较高。
Nginx的特点是:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx能支持http和Email,这样就在适用范围上面小很多;
8、不支持Session的保持、对Big request header的支持不是很好,另外默认的只有Round-robin和IP-hash两种负载均衡算法。
HAProxy的特点是:
1、HAProxy是工作在网络7层之上。
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现
VRRP)虚拟路由器冗余协议是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。使用 VRRP 的好处是有更高的默认路径的可用性而无需在每个终端主机上配置动态路由或路由发现协议。 VRRP 包封装在 IP 包中发送。 详细参数 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由(如图3-1所示,10.100.10.1),这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA 坏掉时,本网段内所有以RouterA 为缺省路由下一跳的主机将断掉与外部的通信。VRRP 就是为解决上述问题而提出的,它为具有多播或广播能力的局域网(如:以太网)设计。我们结合下图来看一下VRRP 的实现原理。VRRP 将局域网的一组路由器(包括一个Master 即活动路由器和若干个Backup 即备份路...
lvs
需要四台虚拟机 server1/2/3/4
server2 作为调度器
关掉其他所有服务 开启httpd 服务
server2
netstat -anplet
/etc/init.d/httpd start
ipvsadm
ip addr add 172.25.19.100/24 dev eth0 添加vip
ip addr show
ipvsadm -A -t 172.25.19.100:80 -s rr 添加服务,算法为轮询
ipvsadm -a -t 172.25.19.100:80 -r 172.25.19.3:80 -g
ipvsadm -a -t 172.25.19.100:80 -r 172.25.19.4:80 -g
ipvsadm -l
server3/4
yum install httpd -y
/etc/init.d/httpd start
cd /var/www/html/
vim index.html
ip addr add 172.25.19.100/24 dev eth0
yum install arptables_jf -y
[ arptables -A IN -d 172.25.19.100 -j DROP
arptables -A OUT -s 172.25.19.100 -j mangle --mangle-ip-s 172.25.19.3]
[ arptables -A IN -d 172.25.19.100 -j DROP
arptables -A OUT -s 172.25.19.100 -j mangle --mangle-ip-s 172.25.19.4]
/etc/init.d/arptables_jf save
arptables -nL
物理机浏览器 访问 172.25.19. 100 测试 没有健康检查
#lvs负载均衡realserver上 server3/4 必须要有vip 172.25.9.100
server3/4 必须有vip 172.25.19.100/24 ip addr add 172.25.19.100/24 dev eth0
keepalived
server1
/etc/init.d/heartbeat stop
chkconfig heartbeat off
cd
netstat -anplet
tar zxf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure --prefix=/usr/local/keepalived
yum install -y libnl-devel
./configure --prefix=/usr/local/keepalived
cd
yum install -y libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
cd keepalived-1.2.24
./configure --prefix=/usr/local/keepalived
make
make instal
scp -r /usr/local/keepalived/ 172.25.19.2:/usr/local/
server1/2
必要的软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc/ 配置文件
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ 启动脚本
chmod +x /etc/init.d/keepalived 执行权限
/etc/init.d/keepalived status 报错
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 必要文件
ln -s /usr/local/keepalived/sbin/keepalived /sbin/ 二进制命令文件
/etc/init.d/keepalived status 应该成功了
server1
cd /etc/keepalived/
ls
vim keepalived.conf
【
global_defs {
notification_email {
root@localhost 第五行
}
notification_email_from keepalived@server1.example.com
smtp_server 172.25.19.1
.........
virtual_router_id 19
........
virtual_ipaddress {
172.25.19.100
}
.........
virtual_server 172.25.19.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.19.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.19.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
下面全部删掉,会影响
】
scp keepalived.conf 172.25.19.2:/etc/keepalived/
server2
cd /etc/keepalived/
vim keepalived.conf
【
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 19
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
】
/etc/init.d/keepalived start
ip addr show
/etc/init.d/keepalived stop
/etc/init.d/keepalived start
tail -f /var/log/messages
ip addr show
ipvsadm -l
server1
tail -f /var/log/messages
ip addr show
/etc/init.d/keepalived stop
/etc/init.d/keepalived start
ip addr show
/etc/init.d/keepalived stop
/etc/init.d/keepalived start
ip addr show
是有健康检查
对服务端 /etc/init.d/ipvsadm stop 检查不出来了
对服务端 /etc/init.d/httpd stop 不能检查
对lvs负载均衡后端 /etc/init.d/httpd stop 有检测
heartbeat+ldirectord高可用
server1/2 需要装过heartbeat
find / -name ldirectord.cf
cd /usr/share/doc/ldirectord-3.9.5/
vim ldirectord.cf
【
virtual=172.25.19.100:80
real=172.25.19.3:80 gate
real=172.25.19.4:80 gate
fallback=127.0.0.1:80 gate
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
# receive="Test Page"
# virtualhost=www.x.y.z
】
mv ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
ldirectord是有健康检测的 对real server 可以检测,开启ldirectord等于开启ipvsadm,所以不用再开启ipvsadm的
/etc/init.d/ipvsadm stop
ipvsadm -L
/etc/init.d/ldirectord start
ipvsadm -l
vim haresources
【
server1.example.com IPaddr::172.25.19.100/24/eth0 ldirectord httpd
】
scp haresources ldirectord.cf 172.25.19.2:/etc/ha.d/
/etc/init.d/ldirectord stop
chkconfig ldirectord off
( server1/2 是没有 :ip addr del 172.25.19.100/24 dev eth0)
server1/2
/etc/init.d/heartbeat start
ipvsadm -l
tail -f /var/log/messages
ipvsadm -l
server3/4 必须有vip 172.25.19.100/24 ip addr add 172.25.19.100/24 dev eth0
编译内核
kernel
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm
cd rpmbuild/SOURCES/SPECS/
yum install -y rpm-build
rpmbuild -bp kernel.spec
yum install -y patchutils xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel perl hmaccalc gcc perl-ExtUtils-Embed
rpm -ivh asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm slang-devel-2.2.1-1.el6.x86_64.rpm
rpmbuild -bp kernel.spec
tar zxf Lvs-fullnat-synproxy.tar.gz
cd /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
cp /root/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch .
patch -p1 < lvs-2.6.32-220.23.1.el6.patch
vim Makefile
【
EXTRAVERSION = -220.23.1.el6
】
make
make modules_install
make install
vim /boot/grub/grub.conf
【
default=0
..............
root (hd0,0)
kernel /vmlinuz-2.6.32-220.23.1.el6 ro root=/dev/mapper/vg_server-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_server/LogVol00 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM 【nohz=off】 rhgb quiet
............................
initrd /initramfs-2.6.32-220.23.1.el6.img
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
】
reboot
yum remove ipvsadm -y
cd
cd lvs-fullnat-synproxy/
ls
tar zxf lvs-tools.tar.gz
ls
cd tools/
ls
cd keepalived/
./configure --with-kernel-dir=/lib/modules/2.6.32-220.23.1.el6/build/
yum install openssl-devel -y
./configure --with-kernel-dir=/lib/modules/2.6.32-220.23.1.el6/build/
yum install popt-devel -y
./configure --with-kernel-dir=/lib/modules/2.6.32-220.23.1.el6/build/
make
cd ..
cd ipvsadm/
ls
make
cd ..
make install
cd keepalived/
make install
cd ..
cd ipvsadm/
make install
ipvsadm -l
cd ..
ipvsadm --help |less
uit
ipvsadm --help
haproxy负载均衡
yum install haproxy
cd /etc/haproxy/
vim haproxy.cfg
【
stats uri /status 监控 59行
59行以后全部注释
listen westos *:80
balance roundrobin
server web1 172.25.19.3:80 check
server web2 172.25.19.4:80 check
】
/etc/init.d/haproxy start
vim haproxy.cfg
/etc/init.d/haproxy start
vim haproxy.cfg
/etc/init.d/haproxy start
【
frontend westos *:80
acl badhost src 172.25.9.250 #指定该用户访问的服务器
redirect location http://172.25.9.1:8080 if badhost
default_backend app
backend app
# balance roundrobin
balance source
server web1 172.25.9.2:80 check
server web2 172.25.9.3:80 check
server local 172.25.9.1:8080 backup
】
【 #目录分布,
acl url_static path_beg -i /images
acl url_static path_beg -i .jpg .gif .png .css .js
use_backend an if url_static
default_backend app
backend an
balance roundrobin
# balance source
server web1 172.25.9.2:80 check
backend app
balance roundrobin
server web2 172.25.9.3:80 check
# server local 172.25.9.1:8080 backup
】
【
【#上传下载文件
frontend westos *:80
#acl badhost src 172.25.9.250
#block if badhost
#errorloc 403 http://172.25.9.1:8080
acl url_static path_beg -i /images
acl url_static path_beg -i .jpg .gif .png .css .js
acl read method GET
acl read method HEAD
acl write method PUT
acl write method POST
use_backend an if url_static
default_backend app
backend an
balance roundrobin
# balance source
server web1 172.25.9.2:80 check
backend app
balance roundrobin
server web1 172.25.9.2:80 check
server2/3
/var/www/html
upload 上传需要的目录。上传的东西在里面
index.php
upload_file.php
】
- LVS+Keepalived
- lvs keepalived
- LVS+keepalived
- lvs+keepalived
- lvs+keepalived
- LVS+keepalived
- LVS+keepalived
- LVS+Keepalived
- keepalived+lvs
- lvs+keepalived
- keepalived+lvs
- keepalived + LVS
- keepalived+lvs
- Keepalived+lvs
- LVS+Keepalived
- Keepalived+LVS
- Keepalived+LVS | Keepalived+Nginx
- LVS+keepalived keepalived.conf配置
- JavaScript提升日No1
- lnmp简介
- 牛客网互联网秋招模拟笔试编程题第三题
- 栅栏密码--Python解密脚本
- 《鸟哥的linux私房菜:基础学习篇》第3版
- keepalived+lvs
- css3-transform
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"(使用forEach时出错)
- vue 自定义组件
- c++第六次作业
- BestCoder Round #84 Bellovin
- Hibernate数据关联映射之一对一和多对多
- 源码编译-nginx
- openssl 初始化函数到底做了什么?