IP负载均衡
程序员文章站
2022-05-18 07:53:47
推荐一篇关于LVS的好文: https://www.cnblogs.com/gaoxu387/p/7941381.html 一、原博主要内容: 1、概述 IP负载均衡:四层负载,是基于IP+端口的负载均衡,主要代表是LVS(Linux Virtual Server) LVS工作原理:LVS的IP负载 ......
推荐一篇关于lvs的好文:
https://www.cnblogs.com/gaoxu387/p/7941381.html
一、原博主要内容:
1、概述
ip负载均衡:四层负载,是基于ip+端口的负载均衡,主要代表是lvs(linux virtual server)
lvs工作原理:lvs的ip负载均衡技术是通过ipvs模块实现的,ipvs模块工作在内核空间。
2、lvs的工作模式
a、dr模式
通过 mac 地址改写机制实现转发,集群局限于局域网内,需要设置lo接口的vip不能响应本地网络内的arp请求。
b、tun模式
通过再封装一层ip报文转发,集群可在公网上。
c、nat模式
通过修改ip报文转发,集群局限在局域网内。
3、lvs的调度算法
- 轮叫调度(round-robin scheduling)
- 加权轮叫调度(weighted round-robin scheduling)
- 最小连接调度(least-connection scheduling)
- 加权最小连接调度(weighted least-connection scheduling)
- 基于局部性的最少链接(locality-based least connections scheduling)
- 带复制的基于局部性最少链接(locality-based least connections with replication scheduling)
- 目标地址散列调度(destination hashing scheduling)
- 源地址散列调度(source hashing scheduling)
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
二、dr模式的配置
这里介绍一下dr模式的配置。
1、负载均衡服务器:一般对外的负载均衡器须具有灾备能力,在负载均衡服务器上安装keepalived,并完成keepalived的配置,配置如下:
! 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.200.1 smtp_connect_timeout 30 router_id lvs_devel } vrrp_instance vi_epg { state master //主用设置为master,备用设置为backup interface bond0 virtual_router_id 64 priority 100 //主用优先级要比备用优先级高 advert_int 1 authentication { auth_type pass auth_pass 1111 } virtual_ipaddress { 111.11.11.10 //对外vip } } virtual_server 111.11.11.10 6600 { delay_loop 6 lb_algo rr //调度算法rr,也可以设置其他算法 lb_kind dr //负载均衡模式为dr persistence_timeout 20 protocol tcp real_server 111.11.11.21 6600 { weight 1 tcp_check { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 111.11.11.22 6600 { weight 1 tcp_check { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 111.11.11.23 6600 { weight 1 tcp_check { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
2、rs节点服务器:需要设置lo接口的vip,且设置其不能响应本地网络内的arp请求,可执行脚本:
1 #!/bin/bash 2 # description: config realserver lo and apply noarp 3 vip=111.11.11.10 4 5 . /etc/rc.d/init.d/functions 6 7 case "$1" in 8 start) 9 echo "1" >/proc/sys/net/ipv4/conf/bond0/arp_ignore 10 echo "2" >/proc/sys/net/ipv4/conf/bond0/arp_announce 11 echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore 12 echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 13 sysctl -p >/dev/null 2>&1 14 ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip 15 /sbin/route add -host $vip dev lo:0 16 echo "realserver start ok" 17 ;; 18 stop) 19 ifconfig lo:0 down 20 route del $vip >/dev/null 2>&1 21 echo "0" >/proc/sys/net/ipv4/conf/bond0/arp_ignore 22 echo "0" >/proc/sys/net/ipv4/conf/bond0/arp_announce 23 echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore 24 echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce 25 echo "realserver stoped" 26 ;; 27 status) 28 # status of lvs-dr real server. 29 islothere=`/sbin/ifconfig lo:0 | grep $vip` 30 isrothere=`netstat -rn | grep "lo:0" | grep $vip` 31 if [ ! "$islothere" -o ! "isrothere" ];then 32 # either the route or the lo:0 device 33 # not found. 34 echo "lvs-dr real server stopped." 35 else 36 echo "lvs-dr running." 37 fi 38 ;; 39 *) 40 # invalid entry. 41 echo "$0: usage: $0 {start|status|stop}" 42 exit 1 43 ;; 44 esac 45 exit 0
注意:此脚本最好设置成开机执行,如脚本名称为realserver.sh,放置在/usr/bin/路径下,赋可执行权限,在/etc/rc.local的末尾添加一行:/usr/bin/realserver.sh start
下一篇: php开启多进程的方法