精华内容
下载资源
问答
  • LVS与Keepalived

    2018-11-07 01:45:00
    LVS与Keepalived lvs与Nginx区别 LVS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑。 LVS基本能支持所有应用,因为工作在第4层...

    LVS与Keepalived

    lvs与Nginx区别

    LVS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑。

     

    LVS基本能支持所有应用,因为工作在第4层,所以LVS可以对几乎所有应用进行负载均衡,包括Web、数据库等。

     

    注意:LVS并不能完全判别节点故障,比如在WLC规则下,如果集群里有一个节点没有配置VIP,将会导致整个集群不能使用。还有一些其他问题,目前尚需进一步测试。

     

    Nginx工作在网路第7层,所以可以对HTTP应用实施分流策略,比如域名、结构等。相比之下,LVS并不具备这样的功能,所以Nginx可使用的场合远多于LVS。并且Nginx对网络的依赖比较小,理论上只要Ping得通,网页访问正常就能连通。LVS比较依赖网络环境。只有使用DR模式且服务器在同一网段内分流,效果才能得到保证。

     

    Nginx可以通过服务器处理网页返回的状态吗、超时等来检测服务器内部的故障,并会把返回错误的请求重新发送到另一个节点。目前LVS和LDirectd 也支持对服务器内部情况的监控,但不能重新发送请求。

     

    比如用户正在上传一个文件,而处理该上传信息的节点刚好出现故障,则Nginx会把上传请求重新发送到另一台服务器,而LVS在这种情况下会直接断掉。Nginx还能支持HTTP和Email(Email功能很少有人使用),LVS所支持的应用在这个电商比Nginx更多。

     

    Nginx同样能承受很高负载并且能稳定运行,由于处理流量受限于机器I/O等配置,所以负载能力相对较差。

     

    Nginx 安装、配置及测试相对来说比较简单,因为有相应的错误日志进行提示。LVS的安装、配置及测试所花的时间比较长,因为LVS对网络以来比较大,很多时候有可能因为网络问题而配置不能成功,出现问题时,解决的难度也相对较大。Nginx本身没有现成的热备方案,所以在单机上运行风险较大,建议KeepAlived配合使用。另外,Nginx可以作为LVS的节点机器使用,充分利用Nginx的功能和性能。当然这种情况也可以直接使用Squid等其他具备分发功能的软件。

     

    具体应用具体分析。如果是比较小型的网站(每日PV小于100万),用户Nginx就完全可以应对,如果机器也不少,可以用DNS轮询。LVS后用的机器较多,在构建大型网站或者提供重要服务且机器较多时,可多加考虑利用LVS。

    注意阿里云默认不支持虚拟VIP技术

    阿里云默认不支持虚拟VIP技术,

    https://yq.aliyun.com/ask/61502

     

    Keepalived做故障转移的(基于lvs)

    lvs虚拟ip的

     

    展开全文
  • LVS与keepalived

    2020-03-28 18:07:09
    LVS: node01: ifconfig eth0:8 192.168.150.100/24 node02~node03: 1)修改内核: echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/s....

    LVS:

    node01:
    	ifconfig  eth0:8 192.168.150.100/24
    node02~node03:
    	1)修改内核:
    		echo 1  >  /proc/sys/net/ipv4/conf/eth0/arp_ignore 
    		echo 1  >  /proc/sys/net/ipv4/conf/all/arp_ignore 
    		echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
    		echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
    	2)设置隐藏的vip:
    		ifconfig  lo:3  192.168.150.100  netmask 255.255.255.255
    		
    RS中的服务:
    node02~node03:
    	yum install httpd -y
    	service httpd start
    	vi   /var/www/html/index.html
    		from 192.168.150.1x
    
    LVS服务配置
    node01:
    		yum install ipvsadm 
    	ipvsadm -A  -t  192.168.150.100:80  -s rr
    	ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.12 -g -w 1
    	ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.13 -g -w 1
    	ipvsadm -ln
    
    验证:
    	浏览器访问  192.168.150.100   看到负载  疯狂F5
    	node01:
    		netstat -natp   结论看不到socket连接
    	node02~node03:
    		netstat -natp   结论看到很多的socket连接
    	node01:
    		ipvsadm -lnc    查看偷窥记录本
    		TCP 00:57  FIN_WAIT    192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
    		FIN_WAIT: 连接过,偷窥了所有的包
    		SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题
    

    keepalived实验:

    主机: node01~node04
    
    node01:
    	ipvsadm -C
    	ifconfig eth0:8 down
    
    ----------------------------
    node01,node04:
    	yum install keepalived ipvsadm -y
    	配置:
    		cd  /etc/keepalived/
    		cp keepalived.conf keepalived.conf.bak
    		vi keepalived.conf
    			node01:
    			vrrp:虚拟路由冗余协议!
    				vrrp_instance VI_1 {
    					state MASTER         //  node04  BACKUP
    					interface eth0
    					virtual_router_id 51
    					priority 100		 //	 node04	 50
    					advert_int 1
    					authentication {
    						auth_type PASS
    						auth_pass 1111
    					}
    					virtual_ipaddress {
    						192.168.150.100/24 dev eth0 label  eth0:3
    					}
    				}
    			virtual_server 192.168.150.100 80 {
    				delay_loop 6
    				lb_algo rr
    				lb_kind DR
    				nat_mask 255.255.255.0
    				persistence_timeout 0
    				protocol TCP
    
    				real_server 192.168.150.12 80 {
    					weight 1
    					HTTP_GET {
    						url {
    						  path /
    						  status_code 200
    						}
    						connect_timeout 3
    						nb_get_retry 3
    						delay_before_retry 3
    					}   
    				}       
    				real_server 192.168.150.13 80 {
    					weight 1
    					HTTP_GET {
    						url {
    						  path /
    						  status_code 200
    						}
    						connect_timeout 3
    						nb_get_retry 3
    						delay_before_retry 3
    					}
    				}
    			scp  ./keepalived.conf  root@node04:`pwd`
    
    展开全文
  • LVS的负载均衡算法 静态算法 静态:根据LVS本身自由的固定的算法分发用户请求。 轮询(Round Robin 简写’rr’):轮询算法假设所有的服务器处理请求的能力都一样的,调度器会把所有的请求平均分配给每个真实服务器...

    LVS的负载均衡算法

    静态算法

    静态:根据LVS本身自由的固定的算法分发用户请求。

    1. 轮询(Round Robin 简写’rr’):轮询算法假设所有的服务器处理请求的能力都一样的,调度器会把所有的请求平均分配给每个真实服务器。(同Nginx的轮询)
    2. 加权轮询(Weight Round Robin 简写’wrr’):安装权重比例分配用户请求。权重越高,被分配到处理的请求越多。(同Nginx的权重)
    3. 源地址散列(Source Hash 简写’sh’):同一个用户ip的请求,会由同一个RS来处理。(同Nginx的ip_hash)
    4. 目标地址散列(Destination Hash 简写’dh’):根据url的不同,请求到不同的RS。(同Nginx的url_hash)

    动态算法

    动态:会根据流量的不同,或者服务器的压力不同来分配用户请求,这是动态计算的。

    1. 最小连接数(Least Connections简写’lc’):把新的连接请求分配到当前连接数最小的服务器。
    2. 加权最少连接数(Weight Least Connections简写’wlc’):服务器的处理性能用数值来代表,权重越大处理的请求越多。Real Server 有可能会存在性能上的差异,wlc动态获取不同服务器的负载状况,把请求分发到性能好并且比较空闲的服务器。
    3. 最短期望延迟(Shortest Expected Delay简写’sed’):特殊的wlc算法。举例阐述,假设有ABC三台服务器,权重分别为1、2、3 。如果使用wlc算法的话,当一个请求进来,它可能会分给ABC中的任意一个。使用sed算法后会进行如下运算:
      • A:(1+1)/1=2
      • B:(1+2)/2=3/2
      • C:(1+3)/3=4/3
        最终结果,会把这个请求交给得出运算结果最小的服务器。
    4. 最少队列调度(Never Queue 简写’nq’):永不使用队列。如果有Real Server的连接数等于0,则直接把这个请求分配过去,不需要在排队等待运算了(sed运算).

    LVS在实际使用过程中,负载均衡算法用的较多的分别为wlc或wrr,简单易用。

    直接上配置

    global_defs { 
        # 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 
        # 不同的节点不同
        router_id LVS_xxx
    }
    vrrp_instance VI_1 { 
        # 表示状态是MASTER主机还是备用机BACKUP 
        # 备用机 设置BACKUP
        state MASTER 
        # 该实例绑定的网卡 
        interface ens33 
        
        # 保证主备节点一致即可 
        virtual_router_id 51 
        
        # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选 
        # 备用节点 一般设置为50
        priority 100 
        
        # 主备之间同步检查时间间隔,单位秒 
        advert_int 2 
        
        # 认证权限密码,防止非法节点进入 
        authentication { 
            auth_type PASS 
            auth_pass 1111 
        }
        
        # 虚拟出来的ip,可以有多个(vip) 
        virtual_ipaddress { 
            192.168.31.150
        } 
        
    }
    
    
    # 配置集群地址访问的IP+端口,端口和nginx保持一致,都是80,
    # 地址换成自己的(虚拟IP)
    virtual_server 192.168.31.150 80 {
        # 健康检查的时间,单位:秒
        delay_loop 6
        
        # 配置负载均衡算法,默认是轮询
        lb_algo rr
        
        # 设置LVS的模式 NAT|TUN|DR
        lb_kind DR
        
        # 设置会话持久化的时间  在此时间内不会轮询到其他服务器上
        persistence_timeout 5
        
        # 协议 
        protocol TCP
        
        # 设置真实的Nginx地址
        real_server 192.168.31.235 80 {
            # 轮询的默认权重配比
            weight 1
            
            
            # 设置健康检查
            TCP_CHECK {
                # 检查的80 端口
                connect_port 80
                
                # 检查的超时时间(2秒)
                connect_timeout  2
                
                # 重试次数 2次
                nb_get_retry 2
                
                # 重试间隔时间 3秒
                delay_before_retry 3
                
            }
        }
        
         real_server 192.168.31.236 80 {
            # 轮询的默认权重配比
            weight 1
            
            
            # 设置健康检查
            TCP_CHECK{
                # 检查的80 端口
                connect_port 80
                
                # 检查的超时时间(2秒)
                connect_timeout  2
                
                # 重试次数 2次
                nb_get_retry 2
                
                # 重试间隔时间 3秒
                delay_before_retry 3
                
            }
        }
        
    }
    

    最重要的防火墙配置

    # 224.0.0.18 写这个
    # ens33 网卡换成自己的
    firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
    
    firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
    
    firewall-cmd --reload
    

    Nginx机器配置

    配置虚拟网络子接口(回环接口)

    # 进入到网卡配置目录,找到lo(本地环回接口,用户构建虚拟网络子接口),拷贝一份新的随后进行修改:
    cd /etc/sysconfig/network-scripts
    
    ls
    ifcfg-ens33  ifdown-ipv6    ifdown-Team      ifup-eth    ifup-post      ifup-tunnel
    ifcfg-lo     ifdown-isdn    ifdown-TeamPort  ifup-ippp   ifup-ppp       ifup-wireless
    ifdown       ifdown-post    ifdown-tunnel    ifup-ipv6   ifup-routes    init.ipv6-global
    ifdown-bnep  ifdown-ppp     ifup             ifup-isdn   ifup-sit       network-functions
    ifdown-eth   ifdown-routes  ifup-aliases     ifup-plip   ifup-Team      network-functions-ipv6
    ifdown-ippp  ifdown-sit     ifup-bnep        ifup-plusb  ifup-TeamPort
    
    
    cp ifcfg-lo ifcfg-lo:1
    
    vim ifcfg-lo:1
    
    # 修改如下
    DEVICE=lo:1
    IPADDR=192.168.31.150
    NETMASK=255.255.255.255
    NETWORK=127.0.0.0
    # If you're having problems with gated making 127.0.0.0/8 a martian,
    # you can change this to something else (255.255.255.255, for example)
    BROADCAST=127.255.255.255
    ONBOOT=yes
    NAME=loopback
    

    重启网络服务

    service network restart
    

    ARP响应级别与通告行为 的概念

    1. arp-ignore:ARP响应级别(处理请求)
      • 0:只要本机配置了ip,就能响应请求
      • 1:请求的目标地址到达对应的网络接口,才会响应请求
    2. arp-announce:ARP通告行为(返回响应)
      • 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
      • 1:尽可能避免本网卡与不匹配的目标进行通告
      • 2:只在本网卡通告

    打开sysctl.conf:

    vim /etc/sysctl.conf
    
    # 修改如下:
    # configration for lvs 
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
    

    刷新配置文件:

    sysctl -p
    

    增加一个网关, 用于接收数据报文,当有请求到本机后,会交给lo去处理

    route add -host 192.168.31.150 dev lo:1
    
    #查看
    route -n
    Kernel IP routing table
    
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.31.1    0.0.0.0         UG    100    0        0 ens33
    192.168.31.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
    192.168.31.150  0.0.0.0         255.255.255.255 UH    0      0        0 lo
    

    防止重启失效,加入开机自启动

    echo "route add -host 192.168.31.150 dev lo:1" >> /etc/rc.local
    
    展开全文
  • mysql主从复制+lvs与keepalived实现负载高可用
  • Lvs与Keepalived集群

    2018-09-21 16:10:00
    4)[root@localhost ~]# ./lvs_nat.sh //执行lvs_nat.sh文件 ,随系统自动启动,可放入/usr/local/sbin/目录下 5)测试安装配置情况: [root@localhost ~]# ipvsadm -ln IP Virtual Server version 1.2.1 ...

    一、LVS安装

    1、[root@localhost ~]# yum install -y ipvsadm

    2、[root@localhost ~]# vi /etc/sysctl.conf

    net.ipv4.ip_forward = 1
    执行如下命令来应用:
    [root@localhost ~]# sysctl -p

    [root@localhost ~]# sysctl -w net.ipv4.ip_forward=1

    二、LVS配置(三种模型配置)

    Lvs有3种模型,分别是NAT(Virtual Server via NAT)、DR(Virtual Server via Direct Routing)、Tun(Virtual Server via IP Tunneling)模型。

    术语:

    1. DS:Director Server。指的是前端负载均衡器节点。
    2. RS:Real Server。后端真实的工作服务器。
    3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
    4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    5. RIP:Real Server IP,后端服务器的IP地址。
    6. CIP:Client IP,访问客户端的IP地址。

    (一)NAT模式(网络地址转换)

        通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分发给后端的真实服务器,真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回到客户端,完成整个调度的过程。

    优点:支持所有操作系统及私有网络,且只需一个公网 IP 地址
    缺点:用户请求和响应报文都必须经过dr地址重写,当用户请求越来越多时,调度器的处理能力将成为瓶颈。

    IP准备:VIP: 192.168.0.106, RSIP:192.168.22.153、192.168.22.154

    1、配置网络环境

    1)NAT模式下需要,负载均衡调度器(Director Server)需要两个网卡,增加网卡(需要添加HWADDR不同的网卡,两个网卡模式分别要属于不同的链接模式分别为桥接和NAT)。

    ææ¯å享

    2)生成完成后,查看虚拟机linux网卡配置情况,成本网卡名为ens37。

    bd9746af39d900610da690289c87531d6d2.jpg

    1fc1b2547af0fb70008c642ab096d62a8a6.jpg

    3)缺少IP地址和网卡配置文件,手动配置一个,先配置桥接模式,配置物理网卡:

    4a02404e7b18cdd783c97dd90edd5aae5ba.jpg

    4)查看一下无线网卡地址(windows):ipconfig /all

    b9af2958173dd7a802ba2ef7604127adc6c.jpg

    5)生成完成后,配置虚拟机linux网卡静态IP地址

    [root@localhost network-scripts]# cp ifcfg-eno16777736 ifcfg-ens37
    [root@localhost network-scripts]# vi ifcfg-ens37
    TYPE=Ethernet
    #BOOTPROTO=dhcp
    BOOTPROTO=static
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV6_FAILURE_FATAL=no
    NAME=ens37
    #UUID=115a7ee2-4721-4358-92e9-b6bd1068e062
    DEVICE=ens37
    ONBOOT=yes
    IPADDR=192.168.0.106
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.1
    DNS1=8.8.8.8

    6)[root@localhost network-scripts]# systemctl restart network //增加后重启。

    [root@localhost network-scripts]# ifconfig

    [root@localhost network-scripts]# ifconfig
    eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.22.153  netmask 255.255.255.0  broadcast 192.168.22.255
            inet6 fe80::20c:29ff:fe7e:c6f5  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:7e:c6:f5  txqueuelen 1000  (Ethernet)
            RX packets 991  bytes 88247 (86.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 683  bytes 99544 (97.2 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.0.106  netmask 255.255.255.0  broadcast 192.168.0.255
            inet6 fe80::20c:29ff:fe7e:c6ff  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:7e:c6:ff  txqueuelen 1000  (Ethernet)
            RX packets 65  bytes 10234 (9.9 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 15  bytes 1688 (1.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 0  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    dda084aa22ec35bb3e6727fad4bc083a863.jpg

    两个网卡配置成功。

    2、服务器配置

    为了测试用使用docker生成两个tomcat服务器用于测试,在当前目录创建两个目录

    1)[root@localhost ~]# mkdir ~/tomcat ~/tomcat/8081 ~/tomcat/8082 

    [root@localhost 8081]# docker run --name tomcat1 -p 8081:8080 -v $PWD/data:/usr/local/tomcat/webapps/data -d tomcat:latest
    [root@localhost 8082]# docker run --name tomcat2 -p 8082:8080 -v $PWD/data:/usr/local/tomcat/webapps/data -d tomcat:latest
    
    [root@localhost 8081]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    d2b6e4f2ac3d        tomcat:latest       "catalina.sh run"   4 seconds ago       Up 3 seconds        0.0.0.0:8081->8080/tcp   tomcat1
    8e4e995fd60b        tomcat:latest       "catalina.sh run"   31 seconds ago      Up 30 seconds       0.0.0.0:8082->8080/tcp   tomcat2
    

    把153、154三个网关设置进行调整:

    2)[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

    8acfe6188e499874bd65d66125453ae0a3a.jpgcd56d3ec8b644c288e3c4e6d7e4aa8efac0.jpg

    3)ipvsadm配置

    查看当前系统上网卡名称,把上述桥连方式生成网卡IP地址做为VIP(192.168.0.106)使用

    [root@localhost network-scripts]# cd /proc/sys/net/ipv4/conf
    [root@localhost conf]# ls
    all  default  docker0  eno16777736  ens37  lo
    

     创建lvs_nat.sh文件(touch lvs_nat.sh),填写下列内容:

    #!/bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
    
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    IPVSADM='/sbin/ipvsadm'
    $IPVSADM -C
    $IPVSADM -A -t 192.168.0.106:8080 -s rr
    $IPVSADM -a -t 192.168.0.106:8080 -r 192.168.22.153:8081 -m -w 1
    $IPVSADM -a -t 192.168.0.106:8080 -r 192.168.22.153:8082 -m -w 1
    $IPVSADM -a -t 192.168.0.106:8080 -r 192.168.22.154:8080 -m -w 1

    参数说明:
    -A:增加一个虚拟服务   
    -a:增加real server
    -r:指定real server 的 IP地址
    -t:表示TCP服务       
    -s:指定调度算法   rr:轮询算法
    -m –masquerading 指定LVS 的工作模式为NAT 模式

    4)[root@localhost ~]# ./lvs_nat.sh  //执行lvs_nat.sh文件 ,随系统自动启动,可放入/usr/local/sbin/目录下

    5)测试安装配置情况:

    [root@localhost ~]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.0.106:8080 rr
      -> 192.168.22.153:8081          Masq    1      0          0
      -> 192.168.22.153:8082          Masq    1      0          0
      -> 192.168.22.154:8080          Masq    1      0          0
    
    [root@localhost ~]# ipvsadm -ln --stats
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
      -> RemoteAddress:Port
    TCP  192.168.0.106:8080                 12      326       94    31294   681861
      -> 192.168.22.153:8081                 4      285       74    27223   652737
      -> 192.168.22.153:8082                 4       29       20     3447    29124
      -> 192.168.22.154:8080                 4       12        0      624        0
    
    [root@localhost ~]# ipvsadm -ln --rate
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
      -> RemoteAddress:Port
    TCP  192.168.0.106:8080                  0        0        0        0        0
      -> 192.168.22.153:8081                 0        0        0        0        0
      -> 192.168.22.153:8082                 0        0        0        0        0
      -> 192.168.22.154:8080                 0        0        0        0        0
    

    6)测试访问(可停止其中服务器进行测试):

    30978fa6863b3e5f818b9a403e7b9668324.jpg

    *注:如果无法连接成功,检查DS服务器防火墙是否关了(使用此命令解决:iptables -F;setenforce 0,重启防火墙

    3、配置还原:

    (1)ipvsadm -C 清空规则,ipvsadm -ln 确认
    (2)iptables -t nat -F: 清空iptables的nat规则
    (3)master和slave把网卡所对应的网关(GATEWAY)改回来,vi /etc/sysconfig/network-scripts/ifcfg-eno16777736,重启网卡
    systemctl restart network
    (4)dr用不到ens37这个网卡(192.168.0.106),在虚拟机上删除桥连网卡,执行:ifdown ens37,在/etc/sysconfig/network-scripts/目录下删除ifcfg-ens37文件,重启网卡:systemctl restart network

    上一方案在实际生产中较少使用。

    (二)、DR模式(直接路由模式)

        通过改写请求报文的MAC地址,将请求发送到真是服务器,真实服务器将响应直接返回给用户,直接路由模式可以极大的提高集群系统的伸缩性,这种方法没有IP隧道的开销,集群中真实的服务器也没有必要必须支持IP隧道协议,只是需要调度器与真实服务器有一块网卡连在同一物理网段上。

    1、环境配置

    IP准备:

    Director节点:  (ens33 192.168.22.153  vip ens33:0 192.168.158)
    Real server1: (ens33 192.168.22.154 vip lo:0 192.168.158)
    Real server2: (ens33 192.168.22.155 vip lo:0 192.168.158)

    2、服务器配置

    1)DS转发服务器配置,在/usr/local/sbin/目录下建建lvs_dr.sh文件

    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=192.168.22.158
    rs1=192.168.22.154
    rs2=192.168.22.155
    #删除一个虚拟IP
    #ifconfig ens33:0 down
    #增加一个虚拟IP
    ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
    #增加一条路由
    route add -host $vip dev ens33:0
    $ipv -C
    $ipv -A -t $vip:8080 -s wrr
    $ipv -a -t $vip:8080 -r $rs1:8080 -g -w 1
    $ipv -a -t $vip:8080 -r $rs2:8080 -g -w 3

    说明:ifconfig ens33:0 192.168.22.158 broadcast 192.168.22.158 netmask 255.255.255.255 up ,表示在现有网卡上创建虚拟IP 192.168.22.158,其实现原理主要是靠TCP/IP的ARP协议。

    参数说明:
    -g –gatewaying 指定LVS 的工作模式为dr(直接路由模式)(也是LVS 默认的模式)

    -r –real-server server-address 真实的服务器[Real-Server:port]

    2)[root@localhost ~]# ./lvs_dr.sh
    396540637b9cafc3f45fdfa06ad1d286736.jpg

    3)真实服务器配置,在两台rs1,rs2都写入配置脚本

    [root@localhost ~]# touch lvs_rs.sh

    [root@localhost ~]# vi /usr/local/sbin/lvs_rs.sh

    #!/bin/bash
    vip=192.168.22.158
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip 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

    [root@localhost ~]# chmod -R 755 lvs_rs.sh  //要授权才能执行

    4)[root@localhost ~]# ./lvs_rs.sh

    (1)调整arp内核参数的意义:
    (1) ARP广播会产生的问题
    当客户端发起访问VIP 对应的域名的请求(curl 192.168.22.158)时,根据网络通信原理会产生ARP 广播,因为负载均衡器dir和真实的服务器rs在同一网络并且VIP设置在集群中的每个节点上,此时集群内的真实服务器会尝试回答来自客户端计算机的查找VIP的ARP广播,这就会产生问题,大家都说我是"VIP"。
    (b)为了达到负载均衡的目的,必须想法办让真实服务器忽略来自客户端计算机的ARP广播请求 ——》 调整arp内核参数
    参考:http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

               http://blog.chinaunix.net/uid-13423994-id-5146098.html
    (2)问题:lvs有vip,real server也有vip,但client请求只访问lvs的vip?
    在所有real server上要关闭所有arp请求,导致不能响应client发出的arp请求(相当于哑巴),只有lvs可以响应,这样请求就会传到lvs的vip中,这就是为什么要禁止real server 的 arp请求和响应

    5)测试:

    直接访问192.168.22.158 

    de487270ddf03f6ac30b1c7480d8dd3c6b1.jpg

    dcc392ed20b99d18ab25f514ade1d83cb57.jpg

    *注:如果无法连接成功,检查DS服务器防火墙是否关了(使用此命令解决:iptables -F

    3、配置还原(可做为停机脚本)

    (1) director服务器

    [root@localhost ~]# /sbin/ipvsadm -C 
    [root@localhost ~]# ip addr del 192.168.22.158 dev ens33

    (2)real server服务器

    [root@localhost ~]# ip addr del 192.168.22.158 dev lo
    [root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    [root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    [root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce

     为方便使用,真实服务器可编写启停脚本,lvs_rs.sh

    #!/bin/bash  
    #description : start realserver
    VIP=192.168.22.158
    /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of REALServer"
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    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
    ;;
    stop)
    /sbin/ifconfig lo:0 down
    echo "close LVS Directorserver"
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac

    (二)、TUN模式(IP隧道模式)

        调度器将请求的报文通过IP隧道转发至真实服务器,而真实的服务器直接将结果返回给用户,调度器只处理请求报文,由于一般网路服务的应答大于请求,采用IP隧道模式,集群系统的最大吞吐量可以提高10倍。

    1、环境配置

    IP准备:

    Director节点:  (ens33 192.168.22.153  vip ens33:0 192.168.158)
    Real server1: (ens33 192.168.22.154 vip lo:0 192.168.158)
    Real server2: (ens33 192.168.22.155 vip lo:0 192.168.158)

    1) /etc/sysctl.conf
    把 net.ipv4.conf.all.rp_filter和 net.ipv4.conf.default.rp_filter设为0即可
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0
    系统启动后,会自动加载这个配置文件,内核会使用这个变量

    2)命令行
    显示一个内核变量 sysctl net.ipv4.conf.all.rp_filter
    设置一个内核变量 sysctl -w net.ipv4.conf.all.rp_filter=0
    设置完后,会更新内核(实时的内存)中的变量的值,但不会修改sysctl.conf的值

    2、服务器配置

    1)DS转发服务器配置,在/usr/local/sbin/目录下建建lvs_tun.sh文件

    #!/bin/bash
    ipv=/sbin/ipvsadm
    vip=192.168.22.158
    ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255 up 
    route add -host $vip dev tunl0  
    ##添加转发规则
    $ipv -C
    $ipv -A -t 192.168.22.158:8080 -s rr
    $ipv -a -t 192.168.22.158:8080 -r 192.168.22.154:8080 -i
    $ipv -a -t 192.168.22.158:8080 -r 192.168.22.155:8080 -i

    参数说明:

    -i –ipip 指定LVS 的工作模式为隧道模式

    [root@localhost ~]# chmod -R 775 lvs_tun.sh

    [root@localhost ~]# ./lvs_tun.sh

    131cc75b9849ac3e357b57b82ee599700e2.jpg

    2)真实服务器配置,在两台rs1,rs2都写入配置脚本

    [root@localhost ~]# touch lvs_rs.sh

    [root@localhost ~]# vi /usr/local/sbin/lvs_rs.sh

    #!/bin/bash
    vip=192.168.22.158
    ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev tunl0 
    echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
    echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

    [root@localhost ~]# chmod -R 755 lvs_rs.sh  //要授权才能执行

    3)[root@localhost ~]# ./lvs_rs.sh

    如果无错误表示配置成功.

    4)测试:

    直接访问192.168.22.158 

    de487270ddf03f6ac30b1c7480d8dd3c6b1.jpg

    *注:遇到IP可通,但加端口不通的情况,可检查DS服务器防火墙是否关了(使用此命令解决:iptables -F),再关闭RS服务防火墙。

    3、为方便使用,真实服务器可编写启停脚本,lvs_rs.sh

    #!/bin/bash  
    #description : start realserver
    VIP=192.168.22.158
    /etc/rc.d/init.d/functions
    case "$1" in
    start)
    echo " start LVS of REALServer"
    modprobe ipip
    /sbin/ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
    echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
    echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
    ;;
    stop)
    /sbin/ifconfig tunl0 down
    echo "close LVS Directorserver"
    echo "0" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
    echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac

    三、LVS与Keepalived配置(基于DR模型)

    1、环境配置

    1)IP准备:

    Director节点:  (ens33 192.168.22.153  vip ens33:0 192.168.158)
    Director节点:  (ens33 192.168.22.154  vip ens33:0 192.168.158)
    Real server1: (ens33 192.168.22.155 vip lo:0 192.168.158)
    Real server2: (ens33 192.168.22.156 vip lo:0 192.168.158)

    2)程序准备:

    [root@localhost ~]# yum install ipvsadm
    [root@localhost ~]# yum install keepalived


    3)配置系统日志(方便监控运行情况),修改keepalived的日志输入(因为keepalived的日志输出在/var/log/message里面,不好查看,可进行修改)
    [root@localhost ~]# vi /etc/sysconfig/keepalived
    把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D -d -S 0"
    [root@localhost ~]# vi /etc/rsyslog.conf
    最后添加:
    # keepalived -S 0 
    local0.*                                                /var/log/keepalived.log
    重新启动日志
    [root@localhost log]# systemctl restart rsyslog
    [root@localhost log]# systemctl restart keepalived
    [root@localhost log]# tail keepalived.log

    Sep  8 20:51:58 localhost Keepalived_healthcheckers[39423]: Activating healthchecker for service [10.10.10.3]:1358

    2、服务器配置
    1)keepalived服务器配置
    Master端192.168.22.153机器的配置:
    [root@localhost ~]# vi /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.22.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.22.158
        }
    }
    
    virtual_server 192.168.22.158 8080 {
        delay_loop 6
        lb_algo wrr 
        lb_kind DR
        persistence_timeout 50
        protocol TCP
    
        #sorry_server 192.168.200.200 1358
        real_server 192.168.22.155 8080 {
            weight 2
    	TCP_CHECK {
    		connect_timeout 3
    		nb_get_retry 3
    		delay_before_retry 3
    		connect_port 8080
    	}
        }
    
        real_server 192.168.22.156 8080 {
            weight 1
    	TCP_CHECK {
    		connect_timeout 3
    		nb_get_retry 3
    		delay_before_retry 3
    		connect_port 8080
    	}
        }
    }

    Backup端的192.168.22.154机器配置:

    [root@localhost ~]# scp root@192.168.22.153:/etc/keepalived/keepalived.conf /etc/keepalived/

    [root@localhost ~]# vi /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.22.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.22.158
        }
    }
    
    virtual_server 192.168.22.158 8080 {
        delay_loop 6
        lb_algo wrr 
        lb_kind DR
        persistence_timeout 50
        protocol TCP
    
        #sorry_server 192.168.200.200 1358
        real_server 192.168.22.155 8080 {
            weight 2
    	TCP_CHECK {
    		connect_timeout 3
    		nb_get_retry 3
    		delay_before_retry 3
    		connect_port 8080
    	}
        }
    
        real_server 192.168.22.156 8080 {
            weight 1
    	TCP_CHECK {
    		connect_timeout 3
    		nb_get_retry 3
    		delay_before_retry 3
    		connect_port 8080
    	}
        }
    }

    两个文件主要不同处:

    fc12b672a252d1f5f7b05729f87259b9505.jpg59dfa592c65b30199e42d72d5f2715b7d71.jpg

    3)真实服务器配置

    两台真实服务器rs1、rs2分别创建lvs_dr.sh文件,内容如下

    #!/bin/bash
    #description: Config realserver
    VIP=192.168.22.158
    /etc/rc.d/init.d/functions
    case "$1" in
    start)
           /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP 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 >/dev/null 2>&1
           echo "RealServer Start OK"
           ;;
    stop)
           /sbin/ifconfig lo:0 down
           /sbin/route del $VIP >/dev/null 2>&1
           echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
           echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
           echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
           echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
           echo "RealServer Stoped"
           ;;
    *)
           echo "Usage: $0 {start|stop}"
           exit 1
    esac
    exit 0

    [root@localhost ~]# chmod -R 755 lvs_dr.sh

    [root@localhost ~]# sh lvs_dr.sh start

    真实服务器的Tomcat服务器,在webapp下放ROOT文件夹,里面放index.html,内容为 :

    <html>
    	<head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	</head>
    	<body>
    	    Master Post: 8080.
    	</body>
    </html>
    <html>
    	<head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	</head>
    	<body>
    	    Backup Post: 8080.
    	</body>
    </html>

    3)测试

    直接访问如下192.168.22.158:8080

    27d0e043aee70e4816c0c662121e65c4b9a.jpg

    注意防火墙设置,真实服务器最好关闭防火墙。

    参考:http://blog.51cto.com/jinlong/1956187
    https://blog.csdn.net/Ki8Qzvka6Gz4n450m/article/details/79119665
    https://blog.csdn.net/huaishu/article/details/17023061/
    http://blog.51cto.com/wgkgood/1102870

     

    转载于:https://my.oschina.net/u/1253780/blog/2120694

    展开全文
  • LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统 先决条件 本地已经在virtualbox中安装了三台centos7虚拟机 三节点之间网络已经互联,通常情况下,只有用作LVS服务器的...
  • Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查,来判断LVS负载调度器、节点服务器的可用性,及时隔离并且替换为新的服务器,当故障主机恢复后将其重新加入群集 Keepalived的...
  • 企业生产系统、业务运营既要保障高效率,也要最大化降低故障出现造成的影响,keepalived的两大功能:故障切换、健康检查,为企业提供了可靠的解决方案。 例如,一旦检测到主调度器处于异常状态,则自动切换到从调度...
  • LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载...
  • 1)LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。 特点: 可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。先分析实现虚拟...
  • LVS+Keepalived群集

    2020-12-09 18:45:13
    LVS+Keepalived群集Keepalived原理keepalived案例分析keepalived工具介绍keepalived实现原理剖析keepalived配置Keepalived安装启动配置Keepalived master服务器常用配置选项配置Keepalived slave服务器Keepalived...
  • LVS搭配Keepalived

    2020-11-05 15:29:43
    项目目录为什么实用KeepalivedKeepalived工具介绍Keepalived实现原理剖析Keepalived案例讲解Keepalived安装启动搭建LVS搭配Keepalived服务 为什么实用Keepalived 企业应用中,单台服务器承担应用存在单点故障的...
  • LVS与Keepalived简述: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,很好的可伸缩性、可靠性和管理性。 ...
  • LVS-Keepalived__gw

    2020-12-11 02:40:26
    LVS-KeepalivedKeepalived原理keepalived案例分析keepalived工具介绍keepalived实现原理剖析keepalived配置Keepalived安装启动配置Keepalived master服务器常用配置选项配置Keepalived slave服务器keepalived双机...
  • LVS+KEEPALIVED

    2019-09-25 21:35:25
    LVS+KEEPALIVED+WEB-server 工作模式图: 实验环境: LVS: (VIP)172.16.109.198/32 RS-1: (RIP) 172.16.109.130/24 RS-2: (RIP) 172.16.109.134/24 LVS的部署 LVS的部署注意点: 网卡上只绑定虚拟VIP,且...
  • 最近对lvskeepalived进行了安装、配置熟悉,对过程进行整理同时记录遇到的问题。此处只做单独的lvskeepalived的配置,假设后台服务已配置完成。 1、需要的安装包:ipvsadm、keepalived 2、安装规划: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 633
精华内容 253
关键字:

lvs与keepalived