centos配置LVS

LVS有三种工作模式:NAT, TUN, DR.  DR是三种工作模式中性能最高的,TUN次之。

本文记录LVS/TUN和LVS/DR工作模式的配置过程。

环境:

  • 三台CentOS 7 x64 虚拟机: CentOS Linux release 7.4.1708 (Core)
  • IP 地址分别为192.168.1.11/24, 192.168.1.12/24, 192.168.1.13/24
  • 虚拟IP为192.168.1.99, 网络结构为:

1. LVS/TUN – 隧道模式:

Director(192.168.1.11)上的配置:

为tunl0设备配置VIP:

# ifconfig tunl0 192.168.1.99 broadcast 192.168.1.99 netmask 255.255.255.255 up

安装ipvsadm工具:

# yum install ipvsadm

用ipvsadm配置LVS转发器:

  • 清除配置表
  • 添加一个访问地址为192.168.1.99:80的TCP服务,并设置调度算法为轮叫(rr)
  • 为服务添加两个Real Server 192.168.1.12 和 192.168.1.13, -i参数标识工作模式为TUN模式
  • 最后清除iptables,重新生成
# ipvsadm -C
# ipvsadm -A -t 192.168.1.99:80 -s rr
# ipvsadm -a -t 192.168.1.99:80 -r 192.168.1.12 -i
# ipvsadm -a -t 192.168.1.99:80 -r 192.168.1.13 -i
# iptables -F

配置完成后使用ipvsadm -Ln查看:

# 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.1.99:80 rr
  -> 192.168.1.12:80              Route   1      0          0
  -> 192.168.1.13:80              Route   1      0          0

Real Server(192.168.1.12,192.168.1.13)上的配置:

  • 配置VIP
  • 配置Real Server不响应VIP的ARP请求
  • 关闭数据包源地址检验
  • 最后清除iptables,重新生成
# ifconfig tunl0 192.168.1.99 broadcast 192.168.1.99 netmask 255.255.255.255 up
# echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
# echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
# echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
# 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/all/rp_filter
# iptables -F
  • 在Real Server上启动一个简单的web服务。两种方式:

1. 在192.168.1.12和192.168.1.13上直接通过rpm包安装nginx, 在192.168.1.12和192.168.1.13上配置两个web server显示两个可识别的web页面:

# rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.0-1.el7_4.ngx.x86_64.rpm

2. 通过docker使用默认NAT网络启动一个nginx实例,在192.168.1.12和192.168.1.13上配置两个nginx实例显示两个可识别的web页面。通过docker启动web服务时要在Real Server上开启ip_forward, 因为docker run默认使用的NAT网络依赖ip_forward:

# docker run --name nginx -d -p 80:80 -v /etc/nginx/:/etc/nginx/ -v /var/www/html/:/usr/share/nginx/html/ -v /var/log/nginx/:/var/log/nginx/ nginx:1.13.12
# echo "1" > /proc/sys/net/ipv4/ip_forward

最后执行iptables -F确保所有通信不被防火墙阻挡。

LVS/TUN模式配置完成,通过在另一个linux 虚拟机中通过curl访问192.168.1.99, 可以看到http请求会以轮询的方式被分别转发到的192.168.1.12和192.168.1.13:

在浏览器中访问时由于浏览器缓存可能没那么明显。

2. LVS/DR 模式:

Director(192.168.1.11)上的配置:

# ifconfig enp0s3:0 192.168.1.99 netmask 255.255.255.255 up
# ipvsadm -C
# ipvsadm -A -t 192.168.1.99:80 -s rr
# ipvsadm -a -t 192.168.1.99:80 -r 192.168.1.12 -g
# ipvsadm -a -t 192.168.1.99:80 -r 192.168.1.13 -g
# iptables -F

DR模式不使用隧道设备tunl0, 而是把虚拟IP配置本地网卡别名enp0s3:0上,添加Real Server时指定模式为-g。也有人说把虚拟IP配置在lookback别名上,实测配置在loopback好像对real server的轮询切换并不那么及时。

Real Server(192.168.1.12,192.168.1.13)上的配置:

# ifconfig enp0s3:0 192.168.1.99 netmask 255.255.255.255 up
# echo "1" > /proc/sys/net/ipv4/conf/enp0s3/arp_ignore
# echo "2" > /proc/sys/net/ipv4/conf/enp0s3/arp_announce
# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
# iptables -F

如需网络内核参数永久生效请修改/etc/sysctl.conf (最好这样做):

# cat <<EOF >> /etc/sysctl.conf
net.ipv4.conf.enp0s3.arp_ignore = 1
net.ipv4.conf.enp0s3.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
# sysctl -p

Real Server中同样要配置虚拟IP,并设置不响应对192.168.1.99的arp查询,Web Server的配置与TUN模式相同。

配置完成。

Tips:

如果在Director上也有web服务,还可以把Director(192.168.1.11)也作为Real Server使用。


参考信息:

关于arp_ignore, arp_announce, rp_filter参数的作用,请参见:

上述配置在firewalld为运行状态并且SELinux为Enforcing状态时测试通过。

所有的网络参数配置均为临时立即生效,若要长久生效,请修改/etc/sysctl.conf文件,并执行sysctl -p

# vi /etc/sysctl.conf
# sysctl -p

ipvsadm配置的内容在系统重启后也会丢失,可能通过ipvsadm -Sn保存到文件,然后可通过ipvsadm –restore加载。

