redis配置文件详解和LVS的NAT,DR,TUN详细部署
redis配置文件详解和LVS的NAT,DR,TUN详细部署1、redis服务配置文件详解2、RDB、AOF详解及优缺点总结3、Redis Cluster扩、缩容4、LVS集群和调试算法总结5、LVS的NAT、DR,TUN模型实现
redis配置文件详解和LVS的NAT,DR,TUN详细部署
1、redis服务配置文件详解
-
redis编译安装方法: redis编译安装教程
-
yum安装方法:
yum install -y redis -
主要配置文件:
redis.conf redis主要配置文件
文件参数:
bind 127.0.0.1 redis服务监听的IP,默认只能在本机运行,可改为固定某个ip访问,多个IP用空格隔开
port 6379 redis的默认工作端口
tcp-backlog 511 redis三次握手后,等待全连接队列长度
tcp-keepalive 300 tcp连接会话保持时间
timeout 0 客户端和服务器连接的超时时间
# requirepass foobared 是否设置密码,默认没密码,需要设密码把#删除,后面的foobared就是密码
daemonize no 是否在前台运行,默认后台运行
pidfile /var/run/redis_6379.pid PID文件路径
logfile /var/log/redis/redis.log redis日志的存放路径
databases 16 redis数据库总数个数,默认是0-16个
save 900 1 在900秒内有1个key内容发生更改,就执行快照机制
save 300 10 在300秒内有10个key内容发生更改,就执行快照机制
save 60 10000 在60秒内如果有10000个key以上的变化,就自动快照备份
stop-writes-on-bgsave-error yes 空间满的时候是否禁止写入redis数据,最好设为no
rdbcompression yes 存放为RDB文件时,是否压缩
rdbchecksum yes 是否校验RDB文件数据
dbfilename dump.rdb RDB快照的文件名
dir /var/lib/redis RDB快照存放路径
repl-timeout 60 redis复制连接的超时时间
cluster-enabled yes 是否开启集群模式,默认为单机
replica-read-only yes 是否设置从库只读
replica-priority 100 集群优先级设置
auto-aof-rewrite-percentage 100 设置是否自动重写AOF log文件,单位为百分比
slowlog-log-slower-than 10000 慢查询的查询时间,默认为10ms
slowlog-max-len 128 慢查询保存队列总数
maxclients 10000 redis最大客户端连接数
2、RDB、AOF详解及优缺点总结
redis的RDB模式(默认模式,快照模式)
- 工作原理:
- 工作模式:
- save: 同步,会阻塞其它命令,不推荐使用
- bgsave: 异步后台执行,不影响其它命令的执行
- 自动: 自动进行快照
- 优点:
- 基于时间进行快照,保留时间点
- 恢复速度快
- 快照时,父进程不用做I/O操作,子进程处理I/O工作,性能较好
- 缺点:
-
不能实时保存数据,恢复时只能基于上次时间点进行的快照
-
快照时父进程不能进行I/O操作,如数据量太大可能会影响用户体验
- 配置参数:
redis.conf 配置文件
文件参数
dbfilename dump.rdb 数据库文件名
dir /var/lib/redis 数据库保存路径
save 900 1 900秒有一个key发送变化就进行快照
save 300 10 300秒有一个key发送变化就进行快照
save 60 10000 60秒有10000key发生变化就进行快照
stop-writes-on-bgsave-error no 空间满的时候是否禁止写入redis数据,最好设为no
rdbcompression yes 是否压缩rdb文件
rdbchecksum yes 是否校验rdb文件
手动后台生成RDB文件方式:
默认是根据上面的save规则进行快照
redis-cli -h 127.0.0.1 -a '123456' bgsave 创建后台备份,-a指定密码,没有设则不用指定
ll /var/lib/redis/ 查看生成的快照文件
redis的AOF模式(实时备份模式,默认不开启)
- 工作原理:
- 工作模式:
- 手动:命令行执行
- 自动:默认模式,根据规则自动触发生成
- 优点:
- 实时保存数据,避免数据丢失
- 有自动保护机制,不会因为断电而破坏数据
- 数据以redis命令行方式保存,方便数据重建
- 重写机制,减少磁盘空间使用率。从redis的2.4版本后才有
- 缺点:
- 记录全部操作,部分重写也会记录,加大磁盘空间使用率
- 恢复速度比ROF文件慢
- 实时写入,加大磁盘I/O使用率
- 配置参数
redis.conf 配置文件
文件参数
appendonly yes 是否开启AOF模式
appendfilename "appendonly.aof" AOF文件名字
appendfsync everysec 是否设置自动写入数据,不是则为no
dir /var/lib/redis AOF文件存放路径
no-appendfsync-on-rewrite no 是否立刻将数据写入磁盘
auto-aof-rewrite-percentage 100 设置到多少条数据后自动重写AOF文件,0为不重写
auto-aof-rewrite-min-size 64mb 设置AOF文件保存最大值
aof-load-truncated yes 是否加载断电或其他中断后的异常数据
手动后台生成AOF文件:
redis-cli -h 127.0.0.1 -a ‘123456’ bgrewriteaof
3、Redis Cluster扩、缩容
搭建集群链接:redis集群搭建
原本搭建好的集群
系统版本 | centos 7.8 |
---|---|
redis版本 | redis-4.0.3 |
redis集群创建工具 | ruby-2.5.5 |
集群1 | 192.168.116.145:6379, 192.168.116.145:6380 |
集群2 | 192.168.116.146:6379, 192.168.116.146:6380 |
集群3 | 192.168.116.147:6379, 192.168.116.147:6380 |
主:192.168.116.145:6379
备:192.168.116.145:6380
主:192.168.116.146:6379
备:192.168.116.146:6380
主:192.168.116.147:6379
备:192.168.116.147:6380
扩容方式:
用链接安装新的redis: redis集群搭建
新的节点:192.168.116.130:6379
vi /usr/local/redis/6379/etc/redis-6379.conf 编辑配置文件
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-require-full-coverage no
启动服务
systemctl enable redis6379
systemctl start redis6379
集群的主节点安装了ruby,所以需要在ruby的服务器上加入
redis-trib.rb check 192.168.116.145:6379 查看原本集群状态
redis-trib.rb add-node 192.168.116.130:6379 192.168.116.145:6379 添加节点
查看添加后的状态
redis-trib.rb check 192.168.116.145:6379
如果槽位分完了,还需要重新分配槽位
槽位=16384/节点数量4=4096 每个节点的槽位平均4096个
要分配槽位出来的节点
7d608592205c95e9708bb9bf11e042702d4ae9c4 192.168.116.145:6379
新增节点的ID和IP
4199565c6293786e4ccc6e95609a1a1c7439e698 192.168.116.130:6379
redis-trib.rb reshard 192.168.116.145:6379 指定需要分配出来的节点
出现提示:
How many slots do you want to move (from 1 to 16384)? 4096 指定需要分配的槽位数量
输入接收的节点ID
What is the receiving node ID? 4199565c6293786e4ccc6e95609a1a1c7439e698
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all 是否从其他主节点上平均划分槽位到新的槽位
redis-trib.rb check 192.168.116.145:6379 确认槽位分配成功
缩容方式,缩容之前最好备份,有风险
缩容节点:192.168.116.130:6379
集群主节点:192.168.116.145:6379
- 把缩容节点的槽位分给其他节点
redis-trib.rb check 192.168.116.145:6379 查看缩容节点的槽位,要重新分给其他节点
slots:0-1364,5461-6826,10923-12287 (4096 slots) master
如果想要顺序排好,可以自行计算后加回节点,缩容节点槽位
192.168.116.145:6379 0-1364,5461-6826,10923-12287
缩容节点有:4096个槽位,1365,1366,1365这样才能平均划分
重新分配:
192.168.116.145:6379 0-5460
ID:7d608592205c95e9708bb9bf11e042702d4ae9c4 192.168.116.145:6379
192.168.116.146:6379 5461-10922
ID:d3ba344d9c4212795d4c6d6d69bb46c4551f8c4c 192.168.116.146:6379
192.168.116.147:6379 10923-16383
ID:c52fa4b21c2fa8875487dbd4436fd9ce9606f435 192.168.116.147:6379
将192.168.116.145:6379 0-1364分给192.168.116.145:6379
redis-trib.rb reshard 192.168.116.130:6379 指定缩容节点进行分配
How many slots do you want to move (from 1 to 16384)? 1365 输入槽位数量
指定接收节点ID
What is the receiving node ID?
7d608592205c95e9708bb9bf11e042702d4ae9c4
输入缩容节点ID
Source node #1 4199565c6293786e4ccc6e95609a1a1c7439e698
done 没有其他缩容节点就写done,多个缩容节点就写多个ID
yes 开始重新分配
redis-trib.rb check 192.168.116.145:6379 确认重新分配完成
192.168.116.145:6379 0-5460
以此类推
将192.168.116.145:6379 5461-6827分给192.168.116.146:6379 需要设置1366个槽位
将192.168.116.145:6379 10923-12287分给192.168.116.146:6379 需要设置1365个槽位
redis-trib.rb check 192.168.116.145:6379 最终结果
- 开始缩容节点,也就是把节点从集群删除
前面指定集群的任一个节点ID和端口,后面指定缩容节点的ID
redis-trib.rb del-node 192.168.116.145:6379 4199565c6293786e4ccc6e95609a1a1c7439e698
redis-trib.rb check 192.168.116.145:6379 确认缩容成功
4、LVS集群和调试算法总结
LVS集群的术语:
VS:调度服务器,一般指部署ipvsadm软件所在的服务器
RS:代理服务器,一般指部署nginx,haproxy软件所在的服务器
CIP:客户端IP,一般指普通用户访问网站或APP所使用的IP
VIP:调度服务器使用的对外IP,就是客户端访问网站时访问的IP
DIP:调度服务器使用对内的IP,也就是调度器跟代理服务器通信所使用的IP
RIP:真实IP,也就是实际网站或APP后台服务器的真实IP地址
LVS集群访问流程:
LVS集群的工作模式:
官网:LVS官网
一 、 LVS-NAT:修改请求报文的目标IP
原理:
官网介绍:LVS-NAT
LVS-NAT实现过程:
请求过程:CIP-VIP-DIP-RIP
返回过程:RIP-DIP-VIP-CIP
- 客户端(CIP)向调度器第一个网卡(VIP)请求数据
- 调度器第一个网卡(VIP)通过内核修改报文,将VIP变成调度器第2个网卡(DIP)
- 调度器使用DIP跟后台服务器(RIP)通信
- 调度器跟后台服务器通信后,通过内核把DIP再改回VIP,返回客户端。
LVS-NAT特性:
- 调度器的DIP和后台服务器(RIP)必须要在同一个网段中,并且使用私网地址
- 调度器既要把VIP修改为RIP,又要把RIP修改为VIP,所以调度器负载很大
- 支持端口映射,调度器可以修改客户端请求报文中的目标端口。比如请求的是80,可以修改为其他端口
- 调度器必须是linux系统,后台服务器可以是linux或者Windows之类的系统
- web服务器的网关必须指向调度器
LVS-NAT抓包测试:
根据下面LVS-NAT部署,然后用科来11抓包
客户端 | 192.168.116.130 |
---|---|
调度器网卡1 | 192.168.116.145 |
调度器网卡2 | 10.0.0.1,MAC地址:00:0c:29:16:a1:c3 |
web 2 | 10.0.0.102,MAC地址:00-0C-29-ED-B6-0E |
集群关闭web1的调用
ipvsadm -d -t 192.168.116.145:80 -r 10.0.0.101 删除web1的调用
客户端访问web2
curl 192.168.116.145
客户端抓包
yum install -y tcpdump 安装抓包工具
tcpdump -i ens33 host 192.168.116.145 抓取本机和调度器的通信
可以看到客户端都只是和调度器的IP通信而已
Windows2016开始抓包,抓取到调度器和web2的通信
查看到192.168.116.130到192.168.116.145的TCP会话信息
- 首先TCP的三次握手,原理可以看TCP三次握手和四次挥手
点击第一个数据包,调度器和web2进行TCP的第一次挥手
显示的是192.168.116.130的41828端口访问192.168.116.145的80端口
也就是客户端的41828端口访问调度器的80端口
实际就是调度器修改了目标IP,原为到192.168.116.145的数据转发给了10.0.0.102
所以显示的是
源IP:192.168.116.130
目标IP:10.0.0.102
查看MAC地址,可以看到实际是调度器和web之间的通信
源MAC地址: 00:0c:29:16:a1:c3 调度器的MAC
目标MAC地址:00-0C-29-ED-B6-0E web2的MAC
第2个数据包就是web2回复调度器的第二次握手
第3个数据就是调度器回复web2的第三次握手
- 然后是HTTP会话信息
IP和端口没有发生改变:192.168.116.130的41828端口访问192.168.116.145的80端口
使用HTTP协议
- 最后TCP四次挥手信息
LVS-DR:修改MAC地址进行通信
原理:
官网介绍:LVS-DR
LVS-DR实现过程:
请求过程:CIP-路由网卡1-路由网卡2-调度器VIP-RIP
接收过程:RIP-VIP-路由网卡2-路由网卡1-CIP
1. 客户端(CIP)向路由服务器发起到VIP的请求
2. 路由器第一个网卡接收客户端请求,内核映射请求给路由器的第二个网卡
3. 路由器第二个网卡转发数据给调度器的虚拟(VIP)网卡
4. 调度器请求的数据包中的MAC地址,把数据转发给web1虚拟(VIP)网卡
5. web1虚拟(VIP)网卡收到后,把数据直接返回给路由器的第二个网卡,不再经过调度器
6. 路由器的第二个网卡收到数据后,内核映射回给路由器第一个网卡
7. 路由器第一个网卡回复数据给客户端
LVS-DR特性:
- ipvsadm调度器和其他web服务器都要添加同一个对外(VIP)地址
- web服务器都要修改arp_ignore和arp_announce参数
- ipvsadm调度服务器DIP和web服务器RIP必须是要在同一个直连网络,web服务器的网关不能是调度器的IP,需要指定为路由服务服务器的网关
- 路由器服务器可以是最少是双网络,可以是多网络,只要和ipvsadm调度器服务器和web服务器有路由即可。
- 不支持端口映射,端口不能修改
- 调度器只需要修改请求报文,性能相对较好
arp_ignore和arp_announce解析:
因为配置同一个VIP,就会有IP冲突问题,所以web服务器就要修改内核参数。
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
修改方式:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
修改方式:
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
LVS-DR抓包分析:
根据下面的LVS-DR模型部署后
客户端 | IP:192.168.116.148,MAC:00:0c:29:df:55:8c |
---|---|
路由服务器的网卡1-ens33 | IP:192.168.116.145,MAC:00:0c:29:16:a1:b9 |
路由服务器的网卡2-ens34 | IP:10.0.0.1,MAC:00:0c:29:16:a1:c3 |
调度服务器的网卡 | IP:10.0.0.254,MAC:00:0c:29:2e:4a:3b |
web1服务器的网卡 | IP:10.0.0.2,MAC:00:0c:29:ef:c9:b1 |
客户端分析:
curl 10.0.0.100 发起请求
00:0c:29:df:55:8c 为请求的MAC地址
路由器测试
ens33网卡抓包分析
在路由器上抓取ens33的网卡,查看来自客户端(192.168.116.148 )的请求
ip a
网卡ens33的MAC:00:0c:29:16:a1:b9 和客户端同网段,可以接收客户端请求
网卡ens34的MAC:00:0c:29:16:a1:c3 和web同网段,可以接收web返回的数据
tcpdump -i ens33 -nn -e host 10.0.0.100 抓取客户端到10.0.0.100的请求
通过第一个数据包这个可看到实际是客户端的MAC访问到路由器的ens33的MAC,端口和IP不变
00:0c:29:df:55:8c > 00:0c:29:16:a1:b9, ethertype IPv4 (0x0800), length 74: 192.168.116.148.53164 > 10.0.0.100.80
通过第二个数据包这个可看到路由器的ens33网卡的MAC回复客户端的MAC,端口和IP不变
00:0c:29:16:a1:b9 > 00:0c:29:df:55:8c, ethertype IPv4 (0x0800), length 74: 10.0.0.100.80 > 192.168.116.148.53164
所以可以得到客户端一直都是和路由器的ens33网卡进行通信
调度器查看
ip a
调度器的ens33的MAC地址:00:0c:29:2e:4a:3b
抓取源为路由器ens34网卡到调度器的数据
tcpdump -i ens33 ether src 00:0c:29:16:a1:c3 -nn -e
通过第一个数据包可看到IP和端口不变,还是客户端请求10.0.0.100
可以看到调度器接收到了路由器转发过来的请求,然后调度器修改了目标MAC地址,把MAC地址改为了WEB1的MAC
00:0c:29:16:a1:c3 路由器的ens34的MAC地址
00:0c:29:ef:c9:b1 web1的真实MAC地址
00:0c:29:16:a1:c3 > 00:0c:29:ef:c9:b1, ethertype IPv4 (0x0800), length 74: 192.168.116.148.53164 > 10.0.0.100.80
时间点为17:04:58.727162
路由器ens34网卡抓包分析
原本路由器2个网卡IP
ip a
网卡ens33的MAC:00:0c:29:16:a1:b9 和客户端同网段,可以接收客户端请求
网卡ens34的MAC:00:0c:29:16:a1:c3 和web同网段,可以接收web返回的数据
抓取来自源web1网卡和路由器的ens34的数据
tcpdump -i ens34 -nn -e ether src 00:0c:29:ef:c9:b1
通过第一个数据包可以看到web1返回数据给路由器的ens34网卡
00:0c:29:ef:c9:b1 web1的MAC地址
00:0c:29:16:a1:c3 路由器的ens34的MAC地址
00:0c:29:ef:c9:b1 > 00:0c:29:16:a1:c3, ethertype IPv4 (0x0800), length 74: 10.0.0.100.80 > 192.168.116.148.53164
LVS-TUN(隧道)模式:
原理:
LVS-TUN官网介绍:LVS-TUN
LVS-TUN实现过程
请求过程:CIP-调度器VIP-(TUNL0)-RIP
返回过程:RIP-(TUNL0)-调度器VIP-CIP
- 客户端发起到VIP的请求给调度器。源地址是客户端,目的地址是VIP
- 调度器在请求的数据包增加一段新的源地址调度器IP和目的地址web服务器IP
- 调度器跟web通过隧道通信后,返回信息给客户端
LVS-TUN模式特性:
- VIP可以是公网IP,调度器的DIP和web的RIP可以不是同个网段
- web服务器的RIP只需要通过隧道和调度器的DIP通信
- 调度器需要修改请求和回应报文,负载大
- 支持跨网段通信,但是调度器和web服务器都需要支持隧道功能
LVS-TUN抓包分析
在真机上用科来抓虚拟机的网卡查看数据包
-
首先是客户端192.168.116.130去访问172.16.116.100,也就是最下面的源地址和目的地址,IP协议是TCP协议。
-
请求到达调度器后,调取器在192.168.116.130去访问172.16.116.100前面增加了一个数据包,也就是上面的源地址192.168.116.145到目标192.168.116.146的数据包,协议可以看到为IP-IN-IP协议。也就是tunl0隧道。
-
后台web服务器跟调度器通过隧道通信数据后,调度器返回数据给客户端。
调试算法总结:
调度工具:ipvsadm
安装方式:yum install -y ipvsadm
一 静态算法
-
rr:轮询,轮流调度后台数据,假如有2台web,那就是一台一次,轮流进行
-
wrr:权重轮询,根据设置的权重值进行访问,权重大的访问较多次
-
dh:请求绑定轮询:判断发起的协议类型或其他标准是不是同一种类型的请求,是的话全部调度到同台web服务器
-
sh:客户端绑定轮询,根据客户端的cookie确认以前连接后台web服务器是哪台,有的话根据cookie绑定上次连接的web服务器。没有就随机连接。
二 动态算法:
-
lc:最少连接轮询:通过查看哪个web服务器的连接量少,就提升web服务器的访问量
-
wlc:加权最少连接轮询:通过访问量和权重进行计算,优先把访问量给到少量访问的服务器上。默认算法
-
sed:最短期望延迟轮询,通过(活动数+1)*256/权重进行计算,将连接数发到计算值为最小的服务器上
-
nq:最短期望延迟不排队轮询,通过(活动数+1)*256/权重进行计算,将连接数发到计算值为最小的服务器上,但是如果此时有设备是空闲状态,会直接把请求发到这台服务器上,而不会再把请求发到计算值为最小的服务器上。
-
lblc:dh和lc加强版,根据客户端请求的是不是同一类型和连接数量进行判断。
-
lblcr:dh和lc加强版,根据客户端请求的是不是同一类型和连接数量进行判断,多了一个复制缓存功能,如果请求的设备没有数据,那么可以从其他服务器缓存过来。
5、LVS的NAT、DR,TUN模型实现
LVS-NAT部署:
环境:
所有服务器都安装阿里云yum源和关闭防火墙,关闭selinux
cd /etc/yum.repos.d/
yum install -y wget
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
系统/软件 | 服务和IP |
---|---|
centos 7.8 / ipvsadm-1.27-8 | 调度器,VIP:192.168.116.145,DIP:10.0.0.1 |
centos 7.8 / httpd | web1,ip:10.0.0.101,域名:www.web.io |
windows 2016 /IIS | web2,ip:10.0.0.102,域名:www.web.io |
centos 7.8 | 客户端,IP:192.168.116.130 |
路由拓扑:
LVS-NAT后台网站1配置:
使用nat网路的IP先安装服务
- 安装服务和创建网页文件
真实使用情况下,web1和web2的网页内容都是一样的。
yum install -y httpd
echo web1-centos-7.8 >/var/www/html/index.html
vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改配置文件的IP,将它改为后端web1的IP:10.0.0.101
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a182d975-69eb-449a-a2ef-99edbab555b2
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.101
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
- 开启开机自启httpd,添加host,关闭系统
systemctl enable httpd 开启启动httpd
echo 10.0.0.101 www.web.io >>/etc/hosts
init 0 关机
- 修改网络模式为仅主机模式,必须保持调度器和web1和web2都在同一个主机模式下,同一个网段下
- web1开机测试
curl 10.0.0.101
curl www.web.io
LVS-NAT后台网站2配置:
使用nat网路的IP先安装服务和需要的其他软件
Windows-2016配置网站:
-
安装IIS服务,也就是http服务,Windows的网站服务名叫做IIS
单击左下角,选择服务器管理
点击添加角色和功能
开始安装http服务,Windows称为IIS服务,下一步
下一步
下一步
选择空格打钩
确定添加功能
下一步
下一步
下一步
下一步
选择安装
选择关闭
重启下系统,让服务生效 -
创建网站目录和网页文件
新建一个文件夹,名字为web
在web文件夹新建index.txt文件
对文件输入内容web2-windows-2016,然后回车一下,下面多出一个空行,用来换行
真实使用情况下,web1和web2的网页内容都是一样的。
修改index.txt的后缀名为index.html网页
如果没显示后缀名,点击这里打开
- 配置网站
单击左下角,选择服务器管理
单击工具,选择第一个
默认自动生成一个网站,选择高级设置
原本参数
修改物理路径为web文件夹路径
- 浏览器打开网页,测试网站是否能用
- 关闭虚拟机,修改虚拟机的网路为主机网络
修改IP为10.0.0.102,网关为调度器的IP10.0.0.1
找到路径:C:\Windows\System32\drivers\etc
修改本地hosts文件,使得域名生效
添加10.0.0.102 www.web.io
在Windows-2016的测试网站IP和域名访问
http://10.0.0.102
http://www.web.io
LVS-NAT调度器配置:
需要有2张网卡,一张对外接NAT网络,一张对内接web所在的主机网络
- 安装服务和配置网络
yum install -y ipvsadm 安装ipvsadm调度服务
vi /etc/sysconfig/network-scripts/ifcfg-ens34 修改第2张网卡的IP
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=9de44ead-9df5-46bb-bb51-bbbb041f5976
DEVICE=ens34
ONBOOT=yes
IPADDR=10.0.0.1
NETMASK=255.255.255.0
systemctl restart network 重启网卡
- 测试调度器和web的网络
ping 10.0.0.101
ping 10.0.0.102
3. 开启内核参数
echo "net.ipv4.ip_forward=1">>/etc/sysctl.conf 开启内核网卡转发,也就是网卡1的数据可以转发到网卡2
sysctl -p
- 配置ipvsadm调度规则,默认为轮询,也就是一台web一次
ipvsadm -A -t 192.168.116.145:80 -s rr
ipvsadm -a -t 192.168.116.145:80 -r 10.0.0.101 -m
ipvsadm -a -t 192.168.116.145:80 -r 10.0.0.102 -m
ipvsadm -Ln
5. 配置本地hosts
echo 10.0.0.101 www.web.io >>/etc/hosts
echo 10.0.0.102 www.web.io >>/etc/hosts
LVS-NAT客户端访问测试:
echo 192.168.116.145 www.web.io >>/etc/hosts 指定调度器IP和域名绑定
for i in {1..10};do curl http://192.168.116.145;done 访问调度器的IP
for i in {1..10};do curl http://www.web.io;done 访问域名
LVS-DR模型部署
环境:
所有服务器都安装阿里云yum源和关闭防火墙,关闭selinux
cd /etc/yum.repos.d/
yum install -y wget
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
系统/软件 | 服务和IP |
---|---|
centos 7.8 / 路由服务器 | 网卡1的ens33的IP:192.168.116.145,无网关,网卡2的ens34的IP:10.0.0.1,无网关 |
centos 7.8 / 调度服务器 | 对外VIP:10.0.0.100/32,无网关,调度DIP:10.0.0.254/24,网关10.0.0.1 |
centos 7.8 / WEB1服务器 | 对外VIP:10.0.0.100/32,无网关,真实RIP:10.0.0.2,网关10.0.0.1 |
centos 7.8 / WEB2服务器 | 对外VIP:10.0.0.100/32,无网关,真实RIP:10.0.0.3,网关10.0.0.1 |
centos 7.8/客户端 | 192.168.116.148/24,网关为192.168.116.145 |
路由拓扑:
LVS-DR后端web1(10.0.0.2)配置:
- 先设置为NAT模式,安装httpd服务
- 安装httpd服务和抓包软件和设置网页
真实使用情况下,web1和web2的网页内容都是一样的。
yum install -y httpd tcpdump
echo "web1">/var/www/html/index.html
systemctl enable httpd
- 修改IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c399d8df-64a8-4b9c-95a1-341d20dc1ec1
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.2
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
新增虚拟回环口文件
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.0.0.100
NETMASK=255.255.255.255
- 开启内核参数,添加开机启动
echo "net.ipv4.conf.all.arp_ignore=1">>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore=2">>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce=1">>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce=2">>/etc/sysctl.conf
- 设置主机名和域名
hostnamectl set-hostname web1 设置主机名
echo "10.0.0.2 www.web.io">>/etc/hosts 设置域名
init 0 关机
- 把NAT模式改为主机模式,开机
开机完测试网站
curl 10.0.0.2
curl www.web.io
LVS-DR后端web2(10.0.0.3)配置:
- 先设置为NAT模式,安装httpd服务
- 安装httpd服务,抓包软件和设置网页
真实使用情况下,web1和web2的网页内容都是一样的。
yum install -y httpd tcpdump
echo "web2">/var/www/html/index.html
systemctl enable httpd
- 修改IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1343ea28-e2cd-4f53-b545-5c6bbd7bcf07
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.3
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
新增虚拟回环口文件
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.0.0.100
NETMASK=255.255.255.255
- 开启内核参数,设置开机启动
echo "net.ipv4.conf.all.arp_ignore=1">>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore=2">>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce=1">>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce=2">>/etc/sysctl.conf
- 设置主机名和域名
hostnamectl set-hostname web2 设置主机名
echo "www.web.io 10.0.0.3">>/etc/hosts 设置域名
init 0 关机
- 把NAT模式改为主机模式,开机
开机完测试网站
curl 10.0.0.3
curl www.web.io
LVS-DR调度器配置:
- 设置为nat模式,安装ipvsadm服务和抓包软件
yum install -y ipvsadm tcpdump
- 设置调度规则
ipvsadm -A -t 10.0.0.100:80 -s rr
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.2:80 -g
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.3:80 -g
ipvsadm -Ln
ipvsadm -S >/etc/sysconfig/ipvsadm
systemctl enable ipvsadm
- 配置IP
配置网卡IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a182d975-69eb-449a-a2ef-99edbab555b2
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.254
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
新增虚拟回环口文件
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.0.0.100
NETMASK=255.255.255.255
- 设置主机名,关机
hostnamectl set-hostname ipvsadm
init 0
- 修改nat模式为主机模式,开机
开机后测试:
ping 10.0.0.2 确认调度器和web1网络正常
ping 10.0.0.3 确认调度器和web2网络正常
curl 10.0.0.2 确认调度器和web1网站访问正常
curl 10.0.0.3 确认调度器和web2网站访问正常
LVS-DR路由服务器配置(192.168.116.145):
- 开启路由功能ip_forward
echo "net.ipv4.ip_forward=1">>/etc/sysctl.conf 开启网卡转发
sysctl -p 启动配置
hostnamectl set-hostname route 设置主机名字
- 配置IP
配置网卡1
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7b636dc1-fa52-4fc5-a424-e8cd83fa0bfd
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.145
NETMASK=255.255.255.0
配置网卡2
vi /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=9de44ead-9df5-46bb-bb51-bbbb041f5976
DEVICE=ens34
ONBOOT=yes
IPADDR=10.0.0.1
NETMASK=255.255.255.0
- 关闭服务器,修改网卡1为NAT模式,网卡2为主机模式,然后开机
开机后测试:
ping 10.0.0.2 确认路由器和web1通信正常
ping 10.0.0.3 确认路由器和web2通信正常
ping 10.0.0.254 确认路由器和调度器通信正常
curl 10.0.0.2 确认路由器和web1网站访问正常
curl 10.0.0.3 确认路由器和web2网站访问正常
LVS-DR客户端测试:
客户端和路由器同属于NAT网络
配置网卡,设置网关为路由器的IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ce8a22bf-7182-4165-bf30-7222fb56eea9
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.148
NETMASK=255.255.255.0
GATEWAY=192.168.116.145
配置hosts文件
echo "10.0.0.100 www.web.io" >>/etc/hosts
cat /etc/hosts
访问网站:
for i in {1…10};do curl 10.0.0.100;done
for i in {1…10};do curl www.web.io;done
LVS-TUN部署
环境:
系统/功能 | IP |
---|---|
centos 7.8 /客户端 | 192.168.116.130/24,网关192.168.116.145 |
centos 7.8/ipvsadm(调度器) | 192.168.116.145/24,无网关,VIP:172.16.116.100/32 |
centos 7.8/web1服务器 | 192.168.116.146/24,网关192.168.116.145,VIP:172.16.116.100/32 |
centos 7.8/web1服务器 | 192.168.116.147/24,网关192.168.116.145,VIP:172.16.116.100/32 |
所有服务器都安装阿里云yum源和关闭防火墙,关闭selinux
cd /etc/yum.repos.d/
yum install -y wget
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
路由拓扑:
LVS-TUN后端web1配置:
只要nat模式即可
- 安装http和抓包工具,设置网站主页
yum install -y httpd tcpdump
echo "web1">/var/www/html/index.html
systemctl enable httpd
systemctl start httpd
hostnamectl set-hostname web1
echo "172.16.116.100 www.web.io">>/etc/hosts 设置hosts
- 默认centos7自带这个ipip隧道模块,但是没开启,手动开启就行
lsmod |grep ipip 临时开启
modprobe ipip
lsmod |grep ipip
vi /etc/sysconfig/modules/ipip.modules 编辑文件,添加永久开机启动模块
#!/bin/bash
/usr/sbin/modprobe ipip
chmod u+x /etc/sysconfig/modules/ipip.modules
- 设置网卡IP:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a182d975-69eb-449a-a2ef-99edbab555b2
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.146
NETMASK=255.255.255.0
GATEWAY=192.168.116.145
- 隧道网卡配置
echo "ip addr add 172.16.116.100/32 dev tunl0">>/etc/rc.d/rc.local
echo "ip link set up tunl0">>/etc/rc.d/rc.local
echo "ip route add 172.16.116.100/32 dev tunl0">>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
- 修改内核参数
echo "net.ipv4.conf.tunl0.arp_ignore=1">>/etc/sysctl.conf
echo "net.ipv4.conf.tunl0.arp_announce=2">>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_ignore=1">>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce=2">>/etc/sysctl.conf
echo "net.ipv4.conf.all.rp_filter=0">>/etc/sysctl.conf
echo "net.ipv4.conf.tunl0.rp_filter=0">>/etc/sysctl.conf
- 重启系统,确认内核参数修改了,网站访问也正常
cat /proc/sys/net/ipv4/conf/tunl0/arp_ignore
cat /proc/sys/net/ipv4/conf/tunl0/arp_announce
cat /proc/sys/net/ipv4/conf/all/arp_ignore
cat /proc/sys/net/ipv4/conf/all/arp_announce
cat /proc/sys/net/ipv4/conf/tunl0/rp_filter
cat /proc/sys/net/ipv4/conf/all/rp_filter
curl 192.168.116.146
curl 172.16.116.100
curl http://www.web.io
LVS-TUN后端web2配置:
只要nat模式即可
- 安装http和抓包工具,设置网站主页
yum install -y httpd tcpdump
echo "web2">/var/www/html/index.html
systemctl enable httpd
systemctl start httpd
hostnamectl set-hostname web2
echo "172.16.116.100 www.web.io">>/etc/hosts 修改hosts
- 默认centos7自带这个ipip隧道模块,但是没开启,手动开启就行
lsmod |grep ipip 临时开启
modprobe ipip
lsmod |grep ipip
vi /etc/sysconfig/modules/ipip.modules 编辑文件,添加永久开机启动模块
#!/bin/bash
/usr/sbin/modprobe ipip
chmod u+x /etc/sysconfig/modules/ipip.modules
- 设置网卡IP:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c399d8df-64a8-4b9c-95a1-341d20dc1ec1
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.147
NETMASK=255.255.255.0
GATEWAY=192.168.116.145
- 隧道网卡配置
echo "ip addr add 172.16.116.100/32 dev tunl0">>/etc/rc.d/rc.local
echo "ip link set up tunl0">>/etc/rc.d/rc.local
echo "ip route add 172.16.116.100/32 dev tunl0">>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
- 修改内核参数
echo "net.ipv4.conf.tunl0.arp_ignore=1">>/etc/sysctl.conf
echo "net.ipv4.conf.tunl0.arp_announce=2">>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_ignore=1">>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce=2">>/etc/sysctl.conf
echo "net.ipv4.conf.all.rp_filter=0">>/etc/sysctl.conf
echo "net.ipv4.conf.tunl0.rp_filter=0">>/etc/sysctl.conf
- 重启系统,确认内核参数修改了,网站访问也正常
cat /proc/sys/net/ipv4/conf/tunl0/arp_ignore
cat /proc/sys/net/ipv4/conf/tunl0/arp_announce
cat /proc/sys/net/ipv4/conf/all/arp_ignore
cat /proc/sys/net/ipv4/conf/all/arp_announce
cat /proc/sys/net/ipv4/conf/tunl0/rp_filter
cat /proc/sys/net/ipv4/conf/all/rp_filter
curl 192.168.116.147
curl 172.16.116.100
curl http://www.web.io
LVS-TUN后端调度器配置:
- 安装调度工具和抓包工具
yum install -y ipvsadm tcpdump
hostnamectl set-hostname ipvsadm
- 开启ipip模块
lsmod |grep ipip 临时开启
modprobe ipip
lsmod |grep ipip
vi /etc/sysconfig/modules/ipip.modules 编辑文件,添加永久开机启动模块
#!/bin/bash
/usr/sbin/modprobe ipip
chmod u+x /etc/sysconfig/modules/ipip.modules
- 隧道网卡配置
echo "ip addr add 172.16.116.100/32 dev tunl0">>/etc/rc.d/rc.local
echo "ip link set up tunl0">>/etc/rc.d/rc.local
echo "ip route add 172.16.116.100/32 dev tunl0">>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
- 真实网卡配置:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7b636dc1-fa52-4fc5-a424-e8cd83fa0bfd
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.145
NETMASK=255.255.255.0
- 调度配置
ipvsadm -A -t 172.16.116.100:80 -s rr
ipvsadm -a -t 172.16.116.100:80 -r 192.168.116.146:80 -i
ipvsadm -a -t 172.16.116.100:80 -r 192.168.116.147:80 -i
ipvsadm -Ln
ipvsadm -S >/etc/sysconfig/ipvsadm
systemctl enable ipvsadm
- 重启测试
curl 192.168.116.146
curl 192.168.116.147
LVS-TUN后端客户端测试:
- 设置网关为调度器的IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1343ea28-e2cd-4f53-b545-5c6bbd7bcf07
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.130
NETMASK=255.255.255.0
GATEWAY=192.168.116.145
修改host文件
echo "172.16.116.100 www.web.io">>/etc/hosts
测试网站访问
for i in {1..10};do curl 172.16.116.100;done
for i in {1…10};do curl http://www.web.io;done
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)