工作模 | server number 节点数量 |
真实网关 | IP地址 | 优点 | 缺点 |
---|---|---|---|---|---|
NAT | low 10-20 | 负载调度器 | 公网+私网 | 安全性高 | 效率低、压力大 |
TUN | High 100 | 只有路由器 | 公网 | 安全、速度快 | 需要隧道技术 |
DR | High 100 | 自由路由器 | 私网 | 性能最好 | 不能跨越LAN(局域网) |
Director Server 和 Real Server 必须在同一个物理网络中
Real Server 可以使用私有地址,也可以使用公网地址;如果使用公网地址,可以通过互联网对 RIP 进行直接访问
Director Server 作为群集的访问入口,但不作为网关使用
所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server
Real Server 的网关不允许指向 Director Server IP,即 Real
Server 发送的数据包不允许经过 Director Server
Real Server 上的 lo 接口配置 VIP 的 IP 地址
解决方案:
解决方案
选项 | 说明 |
---|---|
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法 轮询::rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc |
-a | 表示添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定VIP地址及TCP端口 |
-r | 指定RIP地址及TCP端口 |
-m | 表示使用NAT群集模式 |
-g | 表示使用DR模式 |
-i | 表示使用TUN模式 |
-w | 设置权重 权重为0时表示暂停节点 |
-p 60 | 表示保持长连接60秒 |
-l | 列表查看LVS虚拟服务器(默认查看所有) |
-n | 以数字形式显示地址、端口等信息 常与"-l"选项组合使用 |
fdisk /dev/sdc
n
↓
p
回车
↓
回车
↓
w
[root@localhost ~]# mkfs.xfs /dev/sdc1
[root@localhost ~]# mkdir /opt/qz1
[root@localhost ~]# mkdir /opt/qz2
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /opt/qz1 xfs defaults 0 0
/dev/sdc1 /opt/qz2 xfs defaults 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 xfs 20G 33M 20G 1% /opt/qz1
/dev/sdc1 xfs 20G 33M 20G 1% /opt/qz2
[root@localhost ~]# yum install -y nfs-utils.x86_64 rpcbind.x86_64
[root@localhost ~]# vim /etc/exports
/opt/qz1 192.168.200.0/24(rw,sync,no_root_squash)
/opt/qz2 192.168.200.0/24(rw,sync,no_root_squash)
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# showmount -e 【查询是否可以提供存储路径】
Export list for localhost.localdomain:
/opt/qz2 192.168.200.0/24
/opt/qz1 192.168.200.0/24
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.200.80
GATEWAY=192.168.200.1
【重启网卡并查看】
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.80 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::d84e:b504:3cd7:b61c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e1:9c:bc txqueuelen 1000 (Ethernet)
RX packets 7098 bytes 8177133 (7.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3526 bytes 292107 (285.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# yum -y install httpd
[root@localhost /]# systemctl restart network
[root@localhost /]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.60 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::f8fc:7087:375:efee prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:14:03:40 txqueuelen 1000 (Ethernet)
RX packets 1273 bytes 98170 (95.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 603 bytes 67166 (65.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost /]# showmount -e 192.168.200.80 【查询共享的站点】
Export list for 192.168.200.80:
/opt/qz2 192.168.200.0/24
/opt/qz1 192.168.200.0/24
[root@localhost /]# vim /etc/fstab 【执行挂载(netdev 网络 设备)】
192.168.200.80:/opt/qz1 /var/www/html nfs defaults,_netdev 0 0
[root@localhost /]# mount -a
[root@localhost /]# df -hT 【查询发现挂载成功】
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 36G 3.2G 33G 9% /
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 9.0M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 151M 346M 31% /boot
tmpfs tmpfs 394M 24K 394M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
192.168.200.80:/opt/qz1 nfs4 20G 32M 20G 1% /var/www/html
[root@localhost /]# vim /var/www/html/index.html 【编辑首页文件】
this is qz1
[root@localhost /]# systemctl start httpd.service
[root@localhost /]# netstat -natp | grep 80
tcp 0 0 192.168.200.60:750 192.168.200.80:2049 ESTABLISHED -
tcp6 0 0 :::80 :::* LISTEN 38698/httpd
[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.200.70
GATEWAY=192.168.200.1
[root@localhost /]# systemctl restart network
[root@localhost /]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.70 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::d973:c31f:de9:7a26 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e9:a9:02 txqueuelen 1000 (Ethernet)
RX packets 86027 bytes 124109476 (118.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13067 bytes 824666 (805.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost /]# showmount -e 192.168.200.80 【查询共享的站点】
Export list for 192.168.200.80:
/opt/qz2 192.168.200.0/24
/opt/qz1 192.168.200.0/24
[root@localhost /]# vim /etc/fstab 【执行挂载(netdev 网络 设备)】
192.168.200.80:/opt/qz1 /var/www/html nfs defaults,_netdev 0 0
[root@localhost /]# mount -a
[root@localhost /]# df -hT 【查询发现挂载成功】
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 36G 4.2G 32G 12% /
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 9.0M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 151M 346M 31% /boot
tmpfs tmpfs 394M 24K 394M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
192.168.200.80:/opt/qz2 nfs4 20G 32M 20G 1% /var/www/html
[root@localhost /]# vim /var/www/html/index.html 【编辑首页文件】
this is qz2
[root@localhost /]# systemctl start httpd.service
[root@localhost /]# netstat -natp | grep 80
tcp 0 0 192.168.200.60:750 192.168.200.80:2049 ESTABLISHED -
tcp6 0 0 :::80 :::* LISTEN 38698/httpd
[root@localhost /]# yum -y install ipvsadm.x86_64
【将原有的ens33复制一份并命名ens36】
[root@localhost /]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
[root@localhost /]# ls /etc/sysconfig/network-scripts/
ifcfg-ens33 ifdown-eth ifdown-post ifdown-TeamPort ifup-eth ifup-plip ifup-sit init.ipv6-global
ifcfg-ens36 ifdown-ib ifdown-ppp ifdown-tunnel ifup-ib ifup-plusb ifup-Team network-functions
ifcfg-lo ifdown-ippp ifdown-routes ifup ifup-ippp ifup-post ifup-TeamPort network-functions-ipv6
ifdown ifdown-ipv6 ifdown-sit ifup-aliases ifup-ipv6 ifup-ppp ifup-tunnel
ifdown-bnep ifdown-isdn ifdown-Team ifup-bnep ifup-isdn ifup-routes ifup-wireless
【将GATEWAY删除,并需注意UUID(因为刚才cp所以2个网卡UUID一样,这里需要注释或者直接删除一个UUID)】
[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.200.1
[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-ens36
NAME="ens36"
#UUID="021107b9-a0f6-408f-a69a-173ddd0e56e7"
DEVICE="ens36"
IPADDR=12.0.0.1
[root@localhost /]# systemctl restart network
[root@localhost /]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.1 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::ab89:d3a4:973b:7351 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e3:f1:cd txqueuelen 1000 (Ethernet)
RX packets 11456 bytes 14361155 (13.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3355 bytes 230228 (224.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 12.0.0.1 netmask 255.255.255.0 broadcast 12.0.0.255
inet6 fe80::d352:1443:c684:2884 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e3:f1:d7 txqueuelen 1000 (Ethernet)
RX packets 1156 bytes 71562 (69.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 237 bytes 40924 (39.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
【分别在Web1、Web2、NFS主机上进行ping测试】
[root@localhost ~]# ping 192.168.200.1
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.200.1: icmp_seq=1 ttl=64 time=0.305 ms
[root@localhost /]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1 【在配置文件的最下面一行进行添加】
[root@localhost /]# sysctl -p 【开启地址转发】
net.ipv4.ip_forward = 1
[root@localhost /]# iptables -F 【清除防火墙转发表】
[root@localhost /]# iptables -t nat -F 【清除nat地址转换表】
[root@localhost /]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
【-t:指定nat地址转换表】
【-A:在链末尾插入(POSTROUTING 链)出口为ens36】
【-s:转换的源地址】
【-j:参数,操作】
【SNAT:基于源地址转化】
【--to-source 12.0.0.1:转换为12.0.0.1】
[root@localhost /]# iptables -t nat -L
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.200.0/24 anywhere to:12.0.0.1
[root@localhost /]# modprobe ip_vs 【加载模块】
[root@localhost /]# cat /proc/net/ip_vs 【查看模块】
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost /]# ipvsadm --save > /etc/sysconfig/ipvsadm 【先保存命令】
[root@localhost /]# systemctl start ipvsadm.service 【在开启服务】
[root@localhost /]# cd /opt/
[root@localhost opt]# vim nat1.sh
#!/bin/bash
ipvsadm -C 【清空ipvs缓存(相当于初始化)】
ipvsadm -A -t 12.0.0.1:80 -s rr 【指定一个访问入口ip(端口为80)和调度算法rr(轮询)】
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.60:80 -m 【-a:添加真实服务器,建立ip地址映射关系,映射地址为12.0.0.1】
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.70:80 -m 【-r:添加真实IP地址为192.168.200.60和192.168.200.70】
【-m:指定使用的轮询机制是NAT的LVS模式】
ipvsadm
[root@localhost opt]# chmod +x nat1.sh
[root@localhost opt]# ./nat1.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http rr
-> 192.168.200.60:http Masq 1 0 0
-> 192.168.200.70:http Masq 1 0 0
【Web2与此相同】
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
#GATEWAY=192.168.131.2
#DNS1=192.168.131.2
[root@localhost ~]# systemctl restart network
[root@localhost ~]# cp -p /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.131.100
NETMASK=255.255.255.255
[root@localhost ~]# ifup lo:0 【如果启动ifup lo:0报错的话,直接重启网卡即可】
[root@localhost ~]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.131.100 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
[root@localhost ~]# route add -host 192.168.131.100 dev lo:0 【禁锢路由】
[root@localhost ~]# route -n 【查看路由】
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.131.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.131.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo
【配置启动管理执行路由禁锢】
[root@localhost ~]# vim /etc/rc.local
【直接在配置文件最下面一行添加】
/sbin/route add -host 192.168.131.100 dev lo:0
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
【直接在配置文件最下面行添加】
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1 【系统只相应目的IP为本地IP的ARP请求】
net.ipv4.conf.lo.arp_announce = 2 【系统不使用IP包的源地址来设置ARP请求的源地址,而是选择发送接口的IP地址】
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@localhost ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# echo "this is web1" > /var/www/html/index.html 【Web1】
[root@localhost ~]# echo "this is web2" > /var/www/html/index.html 【Web2】
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install ipvsadm.x86_64
[root@localhost ~]# modprobe ip_vs 【加载ip_vs模块】
[root@localhost ~]# cat /proc/net/ip_vs 【查看ip_vs版本信息】
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-post ifup-eth ifup-sit
ifcfg-ens33:0 ifdown-ppp ifup-ib ifup-Team
ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort
ifdown ifdown-sit ifup-ipv6 ifup-tunnel
ifdown-bnep ifdown-Team ifup-isdn ifup-wireless
ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global
ifdown-ib ifdown-tunnel ifup-plusb network-functions
ifdown-ippp ifup ifup-post network-functions-ipv6
ifdown-ipv6 ifup-aliases ifup-ppp
ifdown-isdn ifup-bnep ifup-routes
【直接将配置文件里内容全删除后进行重新添加】
[root@localhost network-scripts]# vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.131.100
NETMASK=255.255.255.255
【报错直接重启网卡即可】
[root@localhost network-scripts]# ifup ens33:0
ERROR : [/etc/sysconfig/network-scripts/ifup-eth] Error, some other host (00:0C:29:14:03:40) already uses address 192.168.131.100.
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig ens33:0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.131.100 netmask 255.255.255.255 broadcast 192.168.131.100
ether 00:0c:29:e3:f1:cd txqueuelen 1000 (Ethernet)
[root@localhost network-scripts]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost /]# sysctl -p 【 -p:从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载】
[root@localhost /]# ipvsadm-save > /etc/sysconfig/ipvsadm
或者
[root@localhost /]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@localhost /]# systemctl start ipvsadm.service
[root@localhost /]# vim /opt/dr1.sh
#/bin/bash
ipvsadm -C 【清除所有策略】
ipvsadm -A -t 192.168.131.100:80 -s rr
ipvsadm -a -t 192.168.131.100:80 -r 192.168.131.11:80 -g 【若为隧道模式则把-g替换成-i】
ipvsadm -a -t 192.168.131.100:80 -r 192.168.131.12:80 -g
ipvsadm 【查看节点状态 (Route代表DR模式)】
[root@localhost /]# chmod +x /opt/dr1.sh
[root@localhost /]# ./opt/dr1.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http rr
-> 192.168.131.11:http Route 1 0 0
-> 192.168.131.12:http Route 1 0 0
[root@localhost /]# yum -y install keepalived.x86_64
[root@localhost /]# modprobe ip_vs
[root@localhost /]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP C0A88364:0050 rr
-> C0A8830C:0050 Route 1 0 0
-> C0A8830B:0050 Route 1 0 0
【直接将配置文件里删除进行重新添加】
[root@localhost /]# vim /etc/keepalived/keepalived.conf
global_defs { 【定义全局参数】
router_id lvs_10 【指定服务器(路由器)的名称,主备服务器名称须不同,这里主为LVS_10,备为LVS_20】
}
vrrp_instance vi_1 { 【定义VRRP热备实例参数】
state MASTER 【指定热备状态,主为MASTER,备为BACKUP】
interface ens33 【指定承载vip地址的物理接口】
virtual_router_id 51 【指定虚拟路由器的ID号,每个热备组保持一致】
priority 110 【指定优先级,数值越大优先级越高,这里设置主为110,备为100】
advert_int 1 【通告间隔秒数(心跳频率)】
authentication { 【定义认证信息,每个热备组保持一致】
auth_type PASS 【认证类型】
auth_pass 5514 【指定验证密码,主备服务器保持一致】
}
virtual_ipaddress { 【指定群集vip地址】
192.168.131.100
}
}
virtual_server 192.168.131.100 80 { 【指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数】
lb_algo rr 【指定调度算法,轮询(rr)】
lb_kind DR 【指定群集工作模式,直接路由(DR)】
persistence_timeout 6 【连接保持时间(秒)】
protocol TCP 【应用服务采用的是 TCP协议】
real_server 192.168.226.130 80 { 【指定第一个(Web1)节点的地址、端口,备LVS则指定Web2的地址与端口】
weight 1 【节点的权重】
TCP_CHECK { 【健康检查方式】
connect_port 80 【添加检查的目标端口】
connect_timeout 3 【添加连接超时(秒)】
nb_get_retry 3 【添加重试次数】
delay_before_retry 3 【添加重试间隔】
}
}
real_server 192.168.131.11 80 { 【添加第二个 Web节点的地址、端口】
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@localhost /]# systemctl start keepalived.service