`
簡單從泚銷夨
  • 浏览: 73020 次
  • 性别: Icon_minigender_1
  • 来自: 文一西路969号
社区版块
存档分类
最新评论

ATS+Nginx+FastDFS

阅读更多
最近有个需求,需要用到图片服务器,对于这个需求,如果走公司统一内部集群,一点问题都没有,只可惜我们的服务必须部署到公有云,也就是说公司的内部工具、服务,我们一般都用不了,如果购买公有云的服务和工具,那又需要提高成本,所以,所以,所以我们自己通过物理机搭建了自己的图片服务器。
         技术选型:ATS+Nginx+FastDFS
         FastDFS作为图片存储,ATS作为CDN,整体架构如下:



         FastDFS架构(from 51CTO网):
      
         ATS(from oschina)

最后进行压测
一台物理机,内存:252G,硬盘:600G+ , cpu:64核 , 网卡:千兆 双网卡,160kb+图片
网卡几乎打满,rt在500ms,线程500,ATS的负载还是很小,ATS本地90%以上在1ms之内返回,所以网卡成了最后的瓶颈点。




===============================================================
附一些资料:
AST 日志: /usr/local/var/log/trafficserver
AST 配置文件:/usr/local/etc/trafficserver
FstDFS配置文件:/etc/fdfs/

sudo /usr/bin/fdfs_test /etc/fdfs/client.conf upload  ~/pic/3.pic.jpg


http://sofar.blog.51cto.com/353572/1656160
http://blog.csdn.net/xifeijian/article/details/38567839/ FastDFS安装、配置、部署(一)-安装和部署
http://bbs.chinaunix.net/thread-1941456-1-1.html [FastDFS] FastDFS 配置文件详解
http://bbs.go-news.com/thread-54-1-1.html Trafficserver5.3 安装配置
http://twiki.corp.taobao.com/pub/SRE/OPS/CdnATStest/TS_%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95%E4%B9%8BCache.pdf  TS 功能测试之Cache
https://linux.cn/article-3215-1.html  Linux终端下 dstat 监控工具
https://docs.trafficserver.apache.org/en/latest/admin-guide/monitoring/statistics/core/cache.en.html  cache 监控


trafficserver-5.3.2.tar.bz2
tengine-1.5.2.tar.gz
libfastcommon-1.0.7.tar.gz
fastdfs-5.05.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
======
监控:
sar -n DEV 2
dstat

./traffic_line -r proxy.node.cache_hit_ratio_avg_10s #查询当前缓存服务命中率
./traffic_line -r proxy.node.current_server_connections #到后端源的连接数
./traffic_line -r proxy.node.current_client_connections #前端用户到TServer的连接数
./traffic_line -r proxy.node.user_agent_xacts_per_second #平均每秒处理的并发数
./traffic_line -r proxy.node.client_throughput_out #当前TServer输出到前端的带宽流量(单位Mbps)

=======
Traffic Server 是一套快速、模块化的兼容 HTTP/1.1 的反向代理服务器,与 Nginx 和 Squid 类似,Apache软件基金会发布的最新版本是Apache Traffic Server v5.3.0。Traffic Server的处理能力非常强大,它可以在对内容传输要求非常严格的真实部署环境中处理TB级的数据。

官网:http://trafficserver.apache.org/
http://apache.fayea.com/trafficserver/trafficserver-5.3.0.tar.bz2

1、安装依赖
# yum install tcl-devel pcre-devel

2、源码编译
# cd /usr/local/src
# wget http://apache.fayea.com/trafficserver/trafficserver-5.3.0.tar.bz2
# tar jxf trafficserver-5.3.0.tar.bz2
# cd trafficserver-5.3.0
# ./configure --prefix=/usr/local/trafficserver
# make make install
# cp rc/trafficserver /etc/init.d/# 开机启动
# chmod 755 /etc/init.d/trafficserver && chkconfig --add trafficserver && chkconfig trafficserver on

3、配置
records.config 主配置文件 ,是 key-value 格式的配置文件,负责大部分全局的选项设置
storage.config 用于指定磁盘存储。
remap.config   定义映射规则,用于请求的重写(rewrite),反向代理即在此配置

storage.config举例
/data1/cache 256M
/data2/cache 256M
remap.config举例
map http://www.go-news.com http://192.168.4.56

records.config详解
#ts管理用户名
CONFIG proxy.config.admin.admin_user STRING admin
#配置文件副本数量
CONFIG proxy.config.admin.number_config_bak INT 3
#选项用于指定运行的traffic_server过程,也可以用来指定的配置文件和日志文件的所有权
CONFIG proxy.config.admin.user_id STRING nobody

##############################################################################
# Thread configurations. Docs:
#    https://docs.trafficserver.apach ... c-thread-autoconfig
##############################################################################
# TS线程数量根据可用的CPU核数进行调整,默认值为1,即开启
CONFIG proxy.config.exec_thread.autoconfig INT 1
# 上面配置开启,TS CPU核数与TS线程数量的默认比例,默认的缩放比例是1.5。CPU核数*缩放比例=TS线程数量
CONFIG proxy.config.exec_thread.autoconfig.scale FLOAT 1.5
# 当proxy.config.exec_thread.autoconfig值为0时,设置TS线程数量
CONFIG proxy.config.exec_thread.limit INT 2
# 设置SSL线程数量,默认是CPU数量和proxy.config.exec_thread.autoconfig.scale的乘积。
# 你可以设置非零的值
CONFIG proxy.config.ssl.number.threads INT 0
# 当启用时设置1,运行一个单独的线程来处理请求。如果禁用(0),那么只有一个线程
CONFIG proxy.config.accept_threads INT 1
# 配置任务的线程池,推荐2
CONFIG proxy.config.task_threads INT 2
# 设置每块磁盘分配多少的I/O线程
CONFIG proxy.config.cache.threads_per_disk INT 8
# https://docs.trafficserver.apach ... xec-thread-affinity
CONFIG proxy.config.exec_thread.affinity INT 0

##############################################################################
# Specify server addresses and ports to bind for HTTP and HTTPS. Docs:
#    https://docs.trafficserver.apach ... g-http-server-ports
##############################################################################
# 配置端口,默认8080
CONFIG proxy.config.http.server_ports STRING 80

##############################################################################
# Via: headers. Docs:
#     https://docs.trafficserver.apach ... rt-response-via-str
##############################################################################
# 配置via字段的处理方式,1 用正常的信息来更新via
CONFIG proxy.config.http.insert_request_via_str INT 1
# 配置如何处理响应到客户端的via字段,0不做修改
# 1     用正常的信息来更新via
# 2     用详细信息来更新via
# 3     用最详细信息来更新via
CONFIG proxy.config.http.insert_response_via_str INT 0

##############################################################################
# Parent proxy configuration, in addition to these settings also see parent.config. Docs:
#    https://docs.trafficserver.apach ... proxy-configuration
#    https://docs.trafficserver.apach ... rent.config.en.html
##############################################################################
# 设置关闭父节点
CONFIG proxy.config.http.parent_proxy_routing_enable INT 0
# 当父节点不可用时,设置重试时间
CONFIG proxy.config.http.parent_proxy.retry_time INT 300
# 父节点不可用时,设置超时时间
CONFIG proxy.config.http.parent_proxy.connect_attempts_timeout INT 30
# 配置发送身份验证信息到父节点
CONFIG proxy.config.http.forward.proxy_auth_to_parent INT 0
# 设置不可缓存请求使用旁路请求父节点
CONFIG proxy.config.http.uncacheable_requests_bypass_parent INT 1

##############################################################################
# HTTP connection timeouts (secs). Docs:
#    https://docs.trafficserver.apach ... connection-timeouts
##############################################################################
# 指定事务结束后为保证后续进入请求而继续打开的连接时间
CONFIG proxy.config.http.keep_alive_no_activity_timeout_in INT 115
# 指定事务结束后为保证后续出口请求而继续打开的连接时间
CONFIG proxy.config.http.keep_alive_no_activity_timeout_out INT 120
# 指定如果发生网络拥塞时(入),ts服务器多长时间后与客户端断开连接
CONFIG proxy.config.http.transaction_no_activity_timeout_in INT 30
# 指定如果发生网络拥塞时(出),ts服务器多长时间后与客户端断开连接
CONFIG proxy.config.http.transaction_no_activity_timeout_out INT 30
# 和客户端保持连接的最长时间(入)
CONFIG proxy.config.http.transaction_active_timeout_in INT 900
# 和客户端保持连接的最长时间(出)
CONFIG proxy.config.http.transaction_active_timeout_out INT 0
# 关闭没有活动的连接的超时时间间隔
CONFIG proxy.config.http.accept_no_activity_timeout INT 120
# 设置连接闲置超时设置
CONFIG proxy.config.net.default_inactivity_timeout INT 86400

##############################################################################
# Origin server connect attempts. Docs:
#    https://docs.trafficserver.apach ... er-connect-attempts
##############################################################################
# 当源服务器没有响应时,ts最大重试次数
CONFIG proxy.config.http.connect_attempts_max_retries INT 6
# 当源服务器不可用时,ts最大重试次数
CONFIG proxy.config.http.connect_attempts_max_retries_dead_server INT 3
# 如果该服务器DNS有做轮循,则在轮循条目标记为down之前允许尝试连接失败的最大值
CONFIG proxy.config.http.connect_attempts_rr_retries INT 3
# 源服务器连接的超时值
CONFIG proxy.config.http.connect_attempts_timeout INT 30
# POST/PUT请求时,源服务器的超时值
CONFIG proxy.config.http.post_connect_attempts_timeout INT 1800
# 指定多长时间后,TS标记源服务器为down掉
CONFIG proxy.config.http.down_server.cache_time INT 300
# 在一个客户端因为源服务器相应太慢而放弃请求之后到TS标记该服务器不可达之间的秒数
CONFIG proxy.config.http.down_server.abort_threshold INT 10

##############################################################################
# Negative response caching, for redirects and errors. Docs:
#    https://docs.trafficserver.apach ... ve-response-caching
##############################################################################
# 开启/禁用负响应缓存.当TS缓存到一个负响应时(如404),下一客户端请求相应URL时,直接由TS服务器返回负响应
# 负响应包括:204 305 400 403 404 405 500 501 502 503 504
CONFIG proxy.config.http.negative_caching_enabled INT 0
# 设置缓存负响应时间
CONFIG proxy.config.http.negative_caching_lifetime INT 1800

##############################################################################
# Proxy users variables. Docs:
#    https://docs.trafficserver.apach ... roxy-user-variables
##############################################################################
# 启用之后将添加Client_IP头保留客户端的IP地址
CONFIG proxy.config.http.anonymize_insert_client_ip INT 1
# 启用后,将添加客户端的IP地址添加到x-forward-for
CONFIG proxy.config.http.insert_squid_x_forwarded_for INT 1
##############################################################################
# Security. Docs:
#    https://docs.trafficserver.apache.org/records.config#security
##############################################################################
# 启用/禁用HTTP PUSH的选项
CONFIG proxy.config.http.push_method_enabled INT 0

##############################################################################
# Enable / disable HTTP caching. Useful for testing, but also as an
# overridable (per remap) config
##############################################################################
# 配置开启http缓存
CONFIG proxy.config.http.cache.http INT 1

##############################################################################
# Cache control. Docs:
#    https://docs.trafficserver.apach ... onfig#cache-control
#    https://docs.trafficserver.apach ... ache.config.en.html
##############################################################################
# 是否忽略所有客户端中的max-age头
CONFIG proxy.config.http.cache.ignore_client_cc_max_age INT 1
# 启用后使所有的Accept-Encoding头部规范化
CONFIG proxy.config.http.normalize_ae_gzip INT 1
# 缓存响应cookie的五个选项
# 0 - 不缓存所有cookies响应
# 1 - 只缓存content-type
# 2 - 只缓存图片
# 3 - 缓存所有的文字内容类型
# 4 - 缓存为所有除了系统响应的没有”Set-Cookie”或者有”Cache-Control:public”的文字内容类型
# ts缓存cookies操作
CONFIG proxy.config.http.cache.cache_responses_to_cookies INT 1
# 缓存动态文件内容
CONFIG proxy.config.http.cache.cache_urls_that_look_dynamic INT 1
# https://docs.trafficserver.apach ... -when-to-revalidate
# 重新验证内容的5个选项
# 0 - 默认.使用缓存指令或启发式缓存
# 1 - 启发式缓存
# 2 - 总是陈旧的(总是重新验证)
# 3 - 不刷新
# 4 - 如果请求含有条件则验证,否则使用默认值
# 如果该请求中包含的If-Modified-since,然后TS的总是重新验证缓存的内容,
# 并使用客户端的代理请求的If-Modified-Since的头。
# TS重新验证缓存机制
CONFIG proxy.config.http.cache.when_to_revalidate INT 0
# https://docs.trafficserver.apach ... he-required-headers
# 配置TS缓存所需要的头部
# 所需头部的三个选项:
# 0 - 不需要使用头部来决定文档是否可以缓存
# 1 - 需要Last-Modified:", "Expires:", 或者 "Cache-Control: max-age"
# 2 - 明确缓存生命周期需要的,"Expires:" 或者"Cache-Control: max-age
CONFIG proxy.config.http.cache.required_headers INT 2

##############################################################################
# Heuristic cache expiration. Docs:
#    https://docs.trafficserver.apach ... euristic-expiration
##############################################################################
# 一个在缓存中没有过期的并且没有过期时间的对象能被保持的最短时间
CONFIG proxy.config.http.cache.heuristic_min_lifetime INT 3600
# 一个在缓存中没有过期的并且没有过期时间的对象能被保持的最长时间
CONFIG proxy.config.http.cache.heuristic_max_lifetime INT 86400
# 设置这个变量来指定计算有效期的老化因子。TS存储该对象从其上次修改后这个百分比的时间。默认值为0.1
CONFIG proxy.config.http.cache.heuristic_lm_factor FLOAT 0.10

##############################################################################
# Network. Docs:
#    https://docs.trafficserver.apache.org/records.config#network
##############################################################################
# 配置最大网络连接限制
CONFIG proxy.config.net.connections_throttle INT 30000

##############################################################################
# RAM and disk cache configurations. Docs:
#    https://docs.trafficserver.apache.org/records.config#ram-cache
#    https://docs.trafficserver.apach ... rage.config.en.html
##############################################################################
# 设置RAM缓存大小
CONFIG proxy.config.cache.ram_cache.size INT -1
# 用于确定写入缓存的object大小,只有小于该数值的object才会缓存,默认为4M
CONFIG proxy.config.cache.ram_cache_cutoff INT 4194304
# https://docs.trafficserver.apach ... imits-http-max-alts
# 指定TS缓存一个对象不同版本的数目。默认为:5
CONFIG proxy.config.cache.limits.http.max_alts INT 5
# https://docs.trafficserver.apach ... -cache-max-doc-size
# 存储在缓存中最大的文件大小,设置为0即禁用最大尺寸检查
CONFIG proxy.config.cache.max_doc_size INT 0
# 配置最小,平均对象大小.默认是8000
CONFIG proxy.config.cache.min_average_object_size INT 8000

##############################################################################
# Logging Config. Docs:
#    https://docs.trafficserver.apach ... gging-configuration
#    https://docs.trafficserver.apach ... _xml.config.en.html
##############################################################################
# 开启自定义log选项
CONFIG proxy.config.log.custom_logs_enabled INT 1
# 可启用的日志记录:
# 0:全部不记录
# 1:只记录错误
# 2:只记录事务日志
# 3:全部记录(错误和事务)
CONFIG proxy.config.log.logging_enabled INT 0
# 分配给日志目录的空间大小(MB)
CONFIG proxy.config.log.max_space_mb_for_logs INT 25000
# 用来防止磁盘被日志打满
CONFIG proxy.config.log.max_space_mb_headroom INT 1000
# 开启/禁用squid日志格式
CONFIG proxy.config.log.squid_log_enabled INT 0
# squid日志格式类型。1=ASCII 2=binary
CONFIG proxy.config.log.squid_log_is_ascii INT 0
# 日志文件的滚动
# 0 - 禁用日志文件的滚动
# 1 - 启用在特定的时间间隔对日志文件进行滚动.(需要配合proxy.config.log.rolling_interval_sec和proxy.config.log.rolling_offset_hr)
# 2 - 启用在指定文件大小对日志文件进行滚动(需要配合proxy.config.log.rolling_size_mb )
# 3 - 启用在指定文件大小或特定的时间间隔对日志文件进行滚动(以先发生优先)
# 4 - 启用在指定的时间间隔中日志文件达到特定大小进行滚动
CONFIG proxy.config.log.rolling_enabled INT 1
# 日志滚动间隔秒数。最低为300秒,最大为86400,即1天
CONFIG proxy.config.log.rolling_interval_sec INT 86400
# 当日志文件多大的时对日志进行滚动
CONFIG proxy.config.log.rolling_size_mb INT 10
# 是否启用滚动文件的自动删除
CONFIG proxy.config.log.auto_delete_rolled_files INT 1

##############################################################################
# These settings control remapping, and if the proxy allows (open) forward proxy or not. Docs:
#    https://docs.trafficserver.apach ... fig#url-remap-rules
#    https://docs.trafficserver.apach ... emap.config.en.html
##############################################################################
# 设置为1时,如果你想TS服务请求从源服务器的映射的规则的remap.config文件中列出
CONFIG proxy.config.url_remap.remap_required INT 1
# https://docs.trafficserver.apach ... p-pristine-host-hdr
# 设置为1时,将保留在重映射请求的客户端主机头,默认是0
CONFIG proxy.config.url_remap.pristine_host_hdr INT 1
# https://docs.trafficserver.apach ... onfig#reverse-proxy
# 启用\关启http反向代理
CONFIG proxy.config.reverse_proxy.enabled INT 1

##############################################################################
# SSL Termination. Docs:
#    https://docs.trafficserver.apach ... lated-configuration
#    https://docs.trafficserver.apach ... cert.config.en.html
##############################################################################
# 配置TS验证原始服务器证书的CA
CONFIG proxy.config.ssl.client.verify.server INT 0
# 指定CA签发文件的位置
CONFIG proxy.config.ssl.client.CA.cert.filename STRING NULL
# 下面两个变更设置TS使用HTTPS连接使用的加密方法
CONFIG proxy.config.ssl.server.cipher_suite STRING ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:RC4-SHA:RC4-MD5:AES128-SHA:AES256-SHA:DES-CBC3-SHA!SRP:!DSS:!PSK:!aNULL:!eNULL:!SSLv2

##############################################################################
# ICP Configuration. Docs:
#    https://docs.trafficserver.apach ... g#icp-configuration
#    https://docs.trafficserver.apach ... /icp.config.en.html
##############################################################################
# ICP模式
# 0 = ICP关闭
# 1 = 允许接收ICP查询
# 2 = 允许发送、接收ICP查询
CONFIG proxy.config.icp.enabled INT 0

##############################################################################
# Debugging. Docs:
#    https://docs.trafficserver.apach ... gging-configuration
##############################################################################
# 可以使用正则表达式来匹配debug的主题名字,但是相应的性能也会受到一定影响
CONFIG proxy.config.diags.debug.enabled INT 0
# 匹配http dns字符
CONFIG proxy.config.diags.debug.tags STRING http.*|dns.*
# ToDo: Undocumented
# 跟踪内存泄露的利器,但是需要使用ink分配器
CONFIG proxy.config.dump_mem_info_frequency INT 0
# 记录慢日志的阈值.当请求大于多少毫秒时会被记录至慢日志,当该参数值大于0时即启用
CONFIG proxy.config.http.slow.log.threshold INT 0

##############################################################################
# Cluster Subsystem. Docs:
#    https://docs.trafficserver.apache.org/records.config#cluster
##############################################################################
# 集群类型需要重启才能生效
# 1=全集群模式
# 2=管理模式
# 3=非集群模式
LOCAL proxy.local.cluster.type INT 3
# 设置集群模式的以太网口
CONFIG proxy.config.cluster.ethernet_interface STRING lo
# 设置集群端口
CONFIG proxy.config.cluster.cluster_port INT 8086
# 配置可靠的服务端口.可靠端口用于发送配置信息在集群节点间,所有的集群节点间必须使用相同的可靠服务端口
CONFIG proxy.config.cluster.rsport INT 8088
# 指定组播端口。组播端口是用于节点识别。在集群中所有节点必须使用相同的组播端口
CONFIG proxy.config.cluster.mcport INT 8089
# 指定一个组播地址
CONFIG proxy.config.cluster.mc_group_addr STRING 224.0.1.37

4、清缓存配置
编辑需增加的IP在配置文件
ip_allow.config
src_ip=127.0.0.1                                  action=ip_allow method=ALL

清除单个url
curl -X PURGE -v http://www.go-news.com/ -x 127.0.0.1:80
清除所有缓存
停止server
/usr/local/trafficserver/bin/traffic_server -Cclear
启动server

5、常用命令
#查询当前缓存服务命中率
/usr/local/trafficserver/bin/traffic_line -r proxy.node.cache_hit_ratio_avg_10s
#到后端源的连接数
/usr/local/trafficserver/bin/traffic_line -r proxy.node.current_server_connections
#前端用户到TServer的连接数
/usr/local/trafficserver/bin/traffic_line -r proxy.node.current_client_connections
#平均每秒处理的并发数
/usr/local/trafficserver/bin/traffic_line -r proxy.node.user_agent_xacts_per_second
#当前TServer输出到前端的带宽流量(单位Mbps)
/usr/local/trafficserver/bin/traffic_line -r proxy.node.client_throughput_out
#查看配置的值
/usr/local/trafficserver/bin/traffic_line -r 变量名
#修改配置
/usr/local/trafficserver/bin/traffic_line -s 变量名 -v 变量值
#重新读取配置文件
/usr/local/trafficserver/bin/traffic_line -x
#在不重启服务下,使配置生效
/usr/local/trafficserver/bin/traffic_line -L
  • 大小: 39.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics