Keepalived+LVS负载均衡实现

目录

链接博文

LVS-DR配置

实验环境

Hostname IP 说明
lb01 10.0.0.5 Nginx主负载均衡器
lb02 10.0.0.6 Nginx辅负载均衡器
web01 10.0.0.8 web01服务器
web02 10.0.0.7 web02服务器

1 实验配置

# 在上一篇博文的基础之上进行下面操作
# 安装keepalived软件
yum install keepalived -y
rpm -qa keepalived 

# 编辑keepalived备配置文件
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24 dev eth0 label eth0:1
    }
}  

# 相当于ipvsadm -A -t 10.0.0.3:80 -s wrr
virtual_server 10.0.0.3 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    # 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
    real_server 10.0.0.7 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
    }
    }

    # 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
    real_server 10.0.0.8 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
    }
    }

}

# 删除ipvsadm的配置表
ipvsadm -C

# 删除手动配置的虚拟VIP
ip addr del 10.0.0.3/24 dev eth0

# 启动keepalived服务,可自动健康检查节点状态
/etc/init.d/keepalived start

# 主节点keepalived配置,只需要修改router_id、state为MASTER、优先级设置高一点即可
[root@lb01 keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24 dev eth0 label eth0:1
    }
}

# 相当于ipvsadm -A -t 10.0.0.3:80 -s wrr
virtual_server 10.0.0.3 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    # 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
    real_server 10.0.0.7 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    # 相当于ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
    real_server 10.0.0.8 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123

测试 
这里写图片描述

2 负载不均衡的原因

当我们第一次访问VIP的时候,负载均衡器会随机到后端的RS服务器上,那么犹豫我们是在电脑上虚拟了整个过程,电脑上会有arp缓存,即使再次访问VIP的时候不会英国LB,会直接访问后端RS。所以由于ARP缓存的存在,所以在一定的时间内不会出现负载均衡。 
我么可以在每次访问后,清空arp缓存(arp -d)。就会出现1:1的负载均衡(仅适合单机测试)

Keepalived进行节点健康检查

# 随便停掉一台web节点,keepalived会自动检查节点状态。
[root@lb01 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 rr persistent 50
  -> 10.0.0.7:80                  Route   1      0          0
  -> 10.0.0.8:80                  Route   1      0          2
[root@lb01 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 rr persistent 50
  -> 10.0.0.7:80                  Route   1      0          0
  -> 10.0.0.8:80                  Route   1      0          2
[root@lb01 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 rr persistent 50
  -> 10.0.0.8:80                  Route   1      0          2         

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3 LVS集群下代码发布方案

LVS集群下的代码发布方案详解(代码一般会放在svn/git)

  • 开发人员本地测试+>办公室内部测试(开发个人,测试人员)–(配置管理员)–>IDC机房测试(测试人员)–>正式服务器。
  • 上传的代码可大致分为两类代码,一种是不用重启服务就可以实现的代码(如php、html等),还有一种就是必须要重启服务的代码(java、tomcat等)。

如php代码上传时不需要重启服务的,但为了不影响用户体验,所以有以下两种比较好的上传代码方案:

  • 1、需要在统一文件系统下,即在同一目录层级,创建一个别的目录,如正常的访问代码是在/application/nginx/html/目录下,那么我们会创建/application/nginx/tmp目录,然后用mv命令把代码移动到html目录下,这样延迟几乎可以忽略,用户体验还是很好的。

  • 2、或者是在同一层级目录下创建其它目录,然后创建软链接把html目录链接至创建的目录 
    /application/nginx/html/ # 用户访问代码位置 
    /application/nginx/html123 # 手动创建的目录 
    ln -s /application/nginx/html/ /application/nginx/html123/

若是JAVA代码或者是tomcat resin之类的代码,需要服务重启才能生效。

  • 这样的代码上传需要分组上传,比如有6台服务器提供web服务,这样先把其中三台在LVS中踢掉,即下线,然后把代码上传至其中,上传完之后需要把这三台服务器挂到同环境下的内网测试机上,进行内部测试,无误后把这三台服务器正式上线,然后再把另外三台服务器下线,进行同样操作。

转载至https://blog.csdn.net/mr_rsq/article/details/80466389


猜你喜欢

转载自blog.csdn.net/vic_qxz/article/details/80538176