ceph 开启cephx认证
Closed this issue · 4 comments
我们的ceph集群并没有开启权限认证,在/etc/ceph/ceph.conf中:
[global]
fsid = c85fcc38-e6b7-464b-9968-eaa38eff3660
auth cluster required = none
auth service required = none
auth client required = none
auth supported = none
所以,我们执行下面这个命令:
sudo mkdir /mnt/mycephfs
sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs
和下面的这个命令:
sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
都可以吧cephfs 挂在到我们的任意一台机器上,这是不安全的。所以我们需要把cephx授权打开。
参考这篇文章,我们需要把前面提到的那几个配置由none
改成cephx
。
尝试1:直接修改/etc/ceph/ceph.conf
现象是这样的:每次改完ceph.conf之后,执行 docker restart ceph_mon
重启 ceph mon,这个配置文件就会被“重置”。
由于我们的ceph使用etcd
来管理配置信息,所以,我们在本地修改的配置文件在ceph mon重启的时候,都会被etcd里面的配置覆盖。
结论:我们修改mon所在机器的/etc/ceph/ceph.conf
文件是不会生效的。
尝试2:直接修改ETCD里面的内容:
既然etcd里面的内容会覆盖ceph.conf,我想到的是直接在etcd里面改:
etcdctl --endpoint http://10.10.10.201:2379 mk /ceph-config/ceph/global/auth\ cluster\ required cephx
但是,没有用:
ceph.conf:
[global]
fsid = c85fcc38-e6b7-464b-9968-eaa38eff3660
auth cluster required = none
auth service required = none
auth client required = none
auth supported = none
auth client required = cephx
auth cluster required = cephx
auth service required = cephx
auth support = cephx
尝试3:
在这篇文章中介绍到了 ceph.defaults 文件:
To supply your own defaults, make sure to mount the /etc/ceph/ volume and place your ceph.defaults file there.
在/etc/ceph/ceph.defaults
文件里面加入了下面的内容:
/global/auth_cluster_required cephx
/global/auth_service_required cephx
/global/auth_client_required cephx
/global/auth_supported cephx
执行 docker restart ceph_mon
之后,发现 /etc/ceph/ceph.conf
并没有改变!
ETCD:
etcdctl --endpoint http://10.10.10.201:2379 ls /ceph-config/ceph/global
里面也找不到我添加的内容。
采用尝试3的方法,提供 ceph.defaults 写入 etcd, 需要执行 populate_kvstore 操作,将 ceph.defaults 的内容填入 etcd, 之前尝试之所以没生效,是没有执行 populate_kvstore 操作。
参考这篇文章
$ sudo docker run -it --net=host -e KV_TYPE=etcd -v /etc/ceph:/etc/ceph ceph/daemon populate_kvstore
Ceph开启cephx认证
参考文档:
github上的ceph-docker
Ceph 官方文档 这里有翻译的中文版
机群基本情况
本次操作在10.10.10.207~209上全新安装ceph机群。机器角色的规划如下:
- 207~209安装 mon 和 osd
- 207上安装mds
- 在207~209的机器上都有etcd的proxy
207~209机器上有两块硬盘,分别是sda和sdb,coreos安装在了sda上,ceph能用的硬盘只有sdb。
注意:
- 之前在201
212上安装过一次ceph,所以207209上的sdb都是被分过区的; - 在局域网中存在不止一个ceph集群:201
203(ceph);204206(cepf_fs);93~95(ceph_gpu) - 本次创建的ceph集群名字为 ceph-2;ceph-2、ceph、ceph_fs的配置信息都存储在201
205的etcd集群里;ceph_gpu的信息存储在9395的etcd集群里。
安装ceph,并开启cephx
1. 添加一个配置文件ceph.defaults:
在207~209的任意一台机器上都可以(本次操作在207上)
sudo touch /etc/ceph/ceph.defaults
ceph.defaults的内容如下:
# auth
/auth/cephx true
2. 将ceph.defaults数据导入到etcd集群中:
参考文档
docker run -d --net=host -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph -e CLUSTER=ceph-2 -e KV_TYPE=etcd -e KV_IP=127.0.0.1 -e KV_PORT=4001 ceph/daemon populate_kvstore
注意:
- 一定要使用
-e CLUSTER=ceph-2
参数,指定ceph集群的名字,要不然会导入到默认的ceph
集群(ceph)里面去。 - 一定要加
-v /etc/ceph/:/etc/ceph/
参数,要不然docker里面读不到我们写的ceph.defaults文件(使用的是docker image里面默认的ceph.defaults文件)
3. 硬盘状态检查
可以使用下面的命令来查看硬盘的分区情况:
core@00-25-90-c0-f7-7a ~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
|-sda1 8:1 0 128M 0 part /boot
|-sda2 8:2 0 2M 0 part
|-sda3 8:3 0 1G 0 part /usr
|-sda4 8:4 0 1G 0 part
|-sda6 8:6 0 128M 0 part /usr/share/oem
|-sda7 8:7 0 64M 0 part
`-sda9 8:9 0 929.2G 0 part /
sdb 8:16 0 931.5G 0 disk
|-sdb1 8:17 0 926.5G 0 part
`-sdb2 8:18 0 5G 0 part
注意查看sdb,下面如果有sdb1和sdb2,表明这个硬盘之前已经被分过区。如果只有sdb2,这种情况下,建议删除分区。(很有可能安装ceph osd的时候,分区会失败。如果分区失败,请参考下面的操作来删除原来的分区)。
sdb1 : 存储数据的分区
sdb2 : journal日志存放的分区(我的理解)
删除分区(如果有需要)
参考文档
docker run -d --privileged=true -v /dev/:/dev/ -e OSD_DEVICE=/dev/sdb ceph/daemon zap_device;
注意参数:** -e OSD_DEVICE=/dev/sdb ** 一定要写对了要操作的那个硬盘!
4. 分别在207~209上运行ceph mon
docker run -d --net=host --name ceph_mon -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph -e KV_TYPE=etcd -e CLUSTER=ceph-2 -e MON_IP=10.10.10.207 -e CEPH_PUBLIC_NETWORK=10.10.10.207/24 ceph/daemon mon;
注意:
- IP需要根据所在的机器IP进行更改
- 参数
-e CLUSTER=ceph-2
指定集群的名字是ceph-2
,不指定,默认是ceph
5. 在207~209上运行ceph osd
docker run -d --pid=host --net=host --privileged=true --name ceph_osd_sdb -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -v /dev:/dev -e CLUSTER=ceph-2 -e KV_TYPE=etcd -e OSD_DEVICE=/dev/sdb ceph/daemon osd
注意:
- 参数
-e CLUSTER=ceph-2
指定集群的名字是ceph-2
,不指定,默认是ceph
- 前面已经删除过分区了,在这里不需要添加这个参数
-e OSD_FORCE_ZAP=1
。另外:添加这个参数有一个副作用:每次start osd container的时候,都会format一次磁盘。来源: ceph/ceph-container@e83dabd
6. 在207上运行ceph mds
mds必须在osd之后启动,要不然启动不起来。
docker run -d --net=host --name ceph_mds -e CLUSTER=ceph-2 -e CEPHFS_CREATE=1 -e KV_TYPE=etcd ceph/daemon mds
注意:
- 参数
-e CLUSTER=ceph-2
指定集群的名字是ceph-2
,不指定,默认是ceph
检查ceph的状态
查看docker是否正常运行:
docker ps -a | grep ceph
** 查看docker 运行的日志: **
docker logs ceph_mon
如果日志太长的话,可以在logs后面添加参数--tail="100"
;前面的脚本中docker的名字:ceph_mon, ceph_mds, ceph_osd_sdb ,使用docker logs 都可以查查看ceph 在docker运行的状态。
对于docker出错直接退出,来不及执行docker logs 的操作的时候,可以这样做:
docker restart ceph_osd_sdb; docker logs ceph_osd_sdb;
** 查看ceph集群的状态 **
查看状态:
core@00-25-90-c0-f7-c8 ~ $ docker exec -it ceph_mon ceph -s --cluster=ceph-2
cluster cfb78f7e-da0c-4424-ba08-ba4a6870bb51
health HEALTH_OK
monmap e3: 3 mons at {00-25-90-c0-f7-68=10.10.10.207:6789/0,00-25-90-c0-f7-7a=10.10.10.208:6789/0,00-25-90-c0-f7-c8=10.10.10.209:6789/0}
election epoch 18, quorum 0,1,2 00-25-90-c0-f7-68,00-25-90-c0-f7-7a,00-25-90-c0-f7-c8
fsmap e5: 1/1/1 up {0=mds-00-25-90-c0-f7-68=up:active}
osdmap e38: 3 osds: 3 up, 3 in
flags sortbitwise
pgmap v219: 80 pgs, 3 pools, 9003 bytes data, 20 objects
105 MB used, 2778 GB / 2778 GB avail
80 active+clean
监视:
core@00-25-90-c0-f7-c8 ~ $ docker exec -it ceph_mon ceph -w --cluster=ceph-2
cluster cfb78f7e-da0c-4424-ba08-ba4a6870bb51
health HEALTH_OK
monmap e3: 3 mons at {00-25-90-c0-f7-68=10.10.10.207:6789/0,00-25-90-c0-f7-7a=10.10.10.208:6789/0,00-25-90-c0-f7-c8=10.10.10.209:6789/0}
election epoch 18, quorum 0,1,2 00-25-90-c0-f7-68,00-25-90-c0-f7-7a,00-25-90-c0-f7-c8
fsmap e5: 1/1/1 up {0=mds-00-25-90-c0-f7-68=up:active}
osdmap e38: 3 osds: 3 up, 3 in
flags sortbitwise
pgmap v219: 80 pgs, 3 pools, 9003 bytes data, 20 objects
105 MB used, 2778 GB / 2778 GB avail
80 active+clean
2016-08-18 09:00:00.000199 mon.0 [INF] HEALTH_OK
查看osd:
core@00-25-90-c0-f7-c8 ~ $ docker exec -it ceph_mon ceph osd tree --cluster=ceph-2
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 2.69998 root default
-2 0.89999 host 00-25-90-c0-f7-7a
0 0.89999 osd.0 up 1.00000 1.00000
-3 0.89999 host 00-25-90-c0-f7-c8
1 0.89999 osd.1 up 1.00000 1.00000
-4 0.89999 host 00-25-90-c0-f7-68
2 0.89999 osd.2 up 1.00000 1.00000
常见问题:
- OSD:No cluster conf found in /etc/ceph with fsid 00000000-0000-0000-0000-000000000000 #6
- OSD日志中错误:activate: Cluster uuid is 7536fc05-c63b-493b-9a0d-5262ee7418c7 与实际的cluster id不一致。解决方案参考第1条;
- OSD tree 查看到有的osd处于down的状态,将其从集群里面删除:
参考文档
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 3.63995 root default
-2 0.90999 host 00-25-90-c0-f6-d6
2 0.90999 osd.2 up 1.00000 1.00000
-3 1.81998 host 00-25-90-c0-f6-ee
0 0.90999 osd.0 down 0 1.00000
3 0.90999 osd.3 up 1.00000 1.00000
-4 0.90999 host 00-25-90-c0-f7-80
1 0.90999 osd.1 up 1.00000 1.00000
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph -s
cluster be36d18f-e727-4ed1-9840-73c959124a9d
health HEALTH_WARN
38 pgs degraded
38 pgs stale
38 pgs stuck unclean
38 pgs undersized
4 requests are blocked > 32 sec
recovery 20/60 objects degraded (33.333%)
mds cluster is degraded
monmap e3: 3 mons at {00-25-90-c0-f6-d6=10.10.10.203:6789/0,00-25-90-c0-f6-ee=10.10.10.202:6789/0,00-25-90-c0-f7-80=10.10.10.201:6789/0}
election epoch 54, quorum 0,1,2 00-25-90-c0-f7-80,00-25-90-c0-f6-ee,00-25-90-c0-f6-d6
fsmap e23: 1/1/1 up {0=mds-00-25-90-c0-f7-80=up:replay}
osdmap e199: 4 osds: 3 up, 3 in; 38 remapped pgs
flags sortbitwise
pgmap v763: 80 pgs, 3 pools, 11312 bytes data, 20 objects
118 MB used, 2792 GB / 2792 GB avail
20/60 objects degraded (33.333%)
42 active+clean
37 stale+active+undersized+degraded
1 stale+active+undersized+degraded+remapped
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd out osd.0
osd.0 is already out.
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 3.63995 root default
-2 0.90999 host 00-25-90-c0-f6-d6
2 0.90999 osd.2 up 1.00000 1.00000
-3 1.81998 host 00-25-90-c0-f6-ee
0 0.90999 osd.0 down 0 1.00000
3 0.90999 osd.3 up 1.00000 1.00000
-4 0.90999 host 00-25-90-c0-f7-80
1 0.90999 osd.1 up 1.00000 1.00000
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd crush remove osd.0
removed item id 0 name 'osd.0' from crush map
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 2.72997 root default
-2 0.90999 host 00-25-90-c0-f6-d6
2 0.90999 osd.2 up 1.00000 1.00000
-3 0.90999 host 00-25-90-c0-f6-ee
3 0.90999 osd.3 up 1.00000 1.00000
-4 0.90999 host 00-25-90-c0-f7-80
1 0.90999 osd.1 up 1.00000 1.00000
0 0 osd.0 down 0 1.00000
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph auth del osd.0
updated
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 2.72997 root default
-2 0.90999 host 00-25-90-c0-f6-d6
2 0.90999 osd.2 up 1.00000 1.00000
-3 0.90999 host 00-25-90-c0-f6-ee
3 0.90999 osd.3 up 1.00000 1.00000
-4 0.90999 host 00-25-90-c0-f7-80
1 0.90999 osd.1 up 1.00000 1.00000
0 0 osd.0 down 0 1.00000
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd rm 0
removed osd.0
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 2.72997 root default
-2 0.90999 host 00-25-90-c0-f6-d6
2 0.90999 osd.2 up 1.00000 1.00000
-3 0.90999 host 00-25-90-c0-f6-ee
3 0.90999 osd.3 up 1.00000 1.00000
-4 0.90999 host 00-25-90-c0-f7-80
1 0.90999 osd.1 up 1.00000 1.00000
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph -s
cluster be36d18f-e727-4ed1-9840-73c959124a9d
health HEALTH_WARN
38 pgs degraded
38 pgs stale
38 pgs stuck unclean
38 pgs undersized
4 requests are blocked > 32 sec
recovery 20/60 objects degraded (33.333%)
mds cluster is degraded
monmap e3: 3 mons at {00-25-90-c0-f6-d6=10.10.10.203:6789/0,00-25-90-c0-f6-ee=10.10.10.202:6789/0,00-25-90-c0-f7-80=10.10.10.201:6789/0}
election epoch 54, quorum 0,1,2 00-25-90-c0-f7-80,00-25-90-c0-f6-ee,00-25-90-c0-f6-d6
fsmap e23: 1/1/1 up {0=mds-00-25-90-c0-f7-80=up:replay}
osdmap e203: 3 osds: 3 up, 3 in; 38 remapped pgs
flags sortbitwise
pgmap v781: 80 pgs, 3 pools, 11312 bytes data, 20 objects
118 MB used, 2792 GB / 2792 GB avail
20/60 objects degraded (33.333%)
42 active+clean
37 stale+active+undersized+degraded
1 stale+active+undersized+degraded+remapped
@jiamliang 赞,写的很详细
- -e OSD_FORCE_ZAP=1 这个参数,如你所说,确实需要慎重,默认是 =0,在创建osd是不要加这个参数,可以使用单独的zap命令替代
- 查看 log 可以到/var/lib/docker/container/xxxx/xxxx.log,其中xxxx是 container的 ID
- 常见问题第3点
pgmap v781: 80 pgs, 3 pools, 11312 bytes data, 20 objects
118 MB used, 2792 GB / 2792 GB avail
20/60 objects degraded (33.333%)
42 active+clean
37 stale+active+undersized+degraded
1 stale+active+undersized+degraded+remapped
显示有pgs degraded
简短总结一下:
1. 写一个配置文件ceph.defaults,放在/etc/ceph/ceph.defaults :
# auth
/auth/cephx true
2. 使用populate_kvstore导入Etcd:(挂载/etc/ceph等目录;指定cluster名字;指定etcd存储)
docker run -d --net=host -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph -e CLUSTER=ceph-2 -e KV_TYPE=etcd -e KV_IP=127.0.0.1 -e KV_PORT=4001 ceph/daemon populate_kvstore
3. 分别启动mon、osd、mds
注意:
- mon 一定要挂载 -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph
- osd 一定要挂载 -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -v /dev:/dev
- 所有的都要制定cluster 名字(有多个机群的话)
- osd 一定要注意不要使用
-e OSD_FORCE_ZAP=1
- mds 如果在osd之前启动,会启动不起来:至少启动一个osd之后,mds就可以正常启动了