Linux集群 – LVS NAT 模式部署

基于NAT的LVS的负载均衡的解析

NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业
内部的私有 IP 地址可以访问外网,以及外部用用户可以访问位于公司内部的私有 IP 主机。
VS/NAT 工作模式拓扑结构如(图 2)所示,LVS 负载调度器可以使用两块网卡配置不同的 IP 地址,eth0设置为私钥 IP 与内部网络通过交换设备相互连接,eth1 设备为外网 IP 与外部网络联通。

图片[1]-Linux集群 – LVS NAT 模式部署-魔王のBlog

第一步:用户通过互联网 DNS 服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS 外网 IP 又称 VIP(Virtual IP Address),用户通过访问 VIP,即可连接后端的真实服务器,而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的 VIP 仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。
第二步:用户将请求发送至 124.126.147.168,此时 LVS 将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前 LVS 会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器 IP 地址以及相应的端口。
第三步:真实的服务器将响应数据包返回给 LVS 调度器,调度器在得到响应的数据包后会将源地址和源端口修改为 VIP 及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户。
另外,由于 LVS 调度器有一个连接 Hash 表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该 Hash 表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。

LVS-NAT模式部署

1.实验环境

主机名内网IP外网IP(VIP)
Master192.168.191.12810.0.0.101
Slave01192.168.191.100
Slave02192.168.191.101

实验目的:Slave01-02 配置httpd ,访问LVS的VIP地址可以以轮叫的方式访问到真实机的httpd服务

这里外网IP本应与调度器的IP一致,但经课堂测试发现IP不一样也可以访问,于是乎就不以教案的方式做笔记了

2.给LVS调度器(Master)设置网络

这一步其实在开头就说过了,如果有不明白此处的就想想LVS NAT架构的原理。

其实就是等于调度器有一张对外和对内的网卡,对外负责客户访问并传回数据,对内负责把数据转交给真实机,然后再把数据处理交给对外网卡。

所以这一步我们需要在vmware上设置2个网卡。

图片[2]-Linux集群 – LVS NAT 模式部署-魔王のBlog

然后我们进master机查看网卡信息,应该会看到下面这样

图片[3]-Linux集群 – LVS NAT 模式部署-魔王のBlog

正常会出现两张网卡,这里我们需要对应好内网跟外网网卡,不要搞混了。

这里重点来了,我们开始配置两张网卡的信息,这里ens33 为外网网卡 ens37 为内网网卡

ens33的配置:

TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
UUID=fe35397b-c22f-40e7-b1be-3cdfd2c2b1bb
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
DNS1=114.114.114.114
GATEWAY=10.0.0.2 # 这里的网关设置为外网网卡网关即可
ZONE=trusted
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no

ens37的配置:

这里注意一点,原本新创建后,系统不会自动生成文件,所以我们手动cp一份过来

TYPE=Ethernet
BOOTPROTO=none
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.191.128   #设定好地址,写下来,后面IP会比较多可能会乱掉
DNS1=114.114.114.114
GATEWAY=192.168.191.128  #推荐使用本机IP,跟真实机同步网关
PROXY_METHOD=none
BROWSER_ONLY=no
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
UUID=4a5516a4-dfa4-24af-b1c4-e843e312e2fd # 这里故意留着的,但是这里声明一下,如果是cp过来第一次编辑,一定要把这个删掉!一定!

全部设置完成后,systemctl restart network

然后ping一下各真实机,保证网络畅通

图片[4]-Linux集群 – LVS NAT 模式部署-魔王のBlog

3.配置真实机的网卡信息

因为为不重复造轮子,就只写Slave01的网卡配置。

Slave01和Slave02 都应只有一张网卡,且VMware的网络适配器应该调至仅主机模式,改为内网

图片[5]-Linux集群 – LVS NAT 模式部署-魔王のBlog

当然最好是设置自定义网络里的仅主机模式,防止傻逼VMware给乱丢网卡

设置完成后,进入系统

cd /etc/sysconfig/network-scripts/ifcfg-ens33

更改网卡信息,个别数据以注释的方式给大家指出来了

TYPE=Ethernet
BOOTPROTO=none # 获取类型尽量保持为静态,建议先保持DHCP获取到IP后,记录下来,再更改为静态。
NAME=ens33
UUID=fe35397b-c22f-40e7-b1be-3cdfd2c2b1bb
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.191.101 # 把再DHCP下获取的内网IP填入这里
PREFIX=24
DNS1=114.114.114.114
GATEWAY=192.168.191.128 # 重要!! 网关地址一定要为LVS 调度器的地址,否则无法后续的实验

配置完成后,一定不要忘记了 systemctl restart network

4.真实机配置yum源,安装httpd服务

安装httpd的服务原应该放在网卡配置前,因为更改为内网后,就无法使用网络了。

在没有外网的情况下,我们只有自建iso的yum仓库,进行httpd的安装

# 检查iso是否挂载
mount /dev/sr0 /dvd

# 提示如下就表示已经挂载完成了
# [root@slave2 ~]# mount /dev/sr0 /dvd
# mount: /dev/sr0 写保护,将以只读方式挂载
# mount: /dev/sr0 已经挂载或 /dvd 忙
#        /dev/sr0 已经挂载到 /dvd 上

# 创建本地yum源文件
cd /etc/yum.repos.d/
vim dvd.repo
[centos-7-iso]
name=CentOS-7.6-ISO
baseurl=file:///dvd # 这里可以不用安装我写的来,可以为自己挂载的光盘的路径
gpgcheck=0
enabled=1

yum -y install httpd
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak # 好兄弟们养成改后缀而不是rm的好习惯!
echo "This is $HOSTNAME" >> /var/www/html/index.html # 添加信息以方便后期查看有没有更改
systemctl restart httpd

5.配置Master机上的LVS

这一步其实可以不用配置本地yum,如果设置没错的情况下,按道理是可以访问到外网的。如果有外网yum源是可以。

啥?你没有yum源,那你看看上面的本地yum源或者看看下面这个文章的阿里云源下载吧

配置完成后,开始安装ipvsadmnet_tools

yum -y install ipvsadm
yum -y install net_tools

安装完成后,我们先在lo回环网卡上加上我们的VIP地址。

ifconfig lo:0 10.0.0.101 netmask 255.255.255.255 broadcast 10.0.0.101 

# broadcast 其实可写可不写。都能正常使用
# VIP子网掩码 一定要长于 外网网卡IP的子网掩码

然后开启Linux内核转发

# 开启Linux 内核转发
sysctl -w net.ipv4.ip_forward=1

# 清除原本的规则
ipvsadm -C

# 查看以下是否为空
ipvsadmin -L -n 
## 正常输出为下
## IP Virtual Server version 1.2.1 (size=4096) 
## Prot LocalAddress:Port Scheduler Flags 
##  -> RemoteAddress:Port Forward Weight ActiveConn InActConn 

知道你们可能想问,这个参数都是啥意思。上表格!

参数功能
-A添加一个虚拟服务器
-D删除一个虚拟服务器
-R还原规则
-E编辑一个虚拟服务器
-C清空虚拟服务器
-S保存规则
-a添加一个真实服务器
-e编辑一个真实服务器
-d删除一个真实服务器
-LList列出虚拟服务器列表
-t使用tcp协议
-u使用udp协议
-s指定算法
-r指定真实服务器RIP
-g指定为DR模式
-i指定为TUN模式
-m指定为NAT模式
-w指定RS权重
-c查看链接状态,与-L使用
-n以数字形式显示结果

接着,添加IP虚拟服务器(IP Virtual Server)知道咋记ipvsadm的命令了嘛哈哈哈哈,最后继续添加真实服务器

# 添加IP虚拟服务器
ipvsadmin -A -t 10.0.0.101:80 -s rr(轮叫调度)

# 添加真实服务器
ipvsadm -a -t 10.0.0.101:80 -r 192.168.191.100:80 -m
ipvsadm -a -t 10.0.0.101:80 -r 192.168.191.101:80 -m

# 查看是否添加成功
ipvsadm -L -n

# 输出:
[root@master ~]# ipvsadm -L -n 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 
TCP 10.0.0.101:80 rr 
 -> 192.168.191.100:80 Masq 1 0 0 
 -> 192.168.191.101:80 Masq 1 0 0 

# 即为成功

6.尝试访问

现在我们打开浏览器访问我们的VIP地址试试

图片[6]-Linux集群 – LVS NAT 模式部署-魔王のBlog

哦豁~无法访问,让我们来查查上面的问题

IP设置 Check~ ipvsadm Check~ 内核转发 Check~ 防火墙。。。。

没错,在开启Firewalld的情况下是需要设置转发的,否则会无法进行访问。

所以我们对firewalld防火墙设置一下,或者你可以直接关掉

7.设置防火墙

在企业及生产环境里,还是推荐开启防火墙的。所以我们对防火墙需要进行以下操作

# 对每台Slave开放80/tcp
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

# 在Master机上开放80/tcp
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

# 设置ens37的防火墙(注意!这里是内部网卡的设置)
firewall-cmd --zone=external --change-interface=ens37 --permanent

# 设置ens33的防火墙(注意!这里是外网网卡的设置)
firewall-cmd --zone=trusted --change-interface=ens33 --permanent

# 重载防火墙
firewall-cmd --reload

8.再次访问

图片[7]-Linux集群 – LVS NAT 模式部署-魔王のBlog

Bingo~~~成功,不过想看到第二个真实机的内容需要等待1-5秒,等待缓存过去后就可以啦!

番外

对于本笔记,有一点,聪明的应该发现了一个问题,内核转发和lo回环网卡的临时添加会在网卡服务重启后消失。

所以在这里,我们可以把这两个参数的东西设为永久化

1-1 内核转发永久化

首先各位需要知道,sysctl其实也有控制文件,我们在控制文件里面把咱们要开启的写入即可

vim /etc/sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
//加入下面这行即可
# IP forward
net.ipv4.ip_forward=1

注意!!用配置文件保存后,一定要 sysctl -p 让他即时生效!

1-2 给lo回环网卡添加永久ip

首先,这一步涉及了一个,子网卡的知识,子网卡一般都以xxx:0 xxx:1来命名

但是配置文件基本跟主网卡相同

cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0

# 写入以下内容,不要复制注释
DEVICE=lo:0  # 跟这里DEVICE需要加一个:0
IPADDR=10.0.0.101 # IP地址设为VIP
NETMASK=255.255.255.255 # 掩码设置为255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
ONBOOT=yes
NAME=loopback:0 # 名字最好也加:0

然后重启网卡服务!完成!

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论