注意ipvsadm的-S(–save)一起要跟上n参数,否则会保存错误的IP地址。

[[email protected] ~]# 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.1.99:80 rr
 -> 192.168.1.12:80 Route 1 0 7
 -> 192.168.1.13:80 Route 1 0 4
[[email protected] ~]# ipvsadm -Sn > ipvsadm.conf
[[email protected] ~]# cat ipvsadm.conf
-A -t 192.168.1.99:80 -s rr
-a -t 192.168.1.99:80 -r 192.168.1.12:80 -g -w 1
-a -t 192.168.1.99:80 -r 192.168.1.13:80 -g -w 1
[[email protected] ~]# ipvsadm -C
[[email protected] ~]# cat ipvsadm.conf | ipvsadm --restore
[[email protected] ~]# 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.1.99:80 rr
 -> 192.168.1.12:80 Route 1 0 4
 -> 192.168.1.13:80 Route 1 0 4

如果遇到转发故障可通过tcpdump进行诊断。如:监听接口enp0s3,抓取host为192.168.1.99并且目的端口为80,或host为192.168.1.12并且源端口为80的数据包:

# tcpdump -i enp0s3 ‘((dst port 80) and (host 192.168.1.99)) or ((src port 80) and (host 192.168.1.12))‘

关于LVS的调度算法请参见:LVS集群的负载调度

原文地址:https://www.cnblogs.com/duanlinxiao/p/10957435.html

时间: 2024-10-03 21:34:49

centos配置LVS的相关文章

CentOS下LVS DR模式负载均衡配置详解

一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Master Director) 对外提供服务的VIP为192.168.1.180 192.168.1.114 LVS从调度器(Backup Director) 平时可以作为RS(真实服务器使用) 192.168.1.104 RS1(真实服务器)   192.168.1.103 RS2(真实服务器)  

Centos安装LVS+Keepalived

Centos安装LVS+Keepalived LVS Keepalived 主机IP配置如下 #LVS-DR-Master 172.16.1.191 #LVS-DR-Backup 172.16.1.192 #LVS-DR-VIP 172.16.1.196 #Web_1-RealServer 172.16.1.193 #Web_2-RealServer 172.16.1.194 在DS1 DS2上执行以下命令 yum -y install ipvsadm wget http://www.keepa

Ubuntu下配置LVS【h】

以后服务器只用CentOS和Ubuntu.下午用redhat装个lvs装了一下午都没搞好,TNND的.果断用Ubuntu,不到两个小时就搞定了. 原文参见: http://kamengwang.blog.163.com/blog/static/90945020201192742214338/ 我用的虚拟机(虚拟了两张网卡,eth0做外网,eth1做局域网,一下都针对eth1做设置)1.LVSServer ip:192.168.196.62.WebServer Apache ip:192.168.

阿里云CentOS配置全过程

阿里云CentOS配置全过程 拿到服务器的ip.初始密码以后.我们先要用远程连接工具putty连接服务器主机. 启动putty.exe程序,进入putty主界面,在Host Name 栏中输入你的服务器ip地址,Saved Sessions 填入你的主机名称(可自定义,用于区别你的服务器).点击Save保存配置.选中你的服务器名点击open开始连接服务器. 第一次连接,会出现对话框,点击是 出现登录界面,输入用户名,默认为超级用户root,接着输入密码,要注意的是密码不会显示在屏幕上.输入密码时

CentOS 配置防火墙操作实例(启、停、开、闭端口)

CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service   iptables status<回车>   停止防火墙: [root@localhost ~]# service   iptables stop <回车>   启动防火墙: [root@localhost ~]# service   iptables start <回车>   重启防火墙: [root@loc

CentOS 配置httpd使局域网可以正常访问

[转载请注明出处: 钱国正的专栏http://blog.csdn.net/qianguozheng/article/details/37611859] 问题: 在CentOS上安装apache,配置好服务器本机可以访问,但是外部局域网IP不能访问 解决方法: 1.修改配置文件/etc/httpd/conf/httpd.conf <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow

centos配置不用本地的smtp

当使用mail命令发邮件时,默认的是使用本地的smtp服务,centos5的时候是sendmail,centos6的时候是postfix.但每台机器都维护一个smtp服务,成本开销很大. 通过修改/etc/mail.rc可以指定远程的smtpserver cat >> /etc/mail.rc << EOF # For set smtpserver set smtp=192.168.122.100 #下面三行不一定需要打开,根据实际情况而定 #set smtp-auth=login

CentOS配置网易源

centos配置网易源 参考: http://mirrors.163.com/.help/centos.html 1.下载CentOS6-Base-163.repo:(这里以centos6为例.请换成自己对应版本) http://mirrors.163.com/.help/CentOS6-Base-163.repo 放入:/etc/yum.repos.d/目录: cp CentOS6-Base-163.repo /etc/yum.repos.d/ 2.备份/etc/yum.repos.d/Cen

CentOS6.4 配置LVS(DR模式)

DR模式中LVS主机与实际服务器都有一块网卡连在同一物理网段上. IP分配 VIP:10.10.3.170 RIP1:10.10.3.140 RIP2:10.10.3.141 1.安装所需的依赖包 yum install -y wget make kernel-devel gcc gcc-c++ libnl* libpopt* popt-static 2.创建一个软链接,防止后面编译安装ipvsadm时找不到系统内核 ln -s /usr/src/kernels/2.6.32-358.18.1.