形容智慧语与句

形容智慧的成语

1) 悉心竭力:悉心:尽心;竭力:用尽全力。竭尽智慧和力量。

2) 目达耳通:形容感觉灵敏,非常聪明。

3) 七窍玲珑:形容聪明灵巧。相传心有七窍,故称。

4) 颖悟绝伦:颖悟:聪颖。绝伦:超过同辈。聪明过人。亦作“颖悟绝人”。

5) 姱容修态:姱:美好;修:长远;态:志向。美丽的容貌,长远的智慧。

6) 矜智负能:矜:夸耀。夸耀智慧和才能。

7) 材高知深:材:通“才”。知:通“智”。才能出众,智慧高超。

8) 饰智矜愚:装作有智慧而在无知者面前夸耀。

9) 聪明睿达:聪明:聪敏有智慧。形容洞察力强,见识卓越。

10) 私智小慧:私:个人的;慧:智慧。个人的智慧和小聪明。指带有片面性而又自以为是的聪明。

表示智慧的成语

1) 折冲万里:折冲:指抵御敌人。指在远离沙场的庙堂上以谋略和智慧克敌制胜。常用以形容高明的外交才干或在外交争端中取得胜利。

2) 百龙之智:龙:公孙龙,战国时人,著有《公孙龙子》。一百个公孙龙的智慧。形容非常聪明。

3) 竭智尽力:用尽智慧和力量。

4) 积思广益:指集中众人的智慧,可使效果更大更好。

5) 聪慧绝伦:绝伦:同类中无可比拟者。指十分聪明智慧。

6) 足智多谋:足:充实,足够;智:聪明、智慧;谋:计谋。富有智慧,善于谋划。形容人善于料事和用计。

7) 教一识百:形容具有特殊的才能、智慧。

8) 没魂少智:智:智慧。形容失魂落魄的样子。

9) 知出乎争:智:同“智”;争:斗争。聪明才智是在反复斗争中锻炼出来的。比喻智慧来源于实践。

10) 才疏智浅:才:才能;疏:稀少;智:智慧。才识不高,智力短浅。用作自谦之词。

11) 虚室生白:虚:使空虚;室:指心;白:指道。心无任何杂念,就会悟出“道”来,生出智慧。也常用以形容清澈明朗的境界。

12) 智珠在握:智珠:佛教指本性的智慧。比喻具有高深的智慧并能应付任何事情。

13) 集思广益:集:集中;思:思考,意见;广:扩大。指集中群众的智慧,广泛吸收有益的意见。

14) 明镜不疲:明亮的镜子不为频繁地照人而疲劳。比喻人的智慧不会因使用而受损害。

15) 聪明睿知:聪明:聪敏有智慧。形容洞察力强,见识卓越。

16) 殚智竭力:殚:竭尽。用尽智慧和力量。

17) 智尽力穷:智慧和能力都已用尽。

18) 不测之智:测:估计;智:才智,智慧。不可估计的才智。形容智高才广。

19) 矜愚饰智:装作有智慧,在愚人面前夸耀自己。

20) 私智小惠:个人的智慧和小聪明。指带有片面性而又自以为是的聪明。

形容智慧的成语及解释

1) 一士之智:智:智慧。一个人的智慧。形容有限的才智。

2) 人多智广:人多智慧也多。用来强调人多出智慧。

3) 殚智竭虑:用尽智慧,竭力谋虑。

4) 智尽能索:索:竭尽。智慧和能力都已用尽。

5) 施谋用智:智:智慧,计谋。运用策略计谋。

6) 智贵免祸:智:智慧。人的聪明智慧,正当使用,可以使他避免灾祸。

7) 绝圣弃知:绝:断绝;圣:智慧;弃:舍去,抛开;知:通“智”,智慧。指摒弃聪明智巧,回归天真纯朴。

8) 敏而好学:敏:聪明;好:喜好。天资聪明而又好学。

9) 绝圣弃智:圣、智:智慧,聪明。弃绝聪明才智,返归天真纯朴。这是古代老、庄的无为而治的思想。

10) 虚室上白:虚:使空虚;室:指心;白:指道。心无任何杂念,就会悟出“道”来,生出智慧。也常用以形容清澈明朗的境界。

11) 明昭昏蒙:昭:明白;蒙:愚昧无知。聪明而通晓事理,愚昧而不明事理。

12) 高世之智:高世:超过世人;智:智慧,才智。具有超出世人的才智。形容才智非凡。

13) 双修福慧:修:善。福德和智慧都修行到了。指既有福,又聪明。

14) 才智过人:才能智慧都胜过一般人。

15) 万物之灵:万物:泛指天地间的所有生物;灵:聪明、灵巧。世上一切物种中最有灵性的。指人而言。

16) 负薪之资:负薪:背柴草,旧指地位低微的人;资:资质,指智慧,能力。指卑贱者的资质。

17) 醍醐灌顶:醍醐:酥酪上凝聚的油。用纯酥油浇到头上。佛教指灌输智慧,使人彻底觉悟。比喻听了高明的意见使人受到很大启发。也形容清凉舒适。

18) 知以藏往:知:同“智”,才智;以:已经;藏:包含。人的智慧包含在过去的事物中。比喻聪明才智来源于过去的经验教训。

19) 至智弃智:智慧达到极点,就可舍弃智慧不用。

20) 知尽能索:比喻智慧能力都竭尽了。

发表在 article | 形容智慧语与句已关闭评论

冬红/夏绿

发表在 article | 已关闭评论

LBS / 经伟度 / latitude / longitude / gps

..

纬度:

北纬为正数,南纬为负数。
纬度 是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N;位于赤道以南的点的纬度称南纬,记为S。
纬度数值在0至30度之间的地区称为低纬度地区;纬度数值在30至60度之间的地区称为中纬度地区;纬度数值在60至90度之间的地区称为高纬度地区。
赤道、南回归线、北回归线、南极圈和北极圈是特殊的纬线。
各纬度线附近的城市和其他地理区北纬90度:北极
北纬80度:
北纬70度:摩尔曼斯克
北纬60度:奥斯陆、斯德哥尔摩、赫尔辛基、圣彼得堡、雷克雅维克
北纬50度:伦敦、巴黎、布鲁塞尔、法兰克福、布拉格、克拉科夫、基辅、温哥华、莫斯科
北纬40度:马德里、伊斯坦布尔、安卡拉、喀什、北京、盐湖城、丹佛、华盛顿、纽约
北纬35度:东京
北纬30度:开罗、苏伊士运河、科威特城、新德里、珠穆朗玛峰、拉萨、三江并流、重庆、长江三峡、武汉、杭州、休斯敦、新奥尔良
北纬20度:香港、撒哈拉沙漠、吉达、台湾、孟买、内比都、广州、海口、福建省、火奴鲁鲁、墨西哥城
北纬10度:墨西哥城、科纳克里、亚的斯亚贝巴、胡志明市、宿务、圣荷西、巴拿马城、巴拿马运河、加拉加斯
赤道:圣多美、利伯维尔、坎帕拉、新加坡、基多
南纬10度:罗安达、帝力、莫尔兹比港、利马、累西腓
南纬20度:塔那那利佛、苏瓦、苏克雷
南纬30度:悉尼、开普敦、布隆方丹、德班、布里斯班、复活节岛、圣地亚哥
南纬35度:堪培拉
南纬40度:惠灵顿
南纬50度:麦哲伦海峡
南纬60度:德雷克海峡
南纬70度:
南纬80度:
南纬90度:南极、阿蒙森-斯科特站

地球的子午线总长度大约40008km。
平均:
纬度1度 = 大约111km
纬度1分= 大约1.85km
纬度1秒= 大约30.9m

赤道的纬度为0°,将行星平分为南半球和北半球。

转换

经纬度以度数表示,一般可直接以小数点表示,但亦可把度数的小数点分为角分(1角分等于六十分之一度),和秒(一秒等于六十分之一分)。表示经纬度有多样模式,以下是其中一些例子。

度分秒表示(度:分:秒)-49°30'00"-123d30m00s
度分表示(度:分)-49°30.0'-123d30.0m
度数表示-49.5000°-123.5000d(一般会有四位小数)。

海峡

北半球
白令海峡(西经170、北极圈)
东南亚的马六甲(东经100、北纬2.2度)
西亚(阿拉伯半岛)的霍尔木兹海峡(东经60、北回归线)
曼德海峡(东经45、北纬14)
土耳其海峡(东经30、北纬40)
直布罗陀海峡(西经5、北纬36)
南半球
非洲的莫桑比克海峡(东经40、南纬20)
南美洲的麦哲伦海峡(西经70、南纬53)
重要的半岛:
朝鲜半岛(东经126、北纬38)
中南半岛(东经100、北纬15)
马来半岛(东经102、北纬5)
印度半岛(东经80、北纬20)
阿拉伯半岛(东经50、北纬20)
西奈半岛(东经35、北纬30)
小亚细亚半岛(东经30、北纬40)
巴尔干半岛(东经20、北纬40)
亚平宁半岛(东经15、北纬40)
伊比利亚半岛(西经5、北纬40)
日德兰半岛(东经5、北纬55)
斯勘的纳维亚半岛(东经10、北纬60)
约克角(东经145、南纬15)
阿拉斯加半岛(西经165、北纬60)
下加利福尼亚半岛(西经110、北回归线)

经伟度扩展

经纬度划分规则图

 

距离扩展

计算经纬度之间的距离计算经纬度之间的距离

该模型将地球看成圆球,假设地球上有A(ja,wa),B(jb,wb)两点(注:ja和jb分别是A和B的经度,wa和wb分别是A和B的纬度),A和B两点的球面距离就是AB的弧长,AB弧长=R*角AOB(注:角AOB是A跟B的夹角,O是地球的球心,R是地球半径,约为6367000米)。如何求出角AOB呢?可以先求AOB的最大边AB的长度,再根据余弦定律可以求夹角。

google maps脚本中的计算距离代码:

private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
   return d * Math.PI / 180.0;
}
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
   double radLat1 = rad(lat1);
   double radLat2 = rad(lat2);
   double a = radLat1 - radLat2;
   double b = rad(lng1) - rad(lng2);
   double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
    Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
   s = s * EARTH_RADIUS;
   s = Math.Round(s * 10000) / 10000;
   return s;
}

公式:

 

外形扩展

地球由于受到自转时的惯性及离心力的作用,他并非完美的圆形。所以地球最高点并不是珠穆朗玛峰,虽然其海拔有8848米,由于地球不是完美的球型,所以赤道附近的山峰其实离星空更近一些,因此地球最高点理论上是厄瓜多尔博拉索山(Mount Chimborazo),它的海拔虽然有6272米,却比珠峰”高“出2400米。

 

 

发表在 gps | 标签为 , | LBS / 经伟度 / latitude / longitude / gps已关闭评论

Ceph的安装

Ceph的安装

官网链接:http://docs.ceph.com/docs/master/install/install-storage-cluster/

2.1 相关依赖的安装

我这里操作系统都是Centos7.2的操作系统。

#yum install yum-plugin-priorities -y

# cat /etc/yum/pluginconf.d/priorities.conf   #确保priority.conf启用插件。

[main]
enabled = 1

# vim /etc/yum.repos.d/ceph.repo  #做ceph源文件

[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

OR

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0

#yum install snappy leveldb gdisk python-argparse gperftools-libs -y

2.2 ceph安装

rpm -Uvh http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ceph-release-1-1.el7.noarch.rpm
yum -y install epel-release
yum -y install ceph-deploy
yum -y install ntp ntpdate ntp-doc
yum -y install openssh-server openssh-client
yum -y install yum-plugin-priorities -y
yum -y install redhat-lsb
yum -y install ceph ceph-release ceph-common ceph-radosgw

 


性能优化:

 Ceph Configurations

[global]

参数名 描述 默认值 建议值
public network 客户端访问网络 192.168.100.0/24
cluster network 集群网络 192.168.1.0/24
max open files 如果设置了该选项,Ceph会设置系统的max open fds 0 131072

  • 查看系统最大文件打开数可以使用命令
1
cat /proc/sys/fs/file-max

[osd] - filestore

参数名 描述 默认值 建议值
filestore xattr use omap 为XATTRS使用object map,EXT4文件系统时使用,XFS或者btrfs也可以使用 false true
filestore max sync interval 从日志到数据盘最大同步间隔(seconds) 5 15
filestore min sync interval 从日志到数据盘最小同步间隔(seconds) 0.1 10
filestore queue max ops 数据盘最大接受的操作数 500 25000
filestore queue max bytes 数据盘一次操作最大字节数(bytes) 100 << 20 10485760
filestore queue committing max ops 数据盘能够commit的操作数 500 5000
filestore queue committing max bytes 数据盘能够commit的最大字节数(bytes) 100 << 20 10485760000
filestore op threads 并发文件系统操作数 2 32

  • 调整omap的原因主要是EXT4文件系统默认仅有4K
  • filestore queue相关的参数对于性能影响很小,参数调整不会对性能优化有本质上提升

[osd] - journal

参数名 描述 默认值 建议值
osd journal size OSD日志大小(MB) 5120 20000
journal max write bytes journal一次性写入的最大字节数(bytes) 10 << 20 1073714824
journal max write entries journal一次性写入的最大记录数 100 10000
journal queue max ops journal一次性最大在队列中的操作数 500 50000
journal queue max bytes journal一次性最大在队列中的字节数(bytes) 10 << 20 10485760000

  • Ceph OSD Daemon stops writes and synchronizes the journal with the filesystem, allowing Ceph OSD Daemons to trim operations from the journal and reuse the space.
  • 上面这段话的意思就是,Ceph OSD进程在往数据盘上刷数据的过程中,是停止写操作的。

[osd] - osd config tuning

参数名 描述 默认值 建议值
osd max write size OSD一次可写入的最大值(MB) 90 512
osd client message size cap 客户端允许在内存中的最大数据(bytes) 524288000 2147483648
osd deep scrub stride 在Deep Scrub时候允许读取的字节数(bytes) 524288 131072
osd op threads OSD进程操作的线程数 2 8
osd disk threads OSD密集型操作例如恢复和Scrubbing时的线程 1 4
osd map cache size 保留OSD Map的缓存(MB) 500 1024
osd map cache bl size OSD进程在内存中的OSD Map缓存(MB) 50 128
osd mount options xfs Ceph OSD xfs Mount选项 rw,noatime,inode64 rw,noexec,nodev,noatime,nodiratime,nobarrier

  • 增加osd op threads和disk threads会带来额外的CPU开销

[osd] - recovery tuning

参数名 描述 默认值 建议值
osd recovery op priority 恢复操作优先级,取值1-63,值越高占用资源越高 10 4
osd recovery max active 同一时间内活跃的恢复请求数 15 10
osd max backfills 一个OSD允许的最大backfills数 10 4

[osd] - client tuning

参数名 描述 默认值 建议值
rbd cache RBD缓存 true true
rbd cache size RBD缓存大小(bytes) 33554432 268435456
rbd cache max dirty 缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through 25165824 134217728
rbd cache max dirty age 在被刷新到存储盘前dirty数据存在缓存的时间(seconds) 1 5

关闭Debug

3. PG Number

PG和PGP数量一定要根据OSD的数量进行调整,计算公式如下,但是最后算出的结果一定要接近或者等于一个2的指数。

Total PGs = (Total_number_of_OSD * 100) / max_replication_count

例如15个OSD,副本数为3的情况下,根据公式计算的结果应该为500,最接近512,所以需要设定该pool(volumes)的pg_num和pgp_num都为512.

1
2
ceph osd pool set volumes pg_num 512
ceph osd pool set volumes pgp_num 512

4. CRUSH Map

CRUSH是一个非常灵活的方式,CRUSH MAP的调整取决于部署的具体环境,这个可能需要根据具体情况进行分析,这里面就不再赘述了。

 


Mon删除

从健康的集群中删除

1、  systemctl stop ceph-mon@{mon-id}

2、  ceph mon remove {mon-id}

3、  从ceph.conf中删除

从不健康的集群中删除

1、  ceph mon dump

2、  service ceph stop mon

3、  ceph-mon –i {mon-id} --extract-monmap {mappath}

4、  monmaptool {mappath}  -rm {mon-id}

5、  ceph-mon –I {mon-id} –inject-monmap {monpath}


参考:

删除Ceph OSD节点

Ceph性能优化

 

 

..

发表在 storage | 标签为 | Ceph的安装已关闭评论

CEPH pg/pgs

PG全称是placement groups,它是ceph的逻辑存储单元。在数据存储到cesh时,先打散成一系列对象,再结合基于对象名的哈希操作、复制级别、PG数量,产生目标PG号。根据复制级别的不同,每个PG在不同的OSD上进行复制和分发。可以把PG想象成存储了多个对象的逻辑容器,这个容器映射到多个具体的OSD。PG存在的意义是提高ceph存储系统的性能和扩展性。

如果没有PG,就难以管理和跟踪数以亿计的对象,它们分布在数百个OSD上。对ceph来说,管理PG比直接管理每个对象要简单得多。每个PG需要消耗一定的系统资源包括CPU、内存等。集群的PG数量应该被精确计算得出。通常来说,增加PG的数量可以减少OSD的负载,但是这个增加应该有计划进行。一个推荐配置是每OSD对应50-100个PG。如果数据规模增大,在集群扩容的同时PG数量也需要调整。CRUSH会管理PG的重新分配。

每个pool应该分配多少个PG,与OSD的数量、复制份数、pool数量有关,有个计算公式在:

http://ceph.com/pgcalc/

《learning ceph》这本书里的计算公式也差不多:

Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count

结算的结果往上取靠近2的N次方的值。比如总共OSD数量是160,复制份数3,pool数量也是3,那么按上述公式计算出的结果是1777.7。取跟它接近的2的N次方是2048,那么每个pool分配的PG数量就是2048。

在更改pool的PG数量时,需同时更改PGP的数量。PGP是为了管理placement而存在的专门的PG,它和PG的数量应该保持一致。如果你增加pool的pg_num,就需要同时增加pgp_num,保持它们大小一致,这样集群才能正常rebalancing。下面介绍如何修改pg_num和pgp_num。

(1)检查rbd这个pool里已存在的PG和PGP数量:

$ ceph osd pool get rbd pg_num
pg_num: 128
$ ceph osd pool get rbd pgp_num
pgp_num: 128

(2)检查pool的复制size,执行如下命令:

$ ceph osd dump |grep size|grep rbd
pool 2 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash 
rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0

(3)使用上述公式,根据OSD数量、复制size、pool的数量,计算出新的PG数量,假设是256.

(4)变更rbd的pg_num和pgp_num为256:

$ ceph osd pool set rbd pg_num 256
$ ceph osd pool set rbd pgp_num 256

(5)如果有其他pool,同步调整它们的pg_num和pgp_num,以使负载更加均衡。

##############################################################

Ceph常用命令总结

1. 创建自定义pool

ceph osd pool create pg_num pgp_num

其中pgp_num为pg_num的有效归置组个数,是一个可选参数。pg_num应该足够大,不要拘泥于官方文档的计算方法,根据实际情况选择256、512、1024、2048、4096。

2. 设置pool的副本数、最小副本数、最大副本数

ceph osd pool set <poolname> size 2
ceph osd pool set <poolname> min_size 1
ceph osd pool set <poolname> max_size 10

资源所限,如果不希望保存3副本,可以用该命令对特定的pool更改副本存放数。

利用get可以获得特定pool的副本数。

ceph osd pool get <poolname> size

3. 增加osd

可以利用ceph-deploy增加osd:

ceph-deploy osd prepare monosd1:/mnt/ceph osd2:/mnt/ceph
ceph-deploy osd activate monosd1:/mnt/ceph osd2:/mnt/ceph

#相当于:
ceph-deploy osd create monosd1:/mnt/ceph osd2:/mnt/ceph

#还有一种方法,在安装osd时同时指定对应的journal的安装路径
ceph-deploy osd create osd1:/cephmp1:/dev/sdf1 /cephmp2:/dev/sdf2

也可以手动增加:

## Prepare disk first, create partition and format it
<insert parted oneliner>
mkfs.xfs -f /dev/sdd
mkdir /cephmp1
mount /dev/sdd /cephmp1
cd /cephmp1

ceph-osd -i 12 --mkfs --mkkey
ceph auth add osd.12 osd 'allow *' mon 'allow rwx' -i /cephmp1/keyring

#change the crushmap
ceph osd getcrushmap -o map
crushtool -d map -o map.txt
vim map.txt
crushtool -c map.txt -o map
ceph osd setcrushmap -i map

## Start it
/etc/init.d/ceph start osd.12

4. 删除osd

先将此osd停止工作:

## Mark it out
ceph osd out 5

## Wait for data migration to complete (ceph -w), then stop it
service ceph -a stop osd.5

## Now it is marked out and down

再对其进行删除操作:

## If deleting from active stack, be sure to follow the above to mark it out and down
ceph osd crush remove osd.5

## Remove auth for disk
ceph auth del osd.5

## Remove disk
ceph osd rm 5

## Remove from ceph.conf and copy new conf to all hosts

5. 查看osd总体情况、osd的详细信息、crush的详细信息

ceph osd tree
ceph osd dump --format=json-pretty
ceph osd crush dump --format=json-pretty

6. 获得并修改CRUSH maps

## save current crushmap in binary
ceph osd getcrushmap -o crushmap.bin

## Convert to txt
crushtool -d crushmap.bin -o crushmap.txt

## Edit it and re-convert to binary
crushtool -c crushmap.txt -o crushmap.bin.new

## Inject into running system
ceph osd setcrushmap -i crushmap.bin.new

## If you've added a new ruleset and want to use that for a pool, do something like:
ceph osd pool default crush rule = 4

#也可以这样设置一个pool的rule
cpeh osd pool set testpool crush_ruleset <ruleset_id>

-o=output; -d=decompile; -c=compile; -i=input

记住这些缩写,上面的命令就很容易理解了。

7. 增加/删除journal

为了提高性能,通常将ceph的journal置于单独的磁盘或分区中:

先利用以下命令设置ceph集群为nodown:

  • ceph osd set nodown
# Relevant ceph.conf options
 -- existing setup --
[osd]
    osd data = /srv/ceph/osd$id
    osd journal = /srv/ceph/osd$id/journal
    osd journal size = 512

# stop the OSD:
/etc/init.d/ceph osd.0 stop
/etc/init.d/ceph osd.1 stop
/etc/init.d/ceph osd.2 stop

# Flush the journal:
ceph-osd -i 0 --flush-journal
ceph-osd -i 1 --flush-journal
ceph-osd -i 2 --flush-journal

# Now update ceph.conf - this is very important or you'll just recreate 
journal on the same disk again
 -- change to [filebased journal] --
[osd]
    osd data = /srv/ceph/osd$id
    osd journal = /srv/ceph/journal/osd$id/journal
    osd journal size = 10000

 -- change to [partitionbased journal (journal
 in this case would be on /dev/sda2)] --
[osd]
    osd data = /srv/ceph/osd$id
    osd journal = /dev/sda2
    osd journal size = 0

# Create new journal on each disk
ceph-osd -i 0 --mkjournal
ceph-osd -i 1 --mkjournal
ceph-osd -i 2 --mkjournal

# Done, now start all OSD again
/etc/init.d/ceph osd.0 start
/etc/init.d/ceph osd.1 start
/etc/init.d/ceph osd.2 start

记得将nodown设置回来:

  • ceph osd unset nodown

8. ceph cache pool

经初步测试,ceph的cache pool性能并不好,有时甚至低于无cache pool时的性能。可以利用flashcache等替代方案来优化ceph的cache。

ceph osd tier add satapool ssdpool
ceph osd tier cache-mode ssdpool writeback
ceph osd pool set ssdpool hit_set_type bloom
ceph osd pool set ssdpool hit_set_count 1

## In this example 80-85% of the cache pool is equal to 280GB
ceph osd pool set ssdpool target_max_bytes $((280*1024*1024*1024))
ceph osd tier set-overlay satapool ssdpool
ceph osd pool set ssdpool hit_set_period 300
ceph osd pool set ssdpool cache_min_flush_age 300   # 10 minutes
ceph osd pool set ssdpool cache_min_evict_age 1800   # 30 minutes
ceph osd pool set ssdpool cache_target_dirty_ratio .4
ceph osd pool set ssdpool cache_target_full_ratio .8

9. 查看运行时配置

ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show

10. 查看监控集群状态

ceph health
cehp health detail
ceph status
ceph -s

#可以加上--fortmat=json-pretty
ceph osd stat
ceph osd dump
ceph osd tree

ceph mon stat
ceph quorum_status
ceph mon dump

ceph mds stat
ceph mds dump

11. 查看所有的pool

ceph osd lspools
rados lspools

12. 查看kvm和qemu是否支持rbd

qemu-system-x86_64 -drive format=?
qemu-img -h | grep rbd

13, 查看特定的pool及其中的文件

rbd ls testpool
rbd create testpool/test.img -s 1024 --image-format=2
rbd info testpool/test.img
rbd rm testpool/test.img

#统计块数
rados -p testpool ls | grep ^rb.0.11a1 | wc -l
#导入并查看文件
rados makepool testpool
rados put -p testpool logo.png logo.png
ceph osd map testpool logo.png

rbd import logo.png testpool/logo.png
rbd info testpool/logo.png

14. 挂载/卸载创建的块设备

ceph osd pool create testpool 256 256
rbd create testpool/test.img -s 1024 --image-format=2
rbd map testpool/test.img
rbd showmapped
mkfs.xfs /dev/rbd0
rbd unmap /dev/rbd0

15. 创建快照

#创建
rbd snap create testpool/test.img@test.img-snap1
#查看
rbd snap ls testpool/test.img
#回滚
rbd snap rollback testpool/test.img@test.img-snap1
#删除
rbd snap rm testpool/test.img@test.img-snap1
#清除所有快照
rbd snap purge testpool/test.img

16. 计算合理的pg数

官方建议每OSD50-100个pg。total pgs=osds*100/副本数,例如6osd、2副本的环境,pgs为6*100/2=300

pg数只能增加,无法减少;增加pg_num后必须同时增减pgp_num

17. 对pool的操作

ceph osd pool create testpool 256 256
ceph osd pool delete testpool testpool --yes-i-really-really-mean-it
ceph osd pool rename testpool anothertestpool
ceph osd pool mksnap testpool testpool-snap

18. 重新安装前的格式化

ceph-deploy purge osd0 osd1
ceph-deploy purgedata osd0 osd1
ceph-deploy forgetkeys

ceph-deploy disk zap --fs-type xfs osd0:/dev/sdb1

19. 修改osd journal的存储路径

#noout参数会阻止osd被标记为out,使其权重为0
ceph osd set noout
service ceph stop osd.1
ceph-osd -i 1 --flush-journal
mount /dev/sdc /journal
ceph-osd -i 1 --mkjournal /journal
service ceph start osd.1
ceph osd unset noout

20. xfs挂载参数

mkfs.xfs -n size=64k /dev/sdb1

#/etc/fstab挂载参数
rw,noexec,nodev,noatime,nodiratime,nobarrier

21. 认证配置

[global]
auth cluser required = none
auth service required = none
auth client required = none

#0.56之前
auth supported = none

22. pg_num不够用,进行迁移和重命名

ceph osd pool create new-pool pg_num
rados cppool old-pool new-pool
ceph osd pool delete old-pool
ceph osd pool rename new-pool old-pool

#或者直接增加pool的pg_num

23. 推送config文件

ceph-deploy --overwrite-conf config push mon1 mon2 mon3

24. 在线修改config参数

ceph tell osd.* injectargs '--mon_clock_drift_allowde 1'

使用此命令需要区分配置的参数属于mon、mds还是osd。


Ceph三节点(3 mon+9 osd)集群部署

2017-7-14

一、基础环境准备
3台机器,每台机器标配:1G内存、2块网卡、3块20G的SATA裸盘
"$"符号表示三个节点都进行同样配置
$ cat /etc/hosts
ceph-node1 10.20.0.101
ceph-node2 10.20.0.102
ceph-node3 10.20.0.103
$ yum install epel-release

二、安装ceph-deploy
[root@ceph-node1 ~]# ssh-keygen //在node1节点配置免SSH密钥登录到其他节点
[root@ceph-node1 ~]# ssh-copy-id ceph-node2
[root@ceph-node1 ~]# ssh-copy-id ceph-node3
[root@ceph-node1 ~]# yum install ceph-deploy -y

三个节点安装: yum install ceph

[root@ceph01 yum.repos.d]# cat ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
[root@ceph01 yum.repos.d]#

[root@ceph-node1 ~]# ceph-deploy new ceph-node1 ceph-node2 ceph-node3 //new命令会生成一个ceph-node1集群,并且会在当前目录生成配置文件和密钥文件

+++++++++++++++++++++++++++++++++++++++
[root@ceph-node1 ~]# ceph -v
ceph version 0.94.10 (b1e0532418e4631af01acbc0cedd426f1905f4af)
[root@ceph-node1 ~]# ceph-deploy mon create-initial //创建第一个monitor
[root@ceph-node1 ~]# ceph status //此时集群处于error状态是正常的
cluster ea54af9f-f286-40b2-933d-9e98e7595f1a
health HEALTH_ERR
[root@ceph-node1 ~]# systemctl start ceph
[root@ceph-node1 ~]# systemctl enable ceph

 

三、创建对象存储设备OSD,并加入到ceph集群
[root@ceph-node1 ~]# ceph-deploy disk list ceph-node1 //列出ceph-node1已有的磁盘,很奇怪没有列出sdb、sdc、sdd,但是确实存在的
//下面的zap命令慎用,会销毁磁盘中已经存在的分区表和数据。ceph-node1是主机名,同样可以是ceph-node2
[root@ceph-node1 ~]# ceph-deploy disk zap ceph-node1:sdb ceph-node1:sdc ceph-node1:sdd
[root@ceph-node1 ~]# ceph-deploy osd create ceph-node1:sdb ceph-node1:sdc ceph-node1:sdd //擦除磁盘原有数据,并创建新的文件系统,默认是XFS,然后将磁盘的第一个分区作为数据分区,第二个分区作为日志分区。加入到OSD中。
[root@ceph-node1 ~]# ceph status //可以看到集群依旧没有处于健康状态。我们需要再添加一些节点到ceph集群中,以便它能够形成分布式的、冗余的对象存储,这样集群状态才为健康。
cluster ea54af9f-f286-40b2-933d-9e98e7595f1a
health HEALTH_WARN
64 pgs stuck inactive
64 pgs stuck unclean
monmap e1: 1 mons at {ceph-node1=10.20.0.101:6789/0}
election epoch 2, quorum 0 ceph-node1
osdmap e6: 3 osds: 0 up, 0 in
pgmap v7: 64 pgs, 1 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
64 creating

 

四、纵向扩展多节点Ceph集群,添加Monitor和OSD
注意:Ceph存储集群最少需要一个Monitor处于运行状态,要提供可用性的话,则需要奇数个monitor,比如3个或5个,以形成仲裁(quorum)。
(1)在Ceph-node2和Ceph-node3部署monitor,但是是在ceph-node1执行命令!
[root@ceph-node1 ~]# ceph-deploy mon add ceph-node2
[root@ceph-node1 ~]# ceph-deploy mon add ceph-node3
++++++++++++++++++++++++++
报错:[root@ceph-node1 ~]# ceph-deploy mon create ceph-node2
[ceph-node3][WARNIN] Executing /sbin/chkconfig ceph on
[ceph-node3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[ceph-node3][WARNIN] monitor: mon.ceph-node3, might not be running yet
[ceph-node3][INFO ] Running command: ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-node3.asok mon_status
[ceph-node2][WARNIN] neither `public_addr` nor `public_network` keys are defined for monitors
解决:①通过在CentOS 7上chkconfig,怀疑节点1并没有远程启动节点2的ceph服务,如果我在node2手动启动的话,应该就可以了
[root@ceph-node2 ~]# systemctl status ceph
● ceph.service - LSB: Start Ceph distributed file system daemons at boot time
Loaded: loaded (/etc/rc.d/init.d/ceph)
Active: inactive (dead)
结果enable后还是失败了
②沃日,原来是书上写错了,在已经添加了监控节点后,后续添加监控节点应该是mon add,真的是醉了!

++++++++++++++++++++++++++++++++
[root@ceph-node1 ~]# ceph status
monmap e3: 3 mons at {ceph-node1=10.20.0.101:6789/0,ceph-node2=10.20.0.102:6789/0,ceph-node3=10.20.0.103:6789/0}
election epoch 8, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3

(2)添加更多的OSD节点,依然在ceph-node1执行命令即可。
[root@ceph-node1 ~]# ceph-deploy disk list ceph-node2 ceph-node3
//确保磁盘号不要出错,否则的话,容易把系统盘都给格式化了!
[root@ceph-node1 ~]# ceph-deploy disk zap ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd
[root@ceph-node1 ~]# ceph-deploy disk zap ceph-node3:sdb ceph-node3:sdc ceph-node3:sdd
//经过实践,下面的这条命令,osd create最好分两步,prepare和activate,终于为什么不清楚。
[root@ceph-node1 ~]# ceph-deploy osd create ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd
[root@ceph-node1 ~]# ceph-deploy osd create ceph-node3:sdb ceph-node3:sdc ceph-node3:sdd

++++++++++++++++++++++++++++++++++++++++++++
报错:
[ceph-node3][WARNIN] ceph-disk: Error: Command '['/usr/sbin/sgdisk', '--new=2:0:5120M', '--change-name=2:ceph journal', '--partition-guid=2:fa28bc46-55de-464a-8151-9c2b51f9c00d', '--typecode=2:45b0969e-9b03-4f30-b4c6-b4b80ceff106', '--mbrtogpt', '--', '/dev/sdd']' returned non-zero exit status 4
[ceph-node3][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.osd][ERROR ] Failed to execute command: ceph-disk -v prepare --fs-type xfs --cluster ceph -- /dev/sdd
[ceph_deploy][ERROR ] GenericError: Failed to create 3 OSDs
未解决:原来敲入osd create命令不小心把node2写成node3了,哎我尼玛,后面越来越难办了
+++++++++++++++++++++++++++++

[root@ceph-node1 ~]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.08995 root default
-2 0.02998 host ceph-node1
0 0.00999 osd.0 up 1.00000 1.00000
1 0.00999 osd.1 up 1.00000 1.00000
2 0.00999 osd.2 up 1.00000 1.00000
-3 0.02998 host ceph-node2
3 0.00999 osd.3 down 0 1.00000
4 0.00999 osd.4 down 0 1.00000
8 0.00999 osd.8 down 0 1.00000
-4 0.02998 host ceph-node3
5 0.00999 osd.5 down 0 1.00000
6 0.00999 osd.6 down 0 1.00000
7 0.00999 osd.7 down 0 1.00000

有6个OSD都处于down状态,ceph-deploy osd activate 依然失败,根据之前的报告,osd create的时候就是失败的。
未解决:由于刚部署ceph集群,还没有数据,可以把OSD给清空。
参考文档:http://www.cnblogs.com/zhangzhengyan/p/5839897.html
[root@ceph-node1 ~]# ceph-deploy disk zap ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd
[root@ceph-node1 ~]# ceph-deploy disk zap ceph-node3:sdb ceph-node3:sdc ceph-node3:sdd

(1)从ceph osd tree移走crush map的osd.4,还有其他osd号
[root@ceph-node1 ~]# ceph osd crush remove osd.3
[root@ceph-node1 ~]# ceph osd crush remove osd.4
[root@ceph-node1 ~]# ceph osd crush remove osd.8
[root@ceph-node1 ~]# ceph osd crush remove osd.5
[root@ceph-node1 ~]# ceph osd crush remove osd.6
[root@ceph-node1 ~]# ceph osd crush remove osd.7

(2)[root@ceph-node1 ~]# ceph osd rm 3
[root@ceph-node1 ~]# ceph osd rm 4
[root@ceph-node1 ~]# ceph osd rm 5
[root@ceph-node1 ~]# ceph osd rm 6
[root@ceph-node1 ~]# ceph osd rm 7
[root@ceph-node1 ~]# ceph osd rm 8

[root@ceph-node1 ~]# ceph osd tree //终于清理干净了
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.02998 root default
-2 0.02998 host ceph-node1
0 0.00999 osd.0 up 1.00000 1.00000
1 0.00999 osd.1 up 1.00000 1.00000
2 0.00999 osd.2 up 1.00000 1.00000
-3 0 host ceph-node2
-4 0 host ceph-node3
可以登录到node2和node3,sdb/sdc/sdd都被干掉了,除了还剩GPT格式,现在重新ceph-deploy osd create
我尼玛还是报错呀,[ceph_deploy.osd][ERROR ] Failed to execute command: ceph-disk -v prepare --fs-type xfs --cluster ceph -- /dev/sdd

++++++++++++++++++++++++++++++++++
报错:(1)node1远程激活node2的osd出错。prepare和activate能够取代osd create的步骤
[root@ceph-node1 ~]# ceph-deploy osd prepare ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd
[root@ceph-node1 ~]# ceph-deploy osd activate ceph-node2:sdb ceph-node2:sdc ceph-node2:sdd

[ceph-node2][WARNIN] ceph-disk: Cannot discover filesystem type: device /dev/sdb: Line is truncated:
[ceph-node2][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph-disk -v activate --mark-init sysvinit --mount /dev/sdb
解决:格式分区权限问题,在报错的节点执行ceph-disk activate-all即可。

(2)明明是node2的sdb盘,但是ceph osd tree却发现执行的是node3的sdb盘,当然会报错了
Starting Ceph osd.4 on ceph-node2...
Running as unit ceph-osd.4.1500013086.674713414.service.
Error EINVAL: entity osd.3 exists but key does not match
[root@ceph-node1 ~]# ceph osd tree
3 0 osd.3 down 0 1.00000

解决:[root@ceph-node1 ~]# ceph auth del osd.3
[root@ceph-node1 ~]# ceph osd rm 3
在node2上lsblk发现sdb不正常,没有挂载osd,那么于是
[root@ceph-node1 ~]# ceph-deploy disk zap ceph-node2:sdb
[root@ceph-node1 ~]# ceph-deploy osd prepare ceph-node2:sdb
[root@ceph-node1 ~]# ceph osd tree //至少osd跑到node2上面,而不是node3,还好还好。
-3 0.02998 host ceph-node2
3 0.00999 osd.3 down 0 1.00000
[root@ceph-node1 ~]# ceph-deploy osd activate ceph-node2:sdb //肯定失败,按照上面的经验,必须在Node2上单独激活
[root@ceph-node2 ~]# ceph-disk activate-all

[root@ceph-node1 ~]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.08995 root default
-2 0.02998 host ceph-node1
0 0.00999 osd.0 up 1.00000 1.00000
1 0.00999 osd.1 up 1.00000 1.00000
2 0.00999 osd.2 up 1.00000 1.00000
-3 0.02998 host ceph-node2
4 0.00999 osd.4 up 1.00000 1.00000
5 0.00999 osd.5 up 1.00000 1.00000
3 0.00999 osd.3 up 1.00000 1.00000
-4 0.02998 host ceph-node3
6 0.00999 osd.6 up 1.00000 1.00000
7 0.00999 osd.7 up 1.00000 1.00000
8 0.00999 osd.8 up 1.00000 1.00000
哎,卧槽,终于解决了,之前只是一个小小的盘符写错了,就害得我搞这么久啊,细心点!

=========================================
拓展:
[root@ceph-node1 ~]# lsblk // OSD up的分区都挂载到/var/lib/ceph/osd目录下
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 39.5G 0 part
├─centos-root 253:0 0 38.5G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 15G 0 part /var/lib/ceph/osd/ceph-0
└─sdb2 8:18 0 5G 0 part
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 15G 0 part /var/lib/ceph/osd/ceph-1
└─sdc2 8:34 0 5G 0 part
sdd 8:48 0 20G 0 disk
├─sdd1 8:49 0 15G 0 part /var/lib/ceph/osd/ceph-2
└─sdd2 8:50 0 5G 0 part
sr0 11:0 1 1024M 0 rom

 

 

 

 

 

 

发表在 storage | 标签为 | CEPH pg/pgs已关闭评论

CentOS 删除开机启动项中内核

1、描述:
在CentOS升级后,在关机重启后,启动项会多出一条新的条目如下图所示:再确定新的内核不出现问题时,可以删除这些内核。

2、解决方案:
(1)查询正在使用的内核 :
uname -a

[bigdata@bigdata ~]$ uname -a
Linux bigdata 3.10.0-327.36.3.el7.x86_64 #1 SMP Mon Oct 25 18:09:20 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
(2)查询系统中全部的内核
rpm -q kernel

[bigdata@bigdata ~]$ rpm -q kernel
kernel-3.10.0-327.el7.x86_64
kernel-3.10.0-327.28.2.el7.x86_64
kernel-3.10.0-327.36.3.el7.x86_64

(3)删除多余的内核(加粗的选项)
kernel-3.10.0-327.el7.x86_64
kernel-3.10.0-327.28.2.el7.x86_64
kernel-3.10.0-327.36.3.el7.x86_64

yum remove kernel-3.10.0-327.el7.x86_64
yum remove kernel-devel-3.10.0-327.el7.x86_64

 

发表在 linux | CentOS 删除开机启动项中内核已关闭评论

ceph radosgw-admin

生成一新用户:

$ radosgw-admin user create --display-name="johnny rotten" --uid=johnny
{ "user_id": "johnny",
  "rados_uid": 0,
  "display_name": "johnny rotten",
  "email": "",
  "suspended": 0,
  "subusers": [],
  "keys": [
        { "user": "johnny",
          "access_key": "TCICW53D9BQ2VGC46I44",
          "secret_key": "tfm9aHMI8X76L3UdgE+ZQaJag1vJQmE6HDb5Lbrz"}],
  "swift_keys": []}

删除一用户:

$ radosgw-admin user rm --uid=johnny

删除一个用户和与他相关的桶及内容:

$ radosgw-admin user rm --uid=johnny --purge-data

删除一个桶:

$ radosgw-admin bucket unlink --bucket=foo

显示一个桶从 2012 年 4 月 1 日起的日志:

$ radosgw-admin log show --bucket=foo --date=2012-04-01

显示某用户 2012 年 3 月 1 日(不含)到 4 月 1 日期间的使用情况:

$ radosgw-admin usage show --uid=johnny
--start-date=2012-03-01 --end-date=2012-04-01

只显示所有用户的使用情况汇总:

$ radosgw-admin usage show --show-log-entries=false

裁剪掉某用户 2012 年 4 月 1 日之前的使用信息:

$ radosgw-admin usage trim --uid=johnny --end-date=2012-04-01

命令

radosgw-admin 工具有很多命令,可完成各种管理任务:

user create
创建一个新用户。
user modify
修改一个用户。
user info
显示用户信息,以及可能存在的子用户和密钥。
user rm
删除一个用户。
user suspend
暂停某用户。
user enable
重新允许暂停的用户。
user check
检查用户信息。
user stats
显示配额子系统统计的用户状态。
caps add
给用户分配能力。
caps rm
删除用户能力。
subuser create
新建一个子用户(适合使用 Swift API 的客户端)。
subuser modify
修改子用户。
subuser rm
删除子用户
key create
新建访问密钥。
key rm
删除访问密钥。
bucket list
罗列所有桶。
bucket link
把桶关联到指定用户。
bucket unlink
取消指定用户和桶的关联。
bucket stats
返回桶的统计信息。
bucket rm
删除一个桶。
bucket check
检查桶的索引信息。
object rm
删除一个对象。
object unlink
从桶索引里去掉对象。
quota set
设置配额参数。
quota enable
启用配额。
quota disable
禁用配额。
region get
显示 region 信息。
regions list
列出本集群配置的所有 region 。
region set
设置 region 信息(需要输入文件)。
region default
设置默认 region 。
region-map get
显示 region-map 。
region-map set
设置 region-map (需要输入文件)。
zone get
显示区域集群参数。
zone set
设置区域集群参数(需要输入文件)。
zone list
列出本集群内配置的所有区域。
pool add
增加一个已有存储池用于数据归置。
pool rm
从数据归置集删除一个已有存储池。
pools list
罗列归置活跃集。
policy
显示桶或对象相关的策略。
log list
罗列日志对象。
log show
显示指定对象内(或指定桶、日期、桶标识符)的日志。
log rm
删除日志对象。
usage show
查看使用率信息(可选选项有用户和数据范围)。
usage trim
修剪使用率信息(可选选项有用户和数据范围)。
temp remove
删除指定日期(时间可选)之前创建的临时对象。
gc list
显示过期的垃圾回收对象(加 –include-all 选项罗列所有条目,包括未过期的)。
gc process
手动处理垃圾。
metadata get
读取元数据信息。
metadata put
设置元数据信息。
metadata rm
删除元数据信息。
metadata list
罗列元数据信息。
mdlog list
罗列元数据日志。
mdlog trim
裁截元数据日志。
bilog list
罗列桶索引日志。
bilog trim
裁截桶索引日志(需要起始标记、结束标记)。
datalog list
罗列数据日志。
datalog trim
裁截数据日志。
opstate list
罗列含状态操作(需要 client_id 、 op_id 、对象)。
opstate set
设置条目状态(需指定 client_id 、 op_id 、对象、状态)。
opstate renew
更新某一条目的状态(需指定 client_id 、 op_id 、对象)。
opstate rm
删除条目(需指定 client_id 、 op_id 、对象)。
replicalog get
读取复制元数据日志条目。
replicalog delete
删除复制元数据日志条目。

选项

-c ceph.conf--conf=ceph.conf
用指定的 ceph.conf 配置文件而非默认的 /etc/ceph/ceph.conf 来确定启动时所需的监视器地址。
-m monaddress[:port]
连接到指定监视器,而非通过 ceph.conf 查询。
--uid=uid
radosgw 用户的 ID 。
--subuser=<name>
子用户名字。
--email=email
用户的电子邮件地址。
--display-name=name
配置用户的显示名称(昵称)
--access-key=<key>
S3 访问密钥。
--gen-access-key
生成随机访问密钥(给 S3 )。
--secret=secret
指定密钥的密文。
--gen-secret
生成随机密钥。
--key-type=<type>
密钥类型,可用的有: swift 、 S3 。
--temp-url-key[-2]=<key>
临时 URL 密钥。
--system
给用户设置系统标识。
--bucket=bucket
指定桶名
--object=object
指定对象名
--date=yyyy-mm-dd
某些命令所需的日期
--start-date=yyyy-mm-dd
某些命令所需的起始日期
--end-date=yyyy-mm-dd
某些命令所需的终结日期
--shard-id=<shard-id>
执行 mdlog list 时为可选项。对 mdlog trim 、 replica mdlog get/delete 、 replica datalog get/delete 来说是必须的。
--auth-uid=auid
librados 认证所需的 auid 。
--purge-data
删除用户前先删除用户数据。
--purge-keys
若加了此选项,删除子用户时将一起删除其所有密钥。
--purge-objects
删除桶前先删除其内所有对象。
--metadata-key=<key>
用 metadata get 检索元数据时用的密钥。
--rgw-region=<region>
radosgw 所在的 region 。
--rgw-zone=<zone>
radosgw 所在的区域。
--fix
除了检查桶索引,还修复它。
--check-objects
检查桶:根据对象的实际状态重建桶索引。
--format=<format>
为某些操作指定输出格式: xml 、 json 。
--sync-stats
user stats 的选项,收集用户的桶索引状态、并同步到用户状态。
--show-log-entries=<flag>
执行 log show 时,显示或不显示日志条目。
--show-log-sum=<flag>
执行 log show 时,显示或不显示日志汇总。
--skip-zero-entries
让 log show 只显示数字字段非零的日志。
--infile
设置时指定要读取的文件。
--state=<state string>
给 opstate set 命令指定状态。
--replica-log-type
复制日志类型( metadata 、 data 、 bucket ),操作复制日志时需要。
--categories=<list>
逗号分隔的一系列类目,显示使用情况时需要。
--caps=<caps>
能力列表,如 “usage=read, write; user=read” 。
--yes-i-really-mean-it
某些特定操作需要。

配额选项

--bucket
为配额命令指定桶。
--max-objects
指定最大对象数(负数为禁用)。
--max-size
指定最大尺寸(单位为字节,负数为禁用)。
--quota-scope
配额有效范围(桶、用户)。

 

操作管理实例:

用户管理

新建一个用户

执行下面的命令新建一个用户 (S3 接口):

radosgw-admin user create --uid={username} 
--display-name="{display-name}" [--email={email}]

实例如下:

radosgw-admin user create --uid=johndoe
 --display-name="John Doe" --email=john@example.com

新建一个子用户

为了给用户新建一个子用户 (Swift 接口) ,你必须为该子用户指定用户的 ID(--uid={username}),子用户的 ID 以及访问级别:

radosgw-admin subuser create --uid={uid}
 --subuser={uid} --access=[ read | write | readwrite | full ]

实例如下:

radosgw-admin subuser create --uid=johndoe --subuser=johndoe:swift --access=full

Note:full 并不表示 readwrite, 因为它还包括访问权限策略.

获取用户信息

要获取一个用户的信息,你必须使用 user info 子命令并且制定一个用户 ID(--uid={username}) .

radosgw-admin user info --uid=johndoe

修改用户信息

要修改一个用户的信息,你必须指定用户的 ID (--uid={username}),还有 你想要修改的属性值。典型的修改项主要是 access 和secret 密钥,邮件地址,显 示名称和访问级别。举例如下:

radosgw-admin user modify --uid=johndoe --display-name="John E. Doe"

要修改子用户的信息, 使用 subuser modify 子命令并且执行子用户的 ID. 举例如下:

radosgw-admin subuser modify --uid=johndoe:swift --access=full

用户 启用/停用

当你创建了一个用户,用户默认情况下是处于启用状态的。然而,你可以暂停用户权 限并在以后随时重新启用它们。暂停一个用户,使用 user suspend 子命令 然后哦指定用户的 ID:

radosgw-admin user suspend --uid=johndoe

要重新启用已经被停用的用户,使用 user enable 子命令并指明用户的 ID.

radosgw-admin user enable --uid=johndoe

Note:停用一个用户后,它的子用户也会一起被停用.

删除用户

删除用户时,这个用户以及他的子用户都会被删除。当然,如果你愿意,可以只删除子用户。要删除用户(及其子用户),可使用 user rm 子命令并指明用户 ID :

radosgw-admin user rm --uid=johndoe

只想删除子用户时,可使用 subuser rm 子命令并指明子用户 ID 。

radosgw-admin subuser rm --subuser=johndoe:swift

其它可选操作:

  • Purge Data: 加 --purge-data 选项可清除与此 UID 相关的所有数据。
  • Purge Keys: 加 --purge-keys 选项可清除与此 UID 相关的所有密钥。

删除子用户

在你删除子用户的同时,也失去了 Swift 接口的访问方式,但是这个用户在系统 中还存在。要删除子用户,可使用 subuser rm 子命令并指明子用户 ID :

radosgw-admin subuser rm --subuser=johndoe:swift

其它可选操作:

  • Purge Keys: 加 --purge-keys 选项可清除与此 UID 相关的所有密钥。

新建一个密钥

要为用户新建一个密钥,你需要使用 key create 子命令。对于用户来说,需要指明用户的 ID 以及新建的密钥类型为 s3 。要为子用户新建一个密钥,则需要指明子用户的 ID以及密钥类型为 swift 。实例如下:

radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret

新建/删除 ACCESS 密钥

用户和子用户要能使用 S3 和Swift 接口,必须有 access 密钥。在你新 建用户或者子用户的时候,如果没有指明 access 和 secret 密钥,这两 个密钥会自动生成。你可能需要新建 access 和/或 secret 密钥,不管是 手动指定还是自动生成的方式。你也可能需要删除一个 access 和 secret 。可用的选项有:

  • --secret=<key> 指明一个 secret 密钥 (e.即手动生成).
  • --gen-access-key 生成一个随机的 access 密钥 (新建 S3 用户的默认选项).
  • --gen-secret 生成一个随机的 secret 密钥.
  • --key-type=<type> 指定密钥类型. 这个选项的值可以是: swift, s3

要新建密钥,需要指明用户 ID.

radosgw-admin key create --uid=johndoe --key-type=s3 --gen-access-key --gen-secret

你也可以使用指定 access 和 secret 密钥的方式.

要删除一个 access 密钥, 也需要指定用户 ID.

radosgw-admin key rm --uid=johndoe

添加/删除 管理权限

Ceph 存储集群提供了一个管理API,它允许用户通过 REST API 执行管理功能。默认情况下,用户没有访问 这个 API 的权限。要启用用户的管理功能,需要为用 户提供管理权限。

执行下面的命令为一个用户添加管理权限:

radosgw-admin caps add --uid={uid} --caps={caps}

你可以给一个用户添加对用户、bucket、元数据和用量(存储使用信息)等数据的 读、写或者所有权限。举例如下:

--caps="[users|buckets|metadata|usage|zone]=[*|read|write|read, write]"

实例如下:

radosgw-admin caps add --uid=johndoe --caps="users=*"

要删除某用户的管理权限,可用下面的命令:

radosgw-admin caps rm --uid=johndoe --caps={caps}

配额管理

设置用户配额

在你启用用户的配额前 ,你需要先设置配额参数。 例如:

radosgw-admin quota set --quota-scope=user
 --uid=<uid> [--max-objects=<num objects>] [--max-size=<max size>]

实例如下:

radosgw-admin quota set --quota-scope=user
 --uid=johndoe --max-objects=1024 --max-size=1024

最大对象数和最大存储用量的值是负数则表示不启用指定的 配额参数。

启用/禁用用户配额

在你设置了用户配额之后,你可以启用这个配额。实例如下:

radosgw-admin quota enable --quota-scope=user --uid=<uid>

你也可以禁用已经启用了配额的用户的配额。 举例如下:

radosgw-admin quota-disable --quota-scope=user --uid=<uid>

设置 BUCKET 配额

Bucket 配额作用于用户的某一个 bucket,通过 uid 指定用户。这些配额设置是独立于用户之外的。:

radosgw-admin quota set --uid=<uid>
 --quota-scope=bucket [--max-objects=<num objects>] [--max-size=<max size>]

最大对象数和最大存储用量的值是负数则表示不启用指定的 配额参数。

启用/禁用 BUCKET 配额

在你设置了 bucket 配额之后,你可以启用这个配额。实例如下:

radosgw-admin quota enable --quota-scope=bucket --uid=<uid>

你也可以禁用已经启用了配额的 bucket 的配额。 举例如下:

radosgw-admin quota-disable --quota-scope=bucket --uid=<uid>

获取配额信息

你可以通过用户信息 API 来获取每一个用户的配额 设置。通过 CLI 接口读取用户的配额设置信息,请执行下面的命令:

radosgw-admin user info --uid=<uid>

更新配额统计信息

配额的统计数据的同步是异步的。你也可以通过手动获 取最新的配额统计数据为所有用户和所有 bucket 更新配额统计数据:

radosgw-admin user stats --uid=<uid> --sync-stats

获取用户用量统计信息

执行下面的命令获取当前用户已经消耗了配额的多少:

radosgw-admin user stats --uid=<uid>

Note:你应该在执行 radosgw-admin user stats 的时候带上 --sync-stats 参数来获取最新的数据.

读取/设置全局配额

你可以在 region map中读取和设置配额。执行下面的命 令来获取 region map:

radosgw-admin regionmap get > regionmap.json

要为整个 region 设置配额,只需要简单的修改 region map 中的配额设置。然后使用 region set 来更新 region map即可:

radosgw-admin region set < regionmap.json

Note:在更新 region map 后,你必须重启网关.

用量管理

Ceph 对象网关会为每一个用户记录用量数据。你也可以通过指定日期范围来跟踪用户的用量数据。

可用选项如下:

  • Start Date: 选项 --start-date 允许你指定一个起始日期来过滤用量数据 (format: yyyy-mm-dd[HH:MM:SS]).
  • End Date: 选项 --end-date 允许你指定一个截止日期来过滤用量数据 (format: yyyy-mm-dd[HH:MM:SS]).
  • Log Entries: 选项 --show-log-entries 允许你 指明显示用量数据的时候是否要包含日志条目。 (选项值: true | false).

Note:你可以指定时间为分钟和秒,但是数据存储是以一个小时的间隔存储的.

展示用量信息

显示用量统计数据,使用 usage show 子命令。显示某一个特定 用户的用量数据,你必须指定该用户的 ID。你也可以指定开始日期、结 束日期以及是否显示日志条目。:

radosgw-admin usage show --uid=johndoe --start-date=2012-03-01 --end-date=2012-04-01

通过去掉用户的 ID,你也可以获取所有用户的汇总的用量信息

radosgw-admin usage show --show-log-entries=false

删除用量信息

对于大量使用的集群而言,用量日志可能会占用大量存储空间。你可以为所有用户或者一个特定的用户删除部分用量日志。你也可以为删除操作指定日期范围。:

radosgw-admin usage trim --start-date=2010-01-01 --end-date=2010-12-31
radosgw-admin usage trim --uid=johndoe
radosgw-admin usage trim --uid=johndoe --end-date=2013-12-31

 

参考:

https://www.cnblogs.com/kuku0223/p/8257813.html

 

 

发表在 storage | ceph radosgw-admin已关闭评论

SAS vs SSD对比测试MySQL 性能

对比测试结果见下:

SSD设备相应的性能提升比例:

测试环境:

参考:
 http://imysql.cn/2012/12/25/sas-vs-ssd-mysql-tpch-olap-benchmark.html
发表在 db | 标签为 | SAS vs SSD对比测试MySQL 性能已关闭评论

Linux实现的IEEE-802.1Q-VLAN-VCONFIG命令指南

Linux 实现的 IEEE-802.1Q-VLAN-VCONFIG 命令指南

 

...

Linux-IEEE-802.1Q-VLAN-VCONFIG

...

 

发表在 network | Linux实现的IEEE-802.1Q-VLAN-VCONFIG命令指南已关闭评论

Intel Xeon 5000 / E3 / E5 / E7

处理器型号 内核数 GPU
核心数
CPU频率
(GHz)
高速缓存
(MB)
超线程
技术
功耗(W)
 E3-1281 v3 4 0 3.70 GHz 8 MB P 82 W
 E3-1276 v3 4 2 3.60 GHz 8 MB P 84 W
 E3-1271 v3 4 0 3.60 GHz 8 MB P 80 W
 E3-1246 v3 4 2 3.50 GHz 8 MB P 84 W
 E3-1241 v3 4 0 3.50 GHz 8 MB P 80 W
 E3-1231 v3 4 0 3.40 GHz 8 MB P 80 W
 E3-1226 v3 4 2 3.30 GHz 8 MB P 84 W
 E3-1220 v3 4 0 3.10 GHz 8 MB P 80 W
 E3-1275L v3 4 1 2.70 GHz 8 MB P 45 W
 E3-1240L v3 4 0 2.00 GHz 8 MB P 25 W
 E3-1220L v3 2 0 1.10 GHz 4 MB P 13 W
 E3-1286 v3 4 2 3.70 GHz 8 MB P 84 W
 E3-1286L v3 4 2 3.20 GHz 8 MB P 65 W

.

处理器型号 CPU频率
(GHz)
高速缓存
(MB)
内核数 功耗(W) 睿频加速
2.0技术
超线程
技术
QPI链接速度
GT/秒
DDR4
内存
 E5-2699 v3 2.3 45 18 145 P P 9.6 2133
 E5-2698 v3 2.3 40 16 135 P P 9.6 2133
 E5-2697 v3 2.6 35 14 145 P P 9.6 2133
 E5-2695 v3 2.3 35 14 120 P P 9.6 2133
 E5-2690 v3 2.6 30 12 135 P P 9.6 2133
 E5-2683 v3 2 35 14 120 P P 9.6 2133
 E5-2680 v3 2.5 30 12 120 P P 9.6 2133
 E5-2670 v3 2.3 30 12 120 P P 9.6 2133
 E5-2660 v3 2.6 25 10 105 P P 9.6 2133
 E5-2650 v3 2.3 25 10 105 P P 9.6 2133
 E5-2640 v3 2.6 20 8 90 P P 8 1866
 E5-2630 v3 2.4 20 8 85 P P 8 1866
 E5-2620 v3 2.4 15 6 85 P P 8 1866
 E5-2609 v3 1.9 15 6 85 6.4 1600
 E5-2603 v3 1.6 15 6 85 6.4 1600
双路服务器 —(优化的频率)
 E5-2667 v3 3.2 20 8 135 P P 9.6 2133
 E5-2643 v3 3.4 20 6 135 P P 9.6 2133
 E5-2637 v3 3.5 15 4 135 P P 9.6 2133
 E5-2623 v3 3 10 4 105 P P 8 1866
双路服务器 — 低功耗
 E5-2650L v3 1.8 30 12 65 P P 9.6 2133
 E5-2630L v3 1.8 20 8 55 P P 8 1866
双路工作站
 E5-2687W v3 3.1 25 10 160 P P 9.6 2133
单路工作站
 E5-1680 v3 3.2 20 8 140 P P 2133
 E5-1660 v3 3 20 8 140 P P 2133
 E5-1650 v3 3.5 15 6 140 P P 2133
 E5-1630 v3 3.7 10 4 140 P P 2133
 E5-1620 v3 3.5 10 4 140 P P 2133
存储与通信
 E5-2658 v3 2.2 30 12 105 P P 9.6 2133
 E5-2648L v3 1.8 30 12 75 P P 9.6 2133
 E5-2628L v3 2 25 10 75 P P 8 1866
 E5-2618L v3 2.3 20 8 75 P P 8 1866
 E5-2608L v3 2 15 6 52 P 6.4 1866

.

处理器型号 CPU 频率
(GHZ)
睿频加速 超线程技术 三级高速
缓存
内核数 功耗 英特尔® QPI
链路速度
 E7-8893 v2 3.4 P P 37.5 MB 6 155 W 8.0 GT/秒
 E7-8891 v2 3.2 P P 37.5 MB 10 155 W 8.0 GT/秒
 E7-8880L v2 2.2 P P 37.5 MB 15 105 W 8.0 GT/秒
 E7-8857 v2 3 P 30 MB 12 130 W 8.0 GT/秒
 E7-8890 v2 2.8 P P 37.5 MB 15 155 W 8.0 GT/秒
 E7-8880 v2 2.5 P P 37.5 MB 15 130 W 8.0 GT/秒
 E7-8870 v2 2.3 P P 30 MB 15 130 W 8.0 GT/秒
 E7-8850 v2 2.3 P P 24 MB 12 105 W 7.2 GT/秒
面向 4 路和双路可扩展服务器
 E7-4890 v2 2.8 P P 37.5 MB 15 155 W 8.0 GT/秒
 E7-4880 v2 2.5 P P 37.5 MB 15 130 W 8.0 GT/秒
 E7-4870 v2 2.3 P P 30 MB 15 130 W 8.0 GT/秒
 E7-4860 v2 2.6 P P 30 MB 12 130 W 8.0 GT/秒
 E7-4850 v2 2.3 P P 24 MB 12 105 W 7.2 GT/秒
 E7-4830 v2 2.2 P P 20 MB 10 105 W 7.2 GT/秒
 E7-4820 v2 2 P P 16 MB 8 105 W 7.2 GT/秒
 E7-4809 v2 1.9 P 12 MB 6 105 W 6.4 GT/秒
面向双路可扩展服务器
 E7-2890 v2 2.8 P P 37.5 MB 15 155 W 8.0 GT/秒
 E7-2880 v2 2.5 P P 37.5 MB 15 130 W 8.0 GT/秒
 E7-2870 v2 2.3 P P 30 MB 15 130 W 8.0 GT/秒
 E7-2850 v2 2.3 P P 24 MB 12 105 W 7.2 GT/秒

.

英特尔® 至强® 处理器 5000 型
处理器 英特尔® 三级 处理器 最大 功率 内核数 线程数量
QPI 速度 高速 基本 Turbo
缓存 频率 频率
32 纳米技术
X5680 6.4 12 MB 3.33 GHz 3.6 GHz 130 瓦 6 12
GT/秒
X5677 6.4 12 MB 3.46 GHz 3.733 GHz 130 瓦 4 8
GT/秒
X5670 6.4 12 MB 2.93 GHz 3.333 GHz 95 瓦 6 12
GT/秒
X5667 6.4 12 MB 3.066 GHz 3.466 GHz 95 瓦 4 8
GT/秒
X5660 6.4 12 MB 2.8 GHz 3.2 GHz 95 瓦 6 12
GT/秒
X5650 6.4 12 MB 2.66 GHz 3.066 GHz 95 瓦 6 12
GT/秒
L5640 5.86 12 MB 2.26 GHz 2.666 GHz 60 瓦 6 12
GT/秒
L5630 5.86 12 MB 2.13 GHz 2.4 GHz 40 瓦 4 8
GT/秒
L5609 4.8 12 MB 1.86 GHz 1.866 GHz 40 瓦 4 4
GT/秒
E5640 5.86 12 MB 2.66 GHz 2.933 GHz 80 瓦 4 8
GT/秒
E5630 5.86 12 MB 2.53 GHz 2.8 GHz 80 瓦 4 8
GT/秒
E5620 5.86 12 MB 2.4 GHz 2.666 GHz 80 瓦 4 8
GT/秒
45 纳米技术
X5570 6.4 8 MB 2.93 GHz 95 瓦 4 8
GT/秒
X5560 6.4 8 MB 2.8 GHz 95 瓦 4 8
GT/秒
X5550 6.4 8 MB 2.66 GHz 95 瓦 4 8
GT/秒
L5530 5.86 8 MB 2.4 GHz 60 瓦 4 8
GT/秒
L5520 5.86 8 MB 2.26 GHz 60 瓦 4 8
GT/秒
L5518 5.86 8 MB 2.13 GHz 60 瓦 4 8
GT/秒
L5508 5.86 8 MB 2 GHz 38 瓦 2 4
GT/秒
L5506 4.8 4 MB 2.13 GHz 60 瓦 4 4
GT/秒
E5540 5.86 8 MB 2.53 GHz 80 瓦 4 8
GT/秒
E5530 5.86 8 MB 2.4 GHz 80 瓦 4 8
GT/秒
E5520 5.86 8 MB 2.26 GHz 80 瓦 4 8
GT/秒
E5506 4.8 4 MB 2.13 GHz 80 瓦 4 4
GT/秒
E5504 4.8 4 MB 2 GHz 80 瓦 4 4
GT/秒
E5502 4.8 4 MB 1.86 GHz 80 瓦 2 2
GT/秒

附件(资料来源于网络):

Intel-Xeon5000-CPU

Intel-Xeon-5500-RO

Intel-Xeon-E7-E5-E3-CPU

 

 

 

.

 

发表在 technologys | 标签为 | Intel Xeon 5000 / E3 / E5 / E7已关闭评论

虚拟化网络模式

1. 隔离模式(Host-only):虚拟机之间组建网络,该模式无法与宿主机通信,无法与其他网络通信,相当于虚拟机只是连接到一台交换机上。
2. 路由模式:相当于虚拟机连接到一台路由器上,由路由器(物理网卡),统一转发,但是不会改变源地址。
3. NAT模式:在路由模式中,会出现虚拟机可以访问其他主机,但是其他主机的报文无法到达虚拟机,而NAT模式则将源地址转换为路由器(物理网卡)地址,这样其他主机也知道报文来自那个主机,在docker环境中经常被使用。
4. 桥接模式:在宿主机中创建一张虚拟网卡作为宿主机的网卡,而物理网卡则作为交换机。

------------------------------------------------------------------

+ 隔离模型

+ 路由模型及NAT模型

+ 桥接模式

----------------------------------------------------------------------

对比图示:

---------------------------------------------------------------------

桥接示例:

网桥:

vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
DNS2=8.8.8.8

物理网卡:

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:0C:29:3B:3F:6F
UUID=dfd0cxde-5054-4c81-abe6-e7958f31549d
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
#IPADDR=192.168.1.10
#NETMASK=255.255.255.0
#GATEWAY=192.168.1.1
#DNS1=192.168.1.1
#DNS2=8.8.8.8
# 将 eth0 绑定到网桥接口 br0 上
BRIDGE=br0

查看已桥接状态:

brctl show

 

 

 

参考:

https://www.cnblogs.com/hukey/p/6436211.html

 

 

发表在 virtual machine | 虚拟化网络模式已关闭评论

磁盘IOPS的计算

计算磁盘IOPS的三个因素:
1、RAID类型的读写比

不同RAID类型的IOPS计算公式:

RAID类型

公式

RAID5、RAID3 Drive IOPS=Read IOPS + 4*Write IOPS
RAID6 Drive IOPS=Read IOPS +  6*Write IOPS
RAID1、RAID10 Drive IOPS=Read IOPS + 2*Write IOPS
2、硬盘类型的IOPS值

不同磁盘类型的IOPS:

硬盘类型

IOPS

FC 15K RPM 180
FC 10K RPM 140
SAS 15K RPM 180
SAS 10K RPM 150
SATA 10K RPM 290
SATA 7.2K RPM 80
SATA 5.4K RPM 40
Flash drive 2500
3、具体业务系统的读写比

二、案例

1) 业务需求: 10TB 的FC 15K RPM存储空间,满足6000 IOPS,计算RAID5,RAID10分别需要多少块硬盘?

首先需要知道I/O中读操作与写操作所占的百分比。 假定6000 IOPS中读/写比是2:1

    不同的RAID类型Drive 硬盘实际IOPS负载分别如下:

RAID10:(2/3)*6000+2*(1/3)*6000= 8000 IOPS

RAID5:(2/3)*6000+4*(1/3)*6000=12000 IOPS

参照不同硬盘类型的IOPS值,换算出需要多少块盘:

RAID10:8000 /180 = 45块

RAID5:12000/180 =67块

2)    一个RAID5,是由5块500G 10K RPM的FC盘组成,换算出该RAID支持的最大IOPS以及能够给前端应用提供的IOPS?

首先10K RPM的FC盘,单块盘的IOPS为140,5块盘最大IOPS值为700。

假设读写比为2:1,能够提供给前端应用的IOPS为:

(2/3)*X+4*(1/3)*X = 700

         2*X = 700
         X=350
         能够提供给前端应用的IOPS为350。

三. IOPS 说明

3.1 IOPS (Input/OutputPer Second)

IOPS 即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(OnlineTransaction Processing),IOPS是关键衡量指标。

另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。

传统磁盘本质上一种机械装置,如FC, SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。

(1)寻道时间

Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。

(2)旋转延迟

Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。

(3)数据传输时间

Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s(MBPS),SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。

IOPS(每秒IO次数) = 1s/(寻道时间+旋转延迟+数据传输时间)

因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15Krpm,则磁盘IOPS理论最大值分别为:

IOPS = 1000 / (3 + 60000/7200/2)  = 140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200

3.2 固态硬盘的IOPS

固态硬盘SSD是一种电子装置, 避免了传统磁盘在寻道和旋转上的时间花费,存储单元寻址开销大大降低,因此IOPS可以非常高,能够达到数万甚至数十万。实际测量中,IOPS数值会受到很多因素的影响,包括I/O负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘IOPS时,必须在同样的测试基准下进行,即便如何也会产生一定的随机不确定性。

通常情况下,IOPS可细分为如下几个指标:

Toatal IOPS:混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。

Random Read IOPS:100%随机读负载情况下的IOPS。

Random WriteIOPS:100%随机写负载情况下的IOPS。

Sequential ReadIOPS:100%顺序负载读情况下的IOPS。

Sequential WriteIOPS:100%顺序写负载情况下的IOPS。

文章来源: https://www.cnblogs.com/renyb/p/3698664.html
CentOS/Redhat IO view:
yum install iotop -y
sudo iotop
发表在 storage | 磁盘IOPS的计算已关闭评论

Let’s Encrypt SSL and Nginx (using certbot)

A few days ago I enabled HTTPS and SSL/TLS on this blog. A big barrier to enabling SSL on your website is the cost of the SSL certificate and the maintenance overhead of having to constantly renew your certificate. You could already get free SSL certificates with StartSSL, but the process of obtaining the certificate is still a manual process. A few months ago Mozilla and a bunch of companies came together and created Letsencrypt, a service which issues free SSL certificates that are automatically generated with a command line tool. When set up correctly, it alleviates the need for manual intervention. As of the writing of this blog post, the service is still in beta and support for Nginx is minimal, but it’s not difficult to set up.

Since the software is still in beta, the only way to get it is via letsencrypt github. First we need to pull the repository:

Update 15/05/2016 – previously named letsencrypt-auto, the certificate utility is now called certbot-auto

  1. $ wget https://dl.eff.org/certbot-auto
  2. $ chmod a+x ./certbot-auto

We then get the certbot-auto executable. Running ./certbot-auto --help will give you the available commands. The current version has built in support for Apache, with nginx under testing. But as long as we get the certificate, we could install it to any software supported or not. I will illustrate the (initially) manual way of getting the certificate with nginx.

Obtaining the certificate from Let’s Encrypt

To obtain a certificate, ownership of the domain needs to be verified. Letsencrypt achieves this by checking for the contents of a file under http://www.example.com/.well-known/acme-challenge/. There are two ways given by certbot-auto to make this file available – by spawning a standalone server to listen on port 80 (--standalone), or by adding the files to the root folder of the web site (--webroot). The problem with standalone is that you have to stop your active web server on port 80, causing downtime, where as webroot allows your current server to continue operating. So webroot is the solution we will use.

Obtain a certificate with webroot, by calling this command (replacing example.com and /var/www/example obviously!). You can append more domains with -d.

  1. ./certbot-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com

The above method requires you to have a physical root folder. If you are using nginx as a load balancer or reverse proxy (i.e. proxy_pass), you most likely won’t have a root for your domain. In those cases, you could add a location alias to your nginx.conf under the HTTP (port 80) server directive for the domain:

  1. location /.well-known {
  2. alias /var/www/html/.well-known;
  3. }

Then run:

  1. ./certbot-auto certonly --webroot -w /var/www/html -d example.com -d www.example.com

The first time you run certbot, it will ask you to agree to the TOS and register your email. After that, the operation is pretty much unattended.

After the command finishes, you should have your certificate at /etc/letsencrypt/live/example.com/fullchain.pem and private key at /etc/letsencrypt/live/example.com/privkey.pem

Install the certificate into nginx

Modify you nginx configuration file to enable SSL:

  1. server {
  2. listen 443 ssl;
  3. server_name example.com;
  4. ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  5. ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  6. }

You may also want to add Strict-Transport-Security (HSTS) to your config, such that any internal links that are not https will automatically be routed to the HTTPS version during a HTTPS session.

  1. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

Lastly, reload the nginx configuration:

  1. sudo service nginx reload

Auto-renewing the certificate

Let’s Encrypt certificates are only valid for 3 months after issue. So every 3 months, renewal is required. Since the process of obtaining the certificate is through the command line, this process could be automated. We could set up a cron job which takes care of the renewal, like the below:

  1. 0 6 * * * /path/to/certbot/certbot-auto renew --text >> /path/to/certbot/certbot-cron.log && sudo service nginx reload

The above cron job is set up to run daily, but the certificate is only renewed if less than 30 days to expiry.

 

links:  https://loune.net/2016/01/https-with-lets-encrypt-ssl-and-nginx/

发表在 web server | Let’s Encrypt SSL and Nginx (using certbot)已关闭评论

一般已确定产品构建的步骤

1. 产品(市场)调研
2. 产品架构设计
3. 产品文档撰写
4. 技术架构设计
5. 技术文档撰写

不考虑商业模式

发表在 article | 一般已确定产品构建的步骤已关闭评论

时髦的互联网公司都在用什么技术?

摘录自: http://www.cnblogs.com/onlytiancai/archive/2012/11/22/2783104.html

想知道国内互联网公司都在用什么时髦或靠谱的技术,服务,开源项目吗?为此我发起了个调查,已经有一些结果了,随我来看。

调查地址:http://www.diaochapai.com/survey/1a9164b1-fbbf-4476-b542-c6aad67f6587

本次调查收到133份样本,独立IP 130个,覆盖微博上好多互联网公司,有一定的代表性。

通过本次调查,总结出几个关键字:git,Markdown,RESTfull,nagios,Redis,mongodb,nginx,DNSPod,Python,QQ群,gitlab,jira

你们公司用什么管理文档?

通过调查发现大多数公司使用版本管理工具来进行文档管理,好处是文档的历史可以保留,而且git等版本管理工具开发人员用起来也很方便顺手。

另外就是用Wiki进行内部文档管理的公司也占一定的分量,它的优点就是可以在web查看,方便分享,但一般wiki都是全公开的,没有权限管理,对一些级别高的项目的文档管理有些不便。

在其它选项里也有公司选择用Google Doc进行文档管理的,也不错,但是缺点也是很明显的,这个你懂的。

其实在我们公司,文档也是用git管理的,但git的仓库是由gitlab管理的,文档既可以进行版本管理,也可以方便分享和权限管理。

你们公司的文档主要使用什么格式?

怪不得微软还这么强大,还有这么多人使用Office写文档,其次就是PDF,优点就是跨平台。

比较欣慰的是Markdown这种轻格式也逐渐被很多公司所认可,它编写方便,阅读美观,存储方便,平台通用,应该是程序员最喜欢的格式,我看好它。

你们公司的服务间通信选用什么协议和框架?

HTTP/RESTfull API以它的通用性,夸平台性赢得了很多公司的使用,完了就是RMI,.NET Remoting等语言框架内置的通信方式所占比例也很大,再次就是好多公司都是自主开发通信协议,看来一些开源的方案还是不能满足企业的内部需求。

再就是ZeroMQCelery等通信领域的新秀也崭露头角,有不少公司内部在使用了。

你们公司的运维监控用什么?

首先是好多公司在运维监控方面都是自主开发,这个现象比较奇怪,可能是现在好多公司的服务器越来越多,在运维监控上的需求越来越多,越来越个性化,一些开源的方案已经不太能胜任了,所以好多公司选择自主开发,在这个问题上,我还是希望各公司能分享自己的经验,让更多人受益。

nagioscatcti这两个老牌工具还是宝刀未老。 graphite也有很多人使用了,这是个比较轻量级的方案,数据上报协议很简单,而且有各种语言的客户端,比如pystatsd

其它选项里,有很多人提到了监控宝,看起来监控宝也功能不错,还有就是zenoss,zabbix,ganglia,collectd, munin,这些我都不了解,有兴趣的朋友可以搜搜。

你们公司的自动部署用什么?

震惊的同时也感觉有些道理,这么多公司的自动化部署竟然是用Shell脚本,Shell脚本真是运维的尚方宝剑呀。

puppetfibric的成绩也不错,puppet功能很强大,大公司应该用的比较多,fibric比较轻量级,也很灵活,应该一些新型公司在用。

其它选项里有人选择ccnet,cap,chef, capistrano,hudson,deployhq, jenkins, Bcfg2,ant的,大多不认识,但好多人用每日构建工具或持续集成工具做自动部署,确实感觉很新颖,要不就是我太土了,:)。

你们公司用什么做队列?

Redis这次当仁不让了,我想不用解释了,RabitMQ也很给力,占了近20%的份额,这个东西性能也相当强劲,淘宝褚霸经常推荐,应该错不了,主要是公司得有像霸爷这样能驾驭的了erlang的人才更靠谱。

JMQ,MSMQ不说了,其它选项里有MangoDB,ApachMQ, hornetq,activemq, kestrel, zeromq, beanstalk的,真是百花齐放呀,俺蛤蟆跳井--不懂。

你们公司的nosql系统用什么?

redis,memcached,mongodb这哥三齐头并进,不分伯仲。当然memcached资格老,用的人肯定多,redis不仅是k-value db,还支持key-结构化数据,队列,Sub-pub等模式,是架构设计的得力助手,mongodb虽然好多人说有这问题那问题,但瑕不掩瑜,在使用方便性上来说几乎无出其右者。

其它选项有CrabDB,hbase, couchbase, postgresql, dynamodb的,为啥没人用BDB呢?奇怪。tk也没人用了吗?

你们公司的WebServer,反向代理,7层负载用什么?

这。。。nginx又不低调了,快满格了。apache竟然还活着,佩服。haproxy做7层负载应该很强,但使用量貌似有些对不起它的知名度,我 一直以为大家都是用lvs做四层负载,haproxy做7层负载呢。gUnicorn就5个人使用,识货的人不多呀,或者玩python的公司不多,它的性能应该仅次于nginx,当然功能没nginx那么丰富,做python的web server肯定是首选,+1。

其它选项里有Litespeed,netscaler,F5,IIS,lvs,Tomcat的,用F5的都是高富帅,屌丝们可以退散了。

你公司的DNS解析用什么?

域名解析对一个互联网公司的重要性大家都是有目共睹的,DNSPod以其稳定安全的解析赢得了众公司的亲睐,成绩不俗,赞一个。

好多公司还是选择域名注册商如万网等自带的解析,还有一些IT能力或研发能力强的公司自己用Bind架DNS或完全自主开发,其它选项里有tinydns,softlayer,linode, aws, csiso,name.com, 花生壳啥的。

您公司有没有用时髦的编程语言?

好吧,我是python的坚定支持者,我觉得语言学好c,python,javascript基本就是无敌了,图表说明一切,不解释了。

other选项里有scala,Groovy,f#, obj-c啥的,都不错的语言,当然除了obj-c。

你们公司内部交流分享都用什么?

qq群立功了,呵呵,看来互联网公司都比较开放,不像一些传统公司,上班连qq都不让开,坑爹呀。内部论坛和rtx也有不少人用,另外飞信我就不说了。。。

其他选项有:skype irc,8hours.do, Lync(支持下),google sites, trac, wangwang(这是啥?), bootcamp, hipchat, IMO, OC, GTalk, salesforce, 邮件,wiki, node_chat, openfire, LCS, 飞秋(还记得那些年我们传的片儿吗?),webex, Hi(是百度hi吗亲?)。我去,好长,一口气念不完呀。

你们公司的BUG/需求管理用什么?

这个问题回答的好不统一,直接上其它选项吧:trello(好),jira(牛),mantis, QC, ClearQuest,github,redmine(有些老了),prd,禅道,bugfree,Agilezen,Asana(潮),openerp,MantisBT,codebase,bugzilla,urtracker

好了,调查分析到此告一段落,其实有好多问题还没问题,比如你公司用谁家的cdn? 你公司用什么源码管理工具?等,下回再来分解吧。

 

 

 

发表在 article | 时髦的互联网公司都在用什么技术?已关闭评论