再学习,更上新台阶

 默认分类  再学习,更上新台阶已关闭评论
10月 112012
 

学习是一种信仰

学习是一种习惯

学习是一种乐趣

学习是一种能力

学习是一种态度

 

 

 Posted by at 上午 9:38

kvm ceph rbd

 ceph, kvm  kvm ceph rbd已关闭评论
2月 072018
 

每个kvm虚拟机进程,如果挂载N个rbd设备,则会有N个 fn-radosclient 线程,每个fn-radosclient 线程针对特定的osd只有一个connection; 如此,一个rbd设备上的某块儿数据如果落在了相同的osd上,(猜测rados协议不会再同一个连接上同时做多个事务),则意味着不可能并行写入,于是乎,特别是对于随机读写,网络延迟对存储效率有着直接的影响,即使虚拟机内部多线程也无济于事,因为kvm进程中的fn-radosclient 只有一个

 

 

 Posted by at 下午 5:42

bash 之 <($cmd)

 bash  bash 之 <($cmd)已关闭评论
2月 072018
 

<($cmd) 可以模拟类似协程的效果,如下:

当然,效果上虽然和走管道类似,但是如果程序不支持读标准输入的话,这也不失为一种不错的替代

这种语法 叫做Process Substitution

 Posted by at 下午 5:17

OSS 文件分析

 bash  OSS 文件分析已关闭评论
1月 302018
 

分析指定目录下一级子目录的使用情况:

  1. 文件大小分布
  2. 目录最后修改时间(确定是否长期未使用)
  3. 目录总容量

脚本:

 

 

命令:

 

注意:

  1. 结果如果要按照空格分域粘贴到Excel中,需要将百分数前面可能存在的空格给替换掉:

awk 知识点:

  1. 自定义函数
  2. 内置函数gsub使用
  3. printf格式化函数,sprintf函数
  4. awk 中字符串连接的语法
 Posted by at 下午 4:55

bash 之 标准输入、标准输出、标准错误 重定向

 bash  bash 之 标准输入、标准输出、标准错误 重定向已关闭评论
1月 232018
 

一般来讲:

我们都知道这是什么意思,或者:

但是:

这又是什么鬼?

其实,仅仅是把重定向写到命令前面而已, 等效于:

而且都是之影响一条可执行命令而已:

这个只影响echo a 的输出重定向,没有影响到echo b 的输出重定向

 Posted by at 上午 10:39

关于ssl证书提供商

 默认分类  关于ssl证书提供商已关闭评论
1月 182018
 

缘起:

我从赛门铁克买的证书是Verisign签发的,后来说是证书有问题,需要重签,拿到的证书就成了DigiCert签发的了;而且邮件里面给出的证书的安装配置和使用方案,请参考:

https://www.itrus.cn/service_13.html 这个地址是天威诚信的网站。

那么, Verisign  / Symantec / DigiCert  /  天威诚信   都是啥关系?

天威诚信是Symantes中国大陆地区的首要合作伙伴。

2010年8月,赛门铁克收购VeriSign,VeriSign认证服务现均由赛门铁克提供。赛门铁克重点在2012年4月对VeriSign的产品名称和品牌标识进行变更;

2017年8月份, 赛门铁克把web安全业务卖给了DigiCert , 并占有DigiCert 30% 的普通股: http://www.cnbeta.com/articles/tech/637909.htm

 

更多: GeoTrust 似乎也是重要的SSL证书提供商,那么和上述的机构是否也有关系呢?

参考: https://baike.baidu.com/item/verisign/8794893

VeriSign 是全球最大的数字证书颁发机构,于 2006 年 9 月以 1.25 亿美元完成收购 GeoTrust ,当时 GeoTrust 约占全球 25% 市场分额。VeriSign通过与中国内地数字认证服务商天威诚信合作共同推进数字证书业务在国内的发展

 

参考:

http://www.ert7.com/symantecs.html

https://marketrealist.com/2017/08/why-symantec-sold-its-web-security-business-to-digicert

http://www.cnbeta.com/articles/soft/636841.htm

http://tech.sina.com.cn/roll/2017-03-28/doc-ifycspxp0209037.shtml

https://www.digicert.com/blog/digicert-to-acquire-symantec-website-security-business/

https://www.symantec.com/about/newsroom/press-releases/2017/symantec_0802_01

http://www.cnbeta.com/articles/tech/630921.htm

 Posted by at 下午 3:32

阿里云redis数据迁移

 云产品  阿里云redis数据迁移已关闭评论
1月 172018
 

一般来讲,如果我们要从自建的redia迁移到阿里的redis,可以采用aof文件的办法,通过:

创建一个aof文件,也可能你的配置下本来就有这个文件,然后通过:

其中 $big_number 是一个足够大的数,保证tail是从文件的第一行开始的,如此,则可以保证源redis和目标redis的数据是一致的,代码上修改完配置后,源redis不再有写入,即可废掉源redis

 

由于阿里云的redis没有一个可以供我们tail的aof文件,所以,没法通过上述办法将阿里云redis数据平滑迁移到本地(抑或是阿里云其他)redis实例,不过也可以有不太平滑的办法的。

阿里云redis的备份其实就是一个rdb文件,只需要:

方案一:

  1. 停掉redis
  2. 创建redis备份 (这个在阿里云控制台是支持的)
  3. 下载备份
  4. 根据备份启动redis实例
  5. 生成一个aof文件
  6. cat aof | redis-cli target_host target_port 即可
  7. 如果需要在迁移的同时修改db号,即: 将db 1 中的数据迁移到db 2中,可参考: https://phpor.net/blog/post/5614
  8. 该方案需要暂停服务的

 

方案二:

  1. 使用工具  https://github.com/vipshop/redis-migrate-tool   https://q.cnblogs.com/q/93181/
  2. 该方案没法将源db修改成目标的其他db

方案三:

  1. 使用redis-port
 Posted by at 下午 2:01

bash 之echo vs printf

 Linux & Unix  bash 之echo vs printf已关闭评论
1月 162018
 

没有发现如何仅仅通过echo 直接输出 ‘-e’ 的方法, printf则可以 — 使得不再继续解析更多选项。

 

If you want to literally print the string “-e”, you will have difficulties doing it with echo. I faced such a problem recently while writing a script.

I had to use prinf to be able to print the literal string “-e”.

 Posted by at 下午 3:43

bash 之 echo -e

 Linux & Unix  bash 之 echo -e已关闭评论
1月 162018
 

示例:

如果我仅仅想输出 ‘-e’ 呢?如何echo 呢?

这个是不会有任何输出的,当然,你可能马上就发现问题了; 不过,有些情况下,你想echo的东西是预先不知道的,实在程序运行时生成的,万一生成了 ‘-e’ ,你将看不到 ‘-e’ ,而且还影响了程序的行为,如何避免呢?

 

 Posted by at 下午 3:12

gnocchi-api 访问慢的问题

 openstack  gnocchi-api 访问慢的问题已关闭评论
1月 112018
 

gnocchi-api 访问基本在10s +, why ?

gnocchi-api 使用了 wsgiref , wsgiref 使用了 :

/usr/bin/gnocchi-api:

/usr/lib64/python2.7/wsgiref/simple_server.py :

(这里提到了个REMOTE_HOST的环境变量,含义就是“REMOTE_ADDR 对应的域名”, 而 address_string() 的命名也是ip地址对应的域名的意思,因为绝大部分的ip地址是反解不到域名的,所以,这个逻辑基本可以注释掉,不过,直接修改人家的代码不大好)

然而上面的 WSGIRequestHandler 基本上会执行到get_environ() , 进而执行到 BaseHTTPServer.py 中的 self.address_string() ,如下:

address_string() 函数又调用了 /usr/lib64/python2.7/socket.py 中的 getfqdn(), 如下:

然后就肯定会执行到gethostbtaddr() 了,该函数的具体实现又是什么逻辑呢? socket.py import了 _socket 模块中的所有函数,而gethostbyaddr()正是_socket 模块实现的,_socket 模块的实现见: /usr/lib64/python2.7/lib-dynload/_socketmodule.so , 可见,这是一个c实现的so文件,稍后再看:

 

测试发现,该函数当遇到IP地址时,肯定会做一次反向地址解析,反向地址解析不是所有dns都能支持的很好的,有些能快速返回,有些却不能(具体原因,稍后再查),比如: 公网地址的反向地址解析可以很快返回,私网地址的反向地址解析就很慢

 

解决办法:

办法一: 在 dns 上给自己的IP地址添加反向地址解析,这样反向地址解析就可以很快; 给每个IP地址都添加反向地址解析的话,比较麻烦,最好能有一个更好的办法,让某一类IP地址能直接返回错误,或返回一个自定义的域名; 这个办法的优点是: 不需要修改程序 ; 如果搞不定dns,那就修改程序吧

办法二: 修改/usr/lib64/python2.7/BaseHTTPServer.py  ,在 address_string() 中直接返回host,而不进行socket.getfqdn(host) 的调用

办法三: 修改 /usr/lib64/python2.7/socket.py 中的 getfqdn() 函数,对于ip地址的情况,不再调用 gethostbyaddr()

办法四: 其实,不是特别有信心的话,不要修改的太底层,没准儿影响到别的程序的; 更好的办法是:

在 /usr/bin/gnocchi-api 中wss.make_server(…) 时,提供了三个参数,还有两个参数是可以定制的,我们可以自己在 /usr/bin/gnocchi-api  中实现一个 MyWSGIRequestHandler ,继承自./simple_server.py 中的WSGIRequestHandler , 然后覆盖其中的address_string() 方法即可

 

按照办法四 修改后的 /usr/bin/gnocchi-api 如下:

 

测试发现,访问确实快多了,不再感觉到延迟了

 Posted by at 上午 11:56