在熟悉lvs的NAT等模式工作原理后,进行实际配置,主要是网络拓扑结构
以下分为两部分
1.lvs直接联RS
2.lvs和RS中间加路由
–
集群架构:
1.LVS两张网卡,并开启路由转发功能
/etc/sysconfig/network-scripts/ifcfg-eth1
systemctl restart network
eth1:172.20.0.200 桥接 vmnet8
BOOTPROTO =none #在做网卡绑定的时候用到,使用静态IP,自行配置
eth0:192.168.30.200 仅主机vmnet1
2.client一张网卡为桥接模式vmnet8,ip设为 172.20.0.123
ping虚拟网卡
3.web:ip无特殊要求 ,仅主机模式vmnet1
网关指向DIP
分别安装http服务,并配置测试页面
192.168.1.x网段在此架构中充当公网
VMware网络设置的三种方式:
1、Host-only连接方式
让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址位于同一网段。最终结果是新建了一个由所有虚机与宿主主机所构成的局域网,但该局域网与宿主主机本身所处的现有局域网是相互独立的,如果不做额外路由设置,这两个局域网之间不会连通,因此新建的局域网可以认为是一个单独从属于当前宿主主机的私有网络,其成员为当前宿主主机和相关的所有虚机,这也是Host-only命名的由来。
从网络技术上相当于为宿主主机增添了一个虚拟网卡,让宿主主机变成一台双网卡主机(宿主网卡+虚拟网卡)。同时在宿主主机后端加设一个虚拟交换机,让宿主主机和所有虚机构成另一个虚拟的局域网。 由于具备双网卡,宿主主机可同时参与两个局域网(现有的宿主局域网+新建的虚拟局域网),只不过缺省情况下两个局域网不连通。
2、Bridge(桥接)连接方式
让虚机具有与宿主机不同的各自独立IP地址,但与宿主机保持在同一网段,最终结果是所有虚机都加入宿主主机所在的局域网,这与在该局域网中添加入其他宿主主机在效果上没什么区别。
从网络技术上相当于在宿主主机前端加设了一个虚拟交换机,然后宿主主机和所有虚机共享这个交换机;或者干脆理解成在宿主主机上作点增强,使其兼具一个交换机(当然是虚拟的)功能,供该宿主主机和网段内其他虚机使用。
3 、NAT连接方式
虽然从表面现象看,虚机无自己的IP地址,而是共享宿主主机的IP地址,但技术本质上却是基于Host-only方式的(即,虚机还是有自己独立IP地址的,只不过实际中不投入使用),与Host-only方式一样,宿主主机成为双网卡主机,同时参与现有的宿主局域网和新建的虚拟局域网,但由于加设了一个虚拟的NAT服务器,使得虚拟局域网内的虚机在对外访问时,完全“冒用”宿主主机的IP地址,这样从外部网络来看,只能看到宿主主机,完全看不到新建的虚拟局域网。
说明:
(1)Bridged方式
用这种方式,虚拟系统的IP可设置成与本机系统在同一网段,虚拟系统相当于网络内的一台独立的机器,与本机共同插在一个Hub上,网络内其他机器可访问虚拟系统,虚拟系统也可访问网络内其他机器,当然与本机系统的双向访问也不成问题.
(2)NAT方式
这种方式也可以实现本机系统与虚拟系统的双向访问.但网络内其他机器不能访问虚拟系统,虚拟系统可通过本机系统用NAT协议访问网络内其他机器.
NAT方式的IP地址配置方法:**虚拟系统先用DHCP自动获得IP地址,本机系统里的ware services会为虚拟系统分配一个IP,**之后如果想每次启动都用固定IP的话,在虚拟系统里直接设定这个IP即可.
NAT模式下,虚拟机从属于主机,也就是访问外部网络必须通过主机来访问,因此虚拟机的IP只有主机才能识别。
(3)host-only方式
顾名思义这种方式只能进行虚拟机和主机之间的网络通信,既网络内其他机器不能访问虚拟系统,虚拟系统也不能访问其他机器.
eth1这张网卡开启路由转发功能
开启路由转发功能
检查/proc下的文件:
cat /proc/sys/net/ipv4/ip_forward
默认为 0不开启
更改为 1 开启
也可访问sysctl的内核ipv4.ip_forward来判断转发是否开启
执行命令 sysctl net.ipv4.ip_forward net.ipv4.ip_forward
net.ipv4.ip_forward = 0 ##没开启
net.ipv4.ip_forward = 0
启动IP转发
通过sysctl可以开启ipv4的转发功能 (无需重启):
sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward
这种设置只是暂时的,它的效果会随着计算机的重启而失效。
如果想使IP转发永久生效,修改/etc/sysctl.conf ,在这里可以增加一条net.ipv4.ip_forward = 1
ubuntu搭建一个简单的http服务
安装apache2
1.sudo apt-get update
2.sudo apt-get install apache2
安装成功后,再/etc/apache2目录可见其配置文件
apache2安装成功后,可在/var/www/目录下看到一个index.html文件,只需要重启apache2服务,使用同一局域网的设备登录ubuntu的ip地址就能访问到此页面了。
我本机ip 192.168.111.130 NAT模式
我到物理机浏览器输入
在 /var/www/html 目录下创建一个软连接叫file ,/home/wu/test 为一个文件夹,里面有test1 和 test2 两个文件
sudo ln -s /home/wu/test file
再访问file文件即可
可用于一些访问测试
echo YES > /var/www/html/index.html
1.到同一网段的浏览器中查看
2.用curl 命令查看
从客户端172.20.0.123访问vip,访问不了,因为还没有实现调度
客户端访问内网也访问不了,没有配路由
开始在lvs上配置集群调度
增加 lvs ip 以及端口 协议为tcp 调度算法为rr轮询
ipvsadm -A -t 172.20.0.200:800 -s -rr
在之前的配置上增加 后端服务器ip 并设置lvs的工作模式为 NAT
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17 -m
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.27 -m
到客户端上测试,curl访问lvs实现轮询调度访问后端服务器
此时到后端web1上去查看日志,可以看到是client在访问
此处用ping命令去测调度功能是不对的,因为配置的是80端口就转发,ping命令是ICMP协议
已完成NAT的配置
下面改为在lvs和RS之间增加路由,ip更改为下图
会新用到的一些命令
配lvs
更改lvs上的网卡eth0仍为仅主机模式,但要更改仅主机模式为自定义VMnet6,目的是与路由的网卡一致,更改ip,并指定网关,如下图
systemctl restart network
配路由器服务器
eth0:仅主机vmnet1
eth1: 仅主机vmnet6
/etc/sysconfig/network-scripts/ifcfg-eth1
systemctl restart network
给路由这台服务器配网关 ,指向lvs的DIP,并开启转发功能
因为发送回复报文的时候,源ip地址为RIP,目的地址为CIP,要经过路由,路由上没有这个网关
!!!这里配置的网关写错了,指向了自己,实际上应该指向lvs的DIP
查看防火墙
SELINUX=disable
lvs上已配置的lvs调度规则不变
测试
客户端仍然访问lvs的vip
无响应
到后端服务器上查看包是否到达
到LVS上ping后端服务器,证明LVS到RIP这一段没有问题
到后端服务器ping外网,ping windows 172.20.0.100,之前后端服务器是已经配置了网关
ping 与物理机同网段的ip 127.20.0.1 能过去,回不来
到lvs 上抓包 tcpdump -i eth0 -nn //eth0网卡为连接内网的网卡
客户端访问vip
到lvs查看抓包,可以看到已经调度到17这台RS上
后面又到了 27
查看17有没有收到这个请求
27上也抓包看下
查看路由的防火墙
查看lvs上的调度算法,查看上面是否有防火墙规则
查看lvs上的路由
从lvs ping 内网 ,能出去能回来
查看路由器服务器网关 (第三条)
!!!发现错误,路由器的网关应该指向LVS的地址DIP,之前指的是它自己!!
删除之前配错的网关
修改正确之后再次到客户端测试,访问VIP
lvs采用配置的轮询策略依次调度到后端的两台服务器上
17上的抓包
172.20.0.222为客户端ip
27上的抓包
在LVS和后端中间配路由已完成
NAT模式支持端口映射
假设在17更改下监听端口,原来为80,改为8080
到LVS上更改调度规则
修改 -e 17的端口为8080 直接修改不了
先删除 -d
再增加 -a
客户端访问后端服务器
加权轮询算法
加一个权重,更改集群调度算法
-E 修改 -s指定调度算法 wrr加权轮询
再增加权重,先删除,再增加
-m NAT模式
指定权重 -w
删除17 增加权重为3,27不变,没定义默认为1
源地址哈希算法
-E 修改
-s 指定调度算法 sh 源地址哈希
目标地址哈希算法dh
这个里面要注意的是目标地址哈希,基于目标地址,也就是vip
并不关心访问的是哪个url路径
hash(vip)
而不是hash (url) hash (http://vip/test/test1.html)
因为lvs只基于四层,它是一个内核级的,内核级识别不了应用层协议。而url是基于应用层的。
以下实验刚开始思路就不太对,现在此纠正。
在后端服务器17上设置10个页面
27上也一样,只是内容不一样,文件夹名字一样,看lvs把这个资源调度到哪一台服务器上
重启ipvsadm
服务器单独访问下17