大数据学习01之网络基础知识&高并发与负载均衡

1. TCP/IP协议回顾

内容图1
内容图2
内容图3
TCP/IP协议 OSI 7层参考模型:
对于从百度获取一个GET请求的全过程。
首先是从第七层应用层开始,应用层通俗来说就是应用程序,类似浏览器,应用层中有http、smtp、ssh协议,很明显此处使用的是http协议,http协议就是规定的字符串的书写格式与表示形式以及两端的交互形式,http协议由请求头+响应体+响应头组成,当输入www.baidu.com,应用层所负责的就是将这个网址转化为GET /即可,然后往下传输层传。

传输层是第四层,传输层中有tcp、udp协议,传输层所控制的就是数据传输,其中包括三次握手+传输数据+四次分手,具体的三次握手过程与四次分手过程:
在这里插入图片描述
三次握手之后,这个过程是属于两个物理节点之间的交互,三次握手成功之后,可以说是建立了一个Socket连接,此时的socket组成为IP:port - IP:port,以此组成独一无二的连接对。这样就可以保证每个人访问百度,百度可以对每一个人做出相对应的响应,而不至于出错。

至于为什么需要四次分手,这是由于B第一次返回的请求只是B确认收到分手的请求,不代表B是要分手,B中可能由于某些数据还未发送完全,而不愿意分手,当等待一段随机的时间之后,B的数据发送完了,此时B回送Fin的请求,A收到之后返回Ack,此时四次分手走完,双方断开连接。

从传输层三次握手之后,建立连接,但是传输层不具备数据传输的能力,负责的只有连接与断开连接的控制。此时需要往下走,到第三层网络层,进行数据传输,网络层的有ip、icmp协议,是基于下一跳来实现的,在网络层中有路由表,根据路由表来实现下一跳,由于网络层需要找到出口,此时需要引入链路层,链路层中有个很重要的协议ARP协议,ARP协议的话是通过广播方式获取到相应的物理地址,网络层通过链路层中获取到的物理地址,找到出口,实现数据的交互。

总的来说,访问百度网址是一个阻塞式的过程,首先通过应用层发送GET /,此时需要阻塞进入到传输层进行三次握手处理,三次握手的第一次需要发送一个sync请求,此时的请求需要通过网络层的下一跳找到相应的出口,而出口的地址需要通过链路层的arp协议来获取,此时如果走到了目标地址,目标回送一个sync+ack,再通过链路层传回,网络层跳回,传输层收到,发送ack确认,于是三次握手成功,双发可以进行数据的收发。

经过传输层、网络层、数据链路层的主要功能就是对数据包进行封装,首先在传输层添加原端口号和目的端口号,同时其中的6为flag标志可以判断传输层当前发送的消息是什么类型的,比如是A发送给B的sync或者B发送给A的sync+ack等等,通过标志位来判断;到了网络层,此时需要添加源IP地址和目标IP地址;到了数据链路层,此时需要添加源MAC地址与目标MAC地址。

双方要建立连接需要走完整个七层。
具体的数据包封装:
在这里插入图片描述
注意

  • 整个互联网是建立在下一跳的模式下
    • IP是逻辑上的两个端点
    • MAC是物理上连接的两个节点
  • 端点键TCP传输过程中
    • 确认机制
    • 状态机制
    • 不可分割
  • 解析数据包需要成本
    • 交换机:二层,只关系MAC地址,通过学习机制实现
    • 路由器:三层,只关心IP地址和路由表,三层包含二层
    • LVS服务器:四层,只关心PORT和端口号,状态等,转发,但是不知道内容
    • nginx:七层,关心Socket对应关系

2. LVS负载均衡学习&示例

内容图
内容图
内容图
LVS简介

  • LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,
  • ipvs:嵌入到Linux的内核
  • ipvsadm:管理应用程序
  • 类型:
    • NAT:地址转换
    • DR:直接路由
    • TUN:隧道

LVS调度方法

  • 四种静态
    • rr:轮询(主要是掌握这一种)
    • wrr:加权循环
    • dh:将报文IP头部的目的地址进行哈希计算,之后根据hash值在由真实服务器组成的buckets数组中查找目标服务器
    • sh:将连接调度到连接数量较少的真实服务器
  • 动态调度方法
    • lc:最少连接
    • wlc:加权最少连接
    • sed:最短期望延迟
    • nq:never queue
    • LBLC:基于本地的最少连接
    • DH:将报文IP头部的目的地址进行哈希计算,之后根据hash值在由真实服务器组成的buckets数组中查找目标服务器
    • LBLCR:基于本地的带复制功能的最少连接
  • 默认方法:WLC加权最少连接

