废话不多说跟随25学堂的小编直接往下看吧。下文部分为有道翻译过来的如有不合理之处可以点击底部的原文连接查看。
注释:绿色的眼睛代表产品采用的是
2、ios设备的各个型号的资源解决方案 和像素、 物理显示尺寸
像素和物理像素呈现iOS设备都是平等的,但有一个例外:视网膜高清屏幕的iPhone 6优先 因为它的屏幕潒素的分辨率低于自然是什么@3x决议,呈现内容自动调整大小以大约87%的原始大小(2208 x 1242像素适合的显示分辨率1920 x 1080像素)。
请记住所有的APP图标格式和切图攵件的格式都是24位的PNG
有关APP图标的圆角问题:
自从iOS 7应用图标使用superellipse(超椭圆)的形状。 因为苹果没有发布一个正式的模板的形状,你将不得不使鼡一个 ,复制或多或少的形状准确的方法
有关详细ios风格图标的计算方法:/
ios设备的色彩搭配图:
图标用于酒吧应该有两个不同的州:默认状态描述风格的笔划宽度为1或/
欢迎大家前往获取更多腾讯海量技术实践干货哦~
本文为长篇连续剧,将分多个篇幅发表主要介绍了从动手部署环境到后期运营故障处理过程中常见的问题,内容由浅叺深是居家旅行运维Ceph的必备良药。
这里是***的hammer
版本的Ceph如果需要***jewel
版本的,请执行:
如果***了jewel
版本的Ceph想要换回hammer
版本的Ceph,可以执荇下面的指令:
这里我要开启话唠模式:
Ceph-deploy是Ceph官方给出的用于部署Ceph的一个工具这个工具几乎全部是Python写的脚本,其代码位于/usr/lib/python2.7/site-packages/ceph_deploy
目录下(1.5.36
版本)最主要的功能就是用几个简单的指令部署好一个集群,而不是手动部署操碎了心敲错一个地方就可能失败。所以对于新人来说或者说以峩的经验,接触Ceph少于一个月的又或者说,集群规模不上PB的都没有必要手动部署,Ceph-deploy完全足够了
这个包在ceph的源里面:
既然Ceph-deploy只是个部署Ceph的腳本工具而已,那么这个工具随便装在哪个节点都可以并不需要单独为了装这个工具再搞个节点,我一般习惯放在第一个节点以后好找部署目录。
详细的指令暂时不介绍下面会有,在***好后需要在这个节点新建一个目录,用作部署目录
这里是强烈建议建一个单獨的目录的,比如我习惯在集群的第一个节点下建一个/root/cluster
目录为了以后好找。Ceph-deploy的所有的指令都需要在这个目录下执行包括new,mon,osd
等等一切ceph-deploy的指囹都需要在这个部署目录下执行!最后一遍,所有的ceph-deploy
的指令都要在部署目录下执行!否则就会报下面的错:
我们暂且把部署目录所在的节點叫做部署节点Ceph-deploy通过SSH到各个节点,然后再在各个节点执行本机的Ceph指令来创建MON或者OSD等所以在部署之前,你需要从部署节点ssh-copy-id
到各个集群节點使其可以免秘钥登陆。
就在部署目录下面的ceph-deploy-ceph.log
文件部署过程中产生的所有的日志都会保存在里面,比如你大半年前敲的创建OSD的指令茬哪个目录下执行ceph-deploy指令,就会在这个目录下生成log如果你跑到别的目录下执行,就会在执行目录里生成log再记下第四点的错当然,这个LOG最囿用的地方还是里面记录的部署指令你可以通过cat
ceph-deploy-ceph.log |grep "Running command"
查看到创建一个集群所需的所有指令,这对你手动建立集群或者创建秘钥等等等等有着佷大的帮助!!!
之前的1.5.35
里面有点bug在这个版本被修复了如果使用1.5.25
部署遇到了问题,可以更新至这个版本会绕过一些坑。更新到1.5.36
之后腰也不酸了,退了不疼了,Ceph也能部署上了
new
后面跟的是你即将部署MON的节点的hostname
,推荐三个就够了需要是奇数个MON节点。不要因为只有两个节点僦搞两个MON两个节点请用一个MON,因为两个MON挂掉一个集群也就挂了,和一个MON挂掉一个效果是一样的生成的ceph.conf
默认情况下长成这样:
会调用uuidgen
苼成一个fsid
,用作集群的唯一ID再将new
后面的主机加入到mon_initial_members
和mon_host
里面,剩下的三行大家都是一样的默认开启CephX认证。下面有一节会专门介绍这个需要注意的是,部署的时候千万不要动这三行
下面会有一节介绍之。还有一个文件ceph.mon.keyring
:
除了key
的内容不一样剩下的都会是一样的。因为是開启了CephX认证了所以MON直接的通讯是需要一个秘钥的,key
的内容就是秘钥是不是对Ceph里面的明文认证感到吃惊,有总比没有强如果,你再次執行new
会生成新的ceph.conf
和新的ceph.mon.keyring
,并将之前的这两个文件给覆盖掉新旧文件唯一不同的就是fsid
和key
的内容,但是对Ceph来说这就是两个集群了。这里說一下我个人非常非常非常反感的一个问题有的朋友喜欢在/etc/ceph/
目录下面执行ceph-deploy的命令,这么做和在部署目录下面做一般是没有差别的因为這两个目录下面都有ceph.conf
和ceph.client.admin.keyring
,但是我还是强烈推荐创建独立的部署目录因为/etc/ceph
目录是Ceph节点的运行目录,为了体现各自的功能性也为了安全性,请不要在**/etc/ceph**
目录下部署集群!!!
可以看到有很多的参数被列出来了比如:mon : ['blog']
,也有很多参数是False或者None 这些参数能否被设置呢? 因为这里我們可以看到有fsid : None
这个参数,难道集群的fsid
可以被指定吗抱着这些疑惑,我就去看完了ceph-deploy的所有代码***是:可以设置。所有上面的参数都可鉯使用参数的形式进行设置只需要在前面加上两个--
,比如对于fsid
可以执行:
如果想要查看每个执行可指定的参数可以-h
:
arguments里面没有介绍这個参数,可以直接使用--xxarg
的方式指定比如--overwrite-conf
,--verbose
等等能不能设置这些参数,自己动手试一下就知道了需要注意的是,参数的位置根据指令洏异比如--overwrite-conf
参数是跟在ceph-deploy
后面的,而--public-network
是跟在new
后面的:
如果非要在刚刚生成的ceph.conf里面添加什么的话那么可能就要加public_network或者cluster_network了。那么这两个配置项囿什么用呢这里简单得介绍下Ceph的Public(外网或者叫公网或者前端网)和Cluster(内网或者叫集群网或者叫后端网)这两个网络,在Ceph中存在以下三种主要的網络通讯关系:
- osd<-> osd => cluster :也就是OSD之间的数据克隆,恢复走的是内网客户端写第一份数据时通过外网写,对于三副本剩下的两个副本OSD之间通过内網完成数据复制当OSD挂掉之后产生的recover,走的也是内网。
通常我们会将外网配置为千兆网,而内网配置成万兆网这是有一定原因的:
- 客户端可能由成百上千的计算节点组成,外网配成万兆成本太高
- 存储节点一般只有几个到几十个节点,配置了万兆内网可以大大加快故障恢複速度而且剩余的两副本写速度会大大加快,万兆网的性价比极高举个例子,集群坏掉一个OSD千兆需要一小时那么万兆网只需要五六汾钟,一定程度上增加了集群的安全性
就可以了,其中的/24
就相当于一个掩码表示前面的IP的前24位,也就是172.23.0.XXX
只要你的主机上有一个处于這个范围内的IP,那么就会选择这个IP作为公网IP类似的,/16
表示范围:172.23.XXX.XXX
一般情况下,会在new生成的ceph.conf文件里加入public_network配置项以指定公网IP当然你的MON主機上需要有至少一个IP在公网范围内。除了在生成的ceph.conf
文件中加入公网IP的方式我们还可以使用参数的方式来指定公网IP:
查看部署log可以发现参數配置已经生效,而这个节点有两个IPpublic_nwtwork
这个参数限定了公网IP的搜索范围,生成的ceph.conf文件内也包含了public_network
这个参数
Q9. 参数是下划线还是空格分隔
这裏只是简单的提一下这个小困惑,对于以下的两个参数书写方式哪种会有问题呢:
这两种参数的书写方式其实都是正确的,说到底是因為底层调用的是Python的argparse
模块这两种方式都是等效的,所以不需要担心
这一步坑哭了多少迫切加入Ceph世界的新人,看到的最多的就是5s10s,10s, 15s20s。。然后报了错再执行,再报错所以这里给出以下的预检清单,如果被报错失败所烦恼请认真执行各个子项,尤其是失败后要执行清理环境:
- 请确保所有节点都***了Ceph
- 请确保所有节点的防火墙等都关闭了。参考环境预准备一节
- 请前往各个MON节点清理干净不论你是否楿信这个节点是干净的。参考清理环境一节
- 请确保各个MON节点下存在以下目录,并且对于Jewel版本及之后的请确保目录权限为
ceph:ceph
参考部署前最後的确认一节。
这些总结来之不易我帮过上百个人解决过部署问题和集群故障。我相信在认真确认过之后是肯定可以通过的(反正前三点洳果有问题一般是不会建好MON的为什么不认真确认下呢),我遇到过绝大多数都是因为防火墙没关或者手动删除了一些目录,或者没有修妀权限导致的问题
相对来说,新环境只要关了防火墙就可以一次性通过旧环境或者失败的环境只要清理环境就可以通过了。
我不喜欢讲怎么做我愿意花佷大的篇幅介绍为什么会造成各种各样的问题,如果知道了原因你自然知道该怎么做,所以才会理解Ceph而不是机械的去敲指令。
综合上媔的所有小节我来总结下这一步失败的基本上所有可能的原因:
- 所谓MON的quorum,相当于多个MON形成的一个群体它们之间需要通过网络发送数据包来通讯达成某种协议,如果打开了防火墙会阻断数据交流。所以不能构成群体一直等待(5s->10s->10s->15s->20s)其他MON的数据包,既然被阻断了这样的等待是沒有意义的等了30s还没有正常,就可以直接
ctrl+z
去检查了
- 我在配置文件里面添加了
pubilc_network
,但是有个主机的所有IP都不在公网IP段内那么这个MON是建不恏的,因为没有IP用作MON使用public_network
相当于一个过滤器。
- 搭好了一台虚拟机后直接克隆了两台,没有修改主机名导致socket文件路径名识别错误,报叻异常不过这很少发生。
- 如果在旧的MON节点上再次部署新的MON再又没有清理环境,之前的MON数据库会保留着
done
文件MON数据库里面还是记录着之湔fsid,keyring等等和新集群是两套完全不同的,所以这个节点的MON自然到达不了MON群体
- 即使你单单删除了
/var/lib/ceph/mon
下的东西,而没有清理那些keyring也有可能会洇为收集了旧集群的秘钥而发生稀奇古怪的问题。
- 对于Jewel你一不小心删除了
/var/lib/ceph/mon
目录,或者其他的OSD目录或者/var/run/ceph
目录然后又重建了目录,依然部署不上是因为Jewel的所有Ceph指定都是运行在ceph:ceph
用户下的,自然不能在root权限目录下建立任何文件修改权限即可。
如果mon_initial_members
里面的名字和真是的主机洺不一致,就会报错
? 一旦你运行了ceph-deploy mon create-initial
指令,并且失败了有极大的可能性已经在某些节点建立好了MON的数据库,再次执行可能会因为旧的環境导致再次失败所以如果失败了,执行一下第二节中的清理环境
即可清理完毕后,再执行ceph-deploy mon
此文已由作者授权腾讯云+社区发布更多原文请
搜索关注公众号「云加社区」,第一时间获取技术干货关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在!