LVS-负载均衡集群企业级应用实战

环境准备:

  • 准备 3 台纯净的虚拟机,一台 server 服务器,两台 web 服务器

  • LVS-server 安装lvs管理软件

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

程序包:ipvsadm(LVS管理工具)

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file

配置文件:/etc/sysconfig/ipvsadm-config

#一、LVS/DR 模式
实验说明:

  1. 网络使用NAT模式
  2. DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域
  3. 所有节点网关均指定真实网关

###1. 准备工作(集群中所有主机)关闭 防火墙 和 selinux

[root@lvs-server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.181.141 lvs-server
192.168.181.128 real-server1
192.168.181.130 real-server2

###2、Director 分发器配置
#####2.1 配置VIP

[root@lvs-server ~]# ip addr add dev ens33 192.168.181.140/32     #设置VIP

[root@lvs-server ~]# yum -y install ipvsadm     #RHEL确保LoadBalancer仓库可用

[root@lvs-server ~]# service ipvsadm start     #启动
Redirecting to /bin/systemctl start ipvsadm.service
Job for ipvsadm.service failed because the control process exited with error code. See "systemctl status ipvsadm.service" and "journalctl -xe" for details.

注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
需要手动生成文件

[root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm

[root@lvs-server ~]# service ipvsadm start
Redirecting to /bin/systemctl start ipvsadm.service

#####2.2 定义LVS分发策略

-A          #添加VIP
-t          #用的是tcp协议
-a          #添加的是lo的vip地址
-r          #转发到realserverip
-s          #算法
-L|-l –list           #显示内核虚拟服务器表
--numeric, -n          #以数字形式输出地址和端口号
-g --gatewaying      #指定LVS工作模式为直接路由器模式DR(也是LVS默认的模式)
-S -save           #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
rr               #轮循

如果添加ip错了,删除命令如下:
[root@lvs-server ~]# ip addr del 192.168.181.193 dev ens33
[root@lvs-server ~]# ipvsadm -C     #清除内核虚拟服务器表中的所有记录。

[root@lvs-server ~]# ipvsadm -A -t 192.168.181.140:80 -s rr

[root@lvs-server ~]# ipvsadm -a -t 192.168.181.140:80 -r 192.168.181.128 -g

[root@lvs-server ~]# ipvsadm -a -t 192.168.181.140:80 -r 192.168.181.130 -g

[root@lvs-server ~]# service ipvsadm save     #保存方式一,使用下面的保存方式,版本7已经不支持了
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm     #保存方式二,保存到一个文件中

[root@lvs-server ~]# 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.181.140:80 rr
  -> 192.168.181.128:80           Route   1      0          0         
  -> 192.168.181.130:80           Route   1      0          0

[root@lvs-server ~]# 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.181.140:80                  0        0        0        0        0
  -> 192.168.181.128:80                  0        0        0        0        0
  -> 192.168.181.130:80                  0        0        0        0        0

[root@lvs-server ~]# 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.181.140:80                  0        0        0        0        0
  -> 192.168.181.128:80                  0        0        0        0        0
  -> 192.168.181.130:80                  0        0        0        0        0

###3. 所有RS配置
配置好网站服务器,测试所有RS #为了测试效果,提供不同的页面(以下两台real-server都操作)

#安装 nginx 并且使 real-server1 和 real-server2 访问地址显示的内容不同

[root@real-server1 ~]# ip addr add dev lo 192.168.181.140/32     #在lo接口上绑定VIP

[root@real-server2 ~]# ip addr add dev lo 192.168.181.140/32

[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore     #忽略arp广播
[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce     #匹配精确ip地址回包

[root@real-server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@real-server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@real-server1 ~]# systemctl start nginx     #启动nginx
[root@real-server2 ~]# systemctl start nginx


------------------------------------------------------------------------------
因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的

###4. 测试(修改后端nginx服务器的长连接)

[root@real-server1 ~]# vim /etc/nginx/nginx.conf     #将长连接设置为0
    keepalive_timeout  0;
[root@real-server1 ~]# nginx -s reload     #重新加载nginx

[root@real-server2 ~]# vim /etc/nginx/nginx.conf
    keepalive_timeout  0;
[root@real-server2 ~]# nginx -s reload

访问http://192.168.181.140/测试

image.png

image.png

#二、LVS-NAT 模式
###1. 准备工作

  • 加载内核 centos7+ 无需改动
#查看linux已加载的内核模块
[root@sql-review ~]# lsmod

#加载与卸载内核模块
[root@sql-review ~]# modprobe ip_vs      #动态加载ip_vs 模块,这个命令只是临时生效,需要添加到开机启动项目里面
[root@sql-review ~]# lsmod | grep ip_vs     #过滤模块是否加载成功!
[root@sql-review ~]# modprobe -r ip_vs      #动态卸载ip_vs模块

#查看内核模块信息
[root@sql-review ~]# modinfo ip_vs

#设置开机启动项
[root@sql-review ~]# echo "modprobe ip_vs" >> /etc/rc.local
[root@sql-review ~]# chmod +x /etc/rc.local     切记添加执行权限
添加到开机启动项里面如果不需要这个模块的时候只需要将etc/rc.local里面对应的命令删除掉。但是这样需要重新启动服务器。 可以通过下面的命令立即生效。
[root@sql-review ~]# modprobe -r ip_vs      #动态卸载ip_vs模块
  • 集群中所有主机关闭 防火墙 和 selinux
# 配置解析(可选) 做的话每台都需要做
[root@lvs-server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.181.142 lvs-server
192.168.181.128 real-server1
192.168.181.130 real-server2
  • 两台 real-server 安装 nginx 并且使 real-server1 和 real-server2 访问地址显示的内容不同

###2. RS 配置
real-server 所有服务器的默认网关均指向 Directory 的 DIP

[root@real-server1 ~]# route add default gw 192.168.181.142 dev ens33
[root@real-server2 ~]# route add default gw 192.168.181.142 dev ens33

[root@real-server1 ~]# ip r     #查看是否添加
default via 192.168.181.142 dev ens33 
default via 192.168.181.2 dev ens33 
192.168.181.0/24 dev ens33 proto kernel scope link src 192.168.181.128 

[root@real-server1 ~]# route -n     #查看是否添加
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.181.142 0.0.0.0         UG    0      0        0 ens33
0.0.0.0         192.168.181.2   0.0.0.0         UG    0      0        0 ens33
192.168.181.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33

###3. Director 分发器配置
#####3.1 先给LVS服务器新添加一块网卡网络模式设置为桥接模式。会自动生成一个ip,做为VIP。

image.png

# 可以看到自动生成了网卡 ens37  ip:为192.168.31.63/24
[root@lvs-server ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:48:1a:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.181.142/24 brd 192.168.181.255 scope global dynamic ens33
       valid_lft 1243sec preferred_lft 1243sec
    inet6 fe80::9db3:1c86:27b7:1225/64 scope link 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:48:1a:08 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.63/24 brd 192.168.31.255 scope global dynamic ens37
       valid_lft 43170sec preferred_lft 43170sec
    inet6 fe80::f91e:7d69:848c:c21e/64 scope link 
       valid_lft forever preferred_lft forever

# 如果没有ip根据自己的网段手动添加
[root@lvs-server ~]# ip addr add dev ens37 192.168.31.128/24

# 开启路由转发 添加如下行
[root@lvs-server ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

# 开启转发功能
[root@lvs-server ~]# sysctl -p

#####3.2 定义LVS的分发策略

[root@lvs-server ~]# yum -y install ipvsadm     #RHEL确保LoadBalancer仓库可用

[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm

[root@lvs-server ~]# service ipvsadm start     #启动

[root@lvs-server ~]# ipvsadm -A -t 192.168.31.63:80 -s rr

[root@lvs-server ~]# ipvsadm -a -t 192.168.31.63:80 -r 192.168.181.128 -m

[root@lvs-server ~]# ipvsadm -a -t 192.168.31.63:80 -r 192.168.181.130 -m

[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm     #保存方式

[root@lvs-server ~]# 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.31.63:80 rr
  -> 192.168.181.128:80           Masq    1      0          0         
  -> 192.168.181.130:80           Masq    1      0          0


[root@lvs-server ~]# ipvsadm -L -n --stats			      # 显示统计信息
[root@lvs-server ~]# ipvsadm -L -n --rate				# 看速率

###4. 测试(注意修改后端服务器nginx的长连接)

访问http://192.168.31.63/测试

image.png

image.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值