lvs集群

## 负载均衡

一、好处:
1.提高了系统的整体性能
2.提高了系统的扩展性
3.提高了系统的可用性
二、负载均衡类型
1.DNS
2.硬件负载均衡
3.软件负载均衡

DNS实现负载均衡
DNS实现负载均衡是最基础简单的方式,一个域名通过DNS解析到多个IP,每个IP对应不同的服务器实例,这样就完成了流量的调度,完成了负载均衡的功能。
在这里插入图片描述
硬件负载均衡
硬件负载均衡的优点
功能强大:全面支持各层级的负载均衡,支持全面的负载均衡算法。
性能强大:性能远超常见的软件负载均衡器。
稳定性高:商用硬件负载均衡,经过了良好的严格测试,经过大规模使用,稳定性高。
安全防护:除了具备负载均衡外,还具备防火墙、防 DDoS 攻击等安全功能,貌似还支持 SNAT 功能。
硬件负载均衡的缺点
价格昂贵,就是贵。
扩展性差,无法进行扩展和定制。
调试和维护比较麻烦,需要专业人员。
软件负载均衡
软件负载均衡,可以在普通的服务器上运行负载均衡软件,实现负载均衡功能。目前常见的有 Nginx、HAproxy、LVS
软件负载均衡的优点:
简单:无论是部署还是维护都比较简单。
便宜:买个 Linux 服务器,装上软件即可。
灵活:4 层和 7 层负载均衡可以根据业务进行选择;也可以根据业务特点,比较方便进行扩展和定制功能。

LVS

简介:
LVS 是基于 Linux 内核中 netfilter 框架实现的负载均衡系统,所以要学习 LVS 之前必须要先简单了解 netfilter 基本工作原理。netfilter 其实很复杂也很重要,平时我们说的 Linux 防火墙就是 netfilter,不过我们平时操作的都是 iptables,iptables 只是用户空间编写和传递规则的工具而已,真正工作的是 netfilter。
LVS基本原理
LVS 是基于 netfilter 框架,主要工作于 INPUT 链上,在 INPUT 上注册 ip_vs_in HOOK 函数,进行 IPVS 主流程,大概原理如图所示:
在这里插入图片描述
LVS三种工作模式
1.DR模式
2.NAT模式
3.Tunnel模式
4.FULLNAT
相关操作

查看系统对ipvs的支持情况,包括算法
[root@localhost ~]# grep -i -A 2 'ipvs' /boot/config-3.10.0-514.el7.x86_64 
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
--
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
--
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
--
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8
--
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
[root@localhost ~]#

lvs arch:
调度器:director,dispatcher,balancer
RS:Real Server

Client IP:CIP 客户端
Director Virutal IP:VIP 
Director IP:DIP
Real Server IP:RIP

在这里插入图片描述
环境

名称IP
DR192.168.175.100
RS1192.168.175.150
RS2192.168.175.151

安装ipvsadm包

[root@DR ~]# yum -y install ipvsadm

配置dip保证在同一个wangduan(此时已经是同一个网段,省略配置)

配置DR上的vip

[root@localhost ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1e:69:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.100/24 brd 192.168.175.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ea80:e71e:f5fc:9a2c/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost ~]# hostname DR
[root@localhost ~]# bash
[root@DR ~]# which ipvsadm
/usr/bin/which: no ipvsadm in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@DR ~]# yum -y install ipvsadm
[root@DR ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1e:69:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.100/24 brd 192.168.175.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ea80:e71e:f5fc:9a2c/64 scope link 
       valid_lft forever preferred_lft forever
[root@DR ~]# ip addr add 192.168.175.250/32 dev lo   添加网卡到lo
[root@DR ~]# ip a  查看是否添加成功
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.175.250/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1e:69:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.100/24 brd 192.168.175.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ea80:e71e:f5fc:9a2c/64 scope link 
       valid_lft forever preferred_lft forever
[root@DR ~]# ping 192.168.175.250 看是否能够ping通
PING 192.168.175.250 (192.168.175.250) 56(84) bytes of data.
64 bytes from 192.168.175.250: icmp_seq=1 ttl=64 time=0.398 ms
64 bytes from 192.168.175.250: icmp_seq=2 ttl=64 time=0.066 ms
^C
--- 192.168.175.250 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.066/0.232/0.398/0.166 ms
[root@DR ~]# 

配置rip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0)此时已经在同网段省略配置
修改RS上的网卡内核参数

[root@RS1 ~]# vim /etc/sysctl.conf
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS2进行同样操作
[root@RS2 ~]# vim /etc/sysctl.conf
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

配置vip地址
注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告

读取操作
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS2重复操作
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS1添加vip
[root@RS1 ~]# ip addr add 192.168.175.250 dev lo
[root@RS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.175.250/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:fe:26:ad brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.150/24 brd 192.168.175.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::4bd8:f5cb:d39:a60c/64 scope link 
       valid_lft forever preferred_lft forever
[root@RS1 ~]# 
RS2添加vip 
[root@RS2 ~]# ip addr add 192.168.175.250 dev lo
[root@RS2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.175.250/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:6d:98:29 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.151/24 brd 192.168.175.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7790:6522:b7ac:8c7c/64 scope link 
       valid_lft forever preferred_lft forever
[root@RS2 ~]# 

配置路由信息:在director和所有RS上进行如下配置:

[root@DR ~]# route add -host 192.168.175.250 dev lo

[root@RS1 ~]# route add -host 192.168.175.250 dev lo

[root@RS2 ~]# route add -host 192.168.175.250 dev lo

在director上添加并保存规则:

[root@DR ~]# route add -host 192.168.175.250 dev lo
[root@DR ~]#  ipvsadm -A -t 192.168.175.250:80 -s wrr
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.150:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.151:80 -g
[root@DR ~]#  ipvsadm -S > /etc/sysconfig/ipvsadm
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   1      0          0         
  -> 192.168.175.151:80           Route   1      0          0         
[root@DR ~]# 

RS1和RS2下载Apache,配置页面

RS1配置
[root@RS1 ~]# yum -y install httpd
安装过程省略。。。。
[root@RS1 ~]# cd /var/www/html/
[root@RS1 html]# ls
[root@RS1 html]# echo 'rs1' > index.html    配置页面
[root@RS1 html]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@RS1 html]# cd /etc/httpd/
[root@RS1 httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@RS1 httpd]# cd conf
[root@RS1 conf]# ls
httpd.conf  magic
[root@RS1 conf]# vim httpd.conf 
取消前面的#号
ServerName www.example.com:80

[root@RS1 conf]# systemctl start httpd
[root@RS1 conf]# systemctl stop firewalld   关闭防火墙
[root@RS1 conf]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

在这里插入图片描述

RS2配置
[root@RS2 ~]# yum -y install httpd
安装过程省略
[root@RS2 ~]# cd /var/www/html/
[root@RS2 html]# echo 'rs2' > index.html
[root@RS2 html]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@RS2 html]# cd
[root@RS2 ~]# cd /etc/httpd/
[root@RS2 httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@RS2 httpd]# cd conf
[root@RS2 conf]# ls
httpd.conf  magic
[root@RS2 conf]# vim httpd.conf 
取消前面的#号
ServerName www.example.com:80

[root@RS2 conf]# systemctl stop firewalld
[root@RS2 conf]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@RS2 conf]# 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本机验证

C:\Users\Administrator>curl http://192.168.175.250
rs1

C:\Users\Administrator>curl http://192.168.175.250
rs2

C:\Users\Administrator>

LVS-NAT模式
lvs-nat配置:director要配置2块网卡
配置ip地址信息:
director(dip,vip)
RS(rip)
开启director的ip转发功能
在director上添加并保存规则:
ipvsadm -A -t vip:port -s rr
ipvsadm -a -t vip:port -r rip -m
ipvsadm -S > /etc/sysconfig/ipvsadm
LVS-tun模式
在这里插入图片描述
lvs-tun(ip tunneling):ipip
lvs-tun模式不修改请求报文的ip首部,而是通过在原有的ip首部(CIP<–>VIP)之外再封装一个ip首部(DIP<–>RIP)
lvs-tun的特点:
RIP,DIP,VIP必须是公网地址
RS的网关不能指向DIP
请求报文必须经由director调度,但响应报文必须不能经由director
不支持端口映射
RS的OS必须支持隧道功能
LVS-fullnat模式
lvs-fullnat:keepalived
director通过同时修改请求报文的目标地址和源地址进行转发
lvs-fullnat的特点:
VIP是公网地址,RIP和DIP是私网地址,RIP与DIP无须在同一网络中
RS接收到的请求报文的源地址为DIP,因此要响应给DIP
请求报文和响应报文都必须经由Director
支持端口映射机制
RS可以使用任意OS
lvs scheduler:lvs调度器,即lvs挑选RS的算法
两种方法:

1.静态方法:仅根据算法本身进行调度
RR:round robin,轮调
WRR:weighted rr,加权的rr,根据一定的比例进行轮调,比如每次RS1给2个请求,RS2给1个请求
SH:source hash,源地址hash,实现session保持的机制,将来自于同一个IP的请求始终调度至同一RS,每个服务单独调度
DH:destination hash,目标地址hash,将对同一个目标(资源)的请求始终发往同一个RS

2.动态方法:根据算法及各RS的当前负载状态进行调度,根据指定的算法算出overhead(负载),最终挑选出overhead值最小的则为被选中的RS
LC:Least Connection,最少连接数,算法如下:
overhead = Active * 256 + Inactive
WLC:Weighted LC,加权的LC,算法如下:
overhead=(Active*256+Inactive)/ weight
SED:Shortest Expection Delay,最短期望延迟,算法如下:
overhead = (Active + 1) * 256 / weight
NQ:Nevel Queue,是SED算法的改进,根据SED算法每台主机第一次至少要均分配一次,然后再按SED算法来挑选
LBLC:Locality-Based LC,基于本地的最少连接数,即为动态的DH算法
正向代理情形下的cache server调度
LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法
ipvs的集群服务:
支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议

ipvs集群服务的特点:
    一个ipvs主机可以同时定义多个cluster service
        定义时指明lvs-type(lvs的模式)以及lvs scheduler(调度器)
    一个cluster service上至少应该有一个real server        
    pvsadm的用法:
管理集群服务:
    ipvsadm -A|E -t|u|f service-address port [-s scheduler] [-p [timeout]] [-M netmask]
    ipvsadm -D -t|u|f service-address port
    
    常见的service-address:
        tcp:-t ip:port
        udp:-u ip:port
        fwm:-f mark
    -s scheduler:
        默认为wlc
    -p [timeout]:定义持久连接,timeout不指定时默认为300秒
管理集群服务中的RS
    ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    
    server-address:
        ip[:port]
    lvs-type:
        -g:gateway,dr模式
        -i:ipip,tun模式
        -m:masquerade,nat模式
-w:设定权重,可为0到正无穷数值,设为0时不会被调度,默认为1
    权重值越大则表示性能越好,被调度的资源也会更多
清空和查看:
    ipvsadm -C	清空
    ipvsadm -L|l [options]	查看
        options:
        -n:numeric,基于数字格式显示地址和端口
        -c:connection,显示当前ipvs连接
        --stats:统计数据
        --rate:输出速率信息
        --exact:显示精确值,不做单位换算
保存和重载:
    ipvsadm -R	重载
    ipvsadm -S [-n] 	保存
置零计数器:
    ipvsadm -Z [-t|u|f service-address]

相关操作

