lvs(负载均衡)开发综述

Lvs(负载均衡):

一台主负载a,备机负载b,备机负载c......,当a负载超出限制时,就会将业务分发至bc,从而保证效率和可用性。


安装开源软件:

以下软件的安装通过编写脚本build.sh来实现。

Arping:是一个 ARP 级别的 ping 工具,可用来直接 ping MAC 地址,以及找出那些 ip 地址被哪些电脑所使用了。

libnet:libnet提供的函数接口主要实现和封装了数据包的构造和发送过程。

libpcap:libpcap提供的函数接口主要实现和封装了与数据包截取有关的过程。

openssl:openssl是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSl协议,并提供丰富的应用程序供程序测试和其他目的使用。

keepalived(主要 可实现热备服务和负载均衡):keepalived的作用是检测服务器的状态,如果拥有一台web服务器宕机,或者出现故障,keepalived将检测到,并将有故障的服务器从系统中提出,同时使用其他服务器代替该服务器工作,当服务器正常后keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障服务器。原理:检查服务群的iP和端口是否联通,若不连通则报告并替换,还有就是根据用户的一些设定来鉴别服务群中的机器是否出现问题。



建立配置文件:lvstest.conf

touch lvstest.conf

主机配置文件内容:
假设主负载IP为1.1.1.1,端口80,绑定网口为eth2
备机负载a: IP为11.11.0.11,端口80,权重为3
备机负载b: IP为11.11.0.11,端口80,权重为3
global_defs {
   router_id TEST_LVS
}

vrrp_instance VI_1 {
    state MASTER
    interface eth2		#绑定的网口
    virtual_router_id 51
    priority 100		#权重,主负载要比备机负载高一些
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        1.1.1.1			#主负载的IP

    }
}

virtual_server 1.1.1.1 80 {	#主负载的IP和端口

    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 3
    protocol TCP

    real_server 11.11.0.11 80 {  #备机负载的IP和端口

        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 11.11.0.12 80 {  #备机负载的IP和端口
        weight 3		#权重
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80		#端口
        }
     }
}

备机配置文件内容:
global_defs {
   router_id TEST_LVS
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth2		#绑定的网口
    virtual_router_id 51
    priority 98			#优先级,备机负载要比主机负载低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        1.1.1.1			#主负载IP
    }
}

virtual_server 1.1.1.1 80 {      #主负载的IP和端口

    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 3
    protocol TCP

    real_server 11.11.0.11 80 {       #备机负载的IP和端口

        weight 3			#权重
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 11.11.0.12 80 {		#备机负载的IP和端口

        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80			#端口
        }
     }
}

开启主负载:

例如配置文件lvstest.conf的路径是/home/conf/lvstest.conf,执行文件keepalived的路径是/home/bin/keepalived,执行以下:

/home/bin/keepalived -f /home/conf/lvstest.conf
rm -fR /var/lock/keepalived-b
touch /var/lock/keepalived-m

开启备机负载:

例如配置文件lvstest.conf的路径是/home/conf/lvstest.conf,执行文件keepalived的路径是/home/bin/keepalived,执行以下:

/home/bin/keepalived -f /home/conf/lvstest.conf
rm -fR /var/lock/keepalived-m
touch /var/lock/keepalived-b


关闭服务:

1,获取/var/run/keepalived.pid中记录的pid

2,kill -9 pid

3,删除/var/run/keepalived.pid文件

4,删除/var/lock/keepalived-m或者/var/lock/keepalived-b文件


状态查询:
int lb_status()
{
        if(!lb_ifreal())
                return 0;       //if lvs real server running,return 0
        if(!access("/var/lock/keepalived-m",0))
                printf("lvs MASTER server is running!\n");
        else if(!access("/var/lock/keepalived-b",0))
                printf("lvs BACKUP server is running!\n");
        else
                printf("lvs server is not running\n");
        return 0;
}
开启服务、关闭服务、状态查询三个功能要编写成脚本,以方便页面使用。


日志记录:

lvs的日志文件默认写在/var/log/message中,我们可以直接打开来看。

然而我们所写的执行脚本所生成的日志,一般不是它们执行内部产生的一些细节上的日志记录,而是一些启动信息,状态信息等等,

因此我们将它写到一个其他目录下的一个日志文件。以便于区分。



转载一篇文章:

##################################################################

##################################################################

配置文件详解:(此模块内容为转载http://blog.csdn.net/AlexWoo0501/article/details/50351994)

-----------------------------------------------------------------------------------------------------

具体配置参考官方资料

  • GLOBAL CONFIGURATION

    可以只保留一个 route_id,对于主备方式,该 route_id 可以相同,也可以不同

  • VRRPD CONFIGURATION

    • state,主机配置为 MASTER,备机配置为 BACKUP
    • virtual_router_id,主备必须相同,主备争抢 VIP 时,会使用该参数来标识主备需要占用同一个 VIP
    • priority,优先级,主备机争抢 VIP 时会以该参数作为协商基准,数字越大优先级越高,优先级高的一方会抢到 VIP。一般配置为 MASTER 大于 BACKUP,这样 MASTER 宕掉,VIP 会切换到 BACKUP 上,MASTER 重新启动后,VIP 又会回切到 MASTER。如果 BACKUP 配置得比 MASTER 大,BACKUP 启动后会一直占用 VIP。配置成相同的时候,测试结果为 MASTER 重启后,会切换到 MASTER 上,然后 MASTER 争抢 VIP 失败,又会回到 BACKUP 上,所以不能将 priority 配成相同。
    • nopreempt,表示如果 keepalived 重新启动后,虚拟 IP 不回切
    • advert_int,相当于主备机心跳时长,单位为秒,一般配置为 1,如果配置得过大会导致 VIP 切换时间变长。测试情况:设置为 1 时,发生切换时,ping 包丢失 1-2 个,设置为 5 时,ping 包丢失 5-6 个
    • virtual_ipaddress,注意必须配置为 VIP
  • LVS CONFIGURATION

    • delay_loop:Checker 链路检测时间间隔
    • lb_algo:轮徇策略,一般常用 rr(轮徇),wrr(按权重轮徇),lc(最小连接数),wlc(按权重最小连接数)
    • lb_kind:LVS 模式,DR,NAT 和 TUN,配置成 DR 时,不要使用 lc 或 wlc,因为 DR 使用的是虚拟 IP 的方式,在负载均衡上没有连接状态,会导致所有请求都送到一台 Real Server 上。使用 NAT 时,需要添加 persistence_timeout,会话保持时长,以保证响应能回到正确的请求上。
    • real_server:配置相应 Real Server 的权重和链路检测参数

以上,如果需要添加一台 Real Server,在 virtual_server 配置块下增加一个 real_server 块 
如果需要增加一个 Virtual Server,增加一个 virtual_server 块。

Real Server 配置

Real Server 关闭 ARP 广播响应

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

  
  
  • 1
  • 2
  • 3
  • 4
  • 5

Real Server 恢复 ARP 广播响应

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

  
  
  • 1
  • 2
  • 3
  • 4
  • 5

以上设置用于关闭 loopback 接口和其它所有网络接口的 ARP 广播响应,避免 Real Server 抢占 Virtual Server 的 VIP

-------------------------------------------------------------------------------------------------------------------------------------

##################################################################

##################################################################

完!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值