一、架构介绍


集群部署方式实现的主要思想:Nginx 和上联交换机间运行 OSPF 协议,上联交换机通过ECMP 等价路由,将数据流分发给 Nginx 集群,Nginx 集群再转发给缓存服务器。Nginx 和交换机间运行 OSPF 心跳,1 个 vip 配置在集群的所有 Nginx 上,当一台 Nginx 宕机,交换机会自动发现并将其从 ECMP 等价路由中剔除。Nginx 服务器通过 Url 一致性哈希的算法分配给指定 Cache服务器,避免多份缓存。基于七层的健康检查,加入和剔除后端不会影响其它服务器。Cache 服务器接收 Nginx 的请求,每台 Cache 服务器都有内存、SSD、普通硬盘缓存。

架构图

整个架构被分为三层:

1.网络设备层:三层交换机或其它网络设备,运行 OSPF 协议,宣告与其直连负载均衡设备的网段,提供多条到 VIP 等价路径的设备,主动发现路径,主动更新路由信息表,可支持大流量,必须为万兆网络设备。

2.代理转发层:用 Nginx 七层代理替换了传统的四层代理,支持 Http 协议的转发,支持灵活的 ACL,网速限速,对访问 Url 进行一致性哈希,软件配置方便。与网络设备之间运行 OSPF 心跳来维护关系,多台服务器同时工作。

3.缓存层:通过不同的介质临时或永久保存用户访问的内容,按对象访问热点进行数据迁移: 最热的放进 RAM,中等热度的放 SSD,轻热度的存普通 Disk。用户点播过程中,频繁被访问的视频会从硬盘缓存到内存,同时访问次数超过指定次数,内容再次从普通机械硬盘缓存到 SSD 中,这样就实现了冷热门内容的分层缓存。

 1) 内存缓存层:快速的读写速率,适合存取频繁访问的数据。 
 2) SSD 缓存层:做为机械硬盘和内存之间的缓冲,保存次热门的数据,更好的衔接了内存与普通硬盘的读写速度。 
 3) 机械硬盘缓存层:读写速度最慢,可永久性保存冷门数据。

二、安装部署


1. 准备工作

在所有服务器上配置:

1) 关闭irqbalance,iptables,selinux

2) 更改内核参数,在/etc/sysctl.conf添加

fs.nr_open = 2097152
fs.file-max = 2097152
net.ipv4.tcp_mem = 3097431 4129911 6194862
net.ipv4.tcp_rmem = 4096 87380 6291456
net.ipv4.tcp_wmem = 4096 65536 4194304
net.ipv4.tcp_max_tw_buckets = 26214400
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse  = 0
net.ipv4.tcp_syncookies  = 0
net.ipv4.tcp_fin_timeout = 15
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn  = 65535
net.core.netdev_max_backlog  = 200000
vm.swappiness = 0
kernel.panic = 30
cat /etc/security/limits.conf 
*    soft    nofile  2097152
*    hard    nofile  2097152
*    soft    nproc   65535
*    hard    nproc   65535
*    soft    memlock 1048576
*    soft    memlock 1048576

3) 网卡中断绑定,上传irq/etc/init.d/

chmod +x /etc/init.d/irq
chkconfig irq on
service irq start

2. 安装ATS

在所有Cache Server上部署ATS

(1) 编译安装
yum install
 pkgconfig libtool 
gcc
 gcc-c++ 
make
 openssl-devel tcl-devel expat-devel pcre-devel libcap-devel flex-devel hwloc-devel lua-devel ncurses-devel 
 curl-devel boost-devel
tar xf trafficserver-4.2.3.tar.bz2 
cd trafficserver-4.2.3
sed -i  's/ApacheTrafficServer/iTS/g' mgmt/RecordsConfig.cc

./configure --prefix=/usr/local/trafficserver \
--with-user=nobody \
--with-group=nobody \
--with-ncurses \
--enable-debug \
--enable-test-tools \
--enable-interim-cache \
--enable-experimental-plugins \
--enable-example-plugins \
--enable-hwloc



make && make install 

