《大话 Ceph 》之 CephX 那点事儿

y11.第一章 Ceph企业级存储实战进阶 -- CephX 认证机制和Ceph RBD 使用(十一) 5.5.3.2 ceph auth get-or-create ceph auth get-or-create 此命令是创建用户较为常见的方式之一,因为它会返回包含用户名(在方括号中)和密钥的密钥文件格式。如果该用户已存在,此命令只以密钥文件格式返回用户名和密钥。您可以使用-o 文件名选项将输出保存到某个文件。 #创建用户 ceph@ceph-deploy:~/ceph-cluster$ ceph auth get-or-create client.raymond mon 'allow r' osd 'al 阅读详情

《大话 Ceph 》系列文章通过通俗易懂的语言并结合基础实验,用最简单的描述来讲解 Ceph 中的重要概念。让读者对分布式存储系统有一个清晰的理解。

引言

这篇文章主要介绍了 Ceph 中的一个重要系统 -- CephX 认证系统。简要介绍了 CephX 的命名格式。并介绍了从集群启动到用户连接集群这一系列流程中 CephX 所起的作用。最后通过实验操作讲解如何在集群所有秘钥丢失的情况下将其完整恢复,以及在实际生产环境中使用 CephX 的一些注意事项。

CephX 是什么?

CephX 理解起来很简单,就是整个 Ceph 系统的用户名/密码,而这个用户不单单指我们平时在终端敲 ceph -s 而生成的 client,在这套认证系统中,还有一个特殊的用户群体,那就是 MON/OSD/MDS,也就是说,Monitor, OSD, MDS 也都需要一对账号密码来登陆 Ceph 系统。

CephX 的命名规则

而用户名/密码遵循着一定的命名规则:

用户名

用户名总体遵循 <TYPE . ID> 的命名规则,这里的TYPE有三种:mon,osd,client。而 ID 根据不同的类型的用户而有所不同:

  • mon :ID 为空。
  • osd :ID 为 OSD 的 ID。
  • client :ID 为该客户端的名称,比如admin,cinder,nova。* 密码密码通常为包含40个字符的字符串,形如:AQBh1XlZAAAAABAAcVaBh1p8w4Q3oaGoPW0R8w==。

默认用户

想要和一个 Ceph 集群进行交互,我们通常需要知道最少四条信息,并且是缺一不可的:

  • 集群的 fsid。
  • 集群的 Monitor 的 IP 地址,必须先连上 MON 之后才能获取集群信息。
  • 一个用于登陆的 用户名。
  • 登陆用户对应的 密码。其实,很多同学会发现,在我们日常和 Ceph 集群交互时,并不需要指定这些参数,就可以执行ceph -s得到集群的状态。实际上,我们已经使用了 Ceph 提供的几个默认参数,而 ceph -s 加上默认参数后的全称是:

ceph -s --conf /etc/ceph/ceph.conf --name client.admin --keyring /etc/ceph/ceph.client.admin.keyring

从上面的指令可以看出,Ceph 使用的默认用户为 client.admin,而这个用户的秘钥文件通常是保存在 /etc/ceph/ceph.client.admin.keyring 路径下。如果这里,我们从/etc/ceph目录下删除这个秘钥文件,再次执行 ceph -s,就会得到下面这个最最常见的错误:

2017-07-28 15:56:03.271139 7f142579c700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin: (2) No such file or directory
2017-07-28 15:56:03.271145 7f142579c700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2017-07-28 15:56:03.271146 7f142579c700  0 librados: client.admin initialization error (2) No such file or directory
Error connecting to cluster: ObjectNotFound

从报错信息我们可以看出一点,因为我们使用了默认用户 client.admin,Ceph 就会以下四个默认路径去寻找 client.admin这个用户的密码:*/etc/ceph/ceph.client.admin.keyring: 实际上命名格式为:/etc/ceph/<$cluster>.<$type>.<$id>.keyring。

  • /etc/ceph/ceph.keyring :命名格式为 :/etc/ceph/<$cluster>.keyring。
  • /etc/ceph/keyring。
  • /etc/ceph/keyring.bin。如果不存在这四个文件,或者在这四个文件里面均没有保存用户 client.admin的秘钥,那么就会报错:ERROR: missing keyring。也就是说,用户client.admin登陆 Ceph 系统失败!

谁才是 CephX 中的鼻祖?

隐藏Boss 之 mon.

一段对话:client.admin : 当然是我!用我的账户密码登陆 Ceph 后可以执行任何指令!mon. : 哦。client.admin : 你谁?我这有所有账户密码(悄悄得查了下 ceph auth list),怎么没看到你?mon. : 嗯。client.admin : 哎呀,哪个二货把我的秘钥文件删了,我不能连接集群了!mon. : 让一让,我来帮你把秘钥找回来。client.admin : 你?确定?mon. : 嗯。

一直以为自己权限很大的client.admin,忽然因为丢失了保存密码的秘钥文件而不能访问集群了。而从未露面的 mon. 却号称能够找回client.admin 的秘钥,难道说 mon.才是真正的鼻祖?!

现在我们回到故事最初的起点,也就是集群搭建之初,我们使用ceph-deploy new NodeA NodeB NodeC后,生成了三个文件:

ceph.conf 
ceph.mon.keyring
ceph-deploy-ceph.log

除了ceph.conf,还默认生成了一个 ceph.mon.keyring 文件,不出意外的话,这个文件几乎是不会在后面的集群交互中使用的,因为在 ceph-deploy mon create-initial之后,会生成client.admin用户,而后面的交互一般都会使用这个用户了。但是集群生成的第一个用户却是 <mon.> ,对应的秘钥文件保存在部署目录下的 ceph.mon.keyring。

查看 ceph-deloy 的LOG,可以看到在步骤 ceph-deploy mon create-initial时,有一段日志记录如下:

[2017-07-28 16:49:53,468][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --admin-daemon=/var/run/ceph/ceph-mon.centos7.asok mon_status
[2017-07-28 16:49:53,557][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-centos7/keyring auth get client.admin
[2017-07-28 16:49:53,761][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-centos7/keyring auth get client.bootstrap-mds
[2017-07-28 16:49:54,046][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-centos7/keyring auth get client.bootstrap-mgr
[2017-07-28 16:49:54,255][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-centos7/keyring auth get-or-create client.bootstrap-mgr mon allow profile bootstrap-mgr
[2017-07-28 16:49:54,452][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-centos7/keyring auth get client.bootstrap-osd
[2017-07-28 16:49:54,658][centos7][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-centos7/keyring auth get client.bootstrap-rgw

实际上,这些秘钥文件都是通过用户mon.创建的,包括 client.admin 用户及其秘钥。所以在整个 CephX 的历史中,mon. 才是第一个生成的用户,而其他的用户均由 mon. 用户生成或者依次向下生成。

用一张图来表明秘钥的生成关系:

通过这张图,我们可以很容易理解 bootstrap 的几个用户的用处了,就是用于引导生成对应类用户的用户,比如bootstrap-osd 用于引导生成所有 osd.N 用户。

CephX 使用场景

聊完了各个用户的生成时间,我们来看看这些用户是在什么时候使用了它们的账户和密码的!

MON

在整个集群启动的时候,首先是 Monitor 启动,再然后是 OSD 启动。在 Monitor 启动的时候,Monitor 会携带自己的秘钥文件启动进程,也就是说,Monitor 启动的时候,是不需要向任何进程进行秘钥认证的,通俗点讲,Monitor 的秘钥哪怕被修改过了,也不会影响 Monitor 的启动,这里通过一个小实验来具体说明:

[root@blog cluster]# cat /var/lib/ceph/mon/ceph-blog/keyring 
[mon.]
key = AQAr1H1ZAAAAABAAWItgjm4dOKPJx+FX9lVk4Q==
caps mon = "allow *"
[root@blog cluster]# ceph auth get mon.
exported keyring for mon.
[mon.]
key = AQAr1H1ZAAAAABAAWItgjm4dOKPJx+FX9lVk4Q==
caps mon = "allow *"
[root@blog cluster]# vim /var/lib/ceph/mon/ceph-blog/keyring 
##### 将秘钥文件内容的一部分A改成了B,再重启Monitor
[root@blog cluster]# cat /var/lib/ceph/mon/ceph-blog/keyring 
[mon.]
key = AQAr1H1ZBBBBBBAAWItgjm4dOKPJx+FX9lVk4Q==
caps mon = "allow *"
[root@blog cluster]# systemctl restart ceph-mon.target
[root@blog cluster]# ceph auth get mon.
exported keyring for mon.
[mon.]
key = AQAr1H1ZBBBBBBAAWItgjm4dOKPJx+FX9lVk4Q==
caps mon = "allow *"

Monitor 的数据库里面,记录着除了 mon. 以外的所有用户密码,在 Monitor 启动之后,才真正开启了认证这个步骤,之后的所有用户想要连接到集群,必须先要通过 fsid 和 MON IP 连上 Ceph 集群,通过了认证之后,就可以正常访问集群了,下面继续介绍下 OSD 的启动认证过程。

OSD

OSD 在启动的时候,首先要log_to_monitors,也就是拿着自己的账户密码去登陆集群,这个账户密码在 Monitor 的数据库里有记录,所以如果互相匹配,那么OSD就可以正常启动,否则,就会报下面的错:

2017-08-01 16:54:51.515541 7f21ea978800 -1 osd.0 30 log_to_monitors {default=true}
2017-08-01 16:54:51.991263 7f21ea978800  1 journal close /var/lib/ceph/osd/ceph-0/journal
2017-08-01 16:54:51.999674 7f21ea978800 -1 ^[[0;31m ** ERROR: osd init failed: (1) Operation not permitted^[[0m
2017-08-01 16:54:52.006620 7f21ea978800 -1 common/HeartbeatMap.cc: In function 'ceph::HeartbeatMap::~HeartbeatMap()' thread 7f21ea978800 time 2017-08-01 16:54:52.001569
common/HeartbeatMap.cc: 44: FAILED assert(m_workers.empty())

日志里面的 Operation not permitted也就是认证不通过的意思,说明这个 osd.0 携带的秘钥文件和 Monitor 所记录的内容不一致,导致了 OSD 的启动失败。这时候,需要比对下 osd.0 的秘钥内容和 Monitor 的是否一致:

[root@blog ~]# cat /var/lib/ceph/osd/ceph-0/keyring 
[osd.0]
key = AQA81H5Zh05jDxAAkvaHBs07K9HYF1uGSPh+rA==
[root@blog ~]# ceph auth get osd.0
exported keyring for osd.0
[osd.0]
key = AQBH1H5Z6pBvDhAAul364EZsRjDy/NqTQh07Yw==
caps mon = "allow profile osd"
caps osd = "allow *"

的确,内容不一样,这时候用 ceph auth get osd.0 得到的key值替换秘钥文件keyring的key部分即可正常启动 OSD。

Client

通常我们执行ceph -s 时,就相当于开启了一个客户端,连接到 Ceph 集群,而这个客户端默认是使用 client.admin 的账户密码登陆连接集群的,所以平时执行的ceph -s 相当于执行了 ceph -s --name client.admin --keyring /etc/ceph/ceph.client.admin.keyring。需要注意的是,每次我们在命令行执行 Ceph 的指令,都相当于开启一个客户端,和集群交互,再关闭客户端。现在举一个很常见的报错,这在刚接触 Ceph 时,很容易遇到:

[root@blog ~]# ceph -s
2017-08-03 02:22:27.352516 7fbd157b7700  0 librados: client.admin authentication error (1) Operation not permitted
Error connecting to cluster: PermissionError

报错信息很好理解,操作不被允许,也就是认证未通过,由于这里我们使用的是默认的client.admin 用户和它的秘钥,说明秘钥内容和 Ceph 集群记录的不一致,也就是说 /etc/ceph/ceph.client.admin.keyring 内容很可能是之前集群留下的,或者是记录了错误的秘钥,这时,只需要使用 mon.用户来执行 ceph auth list就可以查看到正确的秘钥内容:

[root@blog ~]# ceph auth get client.admin --name mon. --keyring /var/lib/ceph/mon/ceph-blog/keyring 
exported keyring for client.admin
[client.admin]
key = AQD7F4JZIs9DJxAAZms/NQQQ1YhUpCHRtjygJA==
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"

细说 caps

仔细查看 ceph auth list 的输出,除了用户名和对应的秘钥内容外,还有一个个以caps 开头的内容,这就是 CephX 中对各个用户的权限的细分,比如:读、写、执行等:

caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"

而针对不同的应用(mds/mon/osd),同样的读权限或者写权限的作用是不同的,下面依次对这三个应用的 r/w/x 权限进行分析。

MON

r 权限

那么问题来了,想要执行ceph -s的最低权限是什么呢? 那就是 caps mon ="allow r",也就是 MON 的 r 权限。那么这个读权限到底读了什么呢?首先要强调的一点,这里读的数据都是从 MON 来的,和 OSD 无关。

MON 作为集群的状态维护者,其数据库(/var/lib/ceph/mon/ceph-$hostname/store.db)内保存着集群这一系列状态图(Cluster Map),这些 Map 包含但不限于:

  • CRUSH Map
  • OSD Map
  • MON Map
  • MDS Map
  • PG Map而这里的读权限,就是读取这些 Map 的权限,但是这些 Map 的真实内容读取出来没有多大意义,所以以比较友好的指令输出形式展示出来,而这些指令包含但不限于:ceph -s ceph osd crush dump ceph osd tree ceph pg dump ceph osd dump 只要有了 MON 的 r 权限,那么就可以从集群读取所有 MON 维护的 Map 的数据,宏观来看,就是可以读取集群的状态信息(但是不能修改)。

这里简单介绍下验证流程,我们通过生成一个只包含 MON 的 r 权限的秘钥,来访问集群:

ceph auth get-or-create client.mon_r mon 'allow r' >> /root/key
ceph --name client.mon_r --keyring /root/key -s     ## OK
ceph --name client.mon_r --keyring /root/key osd dump     ## OK
ceph --name client.mon_r --keyring /root/key pg dump     ## OK

ceph --name client.mon_r --keyring /root/key osd out 0     ## Error EACCES: access denied

ceph --name client.mon_r --keyring /root/key osd set noout    ## Error EACCES: access denied

w 权限

w 权限比较有趣,必须配合 r 权限才能有效力,否则,单独 w 权限执行指令时,是会一直 access denied的。所以我们在测试 w 权限时,需要附加上 r 权限才行:

ceph auth get-or-create client.mon_rw mon 'allow rw' >> /root/key

这时,假象集群的各个 Map 摆在你的面前,你可以清晰得读取每个 OSD 的状态,每个 PG 的状态,但是,如果赋予了你 w 权限之后,你就可以对这些实体进行操作,比如踢掉一个OSD (ceph osd rm),修复一个 PG (ceph pg repair),修改 CRUSH 结构 (ceph osd setcrushmap),删除一个 MON (ceph mon rm),而这些操作,如果在仅有 r 权限时,是不能执行的(access denied)。

由于这里可以执行的指令实在太多了,我仅仅对 r, w权限做一个简单的总结:

  • r : 读取集群各个组件(MON/OSD/MDS/CRUSH/PG)的状态,但是不能修改。
  • rw : 读取并可以修改集群的各个组件的状态,可以执行对组件的各个动作指令。注意:目前讨论的组件读写权限,均不包含集群对象的读写权限的,也就是说,你单单有了 MON 的 rw 权限,是不能从集群读写对象的。

x 权限

MON 的 x 权限也比较有趣,因为这个权限仅仅和 auth 相关。也就是说,如果你想要执行 ceph auth list,ceph auth get之类的所有和auth 相关的指令,那么拥有了 x 权限就能执行了。但是和 w 权限类似,也需要 r 权限组合在一起才能有效力:

ceph auth get-or-create client.mon_rx mon 'allow rx' >> /root/key
ceph --name client.mon_rw --keyring /root/key auth list

* 权限

一句话说明 :* = rwx

Tips可以通过将多个用户秘钥写入同一个文件中,比如上面的/root/key 中,就包含了:<pre class="lang_">[root@blog ~]# cat /root/key[client.mon_r]key=AQBtLIJZScuLARAAPQS9ahvU1oZh1Ha/fYhUhQ==[client.mon_w]key = AQD5LYJZJO2/AxAAWgbuPPUNJ0ugxsqdDD3+sw==...在指令指定 --name后,Ceph 就会到 --keyring 后面的文件中找寻对应的用户名section下的秘钥。

profile osd 权限

官方的解释是:给用户以一个 OSD 的身份 连接到 其他 OSD/MON 的权限。给 OSD 授予这个权限,使得 OSD 能够处理副本心跳和状态汇报。暂时没找到比较通俗的理解~

OSD

相比于 MON 的各个权限,OSD 的 rw 比较简单理解一下,r 权限就是读取对象的权限, w 权限就是写对象的权限,x 权限比较有趣,可以调用任何 class-read/class-write的权限,这里引用 Ceph CookBook 上的一段话来介绍class-read/class-write:

Ceph can be extended by creating shared object classes called Ceph Classes. Ceph can load .so classes stored in the OSD class dir.For a class ,you can create new object methods that have the ability to call native methods in Ceph object store ,for example , the objects that you have defined in your class can call native Ceph methods such as read and write.

举个例子,你可以实现一些自定义的方法,通过调用这些方法,可以读写具有某一类特征的对象,比如都是以rbd_data开头的对象。目前只有调用librados层才能使用自定义class方法,而上层RBD,RGW之类的是不能使用的。

  • 权限除了包含了 rwx,还包含了ceph tell osd.*这类admin指令的权限。

官网的这个页面(http://docs.ceph.com/docs/kraken/man/8/ceph-authtool/)比较好的介绍了几个实例,这里简单介绍下一个比较长的指令的意义:

osd = "allow class-read object_prefix rbd_children, allow pool templates r class-read, allow pool vms rwx"

第一个权限:object_prefix 是一个类方法,而这个方法的作用是给予所有以rbd_children为名开头的对象的class-read也就是读权限。只能读,不能写。

第二个权限:给予池templates的读权限,可以执行class-read方法的权限。也就是说,客户除了可以读这个池的对象外,还能自己实现形如obejct_prefix这种系统自带的类方法来读取对象,比如读取具备某一类特征的对象。

第三个权限:给予池 vms 的读写以及执行class-read/class-write方法的权限。

丢失所有秘钥的恢复流程

讲了这么多理论知识,某个二货运维同学不耐烦了,一口气把所有的秘钥全部删除了,这些秘钥包含:

  • MON : /var/lib/ceph/mon/ceph-hostname/keyring
  • OSD : /var/lib/ceph/osd/ceph-0/keyring
  • Client :/etc/ceph/ceph.client.admin.keyring总之,所有包含秘钥内容的文件都被删除了,并且连同/etc/ceph/目录都删的干干净净。这时候能否将所有的秘钥文件恢复出来吗?答案是:可以!

在管理秘钥方面,Ceph 做了一个比较有趣的设定:所有除了 mon.用户的账户密码都保存在 MON 的数据库leveldb中,但是 mon. 用户的信息并没有保存在数据库里,而是在 MON 启动时读取 MON 目录下的 keyring 文件得到的。所以,我们甚至可以随便伪造一个keyring,放置到 MON 目录下去。然后同步到各个 MON 节点,然后重启三个 MON。 这时候,MON就拿着人造的keyring启动生效了。有了 mon.用户的账户密码,我们很容易的可以使用 ceph auth list --name mon. --keyring /var/lib/ceph/mon/ceph-$hostname/keyring 指令来得到所有的秘钥内容!

等等,如果真的删干净了/etc/ceph/目录的话, 上面的这个指令是不能执行的,因为没有/etc/ceph/ceph.conf去指定集群,这时候,我们可以从任意一个OSD目录下的/var/lib/ceph/osd/ceph-0/ceph_fsid 得到集群的fsid,MON 的IP信息也很容易恢复。简单得重构了 ceph.conf后,使用mon. 的用户密码就可以得到正确的ceph auth list的信息啦~。

再等等,现在的ceph.conf内容太精简了,比删除之前少了很多东东,这些东东还能恢复吗?答案是,能!

找寻任何一个未重启的OSD,执行 ceph daemon osd.0 config diff,这样,就可以看到这个OSD启动加载的配置项和默认的配置项的不一样的地方,通过仔细比对很容易恢复成删除之前的配置文件样~。

疑问:相信这里就会有同学有疑问了,为什么不直接把 ceph.conf 里面的 cephx 改为 none 后直接重启集群呢,首先这样做的成本较高,因为要重启OSD(必须重启OSD,否则OSD会在MON重启一段时间内全部自杀)。所以上面的方法只重启了MON,影响范围小。

CephX 实际使用中的注意事项

zabbix 使用

在部署zabbix-agent后,server通过拉取 agent 的指令输出得到返回值,但是却会报:

zabbix_get -s 1.2.3.4 -k ceph.ops
ZBX_NOTSUPPORTED: Unsupported item key

前往 agent 节点执行脚本,却能得到正常的输出。

这里查看 zabbix_agent 的 LOG 发现,日志里面总是报 :

librados: client.admin authentication error (1) Operation not permitted

原来是,zabbix_agent 对 /etc/ceph/ceph.client.admin.keyring没有读权限,将秘钥 chmod a+r之后,就能正常读取数据了。

所以,在我们的日常使用中,一定要注意/etc/ceph/ceph.client.admin.keyring的读权限,很多不是运行在 root 用户上的应用读取不到秘钥内容后,就会连接不上集群,造成比较奇怪的现象。

cephx -> none

在关闭 CephX 功能时,要遵循一定的顺序:

  • 关闭: 重启MON -> 重启OSD
  • 开启: 重启MON -> 重启OSD如果关闭CephX后未重启OSD,过一段时间,OSD会随机挂掉。

keyring 的分布

通常我们可以在 MON 节点执行ceph -s,但是到了 OSD 节点,就会因为缺失client.admin的秘钥文件而无法执行ceph -s。

MON 的秘钥保存路径为: /var/lib/ceph/mon/ceph-$hostname/keyring。OSD 的秘钥保存路径为: /var/lib/ceph/osd/ceph-$osd_id/keyring。client.admin 的秘钥保存路径为:/etc/ceph/ceph.client.admin.keyring。

实际上,我们甚至可以在 OSD 节点(没有 client.admin.keyring),通过执行:

ceph -s --name osd.0 --keyring /var/lib/ceph/osd/ceph-0/keyring

来读取集群的状态。

配置只能访问一个RBD的用户权限

具体介绍可以参考这篇文章(https://blog-fromsomedude.rhcloud.com/2016/04/26/Allowing-a-RBD-client-to-map-only-one-RBD/)这里主要说下秘钥的创建指令的意义:

ceph auth get-or-create client.myclient 
mon
'allow r'
osd 
'allow rwx object_prefix rbd_data.103d2ae8944a; 
allow rwx object_prefix rbd_header.103d2ae8944a; 
allow rx object_prefix rbd_id.myimage' 
-o /etc/ceph/ceph.client.myclient.keyring

这里通过 object_prefix前缀方法,赋予了用户对和某个RBD所有相关的对象的读写权限,是一个比较有实用价值的应用。

总结

本文介绍了 CephX 在 Ceph 系统中的生成过程以及互相之间的依赖生成关系。详细讲述了各个权限在不同应用中的作用和使用场景。最后通过秘钥丢失的例子来将理论应用到实际生产环境中,使大家对 CephX 的使用游刃有余。

torch_npu 用法笔记 阅读详情

相关推荐

单细胞多组学数据整合分析实战:从原始数据到跨平台合并

本文详细介绍了单细胞多组学数据整合分析的实战流程,从原始数据处理到跨平台合并分析。通过Seurat和Harmony等工具的应用,帮助研究者有效解决批次效应问题,保留真实的生物学信号。文章包含代码示例和常见问题解决方案,特别适合需要进行单细胞合并分析的研究人员参考。

weixin_30752699的博客 92

Client.admin authentication error

今天早上在ceph的跳转机上运行ceph -s突然出现一个错误 [root@dev-yum ~]# ceph -s 2016-08-29 10:05:31.853233 7fa5cf941700 0 librados: client.admin authentication error (1) Operation not permitted Error connecting to

我就随便写写 6840

ZLMediaKit源码分析(二)推流创建

ZLMediaKit推流结构体创建是在RtspSession::onRecv()之后。如何触发onRecv()请参考上一篇文章这里不在赘述。

cliffordl的专栏 5079

jumpserver

企业通用型开源跳板机jumpserver的使用 链接:https://pan.baidu.com/s/1-pHfoyUkti1ILRo9Fkn3WQ 提取码:jzix 复制这段内容后打开百度网盘手机App,操作更方便哦 【企业案例】 运维小A是一个刚刚到公司没几个月的新人运维。在投入工作的几个月里,他发现公司的服务器运维管理中对于服务器账号的管理十分混乱,有的运维甚至有好几个工作账号,而且能随时...

weixin_30537391的博客 948

IoTDB时序数据库在Windows下的保姆级安装教程(含环境变量配置避坑指南)

本文提供Apache IoTDB时序数据库在Windows系统下的详细安装与配置指南。教程涵盖从Java环境检查、软件下载解压,到环境变量配置的深度避坑,并详解了服务的启动、停止、连接测试及基础数据操作,帮助物联网开发者在Windows平台快速搭建稳定的时序数据库环境。

weixin_29275257的博客 265

本体(Ontology)概述

认识本体        本体(Ontology)的概念源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体可以在语义层次上描述知识,可以看成描述某个学科领域知识的一个通用概念模型。德国学者Studer在1998年给出了本体的相关定义“本体是共享概念模型的形式化规范说明”。这个定义包含了四层含义:即共享(share)...

baijinswpu的博客 7万+

大话Ceph--CephX 那点事儿

《大话 Ceph 》系列文章通过通俗易懂的语言并结合基础实验,用最简单的描述来讲解 Ceph 中的重要概念。让读者对分布式存储系统有一个清晰的理解。 引言 这篇文章主要介绍了 Ceph 中的一个重要系统 – CephX 认证系统。简要介绍了 CephX 的命名格式。并介绍了从集群启动到用户连接集群这一系列流程中 CephX 所起的作用。最后通过实验操作讲解如何在集群所有秘钥丢失的情况下将其完整恢复,以及在实际生产环境中使用 CephX 的一些注意事项。 CephX 是什么? CephX 理解起来很简单,就是

Be_Nice的博客 892

【DIY】使用STM32及PID算法实现一个磁悬浮玩具

今天教大家来做一个磁悬浮玩具。

小白白学电子 1万+

ceph-deploy mon create-initial 报错“ [Errno 2] No such file or directory”

ceph部署,配置初始 monitor(s)、并收集所有密钥报错,执行ceph-deploy mon create-initial 报错信息: admin_socket: exception getting command descriptions: [Errno 2] No such file or directory 解决步骤: 1. 报错信息是“没有文件或者文件夹”。

唯有努力无限,才可突破极限 1万+

DC综合中set_dft_signal的实战配置与优化策略

本文深入解析了DC综合中set_dft_signal命令的实战配置与优化策略。文章从命令的核心作用出发,详细拆解了-view、-type、-usage等关键参数,并通过扫描使能与时钟门控的实战案例,展示了如何正确配置以实现测试模式下的功耗优化。同时,文章总结了高级优化策略、与低功耗流程的协同方法以及常见错误排查清单,旨在帮助数字芯片设计工程师构建高可测性、低功耗的稳健DFT基础。

weixin_28347369的博客 405

小红书爬取实战指南

以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。

monk all the way 6930

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory:报错处理

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: HINT: This error might have occurred since this system does not have Windows Long Path support enabled. You can find information on how to enable this at ht tps://pi

chaNgfa的博客 4万+

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

大话Ceph -- CephX那点事儿

原文链接:http://www.xuxiaopang.com/2017/08/23/easy-ceph-CephX/ 《大话 Ceph 》系列文章通过通俗易懂的语言并结合基础实验,用最简单的描述来讲解 Ceph 中的重要概念。让读者对分布式存储系统有一个清晰的理解。 引言 这篇文章主要介绍了 Ceph 中的一个重要系统 – CephX 认证系统。简要介绍了 CephX

崔炳华 9234

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Python】解决Python报错:OSError: [Errno 2] No such file or directory

【Python】解决Python报错:OSError: [Errno 2] No such file or directory

科技改变人类,技术成就未来 3573

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Cephx源码浅析

Ceph X protocol   Ceph的Auth认证服务由MON中的AuthMonitor模块提供,随MON启动而启动。启动时会检查认证服务是否为cephx,如果是将加载admin.keyring(里面包含客户端服务器共享的密钥)。 当服务器接受请求后会开启一个会话,并初始化一个server_challenge,该值会传输给请求授权的客户端。客户端接收到server_challenge

oba没有马 3039

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Ceph-mon无法启动问题

删除mon,创建mon后出现下列错误,原因mon的keying不对,从其它服务器拷贝keying即可,重启mon 2021-09-15 01:09:39.309882 7fc8169ca700 0 – 192.168.0.11:6789/0 >> 192.168.0.13:6789/0 pipe(0x498d800 sd=23 :36942 s=1 pgs=0 cs=0 l=0 c=0x45d11e0).failed verifying authorize reply 2021-09-15

yysalad的专栏 2413

Ceph的认证授权

目录1. Ceph的授权1.1 Ceph的认证流程1.2 Ceph认证机制1.3 Ceph常用权限说明1.4 Ceph的授权操作1.4.1 授权的基本语法规则1.4.2 常用的授权语法1.4.3 ceph用户命令规范1.4.4 添加用户1.4.5 用户密钥的导入导出1.4.6 用户的查询与删除1.4.7 修改用户权限1.5 推送用户至客户端1.6 通过命令行使用用户1.7 认证练习(管理ceph认证)ceph用caps来描述给予用户的的权限来使用mon和osd/mds,caps用来限制对某一个存储池的数据或

因上努力,果上随缘。但行好事,莫问前程。 2559

已解决ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: ‘C:\Use

已解决ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: ‘C:\Users\ADMINI~1\AppData\Local\Temp\2\pip-install-s7tgji3n\opencv-python-headless_eab394cf800c4bc98eee13628b7caca5\opencv/samples/winrt_universal/VideoCaptureXAM

努力让自己发光,对的人才能迎着光而来 1万+

ceph 认证高可用

认证高可用为了识别用户和防止中间人攻击,ceph提供了cephx 认证系统来认证用户和进程。 注:cephx不提供对地址数据的加密和 rest的加密。 Cephx是通过共享秘钥来实现认证的,也就是说,客户端和服务端拥有相同的秘钥。认证协议是这样的,交互的双方能够相互证明彼此有秘钥的副本而不把它暴露出来。这样就能提供相互认证,即:客户端确信用户拥有秘钥,用户也确信客户端也有一个秘钥的副本。

litianze99的专栏 1930

OSError: [Errno 2] No such file or directory

问题:   File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child     raise child_exception OSError: [Errno 2] No such file or directory       跟JDK的PATH有关,在终端输入: java -version 如果出现以

3万+

Androi 编译报错OSError: [Errno 2] No such file or directory

第一,错误信息如下: Traceback (most recent call last): File "../build/android/gyp/gcc_preprocess.py", line 50, in <module> sys.exit(main(sys.argv)) File "../build/android/gyp/gcc_preprocess.py"...

tkd540的专栏 6634

五、Ceph之RBD存储使用

五、Ceph之RBD存储使用

sqlora的专栏 3498

ERROR: missing keyring, cannot use cephx for authentication

[talen@ceph_admin ~]$ ceph health 2015-09-14 15:11:55.503854 7fdc2297f700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication 2015-09-14 15:1...

weixin_33919950的博客 1334

Ceph Client报错

最近一段时间在研究Ceph,今天遇到了一个问题,准备写下来跟大家共享。欢迎大家多想我提提意见! 今天Ceph客户端系统出现了一些问题把它重启了,重启之后发现连接不到Ceph集群了,报下列信息: # ceph --debug -s  2016-09-01 07:23:31.907282 7f31c1234700  0 librados: client.admin authentication

sinat_36023271的博客 6314
上一篇: kubernets使用ceph-rbd作为storageclass并创建pvc和应用
下一篇: Ceph Pool操作总结
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值