ceph 之 纠删码操作

通过命令行创建纠删码规则

  • 首先,需要创建 erasure-code-profile ,当然,也可以使用默认的 erasure-code-profile ,列出现有的 erasure-code-profile :
  • 查看指定erasure-code-profile 的详细内容:
  • 自定义erasure-code-profile , 创建一个只用hdd的 erasure-code-profile:

    可用的选项有:

    • crush-root: the name of the CRUSH node to place data under [default: default].
    • crush-failure-domain(故障域): the CRUSH type to separate erasure-coded shards across [default: host].
    • crush-device-class(设备分类): the device class to place data on [default: none, meaning all devices are used].
    • k and m (and, for the lrc plugin, l): these determine the number of erasure code shards, affecting the resulting CRUSH rule.
  • 根据erasure-code-profile 创建crush rule:
  • 查看crush rule:
  • 创建一个使用纠删码规则的pool

    语法: osd pool create <poolname> <int[0-]> {<int[0-]>} {replicated|erasure} [<erasure_code_profile>] {<rule>} {<int>}
    尽管crush rule 也是根据erasure_code_profile来创建的,但是这里创建纠删码pool的时候,还是需要明确指定erasure_code_profile
    参考: http://docs.ceph.com/docs/master/rados/operations/pools/
  • 调优:

    目前,这个fast_read 之针对纠删码池有效的
  • 如果需要在该pool创建rbd,则需要:
    • 参考: http://docs.ceph.com/docs/master/rados/operations/erasure-code/
    • 创建一个replication pool来做cache tier

      其实,不仅纠删码池可以做cache tier,replication 池子也能做cache tier,因为,我们可能有一批ssd盘,我们就可以在ssd上创建pool来充当sas盘的cache tier以提高性能;结合纠删码、replication、sas、ssd,我们可以做出多种不同性能的存储用以应对不同的场景。
    • 然后 ceph 会提示: 1 cache pools are missing hit_sets  , 还要设置 hit_set_count 和 hit_set_type

通过编辑crushmap来添加规则

参考:

 

实战中的问题:

  1. 12个SAS在 60MB/s 的速度evict的时候,磁盘都很慢了,每个盘达到100左右的tps, 20MB/s左右的读写;比较坑的是,我基本没法控制evict的速度,只好静静地等待evict结束
  2. evict 的同时还在promote, promote的速度倒是可控,但是 osd_tier_promote_max_bytes_sec 默认是5242880 字节(并不算很大); 问题:池子已经没有写入了,为何还在evict和promote?
  3. 修改cache-mode试试: 按说,修改cache-mode为proxy时,就不应该再出现evict和promote了

    果然,修改之后,ceph -s 立刻就看不到evict和promote了 🙂
  4. 查看cache-mode:

vsftp in docker

当vsftpd在容器里面,而且容器IP又是host内部的私有IP的情况,client采用passive模式来下载数据能行得通吗? 可以的

  1. passive模式下,vsftpd需要listen临时端口来传输数据,所以docker创建容器时,不仅要暴露21端口,还要暴露可能listen的临时端口,为了不映射太多端口,可以在vsftpd的配置文件中配置可能的临时端口的范围
  2. passive模式下,vsftpd需要通过协议内容告知client临时端口及IP地址,然而,容器网卡IP地址显然是不能被client直接访问到的,庆幸的是,vsftpd配置文件中有关于可以告知client的ip地址的配置,该ip地址并不要求本机上必须有的,显然该配置是给类似情况准备的

kvm ceph rbd

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

 

 

bash 之 <($cmd)

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

当然,效果上虽然和走管道类似,但是如果程序不支持读标准输入的话,这也不失为一种不错的替代;  当然,这个也可以用于标准输入的重定向:

这两种写法只差一个 < ,后者是shell直接帮做了标准输入的重定向,前者没有做标准输入的重定向,只是向打开普通文件一样的方式打开了bash帮忙生成的一个临时文件。

 

这种语法 叫做Process Substitution

OSS 文件分析

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

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

脚本:

 

 

命令:

 

注意:

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

awk 知识点:

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

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

一般来讲:

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

但是:

这又是什么鬼?

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

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

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

关于ssl证书提供商

缘起:

我从赛门铁克买的证书是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通过与中国内地数字认证服务商天威诚信合作共同推进数字证书业务在国内的发展

 

中国也有根CA了:

中国金融认证中心(CFCA)证书,由中国数字证书认证机构自主研发,纯国产证书。*注: CFCA服务器证书目前不支持苹果iOS 10.1及10.1以前的版本,不支持安卓6.0以前的版本

 

阿里云购买证书似乎便宜些:(方便比价)

https://common-buy.aliyun.com/?spm=5176.7968328.1120760.1.67f91232806dKi&commodityCode=cas#/buy

https://www.aliyun.com/product/cas?utm_content=se_1550552

 

参考:

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

阿里云redis数据迁移

一般来讲,如果我们要从自建的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