ln -s /usr/local/trafficserver/bin/* /usr/local/bin/
mkdir /data/logs -p ; chown nobody:nobody /data/logs -R

chown nobody /usr/local/trafficserver/ -R
(2) 挂载裸设备

挂载除系统盘外,所用到的所有裸盘

cat /etc/udev/rules.d/51-cache-disk.rules 
SUBSYSTEM=="block", KERNEL=="sd[a-q]", MODE=="660" OWNER:="nobody" GROUP:="nobody"
执行 udevadm trigger --subsystem-match=block 生效
查看ll /dev/sd*
(3) 健康检查

配置前端负载均衡器到ATS 7层健康检查,方便平滑踢出负载
plugin.config中添加

# healthchecks Plugin
/usr/local/trafficserver/libexec/trafficserver/healthchecks.so etc/trafficserver/healthchecks.config

etc/trafficserver下新建healthchecks.config,添加以下内容(说明查看plugins/experimental/healthchecks/README)

/__hc  /usr/local/trafficserver/hc/ping.html  text/plain 200  404

新建ping.html

mkdir /usr/local/trafficserver/hc; echo OK 
>
 /usr/local/trafficserver/hc/ping.html
(4) tsar安装

tar 地址:https://github.com/alibaba/tsar

cd tsar
cd modules/
 sed -i 's/mgmtapisocket/mgmtapi.socket/g' *.c
sed -i 's/eventapisocket/eventapi.socket/g' *.c
cd ..
make 
make install

ln -s /usr/local/trafficserver/var/trafficserver/mgmtapi.sock /var/run/trafficserver/
ln -s /usr/local/trafficserver/var/trafficserver/eventapi.sock /var/run/trafficserver/

3. 配置代理

在所有前端代理上配置:

(1) 安装quagga
yum install
 quagga
cat /etc/quagga/zebra.conf
hostname cnbzgpngx22cdnp01
password 123456.itv
enable password 123456.itv
cat /etc/quagga/ospfd.conf
! -*- ospf -*-

hostname cnbzgpngx22cdnp01
password 123456.itv

log stdout
interface bond0
  ip ospf network broadcast
  ip ospf hello-interval 1 # hello包时间
  ip ospf dead-interval 4  # 死亡时间
  ip ospf priority 0  # 优先级为0 DRother

interface bond00

interface lo

router ospf
  ospf router-id 10.191.172.131
  log-adjacency-changes
  auto-cost reference-bandwidth 1000     #设置路径花费,每台相同
  network 10.191.172.128/27 area 0.0.0.0  # 宣告nginx外网段和VIP 
  network 10.191.172.130/32 area 0.0.0.0

line vty

启动服务

/etc/init.d/zebra start ; /etc/init.d/ospfd start

在每台上绑定VIP

cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.191.172.130
NETMASK=255.255.255.255
ifup
 lo:
0
(2) 交换机配置OSPF
router id 1.1.1.1
#
ospf 1
 maximum load-balancing 6
 area 0.0.0.0
  network 1.1.1.1 0.0.0.0
  network 10.191.172.128 0.0.0.31


nterface Vlan-interface22
 ip address 10.191.172.129 255.255.255.224
 ospf timer hello 1  # hello包时间要一致
 ospf timer dead 4   # 死亡时间要一致
 ospf network-type broadcast
 ospf dr-priority 100

配置完交换机后可以看到到VIP 有多条等价的路径

[CnXXXCdnHHXXXSw01]display ospf routing

     OSPF Process 1 with Router ID 1.1.1.1
          Routing Table

 Routing for network
 Destination        Cost     Type    NextHop         AdvRouter       Area
 10.191.172.128/27  1        Transit 0.0.0.0         1.1.1.1         0.0.0.0
 10.191.172.130/32  101      Stub    10.191.172.131  10.191.172.131  0.0.0.0
 10.191.172.130/32  101      Stub    10.191.172.132  10.191.172.132  0.0.0.0
 10.191.172.130/32  101      Stub    10.191.172.133  10.191.172.133  0.0.0.0
 1.1.1.1/32         0        Stub    0.0.0.0         1.1.1.1         0.0.0.0

 Total nets: 5  
 Intra area: 5  Inter area: 0  ASE: 0  NSSA: 0 
[CnXXXCdnHHXXXSw01]
(3) 安装tengine
yum install
 tengine

results matching ""

    No results matching ""