[实践Ok]suse enterprise10在安装nc6后,利用shell命令操作Memcached,利用nc来进行路由洗沟测试,对网路连接性进行评估。

jackxiang 2008-12-2 15:06 | |


背景:为何要用nc,nc比telnet相对有优势一点,可以作探测之用,hack常用工具,特别是有时路由抽风(为嘛抽风?技术中心基础运维的事儿,走专线,路由没配置好,或是专线满了没有人管,于是队列日志一堆一堆的全是失败信息,满了,磁盘也满了,这是业务问题?),北京到XX有两条路由,一条走专线,一条走VPN,我们这里回指的路由是从专线走的,之前你们的服务器应该也是走的专线,可能你们修改了服务器以后,他有时候匹配到了专线的路由,有时候匹配到了VPN的路由,造成丢包,看看你们那边是不是绑定策略能从专线过来?这种问题怎么从应用层来排查到是网路抽风呢?用netcat加循环设置看现象卡不卡了,无其它办法,如基础运维说没问题,我们也就蔫了,呵呵。
——————————————————————————————————————————————————————————
netcat简称:
[root@localhost ~]# type -a nc
nc is /usr/bin/nc
$ nc -w 10 localhost 2389
该连接将在 10 秒后中断。
注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。
一、循环连接多次:

实践如下:


二、有时候设置值设置不进去,设置一下值:


三、一行shell解决设置memcacheq的键值存起来,方便第一里面的循环:


四、保存为shell如,a.sh,循环设置测试:


上面这样得用vi去复制粘贴多行,于是有下面的简单一行实现循环的语句:

来自:http://www.2cto.com/os/201401/272319.html


近来发现nc可以,而用原生的telnet超时卡顿不行,难道它们的协议不一样???还是有防火墙对telnet作了限定?
Add:2014-08-15
printf "set name 0 0 9\r\njackxiang\r\n" | nc 10.78.78.*** 61611
STORED

nc6安装篇:
打开suse enterprise 10的企业版光盘A,到suse/i586/nc6-0.5-13.2.i586.rpm  

#rpm -ihv nc6-0.5-13.2.i586.rpm  
#rpm -ql  nc6-0.5-13.2.i586.rpm  

bogon:/home/jackxiang # rpm -ql nc6-0.5-13.2
/usr/bin/nc6
/usr/share/doc/packages/nc6
/usr/share/doc/packages/nc6/AUTHORS
/usr/share/doc/packages/nc6/COPYING
/usr/share/doc/packages/nc6/NEWS
/usr/share/doc/packages/nc6/README
/usr/share/doc/packages/nc6/TODO
/usr/share/locale/it/LC_MESSAGES/nc6.mo
/usr/share/man/man1/nc6.1.gz


/usr/bin/nc6  
nc6,不叫nc了,当然可以做软连接:ln -s nc6 nc,也可以直接用nc6:

bogon:/home/jackxiang # nc
nc6        ncopy      ncplogin   ncpmap     ncpmount   ncpumount

NC说完了,下面用nc操作memcache。。。

/usr/local/sinasrv2/bin/memcached -d -m 10 -u root  -p 11211 -c 256 -P /tmp/memcached.pid          // 启动memcache


redhat rpm:
http://fr.rpmfind.net/linux/rpm2html/search.php?query=nc
  首先,需要了解Memcached协议,如果不清楚可参考《Memcached 协议中英文对照》。

  1、数据存储(假设key为zhangyan,value为12345)

printf "set zhangyan 0 0 5\r\n12345\r\n" | nc 127.0.0.1 11211
 STORED

  2、数据取回(假设key为zhangyan)

printf "get zhangyan\r\n" | nc 127.0.0.1 11211
 VALUE zhangyan 0 5
 12345
 END

  3、数值增加1(假设key为zhangyan,并且value为正整数)

printf "incr zhangyan 1\r\n" | nc 127.0.0.1 11211
 12346

  4、数值减少3(假设key为zhangyan,并且value为正整数)

printf "decr zhangyan 3\r\n" | nc 127.0.0.1 11211
 12343

  5、数据删除(假设key为zhangyan)

printf "delete zhangyan\r\n" | nc 127.0.0.1 11211
 DELETED
      清空memcache:
      
echo "flush_all" | nc localhost 11211

  6、查看Memcached状态

printf "stats\r\n" | nc 127.0.0.1 11211
 STAT pid 3025
 STAT uptime 4120500
 STAT time 1228021767
 STAT version 1.2.6
 STAT pointer_size 32
 STAT rusage_user 433.463103
 STAT rusage_system 1224.515845
 STAT curr_items 1132460
 STAT total_items 8980260
 STAT bytes 1895325386
 STAT curr_connections 252
 STAT total_connections 547850
 STAT connection_structures 1189
 STAT cmd_get 13619685
 STAT cmd_set 8980260
 STAT get_hits 6851607
 STAT get_misses 6768078
 STAT evictions 0
 STAT bytes_read 160396238246
 STAT bytes_written 260080686529
 STAT limit_maxbytes 2147483648
 STAT threads 1
 END

  7、模拟top命令,查看Memcached状态:

watch "printf 'stats\r\n' | nc 127.0.0.1 11211"


  或者

watch "echo stats | nc 127.0.0.1 11211"


推荐一篇文章:http://www.ooso.net/index.php/archives/444
memcache遭遇out of memory错误: 关于memcache内存分配的介绍, 很适合了解!

[root@slave1 bin]# telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost (127.0.0.1).
Escape character is ‘^]’.
set key1 0 0 2
SERVER_ERROR out of memory

\n的问题:
我是经常使用nc来查看mc的状态的,突然有一天,我使用nc命令做set操作,发现总是失败;用telnet没有问题,至少应该不是memcached的问题,可能是nc的问题吧。

今天又遇到了这个问题,我使用tcpdump观察使用nc和使用telnet的差别,发现nc发送的回车为\n ,而telnet发送的回车符为\r\n,差异就这么多了,于是使用下列命令测试:

echo -e "set a 0 0 1\r\na\r\nquit\r\n"|nc host port
结果成功

echo -e "set a 0 0 1\na\nquit\n"|nc host port
结果失败

比较久可以知道问题是出现在回车符上了,至于memcached是怎么解释的,有时间在了解一下源码吧

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1432/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2022-3-8 16:17
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]