可以看到有很多的参数被列出来了,比如:mon : ['blog'],也有很多参数是False或者None, 这些参数能否被设置呢? 因为这里我们可以看到有fsid : None 这个参数,难道集群的fsid可以被指定吗?抱着这些疑惑,我就去看完了ceph-deploy的所有代码,答案是:可以设置。所有上面的参数都可以使用参数的形式进行设置,只需要在前面加上两个--,比如对于fsid可以执行:
ceph-deploy new blog --fsid xx-xx-xx-xxxx如果想要查看每个执行可指定的参数,可以-h:
[root@blog cluster]# ceph-deploy new -h usage: ceph-deploy new [-h] [--no-ssh-copykey] [--fsid FSID] [--cluster-network CLUSTER_NETWORK] [--public-network PUBLIC_NETWORK] MON [MON ...] ... optional arguments: -h, --help show this help message and exit --no-ssh-copykey do not attempt to copy SSH keys --fsid FSID provide an alternate FSID for ceph.conf generation --cluster-network CLUSTER_NETWORK specify the (internal) cluster network --public-network PUBLIC_NETWORK specify the public network for a cluster这里就可以看到可以指定--cluster-network,--public-network,等等,如果optional arguments里面没有介绍这个参数,可以直接使用--xxarg的方式指定,比如--overwrite-conf,--verbose等等,能不能设置这些参数,自己动手试一下就知道了。需要注意的是,参数的位置根据指令而异,比如--overwrite-conf参数是跟在ceph-deploy后面的,而--public-network是跟在new后面的:
ceph-deploy --overwrite-conf --verbose new blog --fsid a-a-a-a [root@blog cluster]# cat ceph.conf |grep fsid fsid = a-a-a-a Q8. Public VS Cluster如果非要在刚刚生成的ceph.conf里面添加什么的话,那么可能就要加public_network或者cluster_network了。那么这两个配置项有什么用呢?这里简单得介绍下Ceph的Public(外网或者叫公网或者前端网)和Cluster(内网或者叫集群网或者叫后端网)这两个网络,在Ceph中,存在以下三种主要的网络通讯关系:
client-> mon =>public : 也就是客户端获取集群状态,或者叫客户端与MON通讯走的网络,是走的外网。
client-> osd => public : 也就是客户端向OSD直接写入数据走的也是外网。
osd<-> osd => cluster :也就是OSD之间的数据克隆,恢复走的是内网,客户端写第一份数据时通过外网写,对于三副本剩下的两个副本OSD之间通过内网完成数据复制。当OSD挂掉之后产生的recover,走的也是内网。
通常,我们会将外网配置为千兆网,而内网配置成万兆网,这是有一定原因的:
客户端可能由成百上千的计算节点组成,外网配成万兆成本太高。
存储节点一般只有几个到几十个节点,配置了万兆内网可以大大加快故障恢复速度,而且剩余的两副本写速度会大大加快,万兆网的性价比极高。举个例子,集群坏掉一个OSD千兆需要一小时,那么万兆网只需要五六分钟,一定程度上增加了集群的安全性。
借用官网的这张图来说明集群的网络走势:再假设你的节点有两个网段172.23.0.1和3.3.4.1,还记得我们上一节ceph-deploy new的时候是可以指定public_network和cluster_network的吗!如果不指定这两个参数,那么ceph-deploy怎么知道用哪个IP作为这个节点的mon_host的IP呢,其实他是随便选的,如果它选了172网段但是你想使用3.3网段作为这个节点的mon_host的IP,那么只需要指定--public-network 172.23.0.0/24 就可以了,其中的/24就相当于一个掩码,表示前面的IP的前24位,也就是172.23.0.XXX,只要你的主机上有一个处于这个范围内的IP,那么就会选择这个IP作为公网IP。类似的,/16表示范围:172.23.XXX.XXX。 如果想指定内网IP,那么只要指定--cluster-network 3.3.4.1/24就可以了。
一般情况下,会在new生成的ceph.conf文件里加入public_network配置项以指定公网IP。当然你的MON主机上需要有至少一个IP在公网范围内。除了在生成的ceph.conf文件中加入公网IP的方式,我们还可以使用参数的方式来指定公网IP:
[root@ceph-1 cluster]# ceph-deploy new ceph-1 --public-network 172.23.0.0/24 [ceph_deploy.cli][INFO ] Invoked (1.5.36): /usr/bin/ceph-deploy new ceph-1 --public-network 172.23.0.0/24 [ceph_deploy.cli][INFO ] ceph-deploy options: ... [ceph_deploy.cli][INFO ] public_network : 172.23.0.0/24 ... [ceph-1][DEBUG ] IP addresses found: [u'172.23.0.101', u'10.0.2.15'] [ceph_deploy.new][DEBUG ] Resolving host ceph-1 [ceph_deploy.new][DEBUG ] Monitor ceph-1 at 172.23.0.101 [ceph_deploy.new][DEBUG ] Monitor initial members are ['ceph-1'] [ceph_deploy.new][DEBUG ] Monitor addrs are [u'172.23.0.101'] [ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring... [ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf... [root@ceph-1 cluster]# cat ceph.conf [global] fsid = d2a2bccc-b215-4f3e-922b-cf6019068e76 public_network = 172.23.0.0/24 mon_initial_members = ceph-1 mon_host = 172.23.0.101 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx