0%

集群相关知识

Marathon

应用重启

  • 重启方式:marathon会根据mesos发送过来的offer把该服务在任意一台服务器上重启,故引入两个问题:
    • 如果这个服务是有状态的,那么它再次在另外的机器上启动之后,怎么恢复它的状态?Marathon支持本地的持久化卷来解决这个问题
    • 如果这个服务之前作为其他服务的后端,或者有外部的客户端和它进行通信,那么当他启动到别的机器上之后,IP地址发生了变化,那么其他服务和外部的客户端改怎么和新的服务进行通信?Marathon支持Service Discovery的方式来解决这个问题
  • 提供沙箱机制来管理每个应用的实例
  • Rolling Upgrade的支持:即应用程序新版本发布后可以在不中断服务的情况下升级到新版本
  • 支持高可用:只需要启动多个Marathon的服务并且指定一个相同的Zookeeper路径,Zookeeper会提供多个Marathon服务之间的Leader选举。并且用户可以在Marathon的非leader节点上操作,而不是像Mesos那样会跳转到leader节点

Marathon-lb

Marathon-lb是个基于HAProxy的快速代理和负载均衡。它能为基于TCP和HTTP协议的应用提供代理和负载均衡,此外还支持SSL、健康检查、HTTP压缩、Lua脚本等特性。Marathon-lb通过Marathon的EventBus可以自动获取Marathon上每个应用的信息,并且能够为每组应用生成HAProxy配置。不同于通过域名机制来发现服务的Mesos-DNS,Marathon-lb是通过servicePort服务端口来发现服务外,另外,还可以通过VHOST来访问服务。

  • 问题:Marathon通过一个json配置文件启动两个Nginx服务的instance,此时只生成一个marathon-lb的servicePort?并且通过这一个servicePort可以访问两个Nginx服务吗?
    • 只生成一个servicePort,通过这个servicePort可以访问这两个Nginx服务,marathon-lb为这两个Nginx服务生成HAProxy配置,通过HAProxy来实现负载均衡,应用层–http层的负载均衡

计算机网络

SNAT

私网中的主机请求外网时,在可以连接外网的主机上修改请求的源IP地址,起到隐藏私网主机的作用,如:

1
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 公网IP
  • -t nat表示修改nat表
  • -A POSTROUTING表示将SNAT规则加入到POSTROUTING链中,SNAT只存在于POSTROUTING和INPUT链中。POSTROUTING是iptables中报文发出去的最后一个关卡,故确保报文发出去之前修改源IP地址。
  • -s 10.1.1.0/24 --to-source 公网IP表示将来自内网10.1.1.0/24网段的请求的源IP地址改为公司内部可以出外网的IP
    如果外网IP时动态的,则使用MASQUERADE:
    1
    iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE
    -o eth0 -j MASQUERADE表示将内网中来自10.1.1.0/24网段的请求的源IP地址指向网卡eth0对应的IP地址,起到一个IP地址的动态装换

DNAT

公网中的主机请求内网中的主机上的服务的时候,可以在能出外网的主机上修改请求的目的IP地址,即可使外网访问内网的服务:

1
iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 公网端口 -j DNAT --to-destination 私网IP:端口号
  • -I PREROUTING表示将DNAT规则加入PREROUTING链中,DNAT只存在于PREROUTING和OUTPUT链中。PREROUTING是在路由器路由之前,如果不在这儿修改目的IP地址,则路由器会根据原来的IP地址转发该报文
  • -d 公网IP -p tcp --dport 公网端口 --to-destination 私网IP:端口号公网主机首先向公司可以出外网的IP地址请求,这里表示将此IP地址的tcp的公网端口改为内网:端口。

HTTPS通信

过程如图:
image

  • 浏览器发送https连接请求
  • 服务器向客户端返回证书
  • 浏览器生成一串随机数,用证书加密,发送给服务器端。该随机数用作之后通信的对称秘钥
  • 服务器使用私钥对浏览器发送过来的加密的数据进行解密,拿到对称秘钥,并使用该对称秘钥加密一段握手消息发送给浏览器
  • 浏览器使用对称秘钥解密握手消息,并使用该对称秘钥加密ACK通知服务器通信已建立
  • 之后浏览器和服务器之间的通信的数据就是用浏览器之前生成的那串随机对称秘钥并利用对称加密算法进行加密

HTTP请求消息

image

状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

参考文献: