记录一次ceph集群故障处理记录

处理记录 Ceph版本:octopus 首先遇到問題是,业务端无法挂在 cephfs 查看内核日志发现是 bad authorize reply ,以为是 ceph keyring被替换了 text 1 2 3 4 5 6 7 8 2019-01-30 17:26:58 localhost kernel: libceph: mds0 10.80.20.100:6801 bad authorize reply 2019-01-30 17:26:58 localhost kernel: libceph: mds0 10.80.20.100:6801 bad authorize reply 2019-01-30 17:26:58 localhost kernel: libceph: mds0 10.80.20.100:6801 bad authorize reply 2019-01-30 17:26:58 localhost kernel: libceph: mds0 10.80.20.100:6801 bad authorize reply 2019-01-30 17:26:58 localhost kernel: libceph: mds0 10.80.20.100:6801 bad authorize reply 2019-01-30 17:26:58 localhost kernel: libceph: mds0 10....

 ·  · 

当cephfs和fscache结合时在K8s环境下的全集群规模故障

本文记录了在 kubernetes 环境中,使用 cephfs 时当启用了 fscache 时,由于网络问题,或者 ceph 集群问题导致的整个 k8s 集群规模的挂载故障问题。 结合fscache的kubernetes中使用cephfs造成的集群规模故障 在了解了上面的基础知识后,就可以引入故障了,下面是故障产生环境的配置 故障发生环境 软件 版本 Centos 7.9 Ceph nautilus (14.20) Kernel 4.18.16 故障现象 在 k8s 集群中挂在 cephfs 的场景下,新启动的 Pod 报错无法启动,报错信息如下 bash 1 ContainerCannotRun: error while creating mount source path /var/lib/kubelet/pods/5446c441-9162-45e8-0e93-b59be74d13b/volumes/kubernetesio-cephfs/{dir name} mkcir /var/lib/kubelet/pods/5446c441-9162-45e8-de93-b59bte74d13b/volumes/kubernetes.io~cephfs/ip-ib file existe 主要表现的现象大概为如下三个特征 对于该节点故障之前运行的 Pod 是正常运行,但是无法写入和读取数据 无法写入数据 permission denied 无法读取数据 kublet 的日志报错截图如下 彻底解决方法 需要驱逐该节点上所有挂在 cephfs 的 Pod,之后新调度来的 Pod 就可以正常启动了 故障的分析 当网络出现问题时,如果使用了 cephfs 的 Pod 就会出现大量故障,具体故障表现方式有下面几种 新部署的 Pod 处于 Waiting 状态...

 ·  · 

ceph常用命令

测试上传/下载对象 存取故据时,客户端必须首先连接至RAD05集群上某存储地,而后根据对像名称由相关的中CRUSH规则完成数据对象寻址。于是为了测试集群的数据存储功能,首先创建一个用于测试的存储池mypool,并设定其PG数量为16个。 sh 1 ceph osd pool create mypool 16 16 而后,即可将测试文件上传至存储池中。例如下面的rados put命令将/etc/hosts rados lspool 显示存储池 rmpool 删除存储池 mkpool 创建存储池 rados mkpool mypool 32 32 sh 1 2 rados mkpool {name} {pgnum} {pgpnum} rados mkpool test 32 32 sh 1 2 $ ceph osd pool create testpool 32 32 pool 'testpool' created 列出存储池 text 1 2 3 4 5 6 7 8 9 $ ceph osd pool ls mypool rbdpool testpool $ rados lspools mypool rbdpool testpool 而后即可将测试文件上传到存储池中,例如将rados put命令将/etc/issue文件上传至testpool存储池,对象名称仍然较保留文件名issue,而rados ls可以列出指定存储池中的数据对象...

 ·  · 

踩坑nginx proxy_pass GET 参数传递

场景 在配置代理后,GET 请求的变量全部失效,配置如下 conf location /fw { proxy_pass http://127.0.0.1:2952; } 我的需求是,/fw/ 的都发往 2952端口,但实际情况是404,原因为“在没有指定 URI 的情况下,在1.12版本后会传递原有的URI” 这时会导致一个404错误,因为我的后端接口本身就是 /fw/xxx/ 会出现重复 接下来做了一个变量传递 conf location ~* /fw/(?<section>.*) { proxy_pass http://127.0.0.1:2952/fw/$section; } 这时存在一个问题,就是 GET 请求的变量无法传递过去 解决 nginx 官方给出一个样例,说明了,存在某种情况下,nginx 不会确定请求 URI 中的部分参数 使用正则表达式时 在 localtion 名称内 例如,在这个场景下,proxy_pass 就会忽略原有的请求的URI,而将拼接后的请求转发 conf location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; } 那么这服务我遇到的问题,nginx官方给出了使用方式 当在 proxy_pass 中需要变量,可以使用 $request_uri; 另外也可以使用 $is_args$args 参数 来保证原有的请求参数被传递 conf location ~* /fw/(?<section>.*) { proxy_pass http://127.0.0.1:2952/fw/$section$is_args$args; } $is_args...

 ·  · 

解决nginx在docker中报错 [rewrite or internal redirection cycle while internally redirecting to "/index.html]

vue项目部署在裸机Linux上运行正常,部署在docker中nginx出现下列错误 text 1 Nginx "rewrite or internal redirection cycle while internally redirecting to "/index.html" 表现在用户界面 500 Internal Server Error 原因:nginx配置路径不对,改成正确的后恢复

 ·  ·