我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。
基本思路可以完全照搬参考文献[2][3]
下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。
首先需要认识我们的Linux服务器的硬件配置和软件情况
硬件配置:
DELL R720 2U服务器
CPU 8核 Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz
内存 32G
硬盘 系统盘 /dev/sda 300GB
ssd /dev/sd{b,c} 240GB * 2
普通磁盘 /dev/sd{d-l} 2TB * 9
软件配置:
操作系统 CentOS release 6.3 (Final)
内核 2.6.32-279.el6.x86_64
注意:我们这里仅是测试,只使用两块2TB普通SAS磁盘和一块240G SSD来供ATS测试,其他盘都没有使用。
1.磁盘格式化问题
使用SSD作为interim cache缓存中间层解决方案,需要磁盘和SSD完全是裸盘,也就是不要分区和格式化。
如果是全新盘,可以不做任何操作,如果不是全新盘,需求删除所有分区,下面的bash脚本create_partition.sh实现了fdisk分区的功能,并创建了一个分区,后来又使用另一个脚本delete_partition.sh删除了这个分区,最后得到了所谓的裸盘。
希望你有更好的方法得到一个裸盘。脚本create_partition.sh的内容
#!/bin/bash
fdisk $1<<EOF
d
n
p
1
1
t
83
w
EOF
另一个脚本delete_partition.sh的内容
#!/bin/bash
fdisk $1<<EOF
d
w
EOF
使用方法是:如果要将SAS或是SSD磁盘/dev/sdl变为裸盘,运行
sh create_partition.sh /dev/sdl
sh delete_partition.sh /dev/sdl
就可以了。对于一个主流的服务器来说,如果只想使用其中的两块磁盘,可以对它们分别执行上面的操作。当然,如果是线上环境,这个方法还待改进。
2.创建新用户并管理裸设备
这一步非常关键,关系到后面步骤的顺利性,故拿到前面来做。
新建用户
useradd -s /sbin/nologin tserver
我们打算将tserver作为ATS所在的user和group名称。使用如下命令检测用户组是否创建成功
cat /etc/passwd |cut -f 1 -d :
增加如下设备文件
vim /etc/udev/rules.d/99-ats.rules
将你要管理的裸设备都添加到里面,包括SSD和SAS,我这里使用了两块2TB普通SAS磁盘和一块240G SSD,所以如下设置
KERNEL=="sdk",MODE="0660",OWNER="tserver",GROUP="tserver"
KERNEL=="sdl",MODE="0660",OWNER="tserver",GROUP="tserver"
KERNEL=="sdb",MODE="0660",OWNER="tserver",GROUP="tserver"
保存退出后,更新设备信息
start_udev
验证改动是否成功,查看
ll /dev/sd[bcdefghijkl]
3.下载并安装好ATS 4.2.3
我们打算将ATS安装到/opt/ats下面,并使用tserver作为用户和组来管理它。ATS安装时会自动创建该安装目录,同时为了内网测试方便,采用debug版本,线上可以去掉
3.1.安装依赖包
yum install gcc gcc-c++ pkgconfig pcre-devel tcl-devel expat-devel openssl-devel -y
yum install perl-ExtUtils-MakeMaker -y
yum install libcap libcap-devel hwloc hwloc-devel -y
yum install libunwind libunwind-devel -y
yum install autoconf automake libtool -y
yum install git -y
3.2.下载并解压
cd /usr/local/src
wget -d "http://mirror.bit.edu.cn/apache/trafficserver/trafficserver-4.2.3.tar.bz2"
tar -jxvf trafficserver-4.2.3.tar.bz2
cd trafficserver-4.2.3
3.3.编译和安装
./configure --prefix=/opt/ats --with-user=tserver --with-group=tserver --enable-reclaimable-freelist --enable-interim-cache --enable-debug
make -j 8
make install -j 8
这里指定安装前缀的好处是,如果安装失败,可以直接删除掉ats文件夹,再重新编译和安装。
4.配置
主要有这几个文件需要配置:
records.config,storage.config,logs_xml.config
我要达到的效果是正向代理,裸盘,自定义日志等功能。
修改storage.config
添加
/dev/sdl
/dev/sdl
注意ssd的那块盘/dev/sdb一定不要添加,因为它不是数据盘,你把它视作内存就可以了。
修改records.cofig,将
LOCAL proxy.config.cache.interim.storage STRING NULL
改为
LOCAL proxy.config.cache.interim.storage STRING /dev/sdb
如果是正向代理测试,需要做如下配置
traffic_line -s proxy.config.reverse_proxy.enabled -v 0
traffic_line -s proxy.config.url_remap.remap_required -v 0 #1为只反向代理,0为正向+反向代理
traffic_line -s proxy.config.url_remap.pristine_host_hdr -v 0
traffic_line -s proxy.config.http.insert_request_via_str -v 1
traffic_line -s proxy.config.http.insert_response_via_str -v 2 #会产生类似Via:http/1.1 localhost (ApacheTrafficServer/4.2.3 [cHs f ])的头
traffic_line -s proxy.config.http.cache.required_headers -v 0 #配置在源服务器没有定义缓存的情况缓存文件
traffic_line -s proxy.config.http.cache.enable_default_vary_headers -v 1
traffic_line -s proxy.config.cache.ram_cache_cutoff -v 40960 #非常关键,确定缓存命中是在RAM cache还是SSD中
根据硬件配置设置RAM cache的大小,一般是物理内存的1/2或1/3为宜,我这里采用默认配置-1,就是让系统自动分配。
CONFIG proxy.config.log.custom_logs_enabled INT 1
CONFIG proxy.config.log.squid_log_enabled INT 0
CONFIG proxy.config.log.xml_config_file STRING logs_xml.config
其中,logs_xml.config文件内容如下
<LogFormat>
<Name = "access"/>
<Format = "%<cqtq> %<ttms> %<pssc> %<sssc> [%<cqtt>] %<{X-Forwarded-For}cqh> \"%<cqtx>\" %<psql> \"%<pqsi>\" %<crc>:%<phr> %<{Referer}cqh> \"%<{User-Agent}cqh>\" %<psct>"/>
</LogFormat>
<LogObject>
<Format = "access"/>
<Filename = "access"/>
</LogObject>
5.添加环境变量
echo "export PATH=/opt/ats/bin:$PATH" >> /etc/profile
更新配置文件
source /etc/profile
再次确认环境变量是否添加成功
echo $PATH
这样的话,在命令行直接运行trafficserver start就可以识别了。
6.安装tsar并监控
需要能够监控ATS,特别是ssdhit选项,参见博文
http://blog.csdn.net/tao_627/article/details/44808637
安装好tsar后直接使用如下命令就可以看到了
tsar --ts_cache -l i 2
7.启动查看状态
trafficserver start
查看
echo "show:cache-stats" | traffic_shell
在diags.log中的显示如下:
也已经说明我们指定的/dev/sdl已经被自动加载了
另外,进入到日志目录下面,查看访问日志
cd /opt/ats/var/log/trafficserver
如果没有自定义日志文件格式,就是默认的squid日志,采用下面的命令查看
traffic_line -f squid.log
如果自定义了日志的文件格式,就直接查看
tail -f access.log
也可以查看traffic_server和traffic_manager进程的日志信息,或者是控制台信息
tail -f traffic.out
如果允许过程中有段错误,这里将会显示出来
8.说明
a.磁盘的格式化非常关键,经过测试,可以使用未分区的裸盘,也可以使用mkfs.ext4命令格式化的伪裸盘都可以,但建议使用纯粹的裸盘
b.普通硬盘和SSD的格式化和加载完全一样处理,可以在线上分批多次添加裸盘或是SSD,以前加载的磁盘不会再格式化,只会对新添加的磁盘做处理,所以已有的缓存数据应该不会损坏。但是对storage.conf的配置更新必须重启ATS,简单使用traffic_line -x并不凑效
c.线上服务器的硬盘配置都需要在storage.conf文件中明确指定,如果你有12块磁盘,但是只在storage.conf中指定4块,它就只会使用4块,也就是说,用几块就指定几块。
d.ssd的配置项proxy.config.cache.interim.storage可以在线更新,但是需要先traffic_server -Cclear清空缓存再执行traffic_server start重建索引,都需要很长时间处理
traffic_line -s proxy.config.cache.interim.storage -v NULL
e.每次关闭服务器,下次打开服务器时,需要使用traffic_server -Cclear清空缓存,在开启ATS,否则会有段错误。运行过程中的ATS重启不存在这个问题
f.tsar没有ATS的监控数据或者ssdhit没有数据,请检查tsar编译时注意修改正确mgmtapisocket路径和interim相关的配置项
g.ssdhit数据很小,但是ramhit数据很大,这是因为records.config中的proxy.config.cache.ram_cache_cutoff选项造成的,为了压测ssd性能,请尽量调大这个选项,并使用较大的请求样本压测,jtest中就是设置-q参数,比如
./jtest -P 10.10.110.81 -p 8080 -S ts.cn -s 9080 -z 1.0 -D 9080 -k 2 -c 500 -Z 1000 -q 100000000
h.使用SSD会极大改善缓存命中效果,并显著提升ATS的QPS指标,建议线上尽量使用
i.不要将ssd添加到storage.config中,它不是数据磁盘,但是应该将它添加到/etc/udev/rules.d/99-ats.rules中来设置正确的用户组和权限
参考文献
[1].https://cwiki.apache.org/confluence/display/TS/CentOS
[2].http://www.huilinwang.com/blog/post/425.html
[3].http://www.shencan.net/index.php/2012/09/08/trafficserver-%e4%bd%bf%e7%94%a8%e8%a3%b8%e7%9b%98%e9%85%8d%e7%bd%ae/
[4].https://blog.zymlinux.net/index.php/archives/906