删除集群服务命令
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   1      0          1         
  -> 192.168.175.151:80           Route   1      0          1         
[root@DR ~]# ipvsadm -D -t 192.168.175.250:80
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@DR ~]# 

添加集群服务
[root@DR ~]# ipvsadm -A -t 192.168.175.250:80 -s wrr
[root@DR ~]# 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.175.250:80 wrr

添加RS
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.150:80 -w 2 -g          (-w 2 表示验证时出现的次数)
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.151:80 -w 2 -g        (-w 2 表示验证时出现的次数)
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   2      0          0         
  -> 192.168.175.151:80           Route   2      0          0         
删除集群服务里面的某一台RS
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   2      0          0         
  -> 192.168.175.151:80           Route   2      0          0         
[root@DR ~]# ipvsadm -d -t 192.168.175.250:80 -r 192.168.175.150:80 
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.151:80           Route   2      0          0         

添加集群服务
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.150:80 -w 4 -g     修改调度值为4
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   4      0          0         
  -> 192.168.175.151:80           Route   2      0          0         
本机验证
C:\Users\Administrator>curl http://192.168.175.250
rs1
C:\Users\Administrator>curl http://192.168.175.250
rs1
C:\Users\Administrator>curl http://192.168.175.250
rs1
C:\Users\Administrator>curl http://192.168.175.250
rs1
C:\Users\Administrator>curl http://192.168.175.250
rs2
修改调度值为0
[root@DR ~]# ipvsadm -e -t 192.168.175.250:80 -r 192.168.175.150:80 -w 0 -g
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   0      0          0         
  -> 192.168.175.151:80           Route   2      0          0         
本机验证此时访问只能访问RS2的,因为上面设置成了0
C:\Users\Administrator>curl http://192.168.175.250
rs2
C:\Users\Administrator>curl http://192.168.175.250
rs2

查看连接状况
本机验证DR查看
C:\Users\Administrator>curl http://192.168.175.250
rs1
C:\Users\Administrator>curl http://192.168.175.250
rs2
C:\Users\Administrator>curl http://192.168.175.250
rs1
C:\Users\Administrator>curl http://192.168.175.250
rs1
[root@DR ~]# watch 'ipvsadm -lnc'
Every 2.0s: ipvsadm -lnc                                       Fri Jul 24 11:10:28 2020

IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:44  FIN_WAIT    192.168.175.1:52965 192.168.175.250:80 192.168.175.150:80
TCP 01:49  FIN_WAIT    192.168.175.1:55026 192.168.175.250:80 192.168.175.150:80
TCP 01:48  FIN_WAIT    192.168.175.1:55025 192.168.175.250:80 192.168.175.151:80
TCP 01:51  FIN_WAIT    192.168.175.1:55029 192.168.175.250:80 192.168.175.150:80

清空
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   3      0          0         
  -> 192.168.175.151:80           Route   2      0          0      
