淘宝TFS使用笔记(二):Q&A
问题 1、nameserver主无法启动,提示服务已存在
1: [root@localhost keepalived]# /usr/local/tfs/scripts/tfs start_ns #启动ns出现错误,message和nameserver.log没有相关信息
2: /usr/local/tfs-2.2.16/bin/nameserver has been exist: pid: 3680
3: nameserver FAIL to up ... CHECK IT
4: [root@localhost keepalived]# ps -ef|grep 3680 #查看对应的pid,发现是keepalived?
5: root 3680 3678 0 14:22 ? 00:00:00 keepalived -D
6: root 3819 3052 0 14:23 pts/0 00:00:00 grep 3680
7: [root@localhost keepalived]# /etc/init.d/keepalived stop #停止keepalived
8: Stopping keepalived: [ OK ]
9: [root@localhost keepalived]# /usr/local/tfs/scripts/tfs start_ns #再启动ns,ok了
10: nameserver is up SUCCESSFULLY pid: 3961
问题2、nameserver无法启动,提示:error while loading shared libraries...
1: export LD_LIBRARY_PATH=/usr/local/lib #找不到lib,添加一下share lib就行了
2: 把这行加入/etc/profile,开机加载
3: echo "export LD_LIBRARY_PATH=/usr/local/lib" >> /etc/profile
4: 20140819 现有tfs设备已改为加入到/etc/ld.so.conf
5: if [ ! `grep -l '/usr/local/lib' '/etc/ld.so.conf'` ]; then echo "/usr/local/lib" >> /etc/ld.so.conf; /sbin/ldconfig; fi
问题3、使用tfstool写入文件失败,提示error: current nameserver only read...tfs open fail: get block info fail...等等
1: 同时间查看nameserver的nameserver.log,发现一段:
2: owner role: slave, other side role: slave, owner status: initialize, other side status: uninitialize
3: 主备ns都把自己置为slave角色,分别通过VIP/ns_master_IP/ns_slave_IP测试上传,得到同样的错误
4: 可以确认:slave_nameserver只读、不可写
5: 此问题为vip挂载方式问题,通过修改keepalived将vip挂载到eth1:0解决
6: 配置内容为:keepalived.conf
7: virtual_ipaddress {
8: 192.168.1.1/16 brd 192.168.1.255 dev eth1 label eth1:0
9: }
问题4、安装tfs时遇见错误:“session_util.cpp:2:23: error: uuid/uuid.h: No such file or directory”
1: 搜了一下发现这个http://code.taobao.org/p/tfs/issue/601/,但没有有效的解决方法
2: 重新过了一遍,发现是openssl-devel缺失,导致mysql相关包都没有安装上
3: yum install openssl-devel
4: 并安装mysql的包后
5: 再安装tfs,错误消失
问题5、安装tfs时遇见错误:“performance.cpp:25:20: error: curses.h: No such file or directory”
1: curses.h 这个文件搜索了一下,好像是图形库的文件?根据信息把缺失的东西安装一下
2: yum install ncurses ncurses-devel
3: 再安装时,问题解决
问题6、启动dataserver时报错:/usr/local/tfs-2.2.16/bin/dataserver: error while loading shared libraries: libjemalloc.so.1: cannot open shared object file: No such file or directory
1: 同问题2,将/usr/local/lib加入到/etc/ld.so/conf
2: if [ ! `grep -l '/usr/local/lib' '/etc/ld.so.conf'` ]; then echo "/usr/local/lib" >> /etc/ld.so.conf; /sbin/ldconfig; fi
问题7、使用keepalived做nameserver主从,又使用了虚拟机,发现主从切换频繁
1: 从日志:forcing a new MASTER election
2: 主日志:Received higher prio advert
3: 暂时不解,可能为双机通信问题导致
4: 20140818新增:更换为物理机后运行了将近一周,日志中无切换记录了
===== 以下为TFS功能测试中的自问自答了~ =====
问题8、主备nameserver切换时上传报错,影响有多大?
1: 搜了一下发现这个~http://code.taobao.org/p/tfs/issue/55118/
2: 问题:nameserver能在主备节点切换,但是上传文件时报error: current nameserver only read, 192.168.41.173:53979, status: -5014
3: 答(by淘宝人员):切换过程中,有部分请求看到的vip还是在master上,所以还是向master发了请求,就会出现上面的错误,可以忽略。
4: 个人测试结论:
5: 做了近10次主从间切换测试,完整的切换过程最长两次7sec,最短一次3sec
6: 可以认为主从切换不超过10sec,一般都会在7sec以内
问题9、nameserver上是否储存影响tfs运行的关键数据?例如元数据,寻址数据or其它~
1: 参考wiki与实际测试,nameserver上的数据在tfs系统中是无足轻重的:ns数据丢失不会造成ds读异常、ds数据丢失等
2: 测试环境中的nameserver,删除tfs工作目录的磁盘数据,重启服务器(清理内存);nameserver再次启动后即可工作
3: 抽查了30个文件均可以正确返回数据(使用命令:usr/local/tfs/bin/tfstool -s 192.168.1.100:8108 -i "cfi ${tfs_url}")
4: 检查nameserver日志,服务启动后马上就收到了各block的健康报告
问题10、dataserver间的数据迁移是怎样的?
1: ds间的数据迁移为块(block)迁移,在master ns的nameserver.log中经常可以看到以下内容日志
2: send move command successful, block: 134093, : 192.168.1.21:10002===>: 192.168.1.22:10004 #block开始迁移记录
3: show result plan seqno: 91730, type: move ,status: finish, priority: normal , block_id: 415183, expired_time: 10211650,runer: 192.168.1.21:10004/192.168.1.23:10008/ #block迁移完毕记录
4: 备份&冗余:
5: 在某块磁盘或某台DS故障(下线后,无心跳后),ns日志就马上有了迁移block的指令;
6: 在总量22G的磁盘中抽查了10个文件,17.56分人为kill该磁盘的ds服务,同一时间确认这10个文件仅剩1个副本
7: 这期间开始恢复文件副本数,18:11分监测到抽查的所有10个文件都在另外地方复制了第二个副本
8: 故障后又复原的情况:
9: 现在抽查的10个文件已有2个副本,且故障盘中有一个副本,是否故障盘开启后有3个副本,这样tfs会如何处理?
10: 故障盘开启后检查,未查询到3个副本
11: 存储均衡:
12: 某日下午下班发现大量的块迁移日志,同时期没有任何磁盘故障;查询每个ds服务存储量都在224~227G之间;
13: 第二日上班查询日志发现块已经不再迁移,每个ds服务的使用量都在225.01~225.34G;
14: 由此基本确认tfs的日常会做存储均衡