第15周作业

题目一:简述HA cluster原理

一、高可用集群(HA Cluster)

集群可分为:LB负载均衡集群、HA高可用集群、HP高性能集群

由于计算机硬件和软件出现问题时会使提供的服务中断,高可用集群则可以保证集群的服务高度可用,减少因服务中断所带来的损失。如果某个节点失效,它的备援节点将在几 秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。

高可用集群的三种形式:主从方式、对称方式、多机方式

二、高可用集群的衡量标准

高可用性群集是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上,通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%
具体HA衡量标准:
99% 一年宕机时间不超过4天
99.9% 一年宕机时间不超过10小时
99.99% 一年宕机时间不超过1小时
99.999% 一年宕机时间不超过6分钟

三、高可用集群的原理

1、信息层(Messaging Layer)
传递当前节点的心跳信息,从而让对方知道其他节点是否在线。如果不在线就进行资源转移,使另一台节点充当主节点来提供服务

2、资源管理器层
真正实现集群服务的层,其包含CRM(集群资源管理器,cluster Resource Manager),CIB(集群信息基库,Cluster Infonation Base),PE(策略引擎,Policy Engine),TE(实施引擎,Transition Engine), LRM(Local Resource Manager,本地资源管理器)。
(1)集群资源管理器(Cluster Resource Messager,CRM)
主要工作是根据信息层传递的信息来决定服务的启动、停止、资源转移、资源的定义和资源的分配。在没一个节点上都包含一个CRM,而且每个CRM都维护这一个集群信息库(Cluster Internet Base,CIB)。只有主节点上的CIB可以修改,其他节点上的CIB都是从主节点上复制过来的。
(2)本地资源管理器(Local Resource Messager,LRM)
CRM的一个子组件,用于获取某个资源的状态并且管理本地资源。例如,检测到对方没有心跳信息时,启动本地相应服务。

(3)DC
当多个节点之间彼此接收不到对方的心跳信息时,这样各个节点就会都认为对方发生故障,从而就会产生分裂状况(分组),然后都运行着相关服务,因此进行资源争夺。DC就是用于防止这种情况发生的,可以理解为事务协调员。DC会根据每个组的法定票数来决定哪些节点启动服务,哪些节点停止服务。
例如高可用集群有3个节点,其中2个节点可以正常传递心跳信息,与另一个节点不能相互传递心跳信息,因此,这样3个节点就被分成了2组,其中每一个组都会推选一个DC,用来收集每个组中集群的事务信息,并形成CIB,且同步到每一个集群节点上。同时DC还会统计每个组的法定票数(quorum),当该组的法定票数大于二分之一时,则表示启动该组节点上的服务;否则停止该节点上的服务。对于某些性能比较强的节点来说,它可以投多张票,因此每个节点的法定票数并不是只有一票,需要根据服务器的性能来确定。DC一般位于主节点上。
任何DC上会额外运行两个进程,一个叫PE(Policy Engine)、一个叫TE(Transition Engine)。PE 定义资源转移的一整套转移方式,但只做策略,并不亲自来参加资源转移的过程,而是让TE来执行自己的策略。

(4)集群信息基库(Cluster Infonation Base,CIB)
XML格式的配置文件,工作的时候常驻内存,只有DC才能对CIB进行修改,其他节点上的复制DC上的CIB而来。集群的所有信息都会反馈在CIB中。

3、资源代理层(Resource Agents)
管理本节点上的属于集群资源的某一资源的启动、停止和状态信息的脚本。任何资源代理都要使用同一种风格,接收四个参数:{start|stop|restart|status},每个种资源的代理都要完成这四个参数据的输出。

工作机制:
PE根据CIB获取资源的配置信息做出决策,然后进行资源管理。PE借助本地CRM通知给其节点CIB来实现资源管理信息的传递(比如通知其他CRM启动某一资源),收到信息后CRM不负责启动,转由LRM启动,而并发资源又借助于RA实现资源管理。

  • 故障切换过程
    Failover:故障切换,即某资源主节点故障时,将资源转移至其他节点;
    Failback:故障移回,即某资源的主节点故障后重新修改上线后,将转移至其他节点的资源重新切回的过程
  • 两个节点集群方案辅助设备
    NodePing:提供网站和服务器可用性监控。
  • 公用存储器解决
    NAS:文件共享服务器
    SAN:存储区域网络,块级别的共享;

题目二: keepalived实现主从、主主架构

HA Cluster的配置前提:

  1. 各节点时间必须同步(ntp,chrony)
  2. 确保iptables及selinux不会成为阻碍
  3. 各节点之间可通过主机名互相通信(对keepalive非必须)
  4. 各节点之间的root用户可以基于**认证的ssh服务互相通信(非必须)
  5. 确保各节点的用于集群服务的接口支持MULTICAST通信
    查看:ifconfig,开启:ip link set multicast on dev ens33

1、主从架构
(1)主节点的安装、配置

[[email protected] ~]  yum -y install keepalived
[[email protected] ~]# vim /etc/keepalived/keepalived.conf 

	! Configuration File for keepalived
	#全局配置
	global_defs {  
	   notification_email {     #邮件通知地址 ,这里是本机收件地址
	    [email protected]
	 }
	   notification_email_from [email protected]   #发件地址
	   smtp_server 127.0.0.1          #邮件服务地址,端口是25
	   smtp_connect_timeout 30        #连接邮件服务器超时时间30秒
	   router_id node1                #使用主机名
	   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
	}
	
	#定义一个虚拟路由器
	vrrp_instance VI_1 { 
	    state MASTER              #状态
	    interface ens33           #绑定到哪个网卡
	    virtual_router_id 33      #虚拟路由id,与其他主机要保持一致
	    priority 100              #优先级
	    advert_int 1
	    authentication {
	        auth_type PASS       #密码认证
	        auth_pass 88888888   #密码为8位,不能用默认的密码
	    }
	    virtual_ipaddress {      #虚拟ip地址
	        192.168.186.99/24 dev ens33 label ens33:0
	    }
	}
[[email protected] ~]# systemctl start keepalived  
[[email protected] ~]# systemctl status keepalived 

(2)备节点安装、配置

[[email protected] ~]  yum -y install keepalived
[[email protected] ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
#全局配置
global_defs {
   notification_email {#邮件通知地址 ,这里是本机收件地址
    [email protected]
 }
   notification_email_from [email protected]   #发件地址
   smtp_server 127.0.0.1 #邮件服务地址,端口是25
   smtp_connect_timeout 30  #连接邮件服务器超时时间30秒
   router_id node2 #使用主机名
   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}

#定义一个虚拟路由器
vrrp_instance VI_1 {
    state BACKUP  #状态
    interface ens33  #绑定到哪个网卡
    virtual_router_id 33#虚拟路由id,与其他主机要保持一致
    priority 96 #优先级,低于master主机
    advert_int 1
    authentication {
        auth_type PASS       #密码认证
        auth_pass 88888888   #密码为8位,不能用默认的密码
    }
    virtual_ipaddress {  #虚拟ip地址
        192.168.186.99/24 dev ens33 label ens33:0
    }
}
[[email protected] ~]# systemctl start keepalived  
[[email protected] ~]# systemctl status keepalived 

2、主主架构
(1)主节点安装、配置

[[email protected] ~]# vim /etc/keepalived/keepalived.conf 

	! Configuration File for keepalived
	#全局配置
	global_defs {
	   notification_email {           #邮件通知地址 ,这里是本机收件地址
	    [email protected]
	 }
	   notification_email_from [email protected]   #发件地址
	   smtp_server 127.0.0.1          #邮件服务地址,端口是25
	   smtp_connect_timeout 30        #连接邮件服务器超时时间30秒
	   router_id node1                #可以使用主机名
	   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
	}
	#定义第一个虚拟路由器
	vrrp_instance VI_1 { 
	    state MASTER             #状态
	    interface eth0           #当前的vrp应用,绑定到那个网卡设备上
	    virtual_router_id 33     #这个虚拟ip,与其他主机要保持一至
	    priority 100             #优先级,高于其他主机
	    advert_int 1
	    authentication {
	        auth_type PASS       #密码认证
	        auth_pass 88888888   #密码为8位,不能用默认的密码
	    }
	    virtual_ipaddress {      #虚拟ip地址
	        192.168.186.99/24 dev ens33 
	    }
	}
	#定义第二个虚拟路由器
	vrrp_instance VI_2{ 
	    state BACKUP             #状态
	    interface eth0           #绑定到哪个网卡上
	    virtual_router_id 34     #虚拟路由id,与其他主机要保持一至
	    priority 96              #优先级,低于master主机
	    advert_int 1
	    authentication {
	        auth_type PASS       #密码认证
	        auth_pass 77777777   #密码为8位,不能用默认的密码,这里修改一下
	    }
	    virtual_ipaddress {      #虚拟ip地址
	        192.168.186.9924 dev ens33
	    }
	}
[[email protected] ~]# systemctl start keepalived  

(2)备节点安装、配置

[[email protected] ~]# vim /etc/keepalived/keepalived.conf 

	! Configuration File for keepalived
	#全局配置
	global_defs {
	   notification_email {           #邮件通知地址 ,这里是本机收件地址
	    [email protected]
	 }
	   notification_email_from [email protected]   #发件地址
	   smtp_server 127.0.0.1          #邮件服务地址,端口是25
	   smtp_connect_timeout 30        #连接邮件服务器超时时间30秒
	   router_id node1                #可以使用主机名
	   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
	}
	#定义第一个虚拟路由器
	vrrp_instance VI_1 { 
	    state BACKUP             #状态
	    interface eth0           #当前的vrp应用,绑定到那个网卡设备上
	    virtual_router_id 33     #这个虚拟ip,与其他主机要保持一至
	    priority 96             #优先级
	    advert_int 1
	    authentication {
	        auth_type PASS       #密码认证
	        auth_pass 88888888   #密码为8位,不能用默认的密码
	    }
	    virtual_ipaddress {      #虚拟ip地址
	        192.168.186.99/24 dev ens33 
	    }
	}
	#定义第二个虚拟路由器
	vrrp_instance VI_2{ 
	    state MASTER             #状态
	    interface eth0           #绑定到哪个网卡上
	    virtual_router_id 34     #虚拟路由id,与其他主机要保持一至
	    priority 100             #优先级
	    advert_int 1
	    authentication {
	        auth_type PASS       #密码认证
	        auth_pass 77777777   #密码为8位,不能用默认的密码,这里修改一下
	    }
	    virtual_ipaddress {      #虚拟ip地址
	        192.168.186.99/24 dev ens33
	    }
	}
[[email protected] ~]# systemctl start keepalived  

题目三:简述http协议缓存原理及常用首部讲解

(1)强制缓存机制(过期时间机制)
基本原理:
客户端第一次请求服务端时,服务端把缓存规则信息添加到header中,客户端通过这些信息判断是否能缓存。若能强制缓存,则header中会有两个字段来标记缓存失效的时间(expires或cache-control)。在客户端第一次请求并添加缓存后,以后每次客户端的请求响应数据都是缓存服务器提供的,不会再是服务端。缓存服务器根据cache-control字段来判断是否使用、是否更新、何时更新缓存。

  • expires,缓存过期时间
  • cache-control有下面几个参数:
    public,允许客户端和代理使用缓存,即客户端请求的资源可以被任何缓存区所缓存
    private,允许客户端使用缓存,即对于某个用户的响应信息不能被共享缓存区所缓存
    max-age,缓存最大失效时长(单位为秒)
    no-cache,关闭强制缓存,需要使用对比缓存
    no-store,所有内容都不缓存
    (2)对比缓存机制(条件式缓存机制):
    基本原理:
    a)缓存命中的情况:客户端向缓存服务器请求获取缓存header标识,客户端获取标识后,向后端服务器发送header标识规则,若未失效便通知客户端使用缓存服务器缓存的数据(状态码304)。
    b)缓存未命中的情况:客户端向缓存服务器请求获取缓存header标识,客户端获取标识后,向后端服务器发送header标识规则,若失效便通知客户端不使用缓存服务器缓存的数据(状态码200),并更新缓存。
    对比缓存标识:
    last-modified/if-modfied-since:资源最后的修改时间戳
    etag/if-none-match:资源校验码

题目四:简述回源原理和CDN常见多级缓存

回源

客户端在发送请求报文时,响应该请求报文的是源站点的服务器,而不是各节点上的缓存服务器,那么这个过程相对于通过各节点上的缓存服务器来响应的话就称作为回源。如果回源的请求或流量太多,会使源站点的服务器承载着过大的访问压力,进而影响服务的正常访问。
回源比和缓存的命中率正好相反,回源比高,说明缓存系统的缓存命中率低。回源比分为回源请求数比例和回源流量比例两种。
回源请求数比:收集所有边缘节点上的请求记录,没有缓存或缓存过期的请求以及不可缓存的请求视为回源请求,发往源站点服务器响应。其他请求由缓存系统直接响应。计算公式:回源请求数/(回源请求数+用户发送的请求数)
回源流量比回源流量/(回源流量+用户请求访问的流量)

CDN(Content Delivery Network),内容分发网络

基本思路:尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环境,使传输更快更稳定。 通过在网络各处放置节点服务器所构成的互联网基础上的一层智能虚构网络,CDN能够实时根据网络流量和各节点的连接、负载以及到用户的距离和响应时间的那个综合信息将用户的请求重新导向离用户最近的服务节点上。这样可以使用户就近获取所需内容,解决网络拥挤状况,提高用户访问速度。
工作方法:客户端本地缓存若过期,则向CDN边缘节点发起请求;若用户请求的数据在CDN边缘节点过期,则CDN向源站发起回源请求。
问题:若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;若CDN缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来做特定的数据缓存时间管理。

第15周作业


题目五:varnish实现缓存对象及反代后端主机

实验环境
客户端:172.16.0.1
nginx反代服务器:172.16.0.6,192.168.186.136
varnish主机:192.168.186.143
后端主机:192.168.186.150

一、nginx反代服务器配置

[[email protected] ~]# vim /etc/nginx/nginx.conf
#在http中添加
upstream websrvs {
    server 192.168.186.143:80;
}
#在server中添加
location / {
    proxy_pass http://websrvs;
}

二、varnish主机配置

[[email protected] ~]# vim /etc/varnish/default.vcl
backend default {
    .host = "192.168.186.150";
    .port = "80";
}
[[email protected] ~]# varnishadm
vcl.load test1 default.vcl
vcl.use test1

三、后端主机配置

[[email protected] ~]# vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 192.168.186.150:80>
        ServerName 192.168.186.150
        DocumentRoot "/data/web/vhost1"
        <Directory "/data/web/vhost1">
                Options FollowSymLinks
                AllowOverride None
                Require all granted
        </Directory>
</VirtualHost>
[[email protected] ~]# vim /data/web/vhost1/index.html
<h1>Vhost1</h1>

四、客户端测试
第15周作业