找回密码
 注册
查看: 122|回复: 0

centos 7.9安装cephoctopus版本记录

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2025-12-18 11:00:55 | 显示全部楼层 |阅读模式
软件版本:3 t  g& ?" }. h0 G+ a6 Q! a
. |6 ~* N: B" L% k$ q

8 O3 m5 \! H( V# ~. b/ z3 c2 z4 T: x1 S# y" [3 @1 K

  \1 z* ~: n+ H  _) }& i1 \& P
( o. y5 D) J  ^! O% [# D. R4 r! d
9 [4 v! n7 A& x; t" Q1 m; v9 z; d+ Y, V1 ]7 {/ {+ N6 ]8 q0 {( {

5 j+ V+ R* Y4 ^: }6 V0 ^0 G: V
+ O% t- e4 I% V# q4 @( ^. ^) w, f: e$ }
) V% v9 t, v9 @4 [

0 s4 ~' a! q, e( h
0 m, O! a4 H% U0 I3 |
# O( a+ r& G) E! q! X6 a/ p+ N' V0 R: |7 k  V* |
- h' L2 C' }9 W5 Q/ g6 h: Y& r

# z8 c+ f, H  R  @( P% \软件版本cephoctopus(15.2.16)centos7.9, A) }; @2 i, }' S' Z& n' c/ N
ceph官网版本:( l" B* b6 M, f9 \# E4 Y* d
docs.ceph.com/en/latest/r…
* j8 u0 }7 Y  q+ J5 m- F机器列表:
) @; |, T4 a& F( `$ @% z- M) ~, d% |6 a# b+ G: T# I

& G) j; _- r; o+ O7 r
/ u4 S  _3 ^( K, Z. T2 c
4 v8 m5 l; K  {! E$ }8 O3 p
6 w7 D6 n5 L4 V1 Z: m7 F& D1 j1 ^) B! ~+ K' ?
6 a+ \2 {! ]* ~) G% S. X; ?

7 g. K# ]- y; Q* t- q, y; A' P. B2 N  [: |- e7 v
0 R2 T& Y$ w7 y" I- {- T

9 K) _  {# B# Z( M# ]
' z7 j, D( _; N: \2 V% u- Q4 M, {' ^
, a2 {/ E, W1 u0 W9 V5 m- y# ^* L

6 q" o$ z, O) X* g. T& B; {, ?( l9 P

# F! o+ f! N( I* T& a! S; A4 R) a7 x3 ]3 a- N$ `, u/ g7 X
3 ]  |2 z$ p4 `* i9 R

. C, Z! ^1 f3 s- k& \) p, D6 `# {3 [0 L3 t+ Q: R

, s' Q: c/ v! ?2 A2 J2 C& x" c  ^  q

$ a0 V6 N* Y; [5 ?% e2 ^
# ?' E: h" f+ b机器名称ip块设备0 h' M/ A6 J( M3 a8 a( k6 |2 S: P
master0 12.70.10.161/dev/vdb 和 3 D1 n) P$ B3 x$ ]
/dev/vdcmaster1 12.70.10.162/dev/vdb 和
& x0 I( a, b% G" a6 c0 `9 Y /dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc
/ T- n" ]% w  D7 x准备工作
" ~! J! t/ E: o2 U4 G" q8 D' i开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。
6 D7 ^: u. [  Y2 r如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。$ m  j+ s9 F% X4 t+ P& @( y
ansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):4 J# X5 H) E& p' E& s% T  Q
bash 体验AI代码助手 代码解读复制代码% @. a8 _4 a( b  _5 L0 t, i. d
master0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master08 h0 q% }! z+ o( \$ s  f. H
master1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1
( d, N% l  V# r& |4 emaster2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2
' `4 U( V1 r2 n; m( X/ h8 J) K$ n8 L6 D( [6 S
[all]
3 L7 a+ W$ r- w- |# W$ omaster0, H# n  N7 _3 @8 \
master14 Y& g% q2 c. X
master2- Y  f5 W, n# N2 p* t0 q4 V

- t4 y$ A3 |) W9 `! G8 C* E# Z升级系统内核. _5 M2 D- C1 b! j) g
升级系统内核到5.17
3 M+ |/ S8 j" J% `5 Yansible脚本如下(1.kenel.yaml):
9 t) X. W: u8 K9 Vyaml 体验AI代码助手 代码解读复制代码- name: update kernel
5 ?: u$ @. M  \! l! R# H' w  hosts: all1 F% ]% ~3 o, s# r
  gather_facts: True& R7 t- |# U/ ^. P9 c- e
  vars:: M" g2 U" ~6 Z( E2 ]; ]; v. c, `. p
  tasks:0 E/ W8 I6 ?& m: s
  - name: create workspace5 Z* M3 G9 S. X* K
    file:
8 {! E8 p8 }, F$ u) A      path: /tmp/workspace/
( e% h; t7 I2 M  {( p      state: directory
7 |) j- D/ j, U, [9 w1 f/ R) o    tags: workspace
2 T4 {  A; G2 V! t" H) i, `. a  - name: yum install elrepo
' j% N* k7 V8 f2 `! e% F  m    copy:
" [: \- \: Q3 l      src: templates/rpm.sh.j2/ O9 Q! b7 ~: i2 J2 _$ Z
      dest: /tmp/workspace/rpm.sh, K6 h  q- V* O& a0 R0 t
      mode: 755' O7 T! M* ]# N* H
    tags:  F6 c# c6 v2 @9 M+ M. }6 A
      - copy-rmp. N& b/ ]  d1 `6 Z' _# z& M3 T
  - name: sh rpm.sh
3 q* K/ ^- L, i7 E/ s+ n    shell: sh  /tmp/workspace/rpm.sh1 y/ F. Q; D) Z9 Z
    tags:
8 ~1 \4 N# p$ Z5 q      - sh-rmp
9 f5 ?7 ~, X0 a& ?; K, S/ J( Q  - name: 列出可用的内核相关包
- A( q: Z4 h* R/ v9 ]    yum:6 v- z9 C( c, X
      list: available; Q4 V- M- }. u9 q% j
      disablerepo: "*"
7 v) V0 F) S7 U, o( V2 t* Y9 A      enablerepo: "elrepo-kernel"/ b  i! M5 i+ A6 T, M, B
  - name: 安装内核0 W0 x% |1 r+ z4 M6 y8 I2 Y; Y
    yum:
2 I8 e' ]/ z$ g4 s( l& c4 l- ?      name:3 i+ O# I, G# c+ o" Q" F* p
      - kernel-ml
# T! b7 H. w) `. a- g5 P: ?1 ~- W      #- kernel-lt.x86_643 T- u* q% U2 E
      #- kernel-lt-devel.x86_64
" A) Z$ Z% ~; |9 h1 ~      enablerepo: elrepo-kernel3 ^4 s2 ?' n% l/ @/ S8 q) y/ X! p
  - name: 查看内核版本默认启动顺序
$ `! n  w, L6 ^8 l7 r: v: n! k4 X/ _7 L    shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg( Y. w8 |8 D. _- s
  - name: 修改grub中默认版本启动顺序* @! U, ]- ?) P; j7 F+ L( w
    lineinfile:- }- |) W8 H  y
      path: /etc/default/grub
( {4 W3 X( q2 d9 C" Q$ Y$ r, ^% l" `      regexp: "^GRUB_DEFAULT"
  X# o+ T7 c, b( T, d/ y8 J      line: "GRUB_0=saved"1 q6 I. l) y6 ]& W8 [6 p) O* v/ F
      backrefs: yes
/ z$ `, M: B" Y9 j6 ~$ L      state: present
" k# n: ]  d+ c! I7 o) \& D    tags:5 d: {! K. a, }; @! x* n
      - grub+ B( K, V6 [( _( Q( p/ W
  - name: 重新创建内核配置3 L: E3 T% `+ [$ K0 F
    shell: grub2-mkconfig -o /boot/grub2/grub.cfg
( k6 [0 Y$ O- j; v9 b/ l4 W  - name: Reboot the machine
, X# t1 F. U# y    reboot:8 R1 w1 w- c( v$ U' ~- a+ ^7 y
      reboot_timeout: 300
, |/ M5 P9 x! n' b6 ]3 j  - name: uname -r0 l0 }! w3 i5 D0 a  ?
    shell: uname -r
  G8 v3 o0 u' O: A    register: version
) t: k# b7 V4 q6 w  - name: debug
+ f9 Q, T6 k% l8 ]% V6 u    debug:
5 ?+ b! C0 @1 F" j. V6 b( d      msg: "{{ version }}"
6 u) n$ w! e5 p& a0 @+ b4 _" }$ i4 A; j4 n( v+ u
升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j2
# c9 y6 I( I( a' f内容是:6 u2 }- [' F) L2 Y1 f
bash 体验AI代码助手 代码解读复制代码#!/bin/bash: [3 ?6 }9 m( p9 v  {4 }
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
5 k# m4 y8 ~8 I1 I9 }#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm1 V" x3 S7 M+ z3 n, ~2 e. W$ F' P% v' I
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm! |- e# R4 x7 \1 b
echo 0
0 G8 o! b8 f' c8 n/ e  D( p2 B  o$ X/ M* Z: ^. T
执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级$ \' X) u; D7 i% O
安装必要工具和关闭相关配置9 Q" z; o2 }$ T) m; O5 c- R
+ i: f" l! [( f/ I3 f
脚本2.config.yaml如下:
9 z) ]  k4 U0 X) Yyaml 体验AI代码助手 代码解读复制代码- name: set config1 Q7 x8 \) z& M) U+ c
  hosts: all: c/ J8 Z3 Z: X( z: A) l
  gather_facts: True0 t& u: P& i* \' Y: c
  vars:
' b3 b8 u5 _0 |7 \  handlers:
- ]! L/ q% M) X) L" ~  - name: update_yum
, m( r$ R9 W/ ^" J' o" _* o7 B, H    shell: |$ q3 Z" s4 R  b2 k5 O
      sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
" P, D' W1 [6 L# W      yum clean all1 @& P2 ]" U5 m9 p
      yum makecache -y
! s$ Z% n2 G- T( B* |- ]' Z  P: {$ F  - name: noswap_service #禁用swap
6 p! a+ _/ A3 c# f( ^" b    systemd:; C" A3 w+ D7 h
      name: noswap
' t; a: N9 B- b      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
6 B* U& R4 M$ o7 ?      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
0 M- P2 G! a, f) Y) s# T' i+ u      daemon_reload: yes #yes 重启systemd服务,让unit文件生效/ u1 [' Q  p3 b* B; ?$ B
  tasks:
4 w2 y- {) z1 b% I& u; S* _* ?  - name: back up repo
& D$ B$ f8 x$ m& r) f7 z2 P    shell: |
5 j3 S% n$ F# @4 @5 P4 d! Z      mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup7 E4 u' J  g/ L0 G  n
      mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup8 M$ `7 U) s" \' ^  C
      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
5 {9 ^) K; t. }  - name: delete /etc/systemd/system/noswap.service #禁用swap! }3 \8 p4 I: J5 V- d2 Q5 G6 ~/ q
    file:
0 d' [8 c. V. N; W      path: /etc/systemd/system/noswap.service$ B) @2 T, e6 j7 ?. Q1 g5 ^
      state: absent
% {" Q$ x, }. c- z  - name: download repo #下载yum源) l: B) N5 ^: D* |9 j+ O4 O
    get_url:
0 W) N8 `  Z/ z0 w% w# u3 d9 }      url: "{{ item.url }}"
( o. }% @9 k$ ]) c      dest: "{{item.dest}}"9 H) q+ [" _( t5 V4 R$ G
      force: yes  q1 _. X; p! j! [; K% ]/ K: G% J
    with_items:( {7 ]0 W3 o" G: L' V
      - {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"}  j9 @0 @6 H3 ^! e4 o, M1 P; ~
      - {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}
0 q/ Y/ @6 a6 \, o3 t9 \+ V      - {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}
* h6 \, ?0 V/ r1 n1 T    notify: update_yum #更新yum(见上面的handlers)
( `7 Y8 F' f" u9 |- x/ k( ]) f( K/ \0 Q  - name: install net-tools #安装必要的工具% }9 Y* H0 Y# w: t
    yum:
  M/ c; D* b2 q3 U4 u. C( l      name:' r0 F, A: y) g3 N  T$ n- o" r$ c
      - net-tools
2 b8 {8 m$ m+ I1 B2 O4 n      - vim
% l+ a2 F9 x# H6 v      - rsync( S+ `) r" Z$ W+ Y( p8 V) n1 V
      - chrony8 {' M; ?8 V: u6 W; g. [, c9 l
      state: present
, V  |& M, V' g! Y9 ^: j4 d      update_cache: true0 G- A+ N, |2 c5 p" Y' }4 p+ A
    tags: tools
. T' E) p+ J; \& f# ~6 J" t  - name: chrony_service+ A2 y$ c% o2 R: H
    systemd:# ^! `! ~" u+ J
      name: chronyd" d1 A- [) G* A  u% N$ L/ T' u: `
      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
4 H0 g6 R' o/ o      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动8 z3 {& |$ R+ l4 M
      daemon_reload: yes #yes 重启systemd服务,让unit文件生效9 ~' A. j  H: z1 d0 G) i; ^9 E
    tags: chronyd2 Y. ^( D' v  m/ [
  - name: config /etc/hosts #关键 生成hosts文件, X" ^  X. f. N7 z$ a; m2 J5 k8 C
    template:
7 |# z& O# k% x' D' R5 \      src: hosts.j2% n9 n7 y% a) f! c+ Z: q7 H: q
      dest: /etc/hosts
) Y, H3 l! t% K% m: n  ?- h. }      mode: 0644
# M+ J( k4 r" A; U' S" [; B      backup: false; q6 C) J0 J4 T4 s' K
    tags:$ f" {- m7 m& G! \; s# f+ H
      - hosts
1 i' b/ K2 K6 ?' e2 ]! @  - name: set hostname #设置主机名3 h( b8 K# C$ d. g: b7 C
    hostname:
- Z5 U, d- w0 @9 ^" X/ N+ d      name={{host_name}}
; H* H" Y. w& }& A! K  - name: set timezone to Asia-Shanghai #设置时区
3 p1 w. B5 z% G7 m$ B5 ^, r    shell: |0 r; u0 Y! D7 M- H9 x2 b
      /usr/bin/timedatectl set-timezone Asia/Shanghai
+ L# p0 r# q9 x( e      chronyc -a makestep; ?6 ^3 y5 ^! R, `! p
    tags:+ v4 z6 C! @: F3 r/ d
      - set_timezone
$ [8 o( Y; K. z0 a' `% ]  - name: stop firewalld service #关闭防火墙8 h" g1 N. o7 w0 ^
    service :
9 A. Q, T, B' @( t* j/ f( I      name: firewalld.service
, w2 a5 ?: m  p' y$ i1 {& S      state: stopped# B2 [6 {$ B3 @. _, M
      enabled: no
& Z9 \& a- \' K( {    register: firewalld_service_result- v) c7 r2 n4 c0 t
    failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg"
. c1 @/ J8 F1 l* y    tags: stop-firewall6 B& ^4 ^7 m! Q! t
  - name: Write noswap systemd service config file
0 c) c: _/ S) \: I( o    template:0 p# a& M; l" h
      src: noswap.service.j2
( [- \+ d. ]. [% Q7 a7 d      dest: /etc/systemd/system/noswap.service
9 e4 ^& M& B! i* b      owner: root( b2 N- C- i1 X0 q7 `3 A
      group: root5 g. `% X% d$ J
      mode: 0644
# i8 I- @: u+ |+ T    notify: noswap_service
& a9 u# T& p6 _, S* U0 a: S  - name: Disabling SELinux state #关闭suse5 ?: d& b1 x( l: V5 P* q
    selinux:
/ s4 x8 k( }( W! ^) y      state: disabled9 s: a2 ?' k5 n' q$ y1 D! f
  - name: Reboot the machine #重启机器; P# L0 n4 H# z% I
    reboot:6 Z2 z* M& @- N$ M3 v
      reboot_timeout: 300
) I- H+ K% M( L" ], O: T9 ]# Y( d5 k7 N8 C
templates/hosts.j2内容:
9 x- w$ q+ G; \4 j9 Ibash 体验AI代码助手 代码解读复制代码5 }! Q1 O6 ^) l

# I: Z0 d0 M1 x* z8 e127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
1 a, W9 E( @+ {9 A$ i: |. K/ S) O5 B::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
( s- M0 J) |& f4 H2 u/ `
' V5 n0 R+ a' m6 C. F0 o6 S$ j* u2 d6 T" j5 w) l( n
{% for h in play_hosts %}; w3 r; j4 J  p5 J( X1 h; C/ M: v
{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}7 R9 {/ o" d8 U
{% endfor -%}
1 g0 x  K# j9 o4 I" T0 S( ]$ V: U3 f0 M3 Z) o0 k: L: Q) T
执行ansible-playbook -v 2.config.yaml完成相关配置工作+ ^6 o2 @  z" f0 i/ u, H, S
安装docker
' B4 n3 N4 t6 G  \$ ~9 x按照官网说法,可以使用docker或者podman,本文选用docker。
9 \5 J6 Z$ [8 {2 K2 ]! W剧本3.docker.yaml内容如下:: f: V2 a0 r5 F2 H2 b4 S6 O
yaml 体验AI代码助手 代码解读复制代码- name: install docker! M7 N" K& g0 [5 B
  hosts: all. t" A  K( S4 E- n( @
  gather_facts: True) y7 d! V  I9 `8 j, J, G0 @
  vars:
9 y6 ]4 z! u. |9 f    DOCKERHUB_URL: registry.aliyuncs.com/google_containers
6 ]: {" d* n" m; o  handlers:
# t: l& M: n* |$ T2 g  tasks:
$ m# o! _8 s+ J" U" H' Z( ]* T  - name: mkdir -p /etc/docker/
  A+ s6 s5 b3 H+ e! H* d    file:
* ~" ~! B9 j/ M$ P+ K      path: /etc/docker/
9 o' g1 g: j+ e) P/ ^$ m3 m      state: directory
& J' f/ m7 [) d% [  - name: install docker6 ?& _% W8 W" o1 L' ^
    yum: name=docker-ce* _5 k0 b3 d& u% l: S1 O
  - name: change config of docker% w3 D& R4 \% x: K
    shell: |
! B0 Z& w  c- m+ \; {       cat > /etc/docker/daemon.json <<EOF# E! D, d' @. U: d
       {"exec-opts": ["native.cgroupdriver=systemd"],7 I/ Q7 S: H* W9 g( q% d
        "registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]
2 Z* w) Y4 o, _! X       }3 E. Z) `! ]( U1 ]7 V
       EOF$ i' c4 w: x1 P  v" q- _* M7 @
    tags:3 t$ U$ R* M% [4 f
      - config
* l% u% D9 w) b  - name: add systemctl! ]3 M  I1 R3 ^7 A
    systemd:' d& `, N* k/ ?0 B8 v
      name: docker.service! {% S* S' o4 T" h
      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
/ A! z  i# d4 q8 {5 O  n      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
0 I1 W" l9 ^' d) s      daemon_reload: yes #yes 重启systemd服务,让unit文件生效9 ^2 |5 H4 I9 R/ C  b
    tags:
5 g. Z9 ?" Z! S      - docker-daemon
! h# l% b6 Y+ k; r. D  - name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials+ u  z8 W# c& F% a7 {, H# G& c
    shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com
  z/ M3 h2 K# O4 L    tags: login' m) C5 r# g. d  R

3 z. c+ D3 ^# A: s5 w执行ansible-playbook -v 3.docker.yaml完成安装docker的工作
. M6 E* i, X" m- ^3 I! b$ O开始创建ceph集群
5 W3 [* r; y6 ^. p安装cephadm
- O1 ]/ D$ h7 C继续使用ansible为集群中每台机器安装ceph
  p# Q5 w6 [2 P: S; k/ F' Y( {剧本cephadm.yaml内容如下:4 k* w' i- q1 }# O7 v
yaml 体验AI代码助手 代码解读复制代码- name: download ceph
' i* L; @) y) _' U4 \# j: c  i% e  hosts: 127.0.0.1! G, g# X$ f: q! o
  connection: local
7 Q* ?  U+ G; T  ~% K) J+ S  gather_facts: yes  |/ i8 Y( x: b5 r7 Y
  tasks:5 k2 X+ k( ?! q3 l: \  L
  - name: download cephadm, g& X- s/ a# I. j$ b( S
    get_url:4 m- ?2 f7 I$ E& d, Y6 O! ?
      url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
$ z4 C% y# G- M& [- ?      dest: /tmp/ceph/cephadm
$ k1 @* F9 z4 M$ q: Q  j" d      force: yes& n/ c* q% |; C# ~& s1 S
      mode: 755
( W3 {! A8 i6 m* B% ?# ^      timeout: 600% {- L" [" q% W" V9 [* E
- name: download cephadm and install
4 n) p) _! D; w5 w0 n  hosts: all
8 W- b2 u& i2 e( |  ]  gather_facts: True
/ M2 w+ [  c# e1 Y  tasks:
0 J3 B- N$ Q; a/ Z, X  - name: mkdir workdir& R' l# z6 ~7 G/ _- R6 u
    file:% z5 B- E4 M/ d5 Y
      path: /tmp/ceph
8 S& J; `" e3 p! p* _) e" g! R& W      state: directory
$ x' S0 [: V2 d8 s! ~5 `$ j  - name: 分发cephadm安装文件
) q5 q0 V, r# T# j8 P/ j4 u9 M    copy:
2 f# Y, v+ {0 f- ]      src: "{{ item.src }}"6 y: w* }! I; b8 Q
      dest: "{{ item.dest }}"
& ^0 e$ P. t) A- ?" G      owner: root
# T& C5 p4 Z8 l  H) k0 S: s$ s      group: root* q' s$ y, d3 S, O
      mode: "{{item.mode}}"
5 C% g+ v3 `! f0 n9 N. j    with_items:
; y2 I. F/ o1 _; l, E; f) v+ D0 e    - {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }
- p) b% P7 c3 k5 Q) M% `) r    tags: cp-cephadm3 z- f  J5 t' x4 C0 \
  - name: install python3$ N1 g* N9 X3 A8 s& N( a% B+ u* u
    yum:
4 S& B7 j& W( V3 Q0 r      name:
& ?3 d5 k0 m' j6 [- n      - python3
6 a: k# _% W+ ~. M$ [( d      - chrony, u. k# j+ Q0 o) H1 x9 X
      state: present: c& v/ X; F  M
  - name: add systemd
) L: Z0 ~( A% t    systemd:8 e* X% D( P! X6 F: q+ i
      name: chronyd% y4 l/ L+ P% T1 W3 d1 e
      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
% r& O8 B0 U% M+ d3 w  ?      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
( g7 G! b' `# g4 t" m* v2 i% C7 n! }' k      daemon_reload: yes #yes 重启systemd服务,让unit文件生效" S9 e; J! p7 @5 z
  - name: add ceph release) a5 |: n) ?) [1 c! M
    shell: /tmp/ceph/cephadm add-repo --release octopus. w, C* o1 A5 ?/ t- Y  J
  - name: install cephadm- K* M6 N& W+ Q3 y; |/ }, y
    shell: /tmp/ceph/cephadm install
% Y# \9 u0 W$ r# b3 @  - name: which cephadm
# K9 d9 K$ h9 ?2 K    shell: which cephadm/ d/ g- |" k; R" a0 I
    register: which_cephadm
# `" s" I8 W0 K$ W. f    tags: which-ceph6 j! N! T" i  m1 ]# x
  - name: show' x6 `* b* _1 e  h2 o' x
    debug: var=which_cephadm verbosity=0    #check.stdout 显示出的信息会看的更清晰点
; d7 @& d$ D& [0 _. u9 _" x; t8 p    tags: show-result
7 F8 G* S/ O! i* T& \0 `+ Q0 r& R
* D/ n1 P; @+ r; n+ k; C" m8 s执行ansible-playbook -v cephadm.yaml完成ceph的安装4 w" F2 L" c  h) a: M) G! A

; m2 g) p! }. c' Q0 z; u7 R引导集群) M3 J( R. Q9 o) p& p
将master0作为引导主机,在其上面执行如下引导命令:; A' {0 B: Q* A/ `) r7 Z
bash 体验AI代码助手 代码解读复制代码- x7 z5 i/ W$ E. L8 U3 ?8 m# w
, G# w1 y2 _4 R3 L6 t' T
[root@master0 ~]# mkdir -p /etc/ceph" S* v$ f. l; z# U+ j
[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161: P2 m& \4 E4 q. T- ]: _1 @! {/ v
Verifying podman|docker is present...# ]! Q( g+ ^3 ?& F
Verifying lvm2 is present...! c9 a) N# W4 l8 {* B
Verifying time synchronization is in place...8 P, l) y3 k* l6 f# N
Unit chronyd.service is enabled and running, B- S( h7 j( ?: ^$ Z7 J
Repeating the final host check...8 f  g' K/ `+ P1 M. U& G3 X- w, l0 e' \3 k
podman|docker (/usr/bin/docker) is present* W# Z$ W0 x0 O  E6 M2 f
systemctl is present+ g0 B  I0 p, s5 J
lvcreate is present+ C3 N1 ^, _$ T3 ]( Y
Unit chronyd.service is enabled and running
! X. l9 s' W9 M" A' I' _) qHost looks OK
  S9 |- a, u: E( UCluster fsid: e3386564-bb02-11ec-af56-525400299ff7" M3 Z3 @1 O3 `
Verifying IP 172.70.10.161 port 3300 ...6 f0 b' R: b2 H# v0 B6 P, F3 v- Q
Verifying IP 172.70.10.161 port 6789 ...
, |) E% f8 r* `3 P/ M9 yMon IP 172.70.10.161 is in CIDR network 172.70.10.0/24
& e2 y  X9 }. ]3 c% XPulling container image quay.io/ceph/ceph:v15..." D* P9 x' x  ^) l8 h, C! F5 ~
Extracting ceph user uid/gid from container image...
- a) F( Z4 z  ?# `* N; wCreating initial keys...
6 h0 B4 z! o/ [  HCreating initial monmap...
* ~' ^' ^; g+ U* l& X$ |8 b: uCreating mon...' A5 F, L( z% _
Waiting for mon to start...( N2 O0 Z5 r1 ]" M! E0 t
Waiting for mon...
% Y" }3 m! j- E: O- @+ Lmon is available
+ q2 K+ ]& d# Y. QAssimilating anything we can from ceph.conf...
# A7 m4 r4 t7 F& R& M  \Generating new minimal ceph.conf...
, j& ~; s8 v1 F- ]1 e& p6 gRestarting the monitor...7 B% j/ X( d. ?: n! B+ q
Setting mon public_network...
8 F7 T" D' S( a* p; {. `8 i* @6 _Creating mgr...
3 T7 \- ~- I( e$ x6 b" J; nVerifying port 9283 ...7 {9 ^; c. T' d& T! B% r# c
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
& l% h9 ?" G, y6 q0 @Wrote config to /etc/ceph/ceph.conf" p; {. Q8 v3 |+ ^% ?% H( {; b
Waiting for mgr to start...0 f# P2 w- J( T: w' N- J
Waiting for mgr...
( l  X2 E( {5 `: Y9 u9 ?* p* Zmgr not available, waiting (1/10)..." ^3 W9 P% D2 Z  Q2 O
mgr not available, waiting (2/10)...
, F: s& S. L, cmgr not available, waiting (3/10)...
* Q3 r, t: r$ ?* v- [- l& K$ o+ g# omgr is available
7 U5 ?: t; N8 }: o/ B( g6 J5 ZEnabling cephadm module...
. a) a4 m3 {7 U% x+ ?- J* zWaiting for the mgr to restart...: N7 d) x  B/ n" p# L7 L
Waiting for Mgr epoch 5...
- U! Q. g( q+ Q1 I9 ?Mgr epoch 5 is available
- X4 [* t) U: E7 F: L# P2 @+ X1 WSetting orchestrator backend to cephadm...
0 q! n) u- x5 }' wGenerating ssh key...
" M5 c# u: ~! y0 l( `Wrote public SSH key to to /etc/ceph/ceph.pub& C0 e; S6 {0 ~8 W+ t& p9 f7 [
Adding key to root@localhost's authorized_keys...
+ _* ^5 v; c! ?Adding host master0...
2 j! v/ E4 u9 n/ X8 JDeploying mon service with default placement...
9 r% D7 x; Q! V( zDeploying mgr service with default placement...
: U/ v8 }( R8 J; i- VDeploying crash service with default placement...
9 @) S" k2 e! g' u9 pEnabling mgr prometheus module...
2 C  F, F" B2 N0 c+ YDeploying prometheus service with default placement...
, t6 ^( C- q5 X9 O  D! hDeploying grafana service with default placement...
* |3 ~' s% t: A) b  h' o& W/ xDeploying node-exporter service with default placement...$ K3 b; ?/ L) C5 K; F( t" k0 d/ W
Deploying alertmanager service with default placement...5 _% i' `3 z  s& c! ?
Enabling the dashboard module...' e% H  ?' R, ]9 H  s1 ]. P: j
Waiting for the mgr to restart...
, H6 l$ v- H* s3 ~( @) PWaiting for Mgr epoch 13...
/ s3 d+ W2 i  a# h9 A% ZMgr epoch 13 is available
% F) S) E2 n, Y/ ^7 X0 |! a2 LGenerating a dashboard self-signed certificate...
) B( B: m& h. a) Q$ D( W" k4 b$ OCreating initial admin user...8 `0 o9 @" E! L" x, u
Fetching dashboard port number...+ J; E: M4 t4 V1 D8 H9 t
Ceph Dashboard is now available at:, j) U, s  c1 N# k# f1 J

; t7 ?* f: f' U' ]! c5 @             URL: https://master0:8443/
( _2 R& }2 B( L% p+ u! c7 n            User: admin
( i+ u  y% |2 t& j- Z2 r        Password: vym1bdeajd
7 K- W4 l5 A7 }, j3 f
2 F, z& X9 b% N3 Q& `( R) t/ cYou can access the Ceph CLI with:6 c" |8 G9 Q* r2 K/ u
4 f$ I4 p1 D% |2 b$ n* ~
        sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring' Y9 n- c6 ]2 \

) J$ ?, Q! f% R9 l- APlease consider enabling telemetry to help improve Ceph:
7 w  ^# H; q8 a9 R. n* G2 R9 }  Y, x& f* e4 \
        ceph telemetry on
9 D- N, H( c0 W0 i) h
* J. ?0 i: Q( K9 L4 w7 n& RFor more information see:3 O( h( J9 c$ e7 Y4 A6 b% [

" S' [, D8 n+ p2 u  d' ~        https://docs.ceph.com/docs/master/mgr/telemetry/
; X0 d& s1 d4 ?, |3 C$ P6 S* i. f( n% ^' f2 k% [7 z8 u$ Q* a
Bootstrap complete.  p: j6 M, L4 t' |& F4 D1 e
; b8 b$ e7 X) y& A# v

) z/ }. `, h; L# N4 I9 h1 p在命令执行过程中,有如下提示:8 S) I- R6 t# s$ y; }* m5 d
bash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at :
8 b5 u8 e* d0 X( i2 \6 j! X" y             URL: https://master0:8443/
3 x9 O6 t5 r& Q8 V+ k: A            User: admin, i6 i8 t! Q7 h+ O- I3 H
        Password: vymdeajd1 H$ B9 z2 S: X0 t

  m* Q( {1 o# d按照提示,在浏览器上面可以访问:* i% J) m- |$ ]: C
) U1 f; r" C& Q* w7 W: K
进入到管理页面后,如下:
/ E% S$ k& {) Z4 F# X; X+ C, n
2 y9 k& ], ?9 ~3 A% ^$ a2 n1 z参照安装文档,该命令将:$ P; `# u: B/ P1 T
在本地主机上为新集群创建一个监视器和管理器守护程序。
0 v$ S* {: _0 O1 q! \3 b5 B- F- P, m4 k1 U7 P) ?3 T! @2 ^
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。9 u% {: ~5 Z2 e& F' B
将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.' K" n) p  v' L+ _' F
7 H% w/ n7 ~7 C& a3 j+ D
client.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.
# B/ }8 @. }8 y+ z& l将公钥的副本写入 /etc/ceph/ceph.pub.
1 m# x' y; Y. ?/ {启用 CEPH CLI(必须)
4 S6 w  Y' B; a8 q: J: y继续在引导机器上面执行如下命令,即可开启ceph shell client
& f$ D( C  n; A" T1 V% |注意:后面的ceph命令,均需在ceph shell环境下执行% w( @: t6 v. ^& T
bash 体验AI代码助手 代码解读复制代码
9 Q- V8 b3 M# ^: {- H3 x1 Q* T# O$ _3 R% ^5 x2 z
[root@master0 ~]# cephadm shell, s, Q6 B$ \  x3 m3 Z5 m* J
Inferring fsid e3386564-bb02-11ec-af56-525400299ff7
5 L9 D# ?, X: x+ @! BInferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config
* h; u+ J: `- W5 S9 j; W3 VUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
; f: a9 |: {, J6 e: h+ F9 n7 r; G; Q3 a2 o! u9 n; K( \! p2 b
[ceph: root@master0 /]# ceph -v
* a+ x) t" o" Kceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)' u; |5 D1 S' N8 [% f
; G0 m  q* R! I2 |. M0 {) e9 h
! ]. t3 a  \% Q0 N6 A5 r
[ceph: root@master0 /]# ceph -s  D" w4 D$ ^2 ^9 O2 ~9 }8 f% T! q6 |
  cluster:
$ C% z+ w) ]5 a0 ]' W5 f    id:     e3386564-bb02-11ec-af56-525400299ff7" s# [8 d7 J1 r$ \4 s( i
    health: HEALTH_WARN
6 V4 P/ E% r" o7 \# v& X( M            OSD count 0 < osd_pool_default_size 3" M0 w' Y3 ^% l1 ?+ N: x

& I2 N. |: ?1 a5 |$ M7 Z( L  services:3 d- U  b! @8 w  E$ z3 D
    mon: 1 daemons, quorum master0 (age 48m)3 ~; P' N  F) _% k
    mgr: master0.ojikws(active, since 47m)
3 x' ^$ p4 v1 I1 u) }) x9 O; ]    osd: 0 osds: 0 up, 0 in: @, z* f  d9 `& q+ {

( N2 f1 L3 ^' ], I8 m% p3 Y, R8 |  data:! x0 U) g8 |, O9 e5 u
    pools:   0 pools, 0 pgs" z" O( @) G- ~# z, I8 n, \0 O
    objects: 0 objects, 0 B
# t- X8 u( P+ h2 H3 Q* Y* G5 B; l    usage:   0 B used, 0 B / 0 B avail- T0 b' n& q  o, r
    pgs:$ }- }$ I0 u; Q7 {" {
0 N2 h$ t5 v0 `* V- Y
将主机添加到集群. O/ e/ S: K; ^, P( O

& F5 P, O- y) b# d3 L' k在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥# w2 ?$ Y8 j+ h$ ~3 K# K
8 T: V1 r# [; Q* z
bash 体验AI代码助手 代码解读复制代码
2 s, k* a5 M( _" C% [( z2 b
) i0 Q0 t: m* F[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master1
! t3 E& R+ o; b- I& B1 M/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
; p# y+ s# A/ HThe authenticity of host 'master1 (12.70.10.162)' can't be established.5 i1 t( V4 g7 V; B  N
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.- |) _" J! S5 u  J3 S; e/ u9 |4 r
ECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.
9 K* Q! ~3 X$ L, _) W7 k( xAre you sure you want to continue connecting (yes/no)? yes
9 K& `& v6 ]7 N2 H3 e; S. xroot@master1's password:; S! d+ H, }6 f8 t* q0 @

3 [7 O# Q7 z9 W$ F( f5 \" h9 g2 rNumber of key(s) added: 11 K$ m" ^0 C5 I3 D* K5 g- H
/ X# C9 m, n5 I; x! p  {
Now try logging into the machine, with:   "ssh 'root@master1'"6 n$ C! F2 B0 I# |
and check to make sure that only the key(s) you wanted were added.) J& p8 B" T+ d( ]! Z
* i  Z: X' `) f8 p
[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2+ Y! ]: @9 U# A6 O; R2 F& f
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
+ l1 Y  P& k6 X6 `The authenticity of host 'master2 (12.70.10.163)' can't be established.( n$ P! x' n( r' P& F$ ]
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
! i( M. ?  Z4 u8 r& u% m1 Z' YECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.8 \4 v- A1 A) x' L( `! i
Are you sure you want to continue connecting (yes/no)? yes
  ]* O4 U# u' x9 droot@master2's password:
6 k7 F8 d1 Q% f# T( `$ t% o9 k! B  n& E
Number of key(s) added: 1
* A7 z5 ^% _* b; ~: C1 }" ^: ^0 ?% J: v, [3 V1 ]
Now try logging into the machine, with:   "ssh 'root@master2'"! S6 G4 V! w# T! ?; F& S: P
and check to make sure that only the key(s) you wanted were added.
$ R8 g  S2 K- T
% X7 ]& \. S8 ^# Y; A这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了3 G1 f7 @1 ^1 k; Y: P" W; [
添加机器到集群:
9 l% w" u/ |) H: V) g. F9 Wbash 体验AI代码助手 代码解读复制代码* f7 M  @, N; ?3 k! U% B# d

) Q+ v8 P4 A& p. `+ k[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.1627 [5 g9 f) u' I9 q+ X
Added host 'ceph2'. n7 g0 C' M" V
[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.1639 O' n9 v! g% P, X
Added host 'ceph3'
8 N/ D' q. }% a) d, F[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164( p3 w1 r3 e8 ]0 `  Z  K
Added host 'ceph4'
; X; P7 {1 R9 ?0 z& P, U4 X( D[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165
6 B5 \1 D) o2 r, `& |Added host 'ceph5'
% d; K  H7 e7 k[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166; }# v2 }; a/ o! r# r% t
Added host 'ceph6'
- R; o/ G& c, q, v$ w
$ e- D8 X+ e9 n' o" o% H1 i1 x2 B$ D3 X. Q
添加多个监控器6 t5 b' \9 y$ l7 O+ y3 n
配置监视器子网:6 E+ }  F5 ]/ F; m4 b
bash 体验AI代码助手 代码解读复制代码
+ `7 |; V# U" I1 P[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
' P0 p+ v8 L% y; e) ?$ K[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
: N+ n. M/ H. Q$ s
& y# t; T+ e5 x6 [' t5 x) E! v##要启动三台监视器,需要调整监视器数量:
) E) z, T* `/ [1 {8 e) n[ceph: root@master0 /]# ceph orch apply mon 3 % L( U( j5 p/ B! V! s5 Q/ b8 v
Scheduled mon update...
# P7 ^9 ]. s0 |% ]8 ^5 K. i3 E" ^+ Q' C6 ]9 H  U/ w8 h: Z( m) T4 p
按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序
8 L7 \! ]6 X7 u( E% ?3 K2 h; Q在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。
' Z$ q0 `4 k8 _. xbash 体验AI代码助手 代码解读复制代码
5 t- @8 ?- k3 F+ v6 m, }0 `, j3 i2 \
9 @4 s7 d: M  O2 N. G$ N[ceph: root@master0 /]# ceph orch apply mon master0,master1,master2
# z* y% O7 D# c; u' a% p/ xScheduled mon update...+ L7 P/ m( K0 y$ y7 s
##加标签
9 H9 w* C+ C) @; [- ?6 A[ceph: root@master0 /]# ceph orch host label add master0 mon
; ]" k0 y" e  OAdded label mon to host master0" ]( _* L; E1 J; L- [
[ceph: root@master0 /]# ceph orch host label add master1 mon
0 j+ j6 D, m+ M7 |4 RAdded label mon to host master1) r, F! S( I" f/ X% T& O2 R
[ceph: root@master0 /]# ceph orch host label add master2 mon
8 w9 w# Z, g, P3 _  _Added label mon to host master2
  b5 {% ^/ V8 k& u; G3 P
- n' J' p* b' E, Q/ r8 h[ceph: root@master0 /]# ceph orch host ls
4 H& ]( Y9 s; b2 m/ Y; AHOST     ADDR     LABELS  STATUS
* o4 O8 ?  T; n' B3 F+ {4 Q7 nmaster0  master0  mon
- ^& S7 \( j' m! `" w4 d4 pmaster1  master1  mon
1 O+ f  }* M0 U! Y& U+ `master2  master2  mon
( s' j0 u9 Y9 t1 z  c8 N' J/ k5 E3 n3 m; W9 p( |) o( t6 X
[ceph: root@master0 /]# ceph -s2 A4 m- D" M. v" t0 P
  cluster:
* n! U' }# R; V1 `- t; u, ~    id:     e3386564-bb02-11ec-af56-525400299ff7
" `* @. }7 L1 W2 g    health: HEALTH_WARN8 u4 J5 M2 M5 W- ]0 y0 Z# \
            OSD count 0 < osd_pool_default_size 3
+ I" {! h* K! y2 h% o) u
1 p1 c7 r, M' e$ \1 q  services:
' u5 P" m1 Y( }* w    mon: 3 daemons, quorum master0,master1,master2 (age 88s)" x- U& B# }6 E. L- y/ K  e
    mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld. A6 P1 d7 d3 W5 a
    osd: 0 osds: 0 up, 0 in
# f4 |" O9 }5 S9 p! O/ M& M  l
- j% w9 K( J$ a# N$ C  data:
* m( w: X1 h: b/ D    pools:   0 pools, 0 pgs
, ?3 I4 W' I% D    objects: 0 objects, 0 B" N* C/ \( z. F* b% u$ _
    usage:   0 B used, 0 B / 0 B avail0 z) j/ T0 x7 Q- o1 l* t' C0 i
    pgs:+ D2 O# \6 {- X4 W$ j% Q* Y$ a
- Y1 E; {! n) @8 E9 B; {7 H
加入ODS# g; \0 a! f5 w, ]9 s# Z8 i. I
可以看到集群三台机器上面,一共挂载了6块磁盘:
' \: x, L. }" b6 r5 U/ Vbash 体验AI代码助手 代码解读复制代码
9 X+ V  D0 h0 t/ f
$ Q- H! N, Z5 T0 N6 _0 |0 i[ceph: root@master0 /]# ceph orch device ls
1 T' g5 Y( L9 E7 QHostname  Path      Type  Serial  Size   Health   Ident  Fault  Available4 k4 g- L" f0 G( @& @3 G& K0 _0 F
master0   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
, q" h) q7 R7 R5 T1 amaster0   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes
$ J1 X  s# t) w  V: R! Qmaster1   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
/ u% k( w* E/ H( f( Gmaster1   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes
( c$ b- z4 G% K  J7 smaster2   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes2 S- s! H% }9 l; y" k. K. L
master2   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes$ l' y% R2 V3 D1 i# f, i9 R

5 l6 R9 _. u9 t  _  [当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):! O* x& f# `% c" H
bash 体验AI代码助手 代码解读复制代码: A  x$ A8 u% \, [/ q3 p  D
8 @# c& W, C9 C- F" |
[ceph: root@master0 /]# lsblk. ]" C5 G8 I. D( c) v% y6 b1 K
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT8 J( \% M, h1 R  {
sr0              11:0    1  1024M  0 rom, N$ g' z4 D! R" p  P
vda             252:0    0   500G  0 disk
% i3 Q9 I8 i9 @, @4 c$ ~$ {6 e|-vda1          252:1    0     1G  0 part /rootfs/boot
- Q# R$ `) c% N! V7 w" \! u`-vda2          252:2    0   499G  0 part$ s# g# X+ z& M+ k. L0 h
  |-centos-root 253:0    0    50G  0 lvm  /rootfs
7 Q' \; I: Z( |% H  F* i- q& t. W  |-centos-swap 253:1    0   7.9G  0 lvm
" x' {) q( {/ y) f  `-centos-home 253:2    0 441.1G  0 lvm  /rootfs/home5 f( l$ H3 i! ?, `
vdb             252:16   0   500G  0 disk
8 d8 z7 Q! Z5 _9 I! K7 uvdc             252:32   0   500G  0 disk/ d9 ^: n' c" V  x4 e7 f

; a, H+ ]( H9 N& p! A; h按照官网说法:设备满足* i( j* c% U+ Z8 n
如果满足以下所有条件,则认为存储设备可用:
: h5 K4 n6 A" \2 M- G5 G- H; v/ z2 n
设备不能有分区。
4 b  X5 ?! J; T; G设备不得具有任何 LVM 状态。2 h' w3 Q) ?4 M5 }) F% l
不得安装该设备。
+ Q. n, Q8 s4 t, f设备不得包含文件系统。
* R4 D# I) f- C设备不得包含 Ceph BlueStore OSD。
* x: Y" n  ^: V; }! i设备必须大于 5 GB。
- Z5 P+ i. m6 R; i( U! W
/ `; r  O/ M$ x$ `( f- J( tCeph将 拒绝在不可用的设备上配置 OSD1 K! I: L" j! C% V; N% }( k
可以使用如下命令,将所有可用的磁盘添加到ceph集群中:
( H: N  v) |1 k" Ebash 体验AI代码助手 代码解读复制代码
+ V) P% m9 D0 Z" `7 F- C' x; U3 {0 `/ N3 ^2 J" T, I! J- Y, L
[ceph: root@master0 /]# ceph orch apply osd --all-available-devices* A7 y1 f% ~0 D, d! d
Scheduled osd.all-available-devices update...
8 X5 S5 f, K# P* Q: n9 O( Y- B9 P[ceph: root@master0 /]# ceph -s; S8 ^! }( H6 o3 B5 l, i5 U
  cluster:
8 j  q, s5 P4 s% A3 A9 x7 o( C    id:     e3386564-bb02-11ec-af56-525400299ff7! Y  l( [6 X. S# E
    health: HEALTH_OK
, l: J6 v. Q( f5 D/ E1 T0 b. U5 K6 p9 u# m' P2 ?6 c
  services:; C5 t: y' }0 @4 C/ b
    mon: 3 daemons, quorum master0,master1,master2 (age 12m)8 \) S5 R% q- w, g4 B- T8 ^* q9 z: w
    mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld
- L( `% [- {' W& h    osd: 6 osds: 6 up (since 22s), 6 in (since 22s)# `- W8 o/ }# C5 V: t% g9 j

; L& @6 g, G" o% f* @8 }  data:6 P% ~$ N; O) h
    pools:   1 pools, 1 pgs7 c( y. H! Q# d8 @% x: c, n
    objects: 0 objects, 0 B: K' F" \# H6 ?9 u4 {. y
    usage:   6.0 GiB used, 2.9 TiB / 2.9 TiB avail
* s5 P8 j( e+ K! R) `0 ?1 s% g8 k/ Y. c    pgs:     1 active+clean# E" O0 c% J. I, g; |( i9 q5 f
- x  ?: W+ R7 D3 ?
也可以单独加入:7 n  X5 I! }9 X/ t
bash 体验AI代码助手 代码解读复制代码& Y% y, Y; E4 D3 T4 O5 o9 J2 F; z
- W& Z' ]8 ]5 n8 G5 c) C  @" I
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb
! S' F3 |9 q6 v6 ^1 u5 S[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc
! ~% Q. t$ d, F( c- t[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb
. m; e) b# h! f% i/ e# V[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc
; r7 f1 d5 j% E[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb
  y% B  n+ @2 w/ `[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc
# I# h, L0 r4 [. {6 Y4 x/ }
) E% m9 Y1 x$ c, R5 }在前端看到:
0 F. K: z- Q* F1 R8 f3 u
+ \" n, p5 C7 H2 a
0 Y* E8 G- d2 z0 ^- H2 r/ X- w挂载块设备' {9 V/ }$ W+ \9 u# o
bash 体验AI代码助手 代码解读复制代码" v8 o8 R% {7 p, E; ?
8 T8 l2 `! ?6 e. Y5 j0 x
[root@ceph101 tmp]# ceph osd pool create test_rbd 32
* j0 c8 v0 @) g  ]. Zpool 'test_rbd' created
+ K' R/ V1 q2 K, m1 w8 c4 c( L[root@ceph101 tmp]# ceph df5 Y' W; ?- k; x" A- G+ i1 C; C
--- RAW STORAGE ---; |( s- b% e, i% A* u) f; z
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED( {- {5 G  |2 ]/ A; c  I
hdd    5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.22- Y6 e% {7 ?8 L
TOTAL  5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.220 O0 U: ?3 O$ ~% @7 o9 ?  U+ z: f

1 {) J) I# w. m2 i6 ?0 |--- POOLS ---. u: e3 f- P2 d
POOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL
0 y2 p8 V5 _1 G: {; kdevice_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB
  R* N6 h' u6 U5 J' O9 W% A% q.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB# c0 @# j* Q8 T
zone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB
" s2 h% ^5 w: I( F/ Ozone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB9 y3 E) E% ~$ c9 F6 v# P' s
zone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB$ E/ [* E, |. [$ N7 ]; R
zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB9 V. l( z4 p, [( Z5 X! V
zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB$ a) l# M7 ?8 S4 V/ G/ U" C
zone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
0 _1 B. I7 Y. y. c1 ~cp_pool                    42   32  1.4 MiB        2  4.4 MiB      0    1.9 TiB
1 |1 n9 F* c& P' F6 o$ l% R7 [test_rbd                   43   32      0 B        0      0 B      0    1.9 TiB& k0 P, }# Y) r# ]0 u
##创建镜像
  ^6 h2 Q* v- z. s- X' B6 N9 ~% {4 ?# s$ o+ g/ J
[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd) _2 k1 h: R2 V4 ]' M

* e/ X4 R2 U# [6 J' y7 a! o7 y/ E( s[root@ceph101 tmp]# rbd -p test_rbd ls& z# B- T: q( {
test_rbd_image_1
- e9 q  o$ y' \% T7 o: ]8 Q0 q) H# d& m& W! H0 N
##检看一个RBD镜像的详细信息
+ @( W" h; X/ p% h! D[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd% E! F) |5 N$ H& j# a, i9 s
rbd image 'test_rbd_image_1':9 Y( c0 y, d8 w, [) s, Z2 {! C
        size 10 GiB in 2560 objects3 S* _0 Z6 i% S2 Y" J; A
        order 22 (4 MiB objects)" w, \. n8 a3 z: d; a3 h7 g8 A0 b
        snapshot_count: 0
: o& t3 X) S& r8 L5 K) t        id: 2836b2f53ea86( Y* m; m( C0 D6 D0 N+ g
        block_name_prefix: rbd_data.2836b2f53ea86
8 `" q; z- R# B. \5 e  n6 \6 v        format: 2
1 q0 E. x' p6 Y& ^2 t& S        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling& z% A& @& J/ K& q; O2 h! P. V$ m
        op_features:
5 |& k6 W6 `' d7 h1 b        flags:( O& ?( _' I, ^8 N- V
        create_timestamp: Tue May 10 10:38:16 2022) ^7 e8 Z# @$ z6 f9 }
        access_timestamp: Tue May 10 10:38:16 2022( R- _7 L, _9 P$ f/ j
        modify_timestamp: Tue May 10 10:38:16 2022
: {9 ^9 ?( k6 }1 `        journal: 2836b2f53ea86$ e; R4 \3 ~; ?' ~/ s3 G
        mirroring state: disabled4 k* h! {# Y1 x6 V1 `, f( l
' S' j& J7 U$ G; p6 R. P9 G1 _4 y

$ C: T4 t( |; {& T[root@ceph101 tmp]# rbd pool stats -p test_rbd4 L" ?# |. H8 z; s6 f+ i$ Q
Total Images: 1
3 n  a: S7 t4 L* ^, O: mTotal Snapshots: 0
; h. K  y& }# e/ ]+ C1 h; s* GProvisioned Size: 10 GiB* ^, M9 s" {" {# k' f
[root@ceph101 tmp]# rbd showmapped
+ T6 F+ V& p: u9 Q" T/ kid  pool     namespace  image   snap  device4 N7 C6 S: q2 A! X8 e( j
0   cp_pool             image2  -     /dev/rbd08 V' z4 X2 X) l/ l

; {: J2 X( X, `: T- r( g& I% d! G[root@ceph101 test_rbd]# umount -f /dev/rbd0& j! a' F+ s# Z0 K3 Y7 M1 H- ?/ J
#或者" z4 u2 c5 ^: Z- w! H

- ^) K6 I" {" B& {- Q[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd0
2 F9 l! g! E( G' R/ d6 k##然后将pool关联应用% x* }& {$ {2 _" J% E# `

/ ~7 w  _9 Q7 c4 q3 ^" @[root@ceph101 ~]# ceph osd pool application enable  test_rbd rbd
' W" r2 ~# z. Zenabled application 'rbd' on pool 'test_rbd'. Q+ C7 a5 r' |. c
[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1
+ W/ z# k" J5 T# }( ^. [' [  a: rrbd: sysfs write failed* [; G( q! o3 @; {- i
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling".
; |+ b7 t% b0 }" rIn some cases useful info is found in syslog - try "dmesg | tail".. U5 p& b8 g3 e( }
rbd: map failed: (6) No such device or address
1 V9 n, J- C7 c1 t6 f0 M' i: M9 W9 h( O: T3 k4 ~
[root@ceph101 ~]# uname -r
. D* H2 {4 b# \" d& @5.17.6-1.el7.elrepo.x86_642 j& P( x: b2 y% H7 R1 d) u
[root@ceph101 ~]# dmesg | tail
) y4 r* H$ G, f; i2 V  F. S/ y[    9.843030] random: crng init done2 b- b7 q6 x: W* h
[    9.843034] random: 7 urandom warning(s) missed due to ratelimiting* S0 U. N9 T  L
[   10.669178] Bridge firewalling registered
  |8 r! T. i3 @0 M[   22.239147] process '/bin/ip' started with executable stack7 l3 P, M, ]1 V( J  a* v6 p
[ 8185.140070] Key type ceph registered
$ S! o+ r, b2 l/ K' E) K, e[ 8185.140395] libceph: loaded (mon/osd proto 15/24). N/ J. |$ G  x8 v: Z) W+ q& \
[ 8185.141923] rbd: loaded (major 251)
" R3 m- I5 x9 c8 c" |[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established8 r& G# h- K3 A# L1 R) y$ v
[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f) N/ j1 A. E9 R
[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40        ) X  L2 P  E* q7 T4 \$ U
##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling
' d! y" s. J' @2 D6 _#layering: 支持分层**(0次方)**5 }1 G; y) S3 O
#striping: 支持条带化 v2 **(1次方)**+ ]4 H. _: w, S
#exclusive-lock: 支持独占锁 **(2次方)**: \1 j: l6 ], O' o+ i
#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**$ p/ N7 P: P9 N) m7 h% h; ]# K
#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**
! {# S& d' W, R& x3 g9 t#deep-flatten: 支持快照扁平化操作**(5次方)**
0 g' A1 p+ j$ _) E2 l! J#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
% ?; N' j9 c& r/ Y: }7 C[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling
6 a& H/ g" S. D0 g9 ]0 Q[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1
& j1 S1 P! ~: o" o  U- S/dev/rbd0' E& J! e+ [+ F6 `" Z( v5 n- F
#lsblk 查看磁盘6 M  a0 h* a; a1 s+ N

  o, v$ j1 v$ M, ~2 e[root@ceph101 test_rbd]# rbd showmapped+ N& I; A2 Y7 y- e- C9 n
id  pool      namespace  image             snap  device
9 \1 h4 D* i: U  a2 L9 y2 c0   test_rbd             test_rbd_image_1  -     /dev/rbd0* I' }! A7 S: ~
[root@ceph101 ~]# lsblk
. |! X3 {4 L: f- ]' J8 \NAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
- U) k1 c  |1 A1 Brbd0                                                                                                  251:0    0    10G  0 disk! t! p) v' s* ]$ r2 o9 i
vdb                                                                                                   252:16   0   500G  0 disk
/ V5 x# N2 n4 w$ @0 ]- V% \* A  B└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm
! [; ], W3 G5 k' W" l) t; jsr0                                                                                                    11:0    1  1024M  0 rom: y# y% Q6 o8 a5 j" y. d- j& L! w1 c
vdc                                                                                                   252:32   0   500G  0 disk
1 E5 ~1 K+ m8 o5 D: h( \+ W- ]└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm9 ]8 ?! g& D' k( n8 g+ f% q
vda                                                                                                   252:0    0   500G  0 disk
7 n% A0 X9 W1 `. m├─vda2                                                                                                252:2    0   499G  0 part
9 i8 ]) [) S- m8 B│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm2 j* s5 [# e1 E! X, J, K
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home& z5 a: k. a' c8 k% C
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
2 j/ e+ D! o, Y. J└─vda1                                                                                                252:1    0     1G  0 part /boot
5 U$ w5 a8 p& m! o2 D* a# F% k& @% T6 {. Q) I* X* ~
4 y; _- C8 |( l3 d- J$ Z
# 格式化磁盘
" g9 ^, p- d( k7 p( o- Y3 i8 I. ^0 p& |9 E: V# u/ q
[root@ceph101 ~]# mkfs.ext4  /dev/rbd0: {' N# N, R6 r/ k/ D% Y
mke2fs 1.42.9 (28-Dec-2013)
$ ]  u6 D5 V1 SDiscarding device blocks: 完成2 U& f- d% o9 r3 B; y. t1 J5 q0 q
文件系统标签=
/ v& i/ i7 R7 w9 dOS type: Linux
' G6 k' n# R  m块大小=4096 (log=2)
* d7 E1 b, m8 [+ z- M* U分块大小=4096 (log=2)
2 l" O% Q" u5 AStride=16 blocks, Stripe width=16 blocks4 n- n) o+ S3 K% g6 n4 J6 r
655360 inodes, 2621440 blocks4 w! P9 }* U, p, b' P, ]: b
131072 blocks (5.00%) reserved for the super user
. C) o& `$ ~% j第一个数据块=05 s- V! q2 Y% T- y" V( @
Maximum filesystem blocks=2151677952
+ _4 I; {* X8 [" u3 U80 block groups7 z$ a, g- _/ L+ l( K  l
32768 blocks per group, 32768 fragments per group
2 ]9 ~1 ~9 Y* ^: g' D2 j8192 inodes per group
& W0 y+ H% i2 hSuperblock backups stored on blocks:5 g1 N" j$ ?' k9 [  u# Y% E" A
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
4 Q0 }- i5 h( r! G1 ]
: z/ G$ B3 T7 A4 [, t3 ^4 HAllocating group tables: 完成
$ M* ^# k) E. d5 u# o8 h( Z正在写入inode表: 完成
6 k2 u, t7 S/ f; dCreating journal (32768 blocks): 完成" p, D! ^0 [& Y: W3 q
Writing superblocks and filesystem accounting information:! u5 \) \) k, O8 R0 c& O
完成
9 |5 A$ c! ]( L
3 D1 u+ N4 K; C3 g3 }: {- L##创建挂载目录1 G$ ?* E5 ]7 K) H  j
[root@ceph101 ~]# mkdir test_rbd/
$ y' @# e+ H0 ?* H#挂载
  e$ {/ }7 d# l4 ?9 Y' C[root@ceph101 ~]#  mount /dev/rbd0 /root/test_rbd
/ N' G7 \, K% g% J/ l[root@ceph101 ~]# lsblk
& u3 Q9 z0 F, M5 D0 KNAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT' _) D) m0 m4 w; ]
rbd0                                                                                                  251:0    0    10G  0 disk /root/test_rbd
& ^$ q! x4 t# R  L0 \2 ^vdb                                                                                                   252:16   0   500G  0 disk
: I8 x' q9 _  p$ }9 B# B% _└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm
' P' n4 A5 q+ Z1 P0 x" J) {sr0                                                                                                    11:0    1  1024M  0 rom1 a+ ]- t# ~0 L! r8 K$ u2 y; n% T
vdc                                                                                                   252:32   0   500G  0 disk* z- M% a0 u. r
└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm3 j! [: l4 a; [# M: R
vda                                                                                                   252:0    0   500G  0 disk
- C# s# L: J7 ]; a9 e$ c├─vda2                                                                                                252:2    0   499G  0 part& W7 r$ q6 ]; Y% J3 D
│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm: \0 \$ A: B$ Q
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home* \. N5 C* j4 f$ V' s' U
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
4 x$ b# X: E0 P9 I& x. q- ~└─vda1                                                                                                252:1    0     1G  0 part /boot& k3 s# H% |7 m. Q" }5 V* n
# [2 v) v/ U1 q( t4 g
#写入小说文档到挂载的目录  i- G3 x; a1 o
[root@ceph101 ~]# mv bcsj.txt test_rbd/- j9 L3 u$ D. P/ r- Q
[root@ceph101 ~]# md5sum test_rbd/bcsj.txt
$ Y1 D, o3 I1 e/ H0d615ccd0e1c55f62002134f5cac81cc  test_rbd/bcsj.txt
* ]  L( x. ]5 V  q$ R$ s4 k[root@ceph101 ~]# df -lh0 {% E# |; N5 k' x
文件系统                 容量  已用  可用 已用% 挂载点0 M3 s$ v& g' S: x  Q+ i
/dev/rbd0                9.7G   15M  9.2G    1% /root/test_rbd* U2 ]( J/ ^. T7 n4 M  \' F
4 k# C# u9 x* y  k) _3 x
[root@ceph101 ~]# ceph df' O+ }2 [) l. F1 {8 l' m
--- RAW STORAGE ---
6 p+ F) Q* {( _6 R9 j7 r( rCLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED3 z% {' O5 B% t$ q& v8 x
hdd    5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23
# I5 H, ?6 C( x% HTOTAL  5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23, j2 f# T+ a5 k+ z, ?7 Q3 \" a% h4 V

7 v3 k. u; s- y5 {- O& F--- POOLS ---
1 r9 o$ H4 [/ v+ ZPOOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL
. L. G- |2 n$ fdevice_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB/ `) Z8 z. ?: e4 r0 ^
.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB
  H. u5 R" v- `1 t+ S1 m& Yzone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB
2 R+ }: f  ~1 U7 w5 jzone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB
! Q/ Z2 w4 t- U% M+ [zone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB! |" }4 v) P0 k. n3 e0 m/ O
zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB. s- h. _3 A5 ^, J# |' [
zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB# t. ~9 V% s$ r6 V5 j7 A
zone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
/ H: L9 w0 t% J, a! ~; _2 `# ^cp_pool                    42   32  2.2 MiB        2  7.0 MiB      0    1.9 TiB3 V& M$ o7 r" j9 Y6 ?8 b
test_rbd                   43   32  148 MiB       57  446 MiB      0    1.9 TiB6 Z$ d; g6 Y& o, Y

1 k; [" Z+ U9 T- ]- N& H- {) X, a' Y, ]  V+ c5 ^
对象网关: b" w- U$ U/ a+ E: Q' m' w& ~
bash 体验AI代码助手 代码解读复制代码1 w) l# V; S# H4 M: j

2 T" `  C4 K8 nyum install ceph-radosgw -y
! u% O5 E* b5 i  f( Z! C' U* o: C  @+ [! I+ s! R2 e
[ceph: root@ceph1 ceph]# radosgw-admin user create --uid='s3_admin' --display-name='s3_rgw_admin' --access-key='s3_rgw_admin_access_key' --secret-key='s3_rgw_admin_secret_key'
# n: D- Y# L6 b+ }3 c* o- Y{
+ S6 s: b* G9 `4 P3 h, m! y, S    "user_id": "s3_admin",4 v) X* H9 _7 h6 d2 S
    "display_name": "s3_rgw_admin",
0 e$ D! h8 T* L' }8 m    "email": "",! l& C8 r8 u& k. B
    "suspended": 0,, m( @  Z, ~  a! L
    "max_buckets": 1000,
8 }2 C9 F, O6 u% c    "subusers": [],
, w/ @& v9 F" ]1 a  C- t8 o    "keys": [9 u1 R' K& b( ?# j4 h5 N3 G
        {
% ^2 g  D7 t6 u            "user": "s3_admin",/ z% ^) w3 ^# j; H/ r
            "access_key": "s3_rgw_admin_access_key",
+ e! y9 W) O' U9 y6 g. i            "secret_key": "s3_rgw_admin_secret_key"
. i3 |) _6 l8 v        }
! P9 e" n  X! R! J) c    ],- f+ ^; I: u  l+ r* T# S' F4 F: C
    "swift_keys": [],
" v/ n1 a& `* t# l$ V2 P    "caps": [],
0 T2 U% X+ w, h3 B9 R    "op_mask": "read, write, delete",- q% N2 X6 A( f5 s( s6 h  X1 E
    "default_placement": "",8 c- R9 t9 }$ \2 H3 h) E9 V% E, [( @
    "default_storage_class": "",
5 N( K& U2 Q1 s    "placement_tags": [],
% i: I- i# b2 e( i, Z1 {    "bucket_quota": {
; I$ G: O9 Z2 p* G- Q        "enabled": false,$ K! S. U! t' `$ z# p+ ~' |2 f
        "check_on_raw": false,
  n1 C3 G3 w  K# u, N        "max_size": -1,4 X; F- _2 y# P. }" z) P& X  w6 w
        "max_size_kb": 0,
$ A' p( {8 K9 r' g! t        "max_objects": -15 p1 d4 t2 a, x: q. t* K
    },7 v! Q3 O6 ], x) q
    "user_quota": {
% U& n; D6 K$ Q  v! `        "enabled": false,5 s6 s; \( a6 X2 f% ?
        "check_on_raw": false,
! t5 u/ Q( O3 Y        "max_size": -1,
0 O5 A/ }/ l2 g0 H" _7 j        "max_size_kb": 0,
' K4 V* m1 T# _) r3 Q/ r        "max_objects": -1- h' F$ A5 e- t) ]4 a5 _
    },
+ |; [; y- R9 H+ n8 W. ?0 O    "temp_url_keys": [],' Z/ ~' X4 k; V) C, ?) w
    "type": "rgw",
  `: v- z9 P" i: \: I! q% {  A; z    "mfa_ids": []
1 q4 y8 P' a# C9 M( ]1 L- \}
# R! z9 Y( Z' I4 E* A8 R, W; E
" U3 J6 m, w. ]# H5 z[ceph: root@ceph1 ceph]#  A; q9 f' m7 @3 l4 P
[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'' L7 C. ^( Y! {* e; }+ }  s
{3 [: n; k6 X4 s2 x
    "user_id": "s3_admin",
, }- i8 }8 j' c7 B" e1 U/ h    "display_name": "s3_rgw_admin",
! d1 y+ y! O! j7 y+ o    "email": "",' C. d6 f* _& e! e% w+ Q' n
    "suspended": 0,
% G! S0 ~% G$ F, n* p8 X    "max_buckets": 1000,
+ y" E# \4 F1 P' B, z    "subusers": [],$ V+ f7 ~% l2 a" B! E$ k* |
    "keys": [7 J! Y% W2 S: {2 ]( T+ ~8 o
        {
2 l  C' W1 T, ]. e* _            "user": "s3_admin",
+ [0 d  g+ R+ O/ A0 Y' v( V            "access_key": "s3_rgw_admin_access_key",6 V' P1 f7 t& W+ [
            "secret_key": "s3_rgw_admin_secret_key"
& {  y- p# [& T! z4 x0 \        }  H+ b- p# B6 @- b( O
    ],
" o+ s& Z# g# f- a/ D2 B    "swift_keys": [],
0 u' S: b4 Q  m8 N    "caps": [],2 I/ J3 X2 G# j1 m3 ~4 Z* z
    "op_mask": "read, write, delete",
+ z" x. P  Z2 g5 y    "default_placement": "",0 ~; g0 x. \8 d' f- n
    "default_storage_class": "",7 H  @1 }5 A. Q8 o  d) T
    "placement_tags": [],
1 }$ m5 T9 c8 O1 ^- m: v    "bucket_quota": {$ V; F$ }5 R8 p. M; @/ T
        "enabled": false,
! {7 R- k3 `2 I. i: p( N+ |! K1 f* V6 P        "check_on_raw": false,% G: D1 p7 S4 b  [1 K. S2 f8 _5 O% Z
        "max_size": -1,
& Q( Q2 D" s( G        "max_size_kb": 0,
" F; h- _; L0 k* v5 v) l        "max_objects": -1
$ v2 ^, I* v, i0 c1 ~    },
! i0 d6 u7 V* z    "user_quota": {' I( f' A7 {3 M$ M- o
        "enabled": false,
. _" T8 F) A! K        "check_on_raw": false,
3 ~/ x8 C% S9 j# e% W* E, i+ z0 M        "max_size": -1,: R1 {! m. i( z. l2 Q
        "max_size_kb": 0,0 g: `4 _+ u( K2 R3 C. I0 T
        "max_objects": -19 e1 j9 {5 N3 G  r0 \1 e, b( l- ~
    },
9 a+ E$ P6 x' D7 p( [% s. r, a( n$ v    "temp_url_keys": [],
7 h$ p- z4 o' ^4 @. |    "type": "rgw",  D! m* q4 ]/ j' q0 z  ]
    "mfa_ids": []  c) G7 \/ {& R! I
}
6 C( L$ P3 c5 x" ~7 H( o9 K# R6 @( E+ c
ceph tell mon.* injectargs --mon_max_pg_per_osd=100
, w# P2 l3 l) o2 ~# F( L* e) P/ F4 x- s$ ^
#----------------------------------------------------------------------------
( C4 d- Y8 C. s" Z: v5 P) K3 D, ~. A/ ?) Gradosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system4 J1 J' I2 e1 [+ D7 R
radosgw-admin user info --uid rgw_admin --system- r2 U- E6 |0 Q/ K8 V0 |

% J- F* E2 V3 k5 B: f. l8 w2 F' X; }& x4 u' ^4 z5 [/ a  a3 B
radosgw-admin realm create --rgw-realm=realm_1 --default
0 x0 Z: a1 U2 p% Yradosgw-admin zonegroup create \/ @4 h/ @* g4 \4 b) z
--rgw-realm=realm_1 \/ v% A' c% L- i
--rgw-zonegroup=zone_group_1 \
- g+ I/ x1 G7 ]7 ~9 L --endpoints http://ceph101:80 \* g. G+ Y/ W' }' v8 `9 b
--master --default
: t/ O& W  ?) K, J( I) L- ]( ?) N/ ?6 {6 T" K

. w$ q! A. o# s8 [" C- R radosgw-admin zone modify \
; Z# P3 E& N, F' V --rgw-realm=realm_1 \0 ^+ |5 ^2 k/ _. z/ V; I! d
--rgw-zonegroup=zone_group_1 \
4 }! _+ V8 `3 W6 [' Q7 V --rgw-zone=zone_01 \
( q# R5 Y* l: C --endpoints http://ceph101:80 \
% l% J4 C+ N! O% }+ \3 V* _, U --access-key=IAWL6PLNFMNM0SLQNWQ0 \
. ^6 H0 {& v7 s5 A8 S) R& T --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \  \, D3 C" R7 R  \9 l# f) e( K* }- Z# G
--master --default / @5 X5 W! @9 E9 |0 f9 H

! R- e' M% f1 U- j% V radosgw-admin period update --commit' W, h2 E- a& X' s; O
radosgw-admin period update --rgw-realm=realm_1
! i' f0 b! F( I$ k3 w) \6 x* `6 N+ ` ceph orch apply rgw  realm_1  zone_01 --placement="1 ceph101"
% v; S8 n( Z. x& r; y6 V( `! s7 S" I1 b0 c: L. x9 W
上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:
3 j3 K+ U/ R$ K  Fbash 体验AI代码助手 代码解读复制代码
; Q; A. h* {" t" i/ ^8 Y! ~$ @& Z[root@ceph101 ~]# ceph orch ls
7 T* f5 G3 \2 ^+ F5 MNAME                 RUNNING  REFRESHED  AGE  PLACEMENT                                IMAGE NAME                                IMAGE ID
6 Q- [+ O0 c& x# W; jalertmanager             1/1  4m ago     2d   count:1                                  quay.io/prometheus/alertmanager:v0.20.0   0881eb8f169f8 Z1 G/ n6 G/ t4 r4 F' M
crash                    6/6  4m ago     2d   *                                        quay.io/ceph/ceph:v15                     3edede73a7c4
6 r! I- @2 J' ]/ y! rgrafana                  1/1  4m ago     2d   count:1                                  quay.io/ceph/ceph-grafana:6.7.4           557c83e11646
/ z, ?0 S) A7 Y- Bmgr                      2/2  4m ago     2d   count:2                                  quay.io/ceph/ceph:v15                     3edede73a7c4
: x+ ]) f: C4 |mon                      5/5  4m ago     2d   ceph101;ceph102;ceph103;ceph104;ceph105  quay.io/ceph/ceph:v15                     3edede73a7c4
4 b4 Z" j4 u. b' w( W& L3 [, ^" Lnode-exporter            6/6  4m ago     2d   *                                        quay.io/prometheus/node-exporter:v0.18.1  e5a616e4b9cf. N( ^/ g6 A1 K9 ]/ Q* `4 B
osd.None                12/0  4m ago     -    <unmanaged>                              quay.io/ceph/ceph:v15                     3edede73a7c48 K+ j1 r8 D$ y+ a# c& d
prometheus               1/1  4m ago     2d   count:1                                  quay.io/prometheus/prometheus:v2.18.1     de242295e225: P' p% J, b1 z! p1 o( G
rgw.realm_1.zone_01      1/1  4m ago     75m  ceph101;count:1                          quay.io/ceph/ceph:v15                     3edede73a7c4- b; ?8 f( u8 X$ L" E) J
/ h8 o. q0 h. V: Q) d" o

0 l- H5 j1 W: I7 z  v  |$ @如果rgw进程无法启动的情况,可能是集群不健康,查看log:
' r6 f. I( A! Q) @ceph log last cephadm/ N. `" L( c. G# p( y" ^5 y. V
/var/log/ceph/cephadm.log, ^# c$ ~# P! i6 W7 H! k
bash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm
4 _  Z. b' c3 S6 p2022-04-27T07:57:57.347323+0000 mgr.ceph101.qhgzmi (mgr.14164) 95889 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
6 u' a7 c6 ?; g' z5 H3 ETraceback (most recent call last):! I+ }' R6 r6 @) N7 L, R6 Y$ _
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services4 ^! D$ z! K, M9 B0 e
    if self._apply_service(spec):
% J" \5 i7 G5 w+ [$ v  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service8 E+ R- `# H$ ?  s1 X! i
    rgw_config_func(cast(RGWSpec, spec), daemon_id)6 A) r" o! G% x/ Z9 V& R. _
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config, O5 z, V! k: v8 |$ r0 M3 I; v% H" C
    self.create_realm_zonegroup_zone(spec, rgw_id)2 ]) i& d5 {# M# _. e$ ?) k
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone" Y9 P" s6 @: D+ x
    raise OrchestratorError('Health not ok, will try again when health ok')+ F% |( B8 f' m) B2 ~! R- f* ^
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
$ n2 u/ S6 |/ r6 v0 S5 }9 {2 G2022-04-27T07:57:57.353366+0000 mgr.ceph101.qhgzmi (mgr.14164) 95890 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok5 P: K: z/ x& Q& o2 v* H: X+ U  m
Traceback (most recent call last):
1 h7 r2 H( v9 b% Z& y  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services/ _% t  W0 _  ?- F# a% d
    if self._apply_service(spec):3 T  V# e: g9 x( p. @& n
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) Q: |5 O2 Y! a) e8 X    rgw_config_func(cast(RGWSpec, spec), daemon_id)" w. r8 B0 c6 L; x
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
0 r2 M4 Y$ [- O8 d    self.create_realm_zonegroup_zone(spec, rgw_id); u$ F- R, I* w4 N1 ^+ B5 k1 d( I
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
  l) P8 g1 E" y" t) D    raise OrchestratorError('Health not ok, will try again when health ok')2 O: c: K/ ^5 d. P  H2 ]& W  s
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
) }" G% l7 W: F& L  y& C* L2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts
: F( R: O: {6 ^% j- _: M2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts
( D' h* [. I. w: ?! t7 k2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts+ Z2 U7 G3 i# A) ]& W, b
2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts
. D; D/ M/ l" T; n2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts* V- x! I. \; U2 y* B0 m
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts
6 t; S. Z# G# K" {# o. G$ w0 _; |2022-04-27T08:07:23.599992+0000 mgr.ceph101.qhgzmi (mgr.14164) 96182 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
: k# d, g. S5 v  w( V4 STraceback (most recent call last):5 j; Y. n5 i$ d' l
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services, g0 a  p- l# i0 w
    if self._apply_service(spec):# S5 g2 k, d, Z0 d
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
1 D& \" X) g0 [0 o) H' F    rgw_config_func(cast(RGWSpec, spec), daemon_id)
6 i5 n6 H& g# t( i: R5 U! r  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config) H% V/ P8 W0 L  l2 {$ `2 V5 M
    self.create_realm_zonegroup_zone(spec, rgw_id)
% z) X9 G2 Y6 {5 T  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
! L8 A! @  T' D0 t    raise OrchestratorError('Health not ok, will try again when health ok')& e+ l  D/ H3 i& S8 W9 E  W
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok: X3 @  X4 }% q% Q
2022-04-27T08:07:23.615964+0000 mgr.ceph101.qhgzmi (mgr.14164) 96183 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok5 l2 h2 N* f" k) Y
Traceback (most recent call last):
2 `' }6 G4 s! ?" y$ D# w7 M% O  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services. z2 h' y' B3 x
    if self._apply_service(spec):' |" B2 |# ?: h! H) ^; {9 t7 X6 D
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service! i- W0 s; n5 G- b7 V. C
    rgw_config_func(cast(RGWSpec, spec), daemon_id)0 l+ m1 s. W( x  T: {7 o; v
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
2 V( r4 O1 R- Q+ E' b) \    self.create_realm_zonegroup_zone(spec, rgw_id); C/ B6 Y- p1 L9 u! i/ \
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone% U4 Z6 `% _! r4 d5 A  Q
    raise OrchestratorError('Health not ok, will try again when health ok')
) ?) a0 r& Z3 c' b' `orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
$ X+ K9 x: I7 h& w- N# I1 @2022-04-27T08:07:23.784884+0000 mgr.ceph101.qhgzmi (mgr.14164) 96184 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
) }% o1 j: q$ K' d# r/ W5 ~Traceback (most recent call last):
! z" w) L( ]# j+ ^/ {  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services8 @7 k: h7 C' W
    if self._apply_service(spec):
( V0 W# d9 _0 W0 C- d  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
- ^8 J/ Z& N! i" g+ k) \) c    rgw_config_func(cast(RGWSpec, spec), daemon_id)7 n/ p' G5 ?6 d8 ?
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config: ]: {4 q+ B' B  f+ ?& `
    self.create_realm_zonegroup_zone(spec, rgw_id)+ v) s+ h6 T1 e+ C. e9 I
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone6 t, O; [6 B" u- G
    raise OrchestratorError('Health not ok, will try again when health ok')
4 G$ d- }1 \3 G# s5 i' @; ]orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok. h4 x5 B$ m$ g, L2 c4 M3 L
2022-04-27T08:07:23.788497+0000 mgr.ceph101.qhgzmi (mgr.14164) 96185 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok9 I2 H1 H3 Y; [) T7 ?0 V' i5 N
Traceback (most recent call last):* t% Z( U0 U/ k
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services+ w1 y& D- i7 J$ Z& Y
    if self._apply_service(spec):
' c; L1 m( g3 d/ K$ z3 e# d  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service. @' L+ U# \8 y7 b
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
, B1 j) m" e9 F' z4 d  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
5 A+ B; p5 F3 ?# x    self.create_realm_zonegroup_zone(spec, rgw_id)
/ y# r, h: K+ Y+ ~2 e2 f+ V" c1 h  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
( {, Q7 c  Z1 H% w7 u    raise OrchestratorError('Health not ok, will try again when health ok')
+ U& W- m2 H( b) @/ U. Qorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok+ N. C, g# L' c& I! p
2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec
4 o- D- l) P0 c% A5 n2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts
2 f2 a- o: u7 N/ E" c  D7 u6 W2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts
+ M$ ]  J4 K. n" V6 O! `2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts' s8 v) W$ V* u$ D4 n- E3 t1 c! h& y
2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts
2 `+ o& w3 I" r! _# [- e0 W" r- T2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts( c) h, r0 ?2 U: R. S
2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts8 X- k& J' N5 Q4 }
2022-04-27T08:16:34.288319+0000 mgr.ceph101.qhgzmi (mgr.14164) 96470 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt$ B: C, ^  q- ~, V
Traceback (most recent call last):# F4 n" d% ~: F3 _8 [( k
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
* S3 R; s( O7 j    if self._apply_service(spec):
6 K) y1 }6 W( m4 {: V: w5 o  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
0 @% \2 F2 @6 ^$ a: P0 A7 \7 D$ p    rgw_config_func(cast(RGWSpec, spec), daemon_id)
, T7 D/ ?2 o% q+ }: Z  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
8 k# l4 w9 `: [' K7 ]    self.create_realm_zonegroup_zone(spec, rgw_id)5 P6 ?+ v- M( F9 B& r4 Q# c- ?
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
9 b9 q# k6 R$ Q: k% C7 V    raise OrchestratorError('Health not ok, will try again when health ok'): \) c- x0 N6 u; ]: q4 R/ }
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
" A9 O2 }, Y; s; Y8 Z2022-04-27T08:16:34.292193+0000 mgr.ceph101.qhgzmi (mgr.14164) 96471 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name='')]), 'service_type': 'rgw', 'service_id': 'realm_1.zone_01', 'unmanaged': Falsene_01', 'subcluster': None, 'rgw_frontend_port': None, 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 's( U' Z7 q+ b# L7 u/ l' Q
Traceback (most recent call last):- V: \( k: E9 w, i4 D* {  r
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services& X0 _9 p; n/ C* F* B& I6 Z3 f$ i- z
    if self._apply_service(spec):
0 g* y/ s! h' ]" n5 ^2 W- M2 Q  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
% x0 M0 X5 ~/ Q& `' z0 K( j) B    rgw_config_func(cast(RGWSpec, spec), daemon_id)/ x2 f. Y4 i5 `9 n- V
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
( X& G* N3 X$ q! ?6 q' Y" b    self.create_realm_zonegroup_zone(spec, rgw_id)
, u2 t9 Y6 C) k  r: d. D' R# d  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
, H: y% i* C9 }# w6 Z# Z# u    raise OrchestratorError('Health not ok, will try again when health ok')
7 }% e/ q; n, N$ i! I& _$ l. z: ]orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
, n3 H& N; q6 g# R  Y  u1 I# }* `2 I; J: N

! B. B9 M. Z7 f8 V+ z
0 p8 E! T6 t5 i5 K% \; E5 r进入到docker中; v7 H4 }0 l! i7 `' m' Z% c2 g
bash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh8 ~* t* I) t/ P6 ]
sh-4.4# cd /usr/share/ceph/mgr/cephadm/services/
( A* @1 @* Z8 h% H% c4 M; W5 ]sh-4.4# ls" R5 K+ a% T/ V- _" a4 W
__init__.py  cephadmservice.py  container.py  iscsi.py  monitoring.py  nfs.py  osd.py
! s& W. [2 Q% w" q" g1 D: ?sh-4.4# vim cephadmservice.py
7 R8 x$ g* J4 l, X/ msh: vim: command not found2 s& E) t4 i; W5 T" ^, D
sh-4.4# vi cephadmservice.py, |$ {! L0 K: w- E/ j2 u
##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。
& F$ i) I* d3 Y8 t0 I% h2 G#进一步,将集群调整为健康状态,再次尝试,可以正常
, Y# ^, z5 }! N9 N- |5 p: Z' m( G' B
访问s3对象服务,windows下安装S3 Browser
6 K5 o7 q! V3 @! G+ X
3 h+ ]* |' s- [2 l, p$ r( b) B创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。- e" r$ P0 J' n; @1 K. z
其他常用命令:
" m' b1 f4 B. {; b) B# M3 Ubash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_1% U( ^+ M: @: I& p/ l$ |$ N
radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_14 M. j2 M3 R. P4 w% o# u/ D% f4 w# u
radosgw-admin zone delete --rgw-zone=zone_1
! [/ y9 k1 o5 t
- r$ U) C) C8 k8 s9 I$ e3 v6 e0 Fradosgw-admin realm list
6 Y2 U; C( |9 }) A% H5 C9 sradosgw-admin zonegroup list! N0 I. P6 U* f$ J& V% {; s9 z; G8 ^
radosgw-admin zone list
' ]& a+ r7 ^, e: W9 @- iradosgw-admin zone list --rgw-zonegroup default3 @% s) M1 l, E2 `
radosgw-admin user info --uid rgw_admin --system
/ j6 g0 W9 e, `6 a% R9 g3 }; A# l& p  M% }7 F' z$ x1 i
s3cmd mb s3://sec --region=zone_group_1% h# U) d: f% D) d; Q
( o, S8 u) Y, p
! s( y8 M/ P& g9 }' X% P
配置dashboard:
. c( r# y6 s* ]bash 体验AI代码助手 代码解读复制代码 1752  2022-05-09 11:21:28 radosgw-admin user list: W- I  v& n, L6 N
1755  2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin
' o, k- @0 J5 z/ G: B( D, j2 g2 J 1757  2022-05-09 11:34:44 vim access.key2 r  m& \* G: a+ w! }. l* x3 F/ q
1758  2022-05-09 11:35:00 vim secret.key
4 z( w3 }3 @& X 1759  2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i  access.key2 H! Y; K; F9 n4 _( l; Z
1760  2022-05-09 11:35:34  ceph dashboard set-rgw-api-secret-key -i  secret.key
: Q. z' E: C" ~7 z  r! { 1761  2022-05-09 11:36:49 history
9 s. [5 j; M8 v; c8 S4 K$ h2 v, h9 f. u" D2 t5 |/ y
在前端可以看到
; |4 t- U; \' S9 D3 |" O( Y( B2 O. |+ B) Y$ D: `# r0 [
搭建主-主备份/ _- f8 C8 l) w  |
bash 体验AI代码助手 代码解读复制代码0 Q; q% f$ N3 d
' j3 D+ s  K2 k; w- _: _' `' R% L
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo7 d# ?5 P" [  \" ?

  A# E7 ?5 d/ Z; lradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \6 P6 y* e* ~3 a5 ?$ \0 v
                            --rgw-zone=zone_02 --url=http://ceph101:80 \" J. V, n3 p" }% |
                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \/ \9 I/ g0 R  G' z4 f7 @
                            --endpoints=http://ceph1:80 . _! z7 G+ O- M7 A$ ~7 p
radosgw-admin period update --commit
: F% N' i" E/ R, d, b/ \. g2 l0 Wceph orch apply rgw  realm_1  zone_02 --placement="1 ceph1"
+ g) g1 w" G/ C8 I) X9 A( }& H& E4 `  y* S
查看应用的配置
5 t4 ]* b2 X5 B' h, K% d7 E# R: Ebash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump
; b$ B4 b8 ]0 a0 s7 J# {* U& L+ Z4 }5 O2 e( ?

4 \* x8 H0 _  |+ m& z[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd
6 b( B! v9 A: ?2 d$ G. F9 D8 O, q8 g/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7% c! T6 f9 R7 \2 w  J7 \* ^
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll  ^* n' }; H; U- I0 v" p6 H
总用量 0
) r$ Z0 T2 m" g( _! Edrwx------ 4 ceph  ceph   92 4月  27 18:52 crash. ]0 |- U  ?/ H; P
drwx------ 2 ceph  ceph  133 4月  25 16:07 crash.ceph5* f1 H/ N( W* N: t% X' z( R: q% L
drwx------ 3 ceph  ceph  190 4月  27 17:04 mon.ceph5
, f5 w# |5 B9 ~. \& z7 }drwx------ 2 65534 65534 104 4月  25 16:07 node-exporter.ceph5
2 g. y# V8 p* _" {& X  G+ Kdrwx------ 2 ceph  ceph  241 4月  28 19:42 osd.4
7 {) ~. `1 |( j9 F# J/ Idrwx------ 4 root  root   88 4月  28 10:59 removed& D* {6 n) b" u0 H" n3 t7 [
drwx------ 2 ceph  ceph  133 4月  28 19:57 rgw.realm_1.zone_03.ceph5.tapydb1 G  |( i% x' s/ Q6 S* `9 }

# |7 w3 _8 ?3 Q; ~& N% _4 Z2 D# X# r" y/ ?( n
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb
* Q8 g* P, F8 f2 e% d) _( h* WNAME                   VALUE                                                                                                                                                                                                                                                      SOURCE    OVERRIDES  IGNORES4 ^0 A4 d/ f# N
admin_socket           $run_dir/$cluster-$name.$pid.$cctid.asok                                                                                                                                                                                                                   default
2 ]. |# @5 N, x, V/ K; y2 ?: m6 fcontainer_image        quay.io/ceph/ceph:v15                                                                                                                                                                                                                                      mon; ]5 _3 o3 L3 _, G% @0 S3 d/ U
daemonize              false                                                                                                                                                                                                                                                      override
; G7 A8 M8 ~0 \% G0 V/ }debug_rgw              1/5                                                                                                                                                                                                                                                        default: w5 C! O4 B: g8 l9 C2 M5 z
keyring                $rgw_data/keyring                                                                                                                                                                                                                                          default
6 N( B3 Z3 h- D/ Ilog_stderr_prefix      debug                                                                                                                                                                                                                                                      default  S& j$ U+ l: k7 T, F; l% |
log_to_file            false                                                                                                                                                                                                                                                      default
3 k6 o3 J* m$ X0 Jlog_to_stderr          true                                                                                                                                                                                                                                                       default
" s' D' P) |7 K; q# u5 B  Vmon_host               [v2:12.70.10.161:3300/0,v1:12.70.10.161:6789/0] [v2:12.70.10.162:3300/0,v1:12.70.10.162:6789/0] [v2:12.70.10.163:3300/0,v1:12.70.10.163:6789/0] [v2:12.70.10.164:3300/0,v1:12.70.10.164:6789/0] [v2:12.70.10.165:3300/0,v1:12.70.10.165:6789/0]  file
5 m6 I' H; L2 q% ^no_config_file         false                                                                                                                                                                                                                                                      override: g2 Z/ \- X) C% h9 ~
objecter_inflight_ops  24576                                                                                                                                                                                                                                                      default$ T- u. V# I8 `# ?9 v5 S# _) ~
rbd_default_features   61                                                                                                                                                                                                                                                         default: [! t, e) z4 ]- N1 e) M& m0 o  q9 q
rgw_frontends          beast port=80                                                                                                                                                                                                                                              mon
: b: y% `7 Y7 e6 C8 I, t2 V% Ergw_realm              realm_1                                                                                                                                                                                                                                                    mon% x3 `6 S7 |8 l4 N1 O8 ]
rgw_zone               zone_03                                                                                                                                                                                                                                                    mon( S* o$ Z  A! ?$ K8 e% @) L' L
setgroup               ceph                                                                                                                                                                                                                                                       cmdline
( e- o3 A6 y( x# ^$ ?setuser                ceph                                                                                                                                                                                                                                                       cmdline
5 b! p, Y7 K$ K# j, Q( N! I# E( j$ H9 E6 `2 d8 A
对于想修改rgw启动端口的,可以修改配置文件5 ~) R* `6 J! o. D
bash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关
. }5 ^4 s- c& v3 a; Y% ]radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo! P* [7 b) c( \0 H" }

8 z  J- g$ r/ _. j! o/ ^+ Xradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \
& s; k; Q' ^9 T7 }                            --rgw-zone=zone_03 --url=http://ceph101:80 \
- x2 H( ]# ^- }  l& z: w  _                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \3 Z: L+ Y2 O! D+ ~' t4 o5 _. q7 Z6 {
                            --endpoints=http://ceph5:8088
+ b& ^+ [% h, w5 |5 b3 N/ Cradosgw-admin period update --commit
9 [6 K" _: C) mceph orch apply rgw  realm_1  zone_03 --placement="1 ceph1"0 C) y- p5 J, ^

3 a3 n# `2 @5 V% G; `& v( b' b& i( w" K) D
[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd
& R% Z- }* ^" C$ `% S/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
5 Q) z% V0 v' ]( b2 E, t5 \[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim9 U+ k# g( l6 M' N

9 A9 o! Z& v* x`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7% Z4 X' `2 j5 t9 j
[global]; v2 X! o3 p4 t/ `! W: ~* k! Y
        fsid = f88b0b1a-c467-11ec-a2b8-525400299ff7. C5 c$ o& i. R0 _3 [2 k$ [# |
        mon_host = [v2:12.70.10.161:3300/0,v1:12.70.10.161:6789/0] [v2:12.70.10.162:3300/0,v1:12.70.10.162:6789/0] [v2:12.70.10.163:3300/0,v1:12.70.10.163:6789/0] [v2:12.70.10.164:3300/0,v1:12.70.10.164:6789/0] [v2:12.70.10.165:3300/0,v1:12.70.10.165:6789/0]( l9 _) Q! a- Q( s2 H
[client]
  B9 C' i9 k* _3 _7 P: Y- lrgw_frontends = "beast port=8088"
3 g/ H* d$ l  D1 H3 p`
7 {- `4 f- c2 C% V8 e( N+ t#然后重启rgw服务
% b  q0 }* }2 l5 @0 w#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends  "beast port=18888") k! Q) \+ T8 t  O4 Q2 T
#去掉config中的配置项,重启服务,也可以生效
+ b: W, T: Z9 p! G$ ?#至于精确的配置如:" M& Y$ f6 I8 o# g0 O1 c
`
" w4 z. r( H5 z4 n; v% K[client.rgw.realm_1.zone_03]- \( n( y. ?* |2 C+ p& w9 V, T# Q% D
rgw_frontends = "beast port=8888"
. g% l0 v9 u& u. S) Y) ``
! ^1 p2 j% i' C& ^; H#试了很多次,都不好用,官网说的不明白; s- |7 j: _, N, }5 P8 F

0 V7 E7 `  X' z; I7 A4 i参见:
1 T( q2 E6 f0 ~/ l3 Z; n$ S* i+ {, [
指定rgw的数据池
: J( h2 |2 }4 x# m% l
1 o0 E. K2 w$ ~, r' @+ n移除osd7 X4 r9 l( k+ d; ~  F$ Z
bash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:0 ], B0 V' B8 \& l. A
将节点状态标记为out (节点已经不再提供服务)
" U' Q. |* t- E* x" E[root@ceph1 ~]# ceph osd out osd.5  w+ U0 D6 y, X( W- h: W
从crush中移除节点(不删除会影响到当前主机的host crush weight)
- o" ]& r2 V; }2 G/ a0 r[root@ceph1 ~]# ceph osd crush remove osd.5
) T" R3 |" E1 q& Y$ F" [删除节点6 s+ S2 ?0 `! c  r
[root@ceph1 ~]# ceph osd rm osd.5
  q0 W! y$ c6 h" ]5 C2 t) H删除节点认证(不删除编号会占住), b! ^+ U0 Q2 r$ O9 a
[root@ceph1 ~]# ceph auth ls
) m  v$ C1 h. d. T, }' q[root@ceph1 ~]# ceph auth del osd.5
, F7 R- k/ g( i. j) z; c  c' N, v[root@ceph1 ~]# ceph orch daemon stop osd.57 {6 a. ], m" [& _0 U8 y1 s9 m1 |
Scheduled to stop osd.5 on host 'ceph6'
+ G+ u4 |5 G. j5 C) y( W* C[root@ceph1 ~]# ceph health detail/ M! V+ E. g% y4 F! ?7 u7 ?* H1 t5 M
HEALTH_WARN 1 failed cephadm daemon(s), W) p; n! O- g) {1 \0 q5 y
[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)
) i( n  t& d  H& J! e    daemon osd.5 on ceph6 is in error state
( ~. c6 v+ `. _9 R5 j1 z% A0 V. i[root@ceph1 ~]# ceph orch daemon rm osd.5 --force
0 O) [9 d* X3 s+ j; Y+ h5 qRemoved osd.5 from host 'ceph6') N& c9 ~" f4 C; t
. O4 O0 D+ z) v( x9 {" U
恢复磁盘:
/ I. e4 g- {# H& f- e3 j, C找到某个未加载的盘,有两种方式:
2 y  m- q) U( P$ d. r1 fbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata
6 k: X4 |* I6 J6 F) X* g' B
1 x2 y! y* S" U0 F7 Z+ C: W
/ C9 M. O. \0 L8 y% e; d, xbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd+ l! o$ u6 n! ]8 S# _
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z/ \& P) W7 _0 I" U, ~* @% _9 s8 _
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll
& M* ^9 {  ?8 b总用量 52) b) m8 C1 T) u+ \3 {! ]
lrwxrwxrwx 1 ceph ceph   93 5月  10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f3
3 i  w% j/ g. ^3 H! v1 w-rw------- 1 ceph ceph   37 5月  10 12:47 ceph_fsid
* B& T% r/ P% |2 w. g3 y" L-rw------- 1 ceph ceph  377 4月  28 19:43 config
9 x3 b5 ?; y' v, `-rw------- 1 ceph ceph   37 5月  10 12:47 fsid
# _# i" d3 O4 \' }* q- N-rw------- 1 ceph ceph   55 5月  10 12:47 keyring" \: D7 \+ Y0 U' i
-rw------- 1 ceph ceph    6 5月  10 12:47 ready
! f1 x+ i0 [6 r& E) d- Q) [. W-rw------- 1 ceph ceph    3 4月  25 17:04 require_osd_release
- o8 s1 `3 F# e/ [-rw------- 1 ceph ceph   10 5月  10 12:47 type$ a4 s" ]/ C9 B" `
-rw------- 1 ceph ceph   38 4月  28 19:43 unit.configured2 T, }% T( U$ w3 K  r% M( }; j
-rw------- 1 ceph ceph   48 4月  25 17:04 unit.created, a4 d0 Y8 i8 ]* M' b& q
-rw------- 1 ceph ceph   22 4月  28 19:43 unit.image8 y0 i  b4 }* ]& x( J
-rw------- 1 ceph ceph  931 4月  28 19:43 unit.poststop
, X% g7 r7 r/ J; Y! y7 M* c9 |-rw------- 1 ceph ceph 2035 4月  28 19:43 unit.run: p# c/ J# E6 u6 @3 {
-rw------- 1 ceph ceph    2 5月  10 12:47 whoami
  O) _( W& J& {! A
/ y8 n- k0 e9 [5 z* Z0 c0 B" E* N# c+ K1 d- M6 }4 }, q3 ]: ]
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk
/ f+ T3 H5 H0 W2 b9 J+ y: KNAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT  a) ^1 R- v: C+ W" n
vdb                                                                                                   252:16   0   500G  0 disk* E: l' J# q& E3 h- F
└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4    0   500G  0 lvm) R- ?% `$ E& }8 c2 }3 B
sr0                                                                                                    11:0    1  1024M  0 rom
9 K1 l3 a" W1 t% yvdc                                                                                                   252:32   0   500G  0 disk' ^( H, Z: i% B  x/ g! D6 }
└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3    0   500G  0 lvm
& J0 P8 w/ h8 ]# T  Y9 }! m, Nvda                                                                                                   252:0    0   500G  0 disk* d0 c5 X3 F: f* k. s1 N4 ?2 N
├─vda2                                                                                                252:2    0   499G  0 part
1 H. Q8 i9 V3 P# }- K│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm! k% h& }9 o$ \! P. h3 R/ d6 M
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home$ J: E# ?; B3 j( H, C; d
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
5 L) h3 G4 e6 m% O4 B- ^7 X└─vda1                                                                                                252:1    0     1G  0 part /boot5 q2 E' A, M# c, v
' m3 s' S8 l+ _3 f
可用确定是ceph6上面的/dev/vdb块设备
8 i, L" \$ N0 X' h% q1 Z8 O5 @/ Ebash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用
" f4 s8 R/ Q4 w: x# x4 @& |; U
[root@ceph1 ~]#  ceph orch device zap ceph6 /dev/vdb --force
" _+ Y  `1 ~' i* Q1 m$ r  x/bin/docker: stderr --> Zapping: /dev/vdb8 n5 P$ l) g# I" |2 s$ C& x- C
/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync. j$ U( U8 R' {- |. M) R5 I
/bin/docker: stderr  stderr: 10+0 records in% S  q3 P- w9 d( s) h5 ^
/bin/docker: stderr 10+0 records out: a9 H: B, e, u+ _8 v6 W
/bin/docker: stderr  stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s
( Q' F4 A! s1 Q# Q. l/ R5 v) Y/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>; L. }( p, W) D' g7 x1 K" |
[root@ceph1 ~]#  ceph orch daemon add osd ceph106:/dev/vdc
5 t9 {5 L( l  M) _& R. f  r% Uceph orch daemon rm osd.5 --force  G7 G- K2 _  A6 F
ceph osd out osd.5' z! s5 ]; [9 O7 {; l' |7 d2 c
ceph osd rm osd.5
# J% C( K1 s8 D4 \. j/ {+ iceph osd crush rm osd.5& P5 z! J- L# a7 Y4 Y

, I# `7 X  s7 d7 s( ]) `pg故障处理7 X6 O& j1 C3 G. R& V' X
bash 体验AI代码助手 代码解读复制代码( `9 F1 w0 S' f; R) D
2 v+ z8 z/ F3 Z: @+ I
[root@k8snode001 ~]# ceph health detail
3 m- j5 S5 U) E! J  N. lHEALTH_ERR
3 S2 N7 v! X+ n 1/973013 objects unfound (0.000%); + R4 ]+ i0 U2 p5 g* e
17 scrub errors; Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair; Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded* O* F! `& ~  `& O' x. n
OBJECT_UNFOUND 1/973013 objects unfound (0.000%)
  v' w3 u- W( n* l, P) K    pg 2.2b has 1 unfound objects- r7 z* s. H* z/ W6 S
OSD_SCRUB_ERRORS 17 scrub errors4 f6 q: t/ F, Z. R
PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair
5 n, J: M' Q% g# v' Z4 J. W8 [    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
2 j3 E' e6 O, m% `" v8 r3 t/ Q    pg 2.44 is active+clean+inconsistent, acting [14,8,21]
. {( Q9 n: M/ K% n7 n    pg 2.73 is active+clean+inconsistent, acting [25,14,8]
" s, H+ w# g4 G# v* ?7 J    pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]
. Z1 r; X% V( Q: v7 ~% F: h    pg 2.83 is active+clean+inconsistent, acting [14,13,6]
$ N* W0 u: N! g4 p8 u    pg 2.ae is active+clean+inconsistent, acting [14,3,2]; C8 Z7 d# x$ L! e7 @3 ^5 M' x
    pg 2.c4 is active+clean+inconsistent, acting [8,21,14]
9 p4 m. R4 B0 }% m/ Z3 F    pg 2.da is active+clean+inconsistent, acting [23,14,15]( v4 x$ y$ Y  f& f4 n. j7 D4 N
    pg 2.fa is active+clean+inconsistent, acting [14,23,25]
% K  D8 h8 n4 aPG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded
& u# @; \% k9 U6 J3 i7 x    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound' J6 `& H4 I: C# V

0 }( l) }) {& O; {; |$ V2.查看pg map. i/ O# G/ n2 z: M6 z
[root@k8snode001 ~]# ceph pg map 2.2b
4 w5 M. ]- g# N3 U! L) k( }osdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]
( c+ I; B3 V# A/ e7 G从pg map可以看出,pg 2.2b分布到osd [14,22,4]上
$ w, u4 ?4 d& u3 z9 y# s$ g- f) _0 k2 Q! F& ?
3.查看存储池状态$ D# B$ c  {% x, l; v* g
[root@k8snode001 ~]# ceph osd pool stats k8s-1& C2 u3 t6 _2 I' t" F% D( |$ O
pool k8s-1 id 2
) _' ^7 J+ z; F- {! o) ?4 R# R3 w, l  1/1955664 objects degraded (0.000%)
" v- J/ g4 J" C9 S) J  1/651888 objects unfound (0.000%)
; h% q1 L" I% O# u" @  client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr5 `9 i! X8 u+ c7 C; x
- t8 p: R8 o. ?% L0 D) V
[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-1
  z% m6 j3 f% kpool 2 'k8s-1' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 88 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd3 B) k  l* j( w3 a
4.尝试恢复pg 2.2b丢失的块
* ?( `& c7 y2 b& \; i+ K3 w5 A* f[root@k8snode001 ~]# ceph pg repair 2.2b1 V0 M( S! C3 I- ?  p+ |$ Q( p  J6 E
如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
5 q4 C  F8 s! y: K& ^[root@k8snode001 ~]# ceph pg 2.2b  query6 N, M# P! d2 R  l+ _
如果repair修复不了;
1 A" m$ K3 L* m* R4 s' p$ l* e两种解决方案,回退旧版或者直接删除
4 G+ V2 h- M; A  u8 s  N回退旧版
6 s5 F6 H- z" U5 m[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost revert5 T# G: r9 c/ R5 Z1 ~7 A/ f
直接删除/ t7 h9 ?0 G$ F& I  Q
[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost delete
% w, v( Q  O6 P2 ]8 x" b. J4 B. T$ ]( l& E) _+ G9 b% m& o3 m
参考:记一次ceph pg unfound处理过程
1 T6 A" R8 h6 l; @- c. x9 B卸载9 q, n2 d# n5 X6 e
卸载过程:
3 s! A* f; H1 U0 Ubash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'' L+ E1 j/ x& x  Q
#找到fsid+ {1 f1 q0 p( z7 T1 c
[root@master1 ~]# ceph -s
; c2 u  a7 U3 {- \  m5 r, qInferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c68 D8 T; J0 `/ ~' M9 n6 ]& J
Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config
* M# X- P& S: a/ e* P- GUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
! q8 \" H2 l) Z* J+ j+ g2022-04-01T03:20:37.240+0000 7f27a2b6b700 -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
2 Q  f/ d6 J/ n; _4 m0 Z. T2022-04-01T03:20:37.240+0000 7f27a2b6b700 -1 AuthRegistry(0x7f279c05ec00) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
6 Q# U8 h( q* n2022-04-01T03:20:37.242+0000 7f27a2b6b700 -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& G# F, B0 Q! `5 r% `6 M9 s
2022-04-01T03:20:37.242+0000 7f27a2b6b700 -1 AuthRegistry(0x7f27a2b69f90) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
% a7 }2 ~3 V& ~3 f- y2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]
0 w1 a0 b# O) n, ?# s2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication4 G. x( E1 D* c" E( s
[errno 13] RADOS permission denied (error connecting to the cluster)% a; O: i, ~* ~
! s1 @0 y+ R1 O+ P* _& n
#使用fsid删除集群! V) @2 E: v! V7 i: ~1 X+ f
[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force
  \4 t2 g" k( o- d: N. y% {
+ z7 ~& `& i+ W! `& C. J" Q* z5 F) I& V6 F( e
分发ceph.pub
, R/ Y  ^* X5 c/ f) C, Z( lplaybook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub" 1 R  g2 g7 |( w6 h
9 I7 [6 O% B3 v6 H+ H" w% ~4 t
bash 体验AI代码助手 代码解读复制代码playbook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" -e "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub"
9 a/ e  ?( [- D& |; ?6 ^
2 J% R* s1 g  H使用 ansible master0 -m setup 可以看所有的变量
0 \* Q" i2 ?* S/ Q5 V参考:ansible.com.cn/docs/playbo…
7 p# t  K6 z9 X* s: A  {jinja2参考:
$ i) O7 \2 P% Y2 Y/ {' T6 Ostackoverflow.com/questions/3…( s1 U( v. M6 z2 u
bash 体验AI代码助手 代码解读复制代码 playbook -v  2.mon1.yaml4 I! o. ^6 p: v0 _; w
playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"
) g' y' W$ E) O- \  g2 f+ R4 U9 X playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"' i2 v2 K$ j, k3 X7 }7 F
, y) ~- _2 G  Z  F7 v
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。* O7 e8 H9 ]2 B, @3 X
3 C3 o& F) H3 X+ n
添加(add) 在某个地址上新增一个名字为的MON服务。2 {3 D$ f  e. e) q  c, W
示例:+ M1 d* l3 P3 Y( T7 F2 z
ceph mon add  <IPaddr[:port]>9 f. u3 v# E/ K9 r
导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:7 L3 `' I2 t# g8 C0 {/ N
ceph mon dump {<int[0-]>}+ I% l0 U  }! A! m- R. D2 @
ceph mon dump 1
5 f8 m0 d& S( A& K# {获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:
, v' M& m/ [1 W. B, h" ]7 S1 z2 J3 @ceph mon getmap {<int[0-]>}# T7 _8 x& X# D" I0 O4 s
示例:
9 [+ u" ~3 ]+ }* V1 O9 _0 Tceph mon getmap 2 –o filename
6 }, y2 [& s# x6 G2 Q7 \移除(remove) 移除特定名称的MON服务节点。具体格式如下:9 R& a+ y% r. q. t( K. h. _' c
ceph mon remove 5 ~. \. W# R; ~. ^4 O4 g* W+ C4 B
示例:
5 Z+ c# U7 t% J) R* S. K4 |: b  Dceph mon remove osd3
0 _; N6 m, L. m* c3 K5 o  U$ Q获取状态( stat) 显示MON的摘要状态信息,具体格式如下:+ R2 b/ v3 t( s- s) m9 T2 F
ceph mon stat. G; o' t( f/ I1 A- J) \
报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:
! a. [% i, Q$ y6 u& H* V3 Wceph mon_status; D) ?" r: L8 ~0 l3 e& T
Ceph命令之ceph mon(Monitor管理)
3 ?) r/ W+ {, Q- o" U" Y! l7 ~/ D' C/ |
+ c; o6 `2 @( `( G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-11 21:59 , Processed in 0.036702 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表