[root@DR ~]# ipvsadm -C
[root@DR ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

保存到文件中
[root@DR ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
[root@DR ~]# cat /etc/sysconfig/ipvsadm
-A -t DR:http -s wrr
-a -t DR:http -r 192.168.175.150:http -g -w 1
-a -t DR:http -r 192.168.175.151:http -g -w 1

添加端口号保存
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.175.250:80 -s wrr
-a -t 192.168.175.250:80 -r 192.168.175.150:80 -g -w 1
-a -t 192.168.175.250:80 -r 192.168.175.151:80 -g -w 1

HTTPS
DR配置

DR安装ipvsadm服务添加网卡
[root@DR ~]# yum -y install ipvsadm
[root@DR ~]# ip addr add 192.168.175.250/32 dev lo 
[root@DR ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.175.250/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1e:69:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.100/24 brd 192.168.175.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ea80:e71e:f5fc:9a2c/64 scope link 
       valid_lft forever preferred_lft forever
   查看是否能够ping通
[root@DR ~]#  ping 192.168.175.250
PING 192.168.175.250 (192.168.175.250) 56(84) bytes of data.
64 bytes from 192.168.175.250: icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from 192.168.175.250: icmp_seq=2 ttl=64 time=0.057 ms
^C
--- 192.168.175.250 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.036/0.046/0.057/0.012 ms

RS1和2配置

修改网卡内核参数
RS1修改
[root@RS1 ~]# vim /etc/sysctl.conf
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS2修改
[root@RS2 ~]# vim /etc/sysctl.conf
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS1添加网卡
[root@RS1 ~]# ip addr add 192.168.175.250/32 dev lo
[root@RS1 ~]# ping 192.168.175.250
PING 192.168.175.250 (192.168.175.250) 56(84) bytes of data.
64 bytes from 192.168.175.250: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 192.168.175.250: icmp_seq=2 ttl=64 time=0.048 ms
^C
--- 192.168.175.250 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.048/0.059/0.071/0.013 ms

配置路由信息
[root@DR ~]# route add -host 192.168.175.250 dev lo
[root@RS1 ~]# route add -host 192.168.175.250 dev lo
[root@RS2 ~]# route add -host 192.168.175.250 dev lo

在DR上面添加并保持规则
[root@DR ~]# route add -host 192.168.175.250 dev lo
[root@DR ~]#  ipvsadm -A -t 192.168.175.250:80 -s wrr
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.150:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.175.250:80 -r 192.168.175.151:80 -g
[root@DR ~]#  ipvsadm -S > /etc/sysconfig/ipvsadm
[root@DR ~]# 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.175.250:80 wrr
  -> 192.168.175.150:80           Route   1      0          0         
  -> 192.168.175.151:80           Route   1      0          0     

安装服务
[root@RS1 ~]# yum -y install httpd

配置web页面
[root@RS1 html]# echo 'RS1' >index.html
[root@RS1 html]# cat index.html
RS1

RS2添加网卡
[root@RS2 ~]# ip addr add 192.168.175.250/32 dev lo
[root@RS2 ~]# ping 192.168.175.250
PING 192.168.175.250 (192.168.175.250) 56(84) bytes of data.
64 bytes from 192.168.175.250: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 192.168.175.250: icmp_seq=2 ttl=64 time=0.043 ms
^C
--- 192.168.175.250 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.039/0.041/0.043/0.002 ms
安装服务
[root@RS2 ~]# yum -y install httpd

配置RS2web页面
[root@RS2 ~]# cd /var/www/html/
[root@RS2 html]# echo 'RS2' >index.html
[root@RS2 html]# cat index.html
RS2

生成秘钥
[root@DR ~]# openssl genrsa -out server.key 2048 
Generating RSA private key, 2048 bit long modulus
......................................+++
.+++
e is 65537 (0x10001)

生成证书请求
[root@DR ~]# openssl req -new -key server.key -out server.csr 
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:hubei
Locality Name (eg, city) [Default City]:wuhan
Organization Name (eg, company) [Default Company Ltd]:yc
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.yc.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

生成证书crt
[root@RS1 ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=cn/ST=hubei/L=wuhan/O=yc/CN=www.yc.com
Getting Private key

复制证书到指定位置
[root@RS1 ~]# cp server.crt /etc/pki/tls/certs/ 
[root@RS1 ~# cp server.key /etc/pki/tls/private/ 
[root@RS1 ~# cp server.csr /etc/pki/tls/private/

ssl.conf配置文件导入证书,默认https服务使用此配置文件 
[root@RS1 ca]# vim /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/pki/tls/certs/server.crt 
SSLCertificateKeyFile /etc/pki/tls/private/server.key

编辑虚拟主机文件
[root@RS1 vhost1]# vim /etc/httpd/conf.d/httpd-vhosts.conf
Listen 8800 
<VirtualHost 192.168.175.100:8800> 
 ServerAdmin root@localhost  
 ServerName www.yc.com  
 ServerAlias www.yc1.com
 
 SSLEngine on  
 SSLCertificateFile "/etc/pki/tls/certs/server.crt"  
 SSLCertificateKeyFile "/etc/pki/tls/private/server.key"
 
 ErrorLog "/var/log/httpd/error_log"  
 CustomLog "/var/log/httpd/access_log" combined  
 DocumentRoot "/var/www/vhost1/"  
 <Directory "/var/www/vhost1/">       
 <RequireAll>      
 Require all granted      
 Require not ip 192.168.1.1       
 </RequireAll>  
 </Directory> 
 </VirtualHost>
<VirtualHost 192.168.175.100:8800>  
ServerAdmin root@localhost  
ServerName www.yc.com  
ServerAlias www.yc1.com  
SSLEngine on  
SSLCertificateFile "/etc/pki/tls/certs/server.crt" 
 SSLCertificateKeyFile "/etc/pki/tls/private/server.key"  
 ErrorLog "/var/log/httpd/error_log"  
 CustomLog "/var/log/httpd/access_log" combined  
 DocumentRoot "/var/www/vhost2/"  
 <Directory "/var/www/vhost2/">       
 <RequireAll>      
 Require all granted      
 Require not ip 192.168.1.1      
  </RequireAll>  
  </Directory> 
  </VirtualHost>

下载mod_ssl包
[root@RS1 ~]# yum -y install mod_ssl
[root@RS1 ~# vim /etc/httpd/conf.modules.d/00-base.conf LoadModule ssl_module modules/mod_ssl.so

[root@RS1 ~# openssl genrsa -out server.key 2048
[root@RS1 ~# openssl req -new -key server.key -out server.csr
[root@RS1 ~# openssl x509 -req -days 365 -in server.csr -signkey server.key out server.crt
[root@RS1 ~# cp server.crt /etc/pki/tls/certs/ 
[root@RS1 ~# cp server.key /etc/pki/tls/private/ 
[root@RS1 ~]# cp server.csr /etc/pki/tls/private/

[root@RS1 ca]# vim /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/pki/tls/certs/server.crt 
SSLCertificateKeyFile /etc/pki/tls/private/server.key 

编辑
[root@RS1 vhost1]# vim /etc/httpd/conf.d/httpd-vhosts.conf
SSLEngine on 
SSLCertificateFile "/etc/pki/tls/certs/server.crt" 
SSLCertificateKeyFile "/etc/pki/tls/private/server.key"

查看连接状况
本机验证DR查看
C:\Users\Administrator>curl https://192.168.175.250
rs1
C:\Users\Administrator>curl https://192.168.175.250
rs2
C:\Users\Administrator>curl https://192.168.175.250
rs1
C:\Users\Administrator>curl https://192.168.175.250
rs1

session保持的方法有以下三种实现方式:
session绑定
对某一特定服务:可以使用lvs的sh算法进行session绑定
对多个共享同一组RS的服务器,需要统一进行绑定时:可以使用lvs的persistence持久连接来实现
功能:无论ipvs使用何种调度方法,其都能实现将来自于同一个Client的请求始终定向至第一次调度时挑选出的RS
lvs的persistence通过一个持久连接模板来实现持久连接,这个持久连接模板独立于算法之外,模板样式如下:
sourceip rs timer
持久连接的实现方式
每端口持久:PPC,单服务持久调度。无论使用何种算法,可以使用此方式实现sh算法的功能,且能定义持久时长
每FWM持久:PFWMC,单FWM持久调度。将多种不同的服务通过iptables打标成同一种标记,然后通过FWM进行统一持久调度
每客户端持久:PCC,单客户端持久调度
director上会将用户的任何请求都识别为集群服务,并向RS进行调度
tcp:1-65535
udp:1-65535
session复制
session服务器:memcached,redis(key-value,kv store) (经常用到)
lvs缺点:
不具备健康状态检查功能,只是一个调度器而已

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值