内容图
内容图

搭建项目,LVS负载均衡调度:

  • 准备3个虚拟机,配置3台虚拟机的网络
    • eth0,配置在一个网段,DIR,RIP在一个网段
  • 配置lvs的VIP
    • ifconfig eth0:0 192.168.87.100/24
    • echo 1 > /proc/sys/net/ipv4/ip_forward
  • 调整RS的响应,通告级别(每一台RS都配)
    • echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    • echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
    • echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    • echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  • 配置RS的VIP,每一台RS都配
    • ifconfig lo:8 192.168.87.100 netmask 255.255.255.255
  • 启动RS上的httpd的服务器,如果没安装的话,就先安装
    • yum install httpd -y
  • 手动进入到/var/www/html中手动编写一个index.html的页面
  • 启动httpd服务,即可在浏览器上访问两个RS,注意端口是80,如果访问无效,注意到vi /etc/sysconfig/iptables开启80端口,此时可以单独访问,但是VIP此时是访问不了
  • 此时切换到VIP也就是lvs服务器上,进行到ipvsadm的安装,主要是后续的管理可视化,yum install ipvsadm -y,安装之后
  • ipvsadm -A -t 192.168.87.100:80 -s -rr 配置VIP也就是lvs负载均衡服务器
  • 解释上面配置中参数意义:工具 -A添加一个集群服务,-t表示使用tcp协议,集群服务地址,-s指定集群调度算法,-rr指代轮询算法
  • ipvsadm -a -t 192.168.87.100:80 - r 192.168.87.102 -g
  • ipvsadm -a -t 192.168.87.100:80 - r 192.168.87.103 -g
  • 解释上面配置中参数意义: 工具,-a添加一个真实服务器,-t使用tcp协议,服务地址,-r指明真实服务器地址 -g指代真实服务器转发工作模式DR模式,默认使用此模式
  • ipvsadm -ln表示查看当前连接情况
  • ipvaadm -lnc表示查看lvs转发情况统计
  • netstat -natp查看当前网络状态,-n表示不显示真实名,显示ip地址,-a是所有的,-t表示tcp协议,-p表示进程
    内容图*
    内容图

3. Keepalived学习

鉴于刚刚的实验中,虽然设置了VIP来利用负载均衡机制来轮询两个RealServer,但是就实验而言,首先当后端RS挂了,访问不了,VIP的ipvsadm中还是能够查询到此RS服务器的连接,也就是lvs服务器中并不知道它已经挂了,这个需要改进;当lvs挂了的话,两个RS就不能工作,此时需要改进这个,将我们的lvs改成主备模式的,这样的话,即使主服务器挂了的话,可以切换到从服务器,这样的话,对于客户端访问RS的用户不会有任何的影响。
为解决上述的问题,可以引入Keepalived

Keepalived是集群管理中保证集群高可用的服务软件
高可用High Available

  1. 需要心跳机制探测后端RS是否提供服务
    1.1 探测down,需要从lvs中删除RS
    1.2 探测发送从down到up,需要从lvs中再次添加RS
  2. Lvs DR,需要主备(HA)

Keepalived原理
VRRP协议:Virtual Router Redunancy Protocol(虚拟路由冗余协议)
IP漂移,对于我们从服务器的挂载ip有很重要的意义。

Keepalived就是替代ipvsadm的,有了它可以不用安装ipvsadm

实例:
说明:
01.ip地址,192.168.87.101 用作lvs负载均衡主服务器
02 ip地址,192.168.87.102 用作RS01,真实服务器
03 ip地址,192.168.87.103 用作RS02,真实服务器
04 ip地址,192.168.87.104 用作lvs负载均衡备用服务器
首先安装keepalived,在01和04执行yum install keepalived ipvsadm -y,进入到01的cd /etc/keepalived,会看到keepalived.conf配置文件,首先备份,有利于改错还原,cp keepalived.conf ./keepalived.conf.bak,此时进入到conf文件中,以下为配置好了的

! Configuration File for keepalived

global_defs {      // 全局配置 此部分配置如果有需要可以配置
   notification_email {		// 提醒的邮箱
     [email protected]
     [email protected]
     [email protected]
   } 
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP    // 状态为备用服务器,主的为MASTER
    interface eth0  // 使用的网络接口为eth0
    virtual_router_id 51
    priority 90     // 权重为90,备用服务器这个参数从主开始逐次降低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    // 配置VIP地址 
    // 等同于:ifconfig eth0:3 192.168.87.100/24
    virtual_ipaddress {
	192.168.87.100/24 dev eth0 label eth0:3
    }
}
// 配置虚拟服务器,设定为192.168.87.100
<!--
以下的配置等同于在lvs实验中的
ipvsadm -A -t 192.168.87.100:80 -s -rr
-->
virtual_server 192.168.87.100 80 {
    delay_loop 6   // 延迟循环
    lb_algo rr     // 轮询策略
    lb_kind DR     // 转发模式
    nat_mask 255.255.255.0   // 子网掩码
    persistence_timeout 0    // 持续的时间,实验配置成0,否则会一直调用一个RS
    protocol TCP   // TCP协议

    real_server 192.168.87.103 80 {  // 配置RS
        weight 1    // 权重
        HTTP_GET {  // 获取采用的协议http
            url {
              path /   // 跳转问题/可以直接跳转到/var/www/html中的index.html
		status_code 200   // 成功的状态码200 
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
  real_server 192.168.87.102 80 {
        weight 1
        HTTP_GET {
            url {
              path /
                status_code 200
            }       
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }       
    }
}

配置完之后,可以采用远程复制的方式将配置文件拷贝到04,scp ./keepalived.conf [email protected]:/etc/keepalived/ ,只需要将02,03配置好的服务启动,如果没有配置可以参照前面的lvs实验配置,service httpd start启动,01与04使用service keepalived start,启动即可。
此时使用ifconfig在01和04中可以发现04此时是没有eth0:3这个子接口的。
使用ipvsadm -ln在01和04中可以看到
在这里插入图片描述模拟lvs服务器挂了,只需要在01使用ifconfig eth0 down也就是网卡禁用,此时会在04中使用ifconfig看到eth0:3子接口,此时就发生了我们的vrrp虚拟路由冗余协议中的ip漂移现象

其中存在一个小bug,就是使用杀死线程的方式来中断lvs主服务器,这时候会发现在主备服务器的ifconfig中都能够看到eth0:3这个子接口,而在互联网当中,这种具有相同ip地址的行为是不被允许的。
杀死线程的操作
在这里插入图片描述
使用tail /var/log/messages可以看见操作keepalived的日志记录
在这里插入图片描述
注意:实验可能出现的问题

  • 主服务器挂了,192.168.87.100访问不了,这个主要是你的端口80未开放
  • 权重从的一定不要设置的比主大或者等于主,否则一旦主挂了,后期修复了抢占不会来的,会出现前后都有eth0:3(这种是权重相等的情况)
    在这里插入图片描述

4. nginx学习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 小结

这一节主要学习了网络的基础知识,对于七层协议的实际运用有了更多的理解,知道http协议是一个规定格式的字符串,一说到http就要想要请求头+响应体+响应头,应用层、传输层、网络层、数据链路层中各自的协议,三次握手为什么是三次,四次分手为什么是四次,都是很重要的知识,随后的lvs负载均衡服务器的实验,知道负载均衡服务器的作用是用作资源的调度。通过实验也发现负载均衡中出现的问题,随后就学习了Keepalived是集群管理中集群高可用的服务软件,基于VRRP协议,具有ip漂移的特性,在具体的实验中对于keepalived的作用更加的了解,它不同于lvs实验中的手动配置VIP的地址,而且RS服务器的健康状态,在lvs中没法检测,一旦挂了,lvs是不会发现的,而lvs一旦挂了,客户端就没法使用了。keepalived的高可用提供备用服务器,根据配置的权重,一旦主服务器挂了,马上选举出新的备用服务器作为主服务器,而对于RS服务器的健康状态,也是根据心跳机制来检测的,一点发现挂了,keepalived会down也就是下线这个RS,一旦发现修复了就up上线这个服务。

大数据学习路漫漫~加油! --沉下来,世界属于你!

发布了74 篇原创文章 · 获赞 12 · 访问量 8218

猜你喜欢

转载自blog.csdn.net/cao1315020626/article/details/100404340