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

centos 7.9安装cephoctopus版本记录

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2025-12-18 11:00:55 | 显示全部楼层 |阅读模式
软件版本:5 t8 w- k& c9 D6 p8 I; g
9 i4 {, m4 O& u

% E  A: f7 |& a2 G; d- k0 S  q+ L
8 x3 |- o7 r; R% p  r! n) c5 j
5 C: r! }' }. H6 M; }7 }6 J
  I0 V! I% {, v" W7 x2 h) C: c5 d( }
9 Z" J0 c' j3 W3 ?+ T2 L
  X1 g+ I  _, j2 l; G3 c* x
$ y4 a; E3 b. O- T0 e! M& }
- [2 y" D! J) r2 Q+ K5 M! ?: H3 I! X

: C* m7 A2 t% f7 @) o" J, d" B) S" y2 w3 l5 A

8 O# D5 F$ {' A( y9 b& g% M
7 `8 D' A6 @( }) d$ {8 \
$ t' Q# E7 u9 q; X
) w9 L& g# L, v2 R; ?: r/ M0 c& V% V
% f  B  B, @, w" v2 }* [软件版本cephoctopus(15.2.16)centos7.9  e5 \6 V  h9 j# A8 i
ceph官网版本:- o  ~+ v% O& f8 }" c/ A; _3 w
docs.ceph.com/en/latest/r…
) Z" l/ }0 u5 z6 H' W, y) b  p机器列表:$ @3 ?) E& B: }2 r# S
9 M7 a, P+ q8 {* a1 p6 n
9 e" a' V% T, _# p1 v
' `' g+ f" @6 x9 g! `
2 c7 c; ^$ ]! o" X6 }# V/ W2 V, W$ A. i
  F% }- ?6 W1 f; i

% d. ~9 W+ W; Q. o: H0 B
) a$ I9 m8 _" i# u# U! s9 ]7 q: b# Z$ [+ k. E: x+ i$ Y  d' ?/ _
0 {7 R/ B: K+ S# }% R5 t

; r7 O8 Z3 V( a' Z( e1 y1 G# T3 N2 C

+ W& ^. s2 Y9 j
$ k' [5 F4 G$ I" w! P/ q! `) g$ F0 t% j3 b. W0 H$ b3 X
/ ]" @. m" _3 u: }3 L* x/ D( q

- u( T' C1 @  K( a3 j7 g9 |5 {5 O' o. Z2 K
+ d1 i7 Q; t# D+ L5 l) V

; `! P/ F3 [/ ?" j* A4 A
4 C3 n% V$ w% i! e7 |" [  ^- a( y+ s2 J, o! \7 i& z

0 K7 |5 M/ t6 S3 v8 E9 n) _) g2 r4 u; G- `6 g

8 X8 r/ [. T1 G* P. _2 W$ \- h' R5 S! X/ g! f: W5 T' B6 A7 Y' u
机器名称ip块设备
) {* \1 w( ]" h0 q: @master0 12.70.10.161/dev/vdb 和 + M3 B8 l0 r  [+ t! j4 E! m
/dev/vdcmaster1 12.70.10.162/dev/vdb 和& r9 ^: b$ j6 _& ?
/dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc: _0 T4 e3 ]) X- o
准备工作
& W! }: E0 I  M9 s0 Z: R开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。  r/ F0 h- a  E8 P: o
如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。
$ _" D1 x1 W! M4 @7 Y  jansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):. f/ O, r' b" V% H; i3 ~
bash 体验AI代码助手 代码解读复制代码( k5 O+ ^- \- V6 Z; ~
master0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master0$ q& ~2 }- X' p' D# I
master1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1 " R7 @- i& U- g% y, B7 h4 k6 u
master2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2
. A% D0 {# e( g5 r9 w
0 f* s) g7 q8 g8 e[all]# B- j; [1 P5 D
master04 J( x4 w0 |# V; }8 v( s' G
master1- r; Y" s+ O" }+ L) L3 d
master2
+ X4 A7 G/ m) g9 q1 G0 T( k
6 Z9 l) R8 Y1 l* J. P# D3 ?升级系统内核8 O% _% {6 E. j" u0 f* g, a
升级系统内核到5.17; F# `. A9 [$ ~; }
ansible脚本如下(1.kenel.yaml):% K1 Z7 f$ o* x, I) D0 w+ c
yaml 体验AI代码助手 代码解读复制代码- name: update kernel. X# N- e4 O+ _0 i
  hosts: all' d- i9 \, B9 l# N& t
  gather_facts: True
* C* i* w8 J, Y8 A5 J3 ?  vars:
! G; [0 J8 o) F0 ]9 v  tasks:
" k6 \$ D# O# B/ Y* M- _  - name: create workspace
' T0 Z. }( q$ ^, E1 |$ m    file:# r" }0 ~3 A3 m( H) n, y
      path: /tmp/workspace/6 o/ S( O0 ^' w3 m% v3 J# P3 s
      state: directory
* z. M9 p6 b& c' V    tags: workspace0 _  q& P) t5 L9 J: b8 d+ _
  - name: yum install elrepo
9 T( ~7 O) k$ M  C: D4 m/ z    copy:
+ N! v- ~* M) J5 U* ]      src: templates/rpm.sh.j24 {, o! _8 ~. F7 Z7 x+ m
      dest: /tmp/workspace/rpm.sh) M7 v. z7 i* ]% ]- b3 [
      mode: 755
: v$ g- |4 C) P/ K% R; X    tags:
9 s8 R9 r+ I) _& x      - copy-rmp" V0 i1 Z8 _8 \$ H1 Z7 V6 m
  - name: sh rpm.sh
& \/ l% j+ s; o" c    shell: sh  /tmp/workspace/rpm.sh9 Y3 f, V1 x4 K+ K+ }0 R$ \
    tags:
5 O( c6 Y4 y% A  ^% ?6 A      - sh-rmp# d- ?6 T9 `2 V" z. m# i
  - name: 列出可用的内核相关包% U4 Q: }$ a8 _: E) {5 B
    yum:
7 L' o% `2 B" G: O      list: available
1 z$ f5 Y" Q& L  ^      disablerepo: "*"2 w# x& g6 \5 W( }& `! c: o
      enablerepo: "elrepo-kernel"
0 f# u( }1 o* W  - name: 安装内核; d4 I: v$ ^+ u8 ]5 x- t3 h/ i5 X
    yum:+ k+ f: \4 y/ a3 b( l; }
      name:
0 D. c( y! C+ A0 ?/ N      - kernel-ml
7 M7 c8 X) y; a' R* s# K/ L( m* L3 a8 n      #- kernel-lt.x86_64* v7 F; j! S2 s7 \; I& H' A
      #- kernel-lt-devel.x86_64
8 J# x  E3 l4 V% N; f$ Q1 r9 \      enablerepo: elrepo-kernel4 ?( j, B* ~; d$ Q& n
  - name: 查看内核版本默认启动顺序
1 V4 h8 @" F% k% D3 P4 \# O  n    shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
9 R' A) L9 L9 ?  v2 c  - name: 修改grub中默认版本启动顺序( U4 m6 f  }$ E) B, o/ k
    lineinfile:
$ z7 N% c0 L) s8 z# S      path: /etc/default/grub/ v( M# l# s& C; L# ^
      regexp: "^GRUB_DEFAULT"
) R2 |) s& f. _  c      line: "GRUB_0=saved"
# r" e( L+ |4 [7 W+ I  r% Q      backrefs: yes. d, g3 t' s5 w7 V2 J
      state: present4 J4 a( T4 n/ G- G3 r0 @1 |
    tags:
8 _6 i* y& t0 k$ d7 \      - grub) u* a4 G+ ?) p/ S) m& C
  - name: 重新创建内核配置8 l9 m- M! u! ]3 `7 J* i4 k
    shell: grub2-mkconfig -o /boot/grub2/grub.cfg% {8 l, i) f1 @' G3 T( q
  - name: Reboot the machine" H' N! D# t- l7 m7 N& ]! O! t
    reboot:
2 X. m& q! H' z* H& W      reboot_timeout: 300
$ Q; N; ?3 E. Q3 Q) a# n3 s! f  - name: uname -r
6 z+ F3 f7 j: k. L    shell: uname -r
" [  I6 i( C. i( f  z6 c    register: version
% Q" h1 O  P5 P5 D  - name: debug! o) h( r# X% p! B& q
    debug:0 }/ M0 z8 a) r  }/ s  H
      msg: "{{ version }}"# n  {+ S  ]' s7 ^0 P; P
6 y* {/ o- ^( u4 X9 s# Z
升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j2' N6 Z: X+ u3 S$ w+ a! j
内容是:* V: h, ?/ H: B$ C
bash 体验AI代码助手 代码解读复制代码#!/bin/bash
) ^5 A( ], {5 W% B2 Xrpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2 R! U, T$ t4 p0 |, I  r2 U: q#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm8 _  j1 w" f+ Q7 T
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm( i( _$ A; I# |8 B  E. I7 _( @
echo 06 p/ V) o( }. S7 s
6 t' O9 E+ I' J- T5 `
执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级
4 A5 M8 |, }: b& [, `1 f/ A% e安装必要工具和关闭相关配置
  T; E% m( A( a# E) X, Z; j/ M* w$ p" i4 W3 M3 e
脚本2.config.yaml如下:
2 O" F% e3 R: Y) b) L  Y( kyaml 体验AI代码助手 代码解读复制代码- name: set config  e3 u( n% U# b4 \- s3 o
  hosts: all6 u0 t% ?' A/ V+ Z& z, c
  gather_facts: True2 {( z, `4 g+ U* Z: P
  vars:
6 T* F- q( p& P2 x6 H/ G  handlers:9 s2 U0 K9 H. q- b
  - name: update_yum
# h+ S6 {& q- ^. h/ K/ _    shell: |
7 b1 F9 S( y2 Z6 X( Q      sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo# R4 m" k; Y# W- T5 D( [4 X, E4 K" f
      yum clean all$ w) N# s& E& }1 f& ]  r1 [
      yum makecache -y0 {& }$ W( K  t( u3 O
  - name: noswap_service #禁用swap
# }& L1 N& w" |) Q    systemd:6 u/ V$ p, ^  q" j/ C/ X' }
      name: noswap: e+ y; q) {8 s" Q- f: K
      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running% Y, g4 \' d7 x0 E; {1 v
      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动! B8 O# ]' j" v# J( F; h
      daemon_reload: yes #yes 重启systemd服务,让unit文件生效
0 V$ t2 a: c, `* [- T# g2 q! @; W8 t  tasks:
. O2 k5 f' \' _% `# t- L  - name: back up repo$ D: V8 L% [0 V, Z) c
    shell: |4 s  i. ~/ H* D$ G
      mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
7 x1 F0 j/ s% G, k      mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
  s5 `  O" _: P' Z4 w1 O      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup; j: W- j# i; ~" J3 h; E6 H
  - name: delete /etc/systemd/system/noswap.service #禁用swap
1 G" w. \% B& v; ?+ H    file:
9 Y5 R( A, f* r9 A  G      path: /etc/systemd/system/noswap.service* W' _4 a( w* O2 }. H9 ]
      state: absent+ L4 ?# x9 p8 I$ n
  - name: download repo #下载yum源
6 J9 Z  d* t: D. Z    get_url:
* |* c7 y0 U2 ^  b      url: "{{ item.url }}"
7 ?  X. b8 }3 z1 P7 S      dest: "{{item.dest}}"4 A" u& J/ j; K1 f7 L3 G6 X& `
      force: yes) {3 q* y2 f6 D% b# s
    with_items:: k5 T3 Y& r( k- P3 U
      - {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"}
, ]$ A: Y. A* N6 l      - {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}0 j- T* M" o; ~0 t* j8 e3 [* a4 y
      - {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}
4 a0 B" w9 u$ F    notify: update_yum #更新yum(见上面的handlers)
# R" a/ k: H5 Z- [8 R* C( j5 Z/ y  - name: install net-tools #安装必要的工具4 u2 q- a0 T! b
    yum:
# S- t/ v" q1 C! P5 x      name:. N: I9 {( a& @, {+ u
      - net-tools
8 y$ k% H( o* `/ B7 m9 {& j5 b, P      - vim( p* G# h: B- `% I# I- W
      - rsync
0 Q5 b  m" M% P/ N( m7 E$ W      - chrony& {5 _9 ]/ n. i: B0 H1 k) t. j8 L3 ^
      state: present
+ {% v, z& l7 v$ R      update_cache: true
& v; d; K% o3 l0 `1 _  P- L, U" F9 p    tags: tools( `' @- g9 ]: s3 x- f
  - name: chrony_service
5 h% w# k) E$ ^1 V/ j/ G; H    systemd:  K# ~" @! E0 n+ V; u$ p9 d4 h
      name: chronyd
& Z- m. c. W1 H      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
/ D3 ]1 `! w+ `) P9 }5 L, _' p9 U; `      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
3 x% T$ n0 r: N% z      daemon_reload: yes #yes 重启systemd服务,让unit文件生效0 N6 z" }" P" R* X" w' a- {0 P
    tags: chronyd3 N: S. L& ~, p
  - name: config /etc/hosts #关键 生成hosts文件! w3 y5 }+ w! n3 z3 z" }1 c7 B
    template:7 T: n) n  y' H
      src: hosts.j2
' N* W5 i  s* n+ H. [9 P  S      dest: /etc/hosts
. K6 s9 T/ W; l9 o; g) g* s      mode: 0644
& @! q' w8 J( ?! x  H7 F6 e( P      backup: false! R" p+ k/ g6 ?) _
    tags:
$ ]9 B, o- G% x* c: k, J" _5 A; }& Q$ T      - hosts
4 f: V9 w% i* @, x( U  - name: set hostname #设置主机名
7 p4 n1 X' W3 I* Y  p& j' X    hostname:
9 W: A0 i" [# x( @7 u/ Y      name={{host_name}}3 m! X" [. Q0 Z( N0 }& s3 `" k
  - name: set timezone to Asia-Shanghai #设置时区
; u/ J  d) l8 s6 e0 E    shell: |
" Z( I; _0 L& v. E! f7 F      /usr/bin/timedatectl set-timezone Asia/Shanghai
9 k9 H! m$ C/ Y$ j      chronyc -a makestep
1 m4 @( |1 P7 L    tags:
$ K# D# y& x- E! w      - set_timezone
, _! j4 S) ?: M( M( A, [% N' w" ?, M  - name: stop firewalld service #关闭防火墙
  T3 w$ q0 j3 i6 ]/ ^% W* m    service :
0 I' s7 h5 b+ b8 j      name: firewalld.service  _9 [: f. S0 z; P* W! [/ i
      state: stopped
# M1 ~7 r- h: Y  @      enabled: no2 l# u8 S; e+ [
    register: firewalld_service_result
6 ]: s0 x0 T" U2 W3 y/ q    failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg"4 t+ _6 y' L$ k" I% V
    tags: stop-firewall
" Y$ ~6 ~- t7 E* j  k  - name: Write noswap systemd service config file
, H* m+ Y# J. [- c! C    template:' T1 [. Q8 ?, f* E# |
      src: noswap.service.j2
, f& \9 u* v- W0 Z9 D, L4 H      dest: /etc/systemd/system/noswap.service! J8 q5 h2 Y% F4 H+ {: ^. m5 W9 N$ L
      owner: root
- _6 j$ s8 @# S- Q/ y& b+ p0 O      group: root: E0 d& s3 X: y" l- \4 }/ F
      mode: 0644
) `6 E( c( k9 [" P2 n% K    notify: noswap_service0 p: N: |( f& D- s1 |7 i
  - name: Disabling SELinux state #关闭suse
* i$ y* T" ~% a1 S6 W. i6 D( D: a    selinux:
! G5 \0 G5 W' Y$ g8 F$ R* _, ~      state: disabled* o: ~; z( N: w$ T0 ^5 C0 r
  - name: Reboot the machine #重启机器. ]5 \3 e- X5 E2 h/ _( }
    reboot:; q! D$ r; q7 u: G* P
      reboot_timeout: 300
/ m" T6 C! z% X4 i
6 g1 B. w5 a: w/ i% G- gtemplates/hosts.j2内容:
' B" I, H# q2 q* g4 S3 ubash 体验AI代码助手 代码解读复制代码$ ~1 [7 n4 |% q# z/ A$ E
) p2 m8 `! }- L2 {: w' V5 j1 ^
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain42 c7 m8 K: }1 \
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
( s- b  l7 H8 a" Y$ G( M% ~/ [' o0 [) L0 d: I) K7 ^! [
+ @+ J, ^* |3 H. k; R
{% for h in play_hosts %}8 ]4 i0 \$ _- _- m" A. r
{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}
& I; B9 I+ w: N4 E7 U{% endfor -%}2 n: F( A) l; S1 P; R
6 W4 ?- ?- J' K; P4 t' L8 R# _
执行ansible-playbook -v 2.config.yaml完成相关配置工作- a" T2 Z, ?9 h* }' z2 v
安装docker; Z1 Y5 o2 e% ^# |: ?1 p
按照官网说法,可以使用docker或者podman,本文选用docker。
/ c, e8 c9 B: w. x, X1 n剧本3.docker.yaml内容如下:9 K$ F( V; K, t, [- S/ @9 j
yaml 体验AI代码助手 代码解读复制代码- name: install docker
! e0 w0 Z5 _7 z; u4 K  hosts: all- H. q! f/ e. U4 C
  gather_facts: True* K$ t: W0 o4 Z
  vars:: V+ r* j  c+ ]. X# m( L
    DOCKERHUB_URL: registry.aliyuncs.com/google_containers) J6 s7 l8 h: x8 v- {
  handlers:
3 S5 @( w) s' `, v. H  tasks:9 t  s1 P3 B9 }( |
  - name: mkdir -p /etc/docker/
6 \! [* [) ?4 T% w    file:
, n+ ~6 Y* b! [# ]0 `* E# N+ r1 M7 f      path: /etc/docker/  P; H( V+ @7 d4 M( D4 S
      state: directory) V; Q/ Q) t! [* Z
  - name: install docker& i* h' h" L. o
    yum: name=docker-ce
/ J9 F+ i9 J6 ?3 d& t  - name: change config of docker% G- H( S. ]  b2 L1 i
    shell: |
7 s. o3 u" U$ B& |2 i- z       cat > /etc/docker/daemon.json <<EOF+ j+ r' F" g% q$ a
       {"exec-opts": ["native.cgroupdriver=systemd"],
( M* h$ X/ O4 U( ]$ M        "registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]
1 V% W. q3 I, r8 I& l7 v       }% m  c, R" E# O+ }* p$ R
       EOF
# ^2 G5 G) [& z$ m% p& Y    tags:0 `- {0 [4 s* G
      - config
7 ?, `) H+ x5 C8 _1 w1 g( m5 B+ N5 w  - name: add systemctl
: u4 o1 y" z! u7 v    systemd:+ I  B- E2 J4 X& J0 l) y4 n
      name: docker.service
" \% L1 [0 k2 q8 p$ E: L      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
/ ?: Q; M2 W7 f      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
' i) j& T7 \2 R/ `- q      daemon_reload: yes #yes 重启systemd服务,让unit文件生效
2 Q) z1 A1 {7 {  ?    tags:
$ X/ d4 S3 M$ C& [* M      - docker-daemon' @7 N! h) Y& D# z6 t
  - name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials. p4 U: o5 E+ _% D" \9 p
    shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com
; N+ M) A+ V' o    tags: login
& Z, w) D) v. G2 n( E0 M
) K+ ^+ e( o' G1 N. ^/ }* v- V执行ansible-playbook -v 3.docker.yaml完成安装docker的工作) ^% ]; x9 o8 E4 K+ s1 r( b* K) ~4 b
开始创建ceph集群
( N5 r; M. G: ?* \5 @- ]2 c' X安装cephadm" f& }: U/ o& [  `
继续使用ansible为集群中每台机器安装ceph
- @$ z9 C1 n7 X% k; E剧本cephadm.yaml内容如下:4 c0 e: H- M, [  `3 u6 A
yaml 体验AI代码助手 代码解读复制代码- name: download ceph
" O+ W/ d+ t1 g# ~  x! T; Y  hosts: 127.0.0.1
+ e# Z# u( Z8 c5 H9 ~  connection: local  ~' d! B* U; k  {& x7 g1 H, z( d
  gather_facts: yes
3 O: y, U5 Q1 Q$ o* B4 E  tasks:
; Q7 R$ k$ w1 Q) I5 O+ N1 V$ d  - name: download cephadm6 c% Y$ r3 p4 {: |* P# ^
    get_url:
) ^; D) X$ O) ?      url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm  D$ {$ Q1 I9 l1 I4 ^, k6 d' V
      dest: /tmp/ceph/cephadm
$ n& e4 \! ]1 D/ z; E2 B      force: yes" m8 q! z- @0 w+ a8 q) K0 N* X
      mode: 755
' o' L; h0 ^7 F      timeout: 600
  X; _) q* I5 y9 [# d8 _/ M- name: download cephadm and install
% v: [8 }1 u5 ?. T5 d/ e6 v  hosts: all0 P% `. c, V* E' _( h1 B7 B
  gather_facts: True" k! n  W; q% q; V" P, j* m/ F
  tasks:
7 P& m" ?) H7 C$ @6 ^9 x2 X: o  - name: mkdir workdir
  P- g6 y$ a2 ?- [, @! i- D    file:
& }- \3 R) g" \1 c/ ?9 ~  V% S      path: /tmp/ceph# \' n% y" d0 S, W2 E
      state: directory/ ^9 y5 r$ v9 p" q
  - name: 分发cephadm安装文件: N/ n: q* ~3 o# E' n( a
    copy:
2 c& W% Z5 Z+ N% L      src: "{{ item.src }}"
) E8 ~9 O0 {3 |$ Z4 E+ G" H- u      dest: "{{ item.dest }}"
& N4 @1 l- B+ h5 e$ t  L      owner: root
* o/ z$ t* a8 v: F/ f: i6 F      group: root
5 g2 i9 m" Z) t+ y4 v. A2 J4 r      mode: "{{item.mode}}"
0 O: ]8 W( L3 s    with_items:/ g/ b  M9 K, f4 V+ ^. W
    - {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }
; g5 X6 {& ?3 z6 D, i2 y    tags: cp-cephadm% K. P, F1 N1 W( {9 K" S
  - name: install python3
8 S) b3 G  r' y, {& `1 l    yum:
7 {; v2 f; ^4 a      name:
4 A! @" D# p- t) o1 ]+ Q      - python3
6 M, `& A7 Q* k" `2 s$ p      - chrony
* E5 Z2 ^# |- E. U, Y      state: present
& ?2 K& G! S* y% e# ~  - name: add systemd4 o+ z2 X: e5 ~4 A3 L
    systemd:
) g/ Z( O0 \. E% `      name: chronyd
* f& E3 D! H' b1 [      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
  W+ I$ l( d. r! H      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
; Q+ b8 Q4 Y' t% I6 m' }' l      daemon_reload: yes #yes 重启systemd服务,让unit文件生效; Y: P) q" {9 |9 m8 m4 @0 c4 q" ^
  - name: add ceph release1 v; D# _6 A0 B4 e; D
    shell: /tmp/ceph/cephadm add-repo --release octopus2 {  w* L: a& O2 [: L5 l7 U
  - name: install cephadm
, M  U. [+ E' f: u2 L5 P- A    shell: /tmp/ceph/cephadm install
& B, m' U+ Q4 W  r$ E) p( y  - name: which cephadm, z: j% L, ^- G/ z  P+ N
    shell: which cephadm
9 V4 v2 Q) Z( B/ v5 h! I" o    register: which_cephadm/ p9 `, b6 ^& \! g2 J, _
    tags: which-ceph0 \/ Z, O, k* p
  - name: show  E3 j6 n$ Q, t8 b3 }
    debug: var=which_cephadm verbosity=0    #check.stdout 显示出的信息会看的更清晰点& K& G1 [+ G  M. U: ?4 d& T
    tags: show-result
! P; Q, o0 o$ `; r# [) l2 r6 {" R* L* G
执行ansible-playbook -v cephadm.yaml完成ceph的安装
0 J" ~5 b! E- h  M3 Y6 |6 c1 N" X4 k; G7 X
引导集群0 |: ~5 |* d1 j& E) z# _) h
将master0作为引导主机,在其上面执行如下引导命令:
* l9 J% |$ g* j: E& I& K1 E1 Rbash 体验AI代码助手 代码解读复制代码/ m, n7 ^* N* g6 {

: Z( @- b7 d# p[root@master0 ~]# mkdir -p /etc/ceph
$ o  r9 {- ?" b5 O/ \6 N( y! }[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161
4 ?9 X% O* z" Z  k" u4 \( _8 KVerifying podman|docker is present...
6 u/ h# F9 W9 \/ V; P8 f+ rVerifying lvm2 is present.... S3 c' D! @% W+ v% |9 w
Verifying time synchronization is in place...
$ f) J; |/ l8 p5 HUnit chronyd.service is enabled and running
$ K9 n, n  A  B6 Y% g8 j# [Repeating the final host check...- K6 v: G. x5 a! |
podman|docker (/usr/bin/docker) is present
7 f/ u7 o& K8 \1 T% xsystemctl is present
5 S2 s' b, W' M# q7 y& elvcreate is present# _! e; g( n( n! A
Unit chronyd.service is enabled and running
/ a9 I( Q! Y7 `/ c# g1 N0 M3 rHost looks OK
" J& c0 {8 v. K+ v* ~Cluster fsid: e3386564-bb02-11ec-af56-525400299ff7
4 Y/ x# r: j9 dVerifying IP 172.70.10.161 port 3300 ...
0 U% x4 l- }% K! p6 i& tVerifying IP 172.70.10.161 port 6789 ...* D% I/ ]! V3 g# z5 s9 Q! t
Mon IP 172.70.10.161 is in CIDR network 172.70.10.0/24
) X7 o5 n; N0 ^8 y5 aPulling container image quay.io/ceph/ceph:v15...
  }- T/ _7 e% f9 v9 u0 G9 GExtracting ceph user uid/gid from container image...
" |( ?- z7 ~! g& PCreating initial keys...# a( ~$ j$ V7 [; T! v. c
Creating initial monmap...( N5 P8 j" w2 T6 f  D* x% H
Creating mon...
, m2 Y2 z6 u* ^0 g7 Q) ?4 }  CWaiting for mon to start...
% j, j8 j: L& U9 a# t5 BWaiting for mon...
4 X  |. H4 {0 W' Nmon is available
2 C  _+ A6 R5 @! `0 tAssimilating anything we can from ceph.conf...
( o( Z. c7 K; Y9 }# OGenerating new minimal ceph.conf...
, Z+ S% ^4 Q' D1 d7 o& V$ LRestarting the monitor...2 i, ^) A) N9 [7 ~
Setting mon public_network...% F3 M$ X) y5 p4 E7 `1 V. d
Creating mgr...' F; l7 s* F! U4 q' V0 ]1 V, i
Verifying port 9283 ...
5 E; ~& l9 r1 d8 ~Wrote keyring to /etc/ceph/ceph.client.admin.keyring& ?$ ~8 k$ z! H$ }3 D( r
Wrote config to /etc/ceph/ceph.conf
( a" |" I3 n: W- r1 r) oWaiting for mgr to start...9 _* T7 Y5 w' P& k
Waiting for mgr...7 {$ n6 t' x9 ?
mgr not available, waiting (1/10)...! r# R. Z. g! h4 |
mgr not available, waiting (2/10)...
% u5 a6 G/ B" \3 U* w' W$ A0 H0 Omgr not available, waiting (3/10)...: u9 I% u; c- {5 x; [
mgr is available9 @$ ~" j  f0 }6 @5 j) Z- D$ `, g
Enabling cephadm module...
0 Z. V0 x6 e# _% M' d1 JWaiting for the mgr to restart...1 J2 r3 v1 J* w# p. I% A' c- S
Waiting for Mgr epoch 5...
, |3 i  i3 u7 ]2 t, VMgr epoch 5 is available
& I0 N% k3 n  d( V0 hSetting orchestrator backend to cephadm...
: T# _9 p2 n7 r2 N, k9 GGenerating ssh key...% p( Z' e- j' t# E7 D" }
Wrote public SSH key to to /etc/ceph/ceph.pub* J0 Q% ~2 ~. _+ b7 x
Adding key to root@localhost's authorized_keys...
  g7 _: [2 \, _$ T: @+ G6 W; lAdding host master0...' a6 W" K% t6 z6 m
Deploying mon service with default placement...% r% G% T6 Q! Q& ^5 r
Deploying mgr service with default placement...* o3 `7 \' I4 I) A0 o" E! A
Deploying crash service with default placement...  [( S3 m2 c5 m" o
Enabling mgr prometheus module...
6 U" p7 e' c1 T  ]" t) D3 Q/ RDeploying prometheus service with default placement...* C- z) q$ u- M1 D7 }4 l
Deploying grafana service with default placement...# G% r1 j' J: K: A$ f
Deploying node-exporter service with default placement...! T: k* f# Z; N) }- N' T
Deploying alertmanager service with default placement...: A9 A5 w7 |2 C& W5 ]% a
Enabling the dashboard module...
5 o" q0 c" j4 _Waiting for the mgr to restart...+ q) g  H9 T# l. z- B: Y" w
Waiting for Mgr epoch 13...* ^4 q' r3 E6 u7 B) Z3 V9 y, m
Mgr epoch 13 is available
! y; [9 i! z+ Q& f% o4 u: kGenerating a dashboard self-signed certificate...* b+ `4 k/ v3 D( K' q( p9 k
Creating initial admin user...- `/ A/ m( V" C, C- @% q; j* N
Fetching dashboard port number...
' M5 q- y# p6 Y( H( L! ZCeph Dashboard is now available at:, ], D6 d% K0 v* ^; L

9 A8 o) X- M: @  G. f* n, Z             URL: https://master0:8443/! T+ ~' K9 o; ~/ e) X" K0 k
            User: admin0 b, {8 ^1 B4 q2 o% \, t6 p
        Password: vym1bdeajd. Y+ ]+ ?4 U- i" o) m, E) }/ E, D! i

% s' N) `4 w  b% _- C& p( u- oYou can access the Ceph CLI with:
5 {- D/ ]9 c! y: ^
5 t4 g+ f) c$ v0 [        sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring+ a0 }2 Y, g6 e9 w. H8 f( p

  Q+ _$ |: N2 }2 m- EPlease consider enabling telemetry to help improve Ceph:: Q8 V$ S  X' K
+ h! c3 r/ Y: [; O
        ceph telemetry on# D! m# G" V$ _8 S2 z$ W5 p* t. Y
, L' z5 [' h1 J, Z1 G7 S: G1 M
For more information see:
, Z* h) X& ]6 L: z4 f- j7 W9 j# y# u2 p! N4 I
        https://docs.ceph.com/docs/master/mgr/telemetry/
5 }0 u/ \( \3 H) U! O+ Z/ ~# o# V9 w
8 x/ U5 P0 A0 ?, aBootstrap complete.# ^! ]7 I$ `; R( F" @2 G

( Q! p( @! x2 i: S0 d7 K% `+ f+ H! a0 B0 k2 |; [3 ?& n, D
在命令执行过程中,有如下提示:& |! P2 X1 x: y9 H% i, d7 _) L
bash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at : 6 k$ Y# n2 R% y
             URL: https://master0:8443/
8 ]2 t5 J/ A4 p! w/ [3 n) w            User: admin
) \9 ?9 z4 G5 z9 v+ }3 l        Password: vymdeajd
' b; a5 P& d* v# V) i( s9 q/ j, d. V# ^
按照提示,在浏览器上面可以访问:: ?- K" A  W4 T6 N2 R, a& K
/ [8 z, m: M! s* s  R  {% i1 C4 u
进入到管理页面后,如下:% J* V0 X! t" e2 G' X

( ~2 }1 o" A. g参照安装文档,该命令将:" O4 M  G8 P) D1 G
在本地主机上为新集群创建一个监视器和管理器守护程序。
8 ~# u. }0 K1 _- f3 o! m( ?  c% i) }5 v& l, X2 [- B
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。
$ R& A7 d2 v8 [  X7 M  L; P% Z* a1 y9 }将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.
! a3 D9 ^( U# ]. X1 B$ S: D2 U" ?4 I
client.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring./ P- L% y5 m0 F5 L' T
将公钥的副本写入 /etc/ceph/ceph.pub.
- R/ Q# G. i6 e启用 CEPH CLI(必须)
' \% g2 k+ _6 P! V- w: ?/ U继续在引导机器上面执行如下命令,即可开启ceph shell client, v$ \5 R0 X$ T9 N( \6 {. A
注意:后面的ceph命令,均需在ceph shell环境下执行0 G  s% q9 U$ @, a' G5 r
bash 体验AI代码助手 代码解读复制代码( E/ q( v3 l: ]. U2 @/ F8 ]; j, k

: y! e5 I6 I0 j% ^" i# v0 w5 c[root@master0 ~]# cephadm shell
4 s" H$ f' x! K  e) q: V8 B# QInferring fsid e3386564-bb02-11ec-af56-525400299ff7
7 A+ ]% X3 _0 XInferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config! m. _/ c0 R! x
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
: Y! _0 d  v- Y) @
4 A" u" g1 G( l; m$ W4 F7 H& Z[ceph: root@master0 /]# ceph -v
7 y! K! T, h, |1 o5 Lceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)( Z( v- h; W$ a; P
/ [" H' }4 b2 O- C& Q! ^
- Z8 M+ b3 E6 y' X0 _/ X$ D- j
[ceph: root@master0 /]# ceph -s! ~5 Z0 Q& ~. U- y! l
  cluster:
' N* y; R- x, A; B& k1 N3 v% e    id:     e3386564-bb02-11ec-af56-525400299ff7# k' w+ ^1 [* s8 X+ G! k  x
    health: HEALTH_WARN
' a6 i6 v+ k% I7 V5 @, L$ O            OSD count 0 < osd_pool_default_size 39 ~% v7 w  B, l; ?& Q2 G
8 _" i/ Y1 H/ Q) A- S
  services:# [1 M2 }% n$ }3 N/ _
    mon: 1 daemons, quorum master0 (age 48m)5 K3 k- m7 z6 x. U! F; W3 c
    mgr: master0.ojikws(active, since 47m)  S9 y& b( p' ]
    osd: 0 osds: 0 up, 0 in! z! e+ T. @# ]/ g3 o; U& G* k

0 @, x; R0 n: K  ^8 P  data:
7 R. i( u, g; Y5 b    pools:   0 pools, 0 pgs" M% ]" b( D- C) G
    objects: 0 objects, 0 B3 _4 j+ r  v+ \( m
    usage:   0 B used, 0 B / 0 B avail$ {! k' i4 x1 s4 y. V5 `! L$ m8 y* |
    pgs:- c" g! j8 a5 V% q
7 O" i  a, G/ m3 g% y
将主机添加到集群$ E; |& F9 @9 v7 R! S
1 s1 j( ~: f: q
在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥$ J: |" V( v! F5 X) h

- i2 J' T# G/ s( S: N5 ^% Ybash 体验AI代码助手 代码解读复制代码9 O. L  E3 b6 I9 ~( L' y
0 W3 g" B/ u0 g6 n9 ], C, A* Y$ V
[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master1$ {) n; F/ F1 K& Q) B% b
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"( J" r) _  p  E6 [9 w: t7 S9 L  v4 B" @$ P
The authenticity of host 'master1 (12.70.10.162)' can't be established.8 n% p( s! b* m# \0 M, T2 @0 X
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
6 b) c( M+ Y: L8 ?3 GECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.3 B! P3 U3 E% k6 t. X2 B: G, S
Are you sure you want to continue connecting (yes/no)? yes
( |5 y& \; h, U" n, ^0 Rroot@master1's password:
, g# ?/ b! m' V3 a$ ~0 l
1 ?- ]8 y: a) DNumber of key(s) added: 1/ h6 R' v. V  h0 Y- \" Q% }* B. z

+ S- ?2 x' F5 x& tNow try logging into the machine, with:   "ssh 'root@master1'"
/ o( e. @- J2 c: I. Y' gand check to make sure that only the key(s) you wanted were added.
% b) c+ W8 i& }7 f
0 b. N6 P+ X* }; i8 a3 `[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2' i4 r( F* g# _( q! \% Z
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
+ S, f- O7 o- V; n9 k, hThe authenticity of host 'master2 (12.70.10.163)' can't be established.4 `! |, C; P3 m9 D3 c: ^% k, v5 q
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
# y- m$ O# C. f' m5 }* FECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.
$ h. t, c- L0 ~5 \Are you sure you want to continue connecting (yes/no)? yes5 T& h3 w1 f" |, m
root@master2's password:
, [) k' \- N  e5 T4 X! Y3 b7 e$ S) W9 g  `" }& S  R
Number of key(s) added: 14 F: V3 Z( @5 N# b5 P) j

9 c2 t$ i" z+ K4 k& a1 L( dNow try logging into the machine, with:   "ssh 'root@master2'"
5 @9 R# j/ ~: Q7 {: `and check to make sure that only the key(s) you wanted were added.
) s1 b3 J0 S: z/ V% C8 _. o& p1 ^& d- X- d. g2 H2 w: @8 B
这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了- @, Y  b/ b( s. c% `9 p
添加机器到集群:+ ^7 w" E4 _5 b* ]
bash 体验AI代码助手 代码解读复制代码
0 b: ^& ]7 C3 t, ]7 h4 q
) s, [+ X5 o! Z2 L9 L[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.162
) S& u8 m  x+ GAdded host 'ceph2'
, s. a# m# Z* R' f% }5 Q[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.163+ i" G4 P+ Z/ R# [, a; k: g; U, U
Added host 'ceph3'2 D8 |% X7 h  F8 A, _( m: ~
[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164
$ W0 e4 `1 ?' l* @  o( DAdded host 'ceph4'$ G; d& O( ~% [, k" J- a
[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165
, S" U# v3 n# o3 k$ M4 BAdded host 'ceph5'# h8 `7 J1 O9 f, }* `' l
[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166% _8 `/ x1 ^, ?/ `" ]3 A
Added host 'ceph6') P- S4 Z. u( G' z0 G

4 x* G& o0 ^0 b/ o3 R$ {! Y& N0 }4 K" v7 @5 a! p; R. H) c: J5 ]9 S. R
添加多个监控器
* x- s1 ]5 _  ~/ ^) K配置监视器子网:
" }" r( Z/ s- \5 `/ bbash 体验AI代码助手 代码解读复制代码( g, V1 l( m  H4 z  a* ]; v
[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
+ X, G/ n. s0 F5 V+ o7 \[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/243 B/ y: J4 b1 @- r, B# P

. O# n  U( ?+ p1 t! q##要启动三台监视器,需要调整监视器数量:
& S+ N5 T* z$ Y0 \6 B5 i" g4 }[ceph: root@master0 /]# ceph orch apply mon 3
3 E& P/ P% O) c. YScheduled mon update...
5 G4 S+ @2 \) X- H8 v) r) w( H& _0 F
按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序
1 }6 {. e, T, d+ C  l在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。6 V$ _7 Z- F: O( q, x
bash 体验AI代码助手 代码解读复制代码
. C+ l4 C  V2 A4 N5 a; d. p! n9 f, R) S
[ceph: root@master0 /]# ceph orch apply mon master0,master1,master2
) R: ], e: S" c: _Scheduled mon update...
$ r; q# T. Z1 ?; w: c+ L% I##加标签
1 R3 w- F9 s8 z) g% r: F[ceph: root@master0 /]# ceph orch host label add master0 mon# \( ^/ l; q6 T$ {1 |! P; `9 y
Added label mon to host master0
. g4 {) D3 Q# Q0 }[ceph: root@master0 /]# ceph orch host label add master1 mon$ r7 K3 y% \. T3 o
Added label mon to host master1
8 q1 _3 E. B. F8 Y2 m5 {[ceph: root@master0 /]# ceph orch host label add master2 mon( y" t& e) w& V7 u7 T+ H+ T- q
Added label mon to host master2
* m/ }) M: I( F- I
# q7 G$ S. b: W[ceph: root@master0 /]# ceph orch host ls& n1 h: M( U7 Z9 ?6 x
HOST     ADDR     LABELS  STATUS
7 I; O$ O2 Q$ ~# g+ Vmaster0  master0  mon
- t+ V+ S% A* r- v6 wmaster1  master1  mon
3 c% C3 v% U4 ~% Y" p! smaster2  master2  mon
, _& H2 Z- }4 n) D
& [% W6 X# j  g. Z- \& _[ceph: root@master0 /]# ceph -s5 u0 M8 b/ W9 A0 N4 H5 a
  cluster:1 g( o, o+ m5 v1 V5 h
    id:     e3386564-bb02-11ec-af56-525400299ff7* h6 j2 H9 B! {8 A% x4 Z0 x. W
    health: HEALTH_WARN4 N; N  N  K% T  m( l+ t
            OSD count 0 < osd_pool_default_size 3* ^+ j$ k4 A9 F4 X" W

' S% y& y5 c5 I0 |6 |2 c3 n  services:2 [/ G5 k: r# E7 w- N' f1 @
    mon: 3 daemons, quorum master0,master1,master2 (age 88s)
1 h. R% @; L; B; `& s5 ^    mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld
* K+ X4 P6 G  B! I    osd: 0 osds: 0 up, 0 in+ x: e1 b" f8 d+ g$ s4 m

( A0 k; R) f6 S1 y6 q, |  data:
+ C. a" _9 r* A' m& F; b2 \    pools:   0 pools, 0 pgs
4 a, R1 R# T5 f/ S4 M  q    objects: 0 objects, 0 B# n- c0 D! m' g( P+ C
    usage:   0 B used, 0 B / 0 B avail+ G- h$ ^5 D6 x( ~6 ]
    pgs:
' E3 v0 a) y) d  y* G# A
0 B- f& J1 v7 Y) T- O加入ODS
& N6 Y) ^! N5 O# _2 R可以看到集群三台机器上面,一共挂载了6块磁盘:( E0 V% O( A7 y9 c* J" D4 u8 n
bash 体验AI代码助手 代码解读复制代码' V) U0 n7 G+ r- E1 l- r' |) F0 F
" r8 o6 D5 N- [) _
[ceph: root@master0 /]# ceph orch device ls
0 P0 P6 \$ S) gHostname  Path      Type  Serial  Size   Health   Ident  Fault  Available0 m2 V; c# J5 i7 ~5 G
master0   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
) c* f( K, Q/ b; bmaster0   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes
, R: d) Q* @( G& _1 nmaster1   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
+ s8 D9 t5 ], L0 F8 i1 Kmaster1   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes5 p. T7 m  p) x1 ^1 }# P. B
master2   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
6 w* @) ]4 W: [# \( Imaster2   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes2 e( A; v( U9 a( B2 d9 w
5 S, D% q3 Z! R1 p
当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):
9 j5 W) k8 j4 d$ V+ I! C: E9 [bash 体验AI代码助手 代码解读复制代码
' I' j& B2 t, }5 I
5 t! N  _5 U* N/ q  A# q- Q[ceph: root@master0 /]# lsblk
  a! m: E5 o/ q* b  ], VNAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT+ i; t8 x# x; o* |/ i2 d9 ]
sr0              11:0    1  1024M  0 rom
6 H* Q% r! j: P, h/ y4 G$ wvda             252:0    0   500G  0 disk
5 S" f, d" Q- r5 p1 X|-vda1          252:1    0     1G  0 part /rootfs/boot
; K+ O+ b$ {4 m! u& o. x`-vda2          252:2    0   499G  0 part
+ F% _& W* {8 h- l7 m/ a1 l6 ^  |-centos-root 253:0    0    50G  0 lvm  /rootfs
2 a" s; O) {2 }: [* @( `  |-centos-swap 253:1    0   7.9G  0 lvm% b/ D7 X* U9 F) b5 u" z
  `-centos-home 253:2    0 441.1G  0 lvm  /rootfs/home- G4 m5 [0 ?( ]- F
vdb             252:16   0   500G  0 disk" ?6 T+ J) Q) O
vdc             252:32   0   500G  0 disk0 j) t! s0 {) [
4 [: D4 Z( O$ y4 e' v
按照官网说法:设备满足# w3 ~# n7 q3 m4 ^1 t
如果满足以下所有条件,则认为存储设备可用:8 K. p. s) q; Z/ j
0 B/ ]  ]& y7 |1 }* p
设备不能有分区。% l% t, J; }9 |
设备不得具有任何 LVM 状态。
& ^/ N2 N  ]! v' e" d" @! B不得安装该设备。, R8 c2 s$ G' P; E9 k7 r. j/ q, Y
设备不得包含文件系统。6 N4 K: G' w+ M
设备不得包含 Ceph BlueStore OSD。
6 ]$ X4 x/ K- t设备必须大于 5 GB。
5 f) \, |& ~# R# y6 F
" {2 _2 v# {" I& k$ p5 dCeph将 拒绝在不可用的设备上配置 OSD( {' ^. j8 l( _2 ]
可以使用如下命令,将所有可用的磁盘添加到ceph集群中:
+ s7 a9 d! `9 o4 J0 L! M! ]bash 体验AI代码助手 代码解读复制代码9 u1 x- Z, M/ o0 h- o) X6 n

; i: }; {8 }" G$ m/ a! U  ~[ceph: root@master0 /]# ceph orch apply osd --all-available-devices
; \3 ^. l' B* A( H  K% u& }Scheduled osd.all-available-devices update...: i# ]7 ~+ |- s- j- q
[ceph: root@master0 /]# ceph -s$ {4 u4 }/ S! G$ y
  cluster:9 D- l, }3 m8 m* e$ h0 d8 v- A
    id:     e3386564-bb02-11ec-af56-525400299ff7& a! v( E: H$ ]6 b' o2 d
    health: HEALTH_OK+ a' V: h+ b9 r/ j5 k2 i8 X9 Z* V1 m
( X2 y: M+ x* d! ^
  services:9 O( a7 e/ f5 r* h! Q' ~- Z
    mon: 3 daemons, quorum master0,master1,master2 (age 12m)6 f+ s- q9 Z: j% o% i
    mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld
* T- y% D# X# F5 `    osd: 6 osds: 6 up (since 22s), 6 in (since 22s)* X) x, p5 c' |8 X, T7 [: ]& H

7 O% b0 W% x, _7 o8 m$ a  data:
- k2 B0 h1 e; n) s    pools:   1 pools, 1 pgs. Q+ F" @) K: ~+ v+ }
    objects: 0 objects, 0 B
( d2 Y  a1 d' C2 Q8 i    usage:   6.0 GiB used, 2.9 TiB / 2.9 TiB avail( u6 S# X5 E/ g+ h( D- t
    pgs:     1 active+clean- E: D+ Q! y+ V! m

; D! N) Q" ^0 v# x' v8 M也可以单独加入:
% l, ~' z( O' ?7 Abash 体验AI代码助手 代码解读复制代码6 i0 A( ^) j5 f  A3 P7 I: i) M; V/ F
* i2 i4 o+ e: [6 z& {; b
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb
4 ?) u/ i: g, z[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc2 Y7 z) }/ L0 }; L
[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb
: G5 F& t* {, t; `( F[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc% o" ^( w% x& O4 |, k  `8 ~1 _5 w+ W
[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb9 L1 s4 J9 x. q9 f. `: \
[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc# M: ?. j7 V0 [

8 n9 D$ S7 k: y/ x! c  H) W. {( k在前端看到:" l) _% [5 u6 u' A1 p

$ c/ }# Q7 d9 e$ C# M2 r, ?) i/ t& C! y+ j7 ]
挂载块设备
. g/ {# a8 L* O# q# \$ k+ {bash 体验AI代码助手 代码解读复制代码7 v3 H7 x0 L' b* n. P- ]. p* x
( q$ F  R& x. H1 U7 E
[root@ceph101 tmp]# ceph osd pool create test_rbd 329 m# j! Y5 f9 _- N: ~. J1 @
pool 'test_rbd' created
! N) \+ @3 `+ C. J: {* a0 ]8 M3 n3 I[root@ceph101 tmp]# ceph df* v; p* w- T2 X  i9 y2 t4 ~! k# X
--- RAW STORAGE ---
: {4 B) c) l, Z% ?( n$ K, TCLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED' R) |6 O& C; [$ D% J& o2 A
hdd    5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.22  p( h0 \8 J) J% x- e
TOTAL  5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.22
9 C4 B; m& @- H) ?3 T1 e1 B4 C
( ^* B( U4 i3 |+ u2 _--- POOLS ---
+ I0 s% {6 u% fPOOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL
) q0 L; D0 N( R& K: ?0 Ddevice_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB) f- l5 A& x6 _
.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB9 y/ j4 i) }# H  K- {3 p! k6 J3 K% s
zone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB
; I/ y3 L) h- ?( H( {1 Yzone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB/ ~* v( \& j  T" H* h
zone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB
1 V1 x( p! Q9 V$ _zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB
+ d# Q2 B. y, K. I" y8 ]9 S1 R8 {zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB
+ b5 u) K/ |+ L- O, P% u3 |zone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
4 Y" K8 U* ^) q' u0 fcp_pool                    42   32  1.4 MiB        2  4.4 MiB      0    1.9 TiB+ _6 L$ j* D( F. |* m9 e
test_rbd                   43   32      0 B        0      0 B      0    1.9 TiB
$ E* y( S6 f: U1 r: U( X, U& ^" D##创建镜像. w4 v. Q% C5 C
. C+ v! e% X! u+ }; ^2 U) z. V: M. d
[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd
+ F8 x% A" k1 A5 @$ l' k' B- D
: x  E* O7 I7 S0 O[root@ceph101 tmp]# rbd -p test_rbd ls
+ e3 h* j( O7 T$ d! z/ b5 otest_rbd_image_1+ U  ?( B& J/ N0 \- _5 h

. t& W; z4 X7 m2 I##检看一个RBD镜像的详细信息
+ t: v2 X6 n$ S0 |[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd
& r2 z+ i9 b3 R, `1 Drbd image 'test_rbd_image_1':4 L  v- {* {9 q0 \) T
        size 10 GiB in 2560 objects- l' L( Y. J# ^8 j# B. m
        order 22 (4 MiB objects)1 ?+ O$ W9 e5 g. x& X2 C/ `) Y, U
        snapshot_count: 07 n* o) f) X2 p
        id: 2836b2f53ea86
3 y2 x# _/ T1 C* O8 n2 h! F        block_name_prefix: rbd_data.2836b2f53ea86
# ]- a, Q- Y8 O3 Q* Z! u! e        format: 24 v; U9 F0 c9 g; V  d* a& t
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling
( e4 C6 P: i1 N! \* w        op_features:
( B3 I1 `4 ?+ U* B( ?/ U        flags:' H. \4 i$ J1 q' ]/ a, T9 _: e5 q
        create_timestamp: Tue May 10 10:38:16 2022
/ v2 V: c- J1 I5 }0 @& k        access_timestamp: Tue May 10 10:38:16 2022
* y4 t5 R7 V2 [+ Y( W$ ]( M        modify_timestamp: Tue May 10 10:38:16 2022, L. j) s- ?. t$ e( a) U, A) T: L
        journal: 2836b2f53ea86; d8 D- s6 C* x& p
        mirroring state: disabled
. d/ e- H# ^' Y( L7 p2 }: V6 C) g! N, B. J
. _  ~; X7 v5 ^" r& n0 K
[root@ceph101 tmp]# rbd pool stats -p test_rbd2 M4 z! ^6 L- }
Total Images: 1* J$ Z; g) q; X3 n. ^3 Q
Total Snapshots: 0
6 k4 u9 W: r, K2 v* R% l. eProvisioned Size: 10 GiB
$ T5 ?$ X$ l' ]9 y; }) ~" h[root@ceph101 tmp]# rbd showmapped
) c" E$ {3 P5 X+ ]id  pool     namespace  image   snap  device4 \2 I5 x! Q* w" n
0   cp_pool             image2  -     /dev/rbd0' E# N" |  j5 O0 f: q
6 i2 p5 F7 r, J4 F/ W
[root@ceph101 test_rbd]# umount -f /dev/rbd0- d$ u' d8 r0 ^& [+ x9 k8 r
#或者
- c: m& o  M9 d% E) l) p1 Z" \; `; d4 z& B; Z4 z" D
[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd0: [/ D2 F/ b5 |) u) Q
##然后将pool关联应用0 [  Q8 ?7 e1 I  t' G" e; _
8 b; ?8 ~3 n- S- u8 d! k
[root@ceph101 ~]# ceph osd pool application enable  test_rbd rbd) d. ~: K1 J$ s7 g$ ?, H* r! V1 P, Y
enabled application 'rbd' on pool 'test_rbd'
/ l: g5 C4 r- z2 H0 p[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1
$ R6 c  W, c2 W5 R2 F( D+ Hrbd: sysfs write failed% y5 m4 [7 p  F+ ^
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling".
, o4 c5 W  y. f& ]* z6 @% S- A6 y8 ~In some cases useful info is found in syslog - try "dmesg | tail".8 n$ q$ b$ Y! l
rbd: map failed: (6) No such device or address) @8 v4 W. g7 j" v% j6 X" _' a
  `" |3 X4 k  j# P
[root@ceph101 ~]# uname -r
$ A' t& L2 r. u, _5.17.6-1.el7.elrepo.x86_649 O$ o- S/ p" i( N" [# L' R: v
[root@ceph101 ~]# dmesg | tail! e% u- e; w7 {+ f8 m" n3 r4 g
[    9.843030] random: crng init done
+ E+ [: L1 `8 E3 ?+ w[    9.843034] random: 7 urandom warning(s) missed due to ratelimiting" g6 ]! d2 u! O. L8 q- r6 Q" a4 i
[   10.669178] Bridge firewalling registered
  M- g7 B* j6 r) I) U/ _* w' H[   22.239147] process '/bin/ip' started with executable stack, B3 U0 [/ l3 W7 }0 t, c: V6 d2 ~
[ 8185.140070] Key type ceph registered
0 u4 f' O/ v, g5 Q/ J0 {; c+ B2 A[ 8185.140395] libceph: loaded (mon/osd proto 15/24)8 u7 n9 o+ v0 ^3 ?' k
[ 8185.141923] rbd: loaded (major 251)
3 h9 }# _8 ~3 h7 `1 \4 Y[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established
7 U2 q9 p& X( J+ |! V# D0 q[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f
/ J. d2 u0 J  S6 c1 P4 {$ W[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40        
5 ~1 p, n+ s: R( Z7 a  q##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling
1 Q8 a; J0 E( I. y9 h. B#layering: 支持分层**(0次方)**8 ~) P+ ~. D3 ?' o  c6 J4 @
#striping: 支持条带化 v2 **(1次方)**
/ p& e4 e5 N, C& H$ X- U* n#exclusive-lock: 支持独占锁 **(2次方)**; H7 W+ t( U* L. a. @0 N- X
#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**
* k: ^4 H+ u5 l/ ?#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**
% t' N* f+ d5 v5 L) i#deep-flatten: 支持快照扁平化操作**(5次方)**
5 H) i, ^+ M, I#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
/ u: }* f$ O, Y# i) E6 i  }[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling
/ b. [0 O+ X" o7 ?" \[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1
! m2 F  B, b5 u" j5 f- V/dev/rbd0
2 r8 _- j3 B1 q  A# V* c5 o#lsblk 查看磁盘
, `5 e, f; t3 G" m/ G  R1 x5 a# u  R' t
[root@ceph101 test_rbd]# rbd showmapped
+ W& m$ z- ]* O) _4 x* h  iid  pool      namespace  image             snap  device
$ _5 s1 A" E! k3 `0   test_rbd             test_rbd_image_1  -     /dev/rbd0* Z3 o7 t. y4 Y3 @5 A
[root@ceph101 ~]# lsblk* h# Q/ o# e& _$ k4 _5 r1 B
NAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT5 N7 F! r7 o" t' a" E* \" Z8 ^, t2 i
rbd0                                                                                                  251:0    0    10G  0 disk) y' t1 O" ?- f, V5 Y$ P
vdb                                                                                                   252:16   0   500G  0 disk( d7 k9 @, c# A. s+ F
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm% }$ \6 B6 q5 @) \; ~
sr0                                                                                                    11:0    1  1024M  0 rom
1 F; D2 |9 K2 o1 y+ \vdc                                                                                                   252:32   0   500G  0 disk/ p7 B6 B/ l( M" Q" B
└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm
+ p! v4 `" m& b' g: H, u( ~vda                                                                                                   252:0    0   500G  0 disk
. t0 I: G8 m3 i( k  }( l9 b4 ?├─vda2                                                                                                252:2    0   499G  0 part
$ Z* y$ k$ F. k% J) S  u" u│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm3 _: i- [" ?( m- e& K6 i. P' |
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home
: ^5 i: N, _7 C! s8 F6 E  E│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /5 o7 M! p% w% m" u% p
└─vda1                                                                                                252:1    0     1G  0 part /boot
. g( }" F! [; i8 E+ f: V; g8 b$ t) ^, R4 i8 }/ q8 H2 o, S
5 J. f5 Q& I  p+ @, I
# 格式化磁盘
9 ?$ Q- _2 f9 E$ Q% e; ~
& f% D# u; u8 m1 d) H5 j[root@ceph101 ~]# mkfs.ext4  /dev/rbd0
8 [* P/ P  {+ \/ I5 S& Imke2fs 1.42.9 (28-Dec-2013)+ \3 X; @/ c3 Q* J( Z( j$ T
Discarding device blocks: 完成
5 a: \/ _9 D: q& ]  h" @2 K# M文件系统标签=
+ x9 x0 t. g7 |$ p& i* aOS type: Linux5 E1 o2 v6 U" f. H0 F. I7 U
块大小=4096 (log=2)
- l: h: B5 [7 ^$ d9 o分块大小=4096 (log=2)
) x- ?+ }# h# u2 ~3 f# pStride=16 blocks, Stripe width=16 blocks8 y' T% y" Q: }) Q
655360 inodes, 2621440 blocks; S8 m- H' [; n
131072 blocks (5.00%) reserved for the super user
/ L/ i7 G# A' F" o* q第一个数据块=0/ |0 k4 U2 X+ O. ?: H
Maximum filesystem blocks=2151677952
3 c1 t  v  M$ `; J7 z3 J80 block groups* X  z; j/ U1 |- {" O/ ~# z  B$ k
32768 blocks per group, 32768 fragments per group/ e! S0 h) t- O, b4 x
8192 inodes per group2 z# ?' @+ p4 s+ j& x* P6 O% F0 F
Superblock backups stored on blocks:
) T- v" Y: j9 Y: R# m1 u9 q( R        32768, 98304, 163840, 229376, 294912, 819200, 884736, 16056327 O, d: H4 ?$ ^& N! _

. F& t- a: b1 x: iAllocating group tables: 完成7 q; u0 F" o  O# l% \7 P
正在写入inode表: 完成& R$ v7 M+ ?6 z7 W! r% r
Creating journal (32768 blocks): 完成
* K9 f0 V4 t- @: K% r$ u1 a6 NWriting superblocks and filesystem accounting information:& _$ e7 h1 T* U
完成0 z* I2 ]3 L1 K# G, g! m9 c0 D# P
1 `- e8 |. K! {2 r) N$ Z/ [  ^1 ?. n# v- o
##创建挂载目录
- f7 O9 s  p3 t' l: K# Q[root@ceph101 ~]# mkdir test_rbd/
# p2 }+ [4 Y# e#挂载6 {* T$ y. k. n0 Y$ h
[root@ceph101 ~]#  mount /dev/rbd0 /root/test_rbd! T- g! y) ?$ M4 P
[root@ceph101 ~]# lsblk2 s9 z% J1 y/ W1 V
NAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
+ H0 q& ^) w3 ?9 u$ hrbd0                                                                                                  251:0    0    10G  0 disk /root/test_rbd6 q! K, J8 Q. V, C, i$ K
vdb                                                                                                   252:16   0   500G  0 disk4 |" V8 j' r; U) L
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm
" m+ D. _' c& p1 }" I- g9 S. Psr0                                                                                                    11:0    1  1024M  0 rom
* d  @6 U' H$ V( `% R$ k  Qvdc                                                                                                   252:32   0   500G  0 disk
4 y% [# U3 P4 X4 b$ T└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm( y6 R9 {' \6 s9 R( Q, f1 p
vda                                                                                                   252:0    0   500G  0 disk! @3 L. G" H8 L5 S4 u/ r% v
├─vda2                                                                                                252:2    0   499G  0 part
* k0 W+ W1 n+ s$ D# H│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm
6 P7 @# I8 |! z5 c/ l; F" C│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home+ {& u6 L  p" V5 t, _
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /" M9 ^/ j9 S: a) J  g2 k
└─vda1                                                                                                252:1    0     1G  0 part /boot$ w3 _% Z+ M0 ~& E+ |
4 h" {6 X9 l% }7 z
#写入小说文档到挂载的目录' y" X6 p& r& P8 V  H7 }& z2 F7 [% l
[root@ceph101 ~]# mv bcsj.txt test_rbd// d  E: e/ G. k1 Q
[root@ceph101 ~]# md5sum test_rbd/bcsj.txt6 r0 U0 ~1 r4 S
0d615ccd0e1c55f62002134f5cac81cc  test_rbd/bcsj.txt0 ~2 {4 q" ^0 M" m
[root@ceph101 ~]# df -lh
/ g/ `" q3 q% Z+ o9 y8 h* i文件系统                 容量  已用  可用 已用% 挂载点
9 s3 k6 \; j3 K1 p  l# N/ G/dev/rbd0                9.7G   15M  9.2G    1% /root/test_rbd
6 W; L  n4 o7 w$ o; W+ y3 Q/ f. s
/ Z5 m3 U6 A& ]4 h$ `/ w0 b[root@ceph101 ~]# ceph df2 G9 V. d( V1 ^
--- RAW STORAGE ---5 ^0 f9 g, T* l% h+ @
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED
, d( ?6 Y4 h: J1 ]% Chdd    5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.233 l( z  e3 d1 v
TOTAL  5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23
* X8 e/ Q2 X  z8 ?$ M, A
$ r8 `2 w8 D5 c1 |5 N--- POOLS ---* i* ~# N, `2 X
POOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL* Z# |8 d6 @! o0 h7 q' i) K
device_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB1 T/ B2 z3 `0 E. i- n3 c7 o
.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB
+ q5 D. T% V; C/ {: xzone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB
6 n3 B+ v3 @; vzone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB
) r: V5 o( k7 \! |; ozone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB2 c, c  K, [, M& j; T
zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB9 v+ U1 K4 w- n: N3 h* s+ ~
zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB
  F! c4 \0 i$ T. [# [zone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
( B, w) N6 t3 x6 o* c# k! S& f+ G5 Qcp_pool                    42   32  2.2 MiB        2  7.0 MiB      0    1.9 TiB$ k  n$ b! ~0 u9 j$ ]+ M' A
test_rbd                   43   32  148 MiB       57  446 MiB      0    1.9 TiB
2 \9 ?) r% h& V
. D/ s7 @# }4 p3 A/ T: a% r; z* W; d
对象网关) `1 _1 K6 B" x
bash 体验AI代码助手 代码解读复制代码/ r9 ]  ~& Q* O" b3 [, k* x

) S' r; @  E- D# `7 L4 J! n8 P7 iyum install ceph-radosgw -y; h- a0 D7 ^( h9 i; ~
# }- M, r+ [$ q8 C" `
[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'
7 _* F" O, j: H. w6 `% |{% c) b* Q0 }4 y2 y3 E
    "user_id": "s3_admin",6 }$ s# g9 f; ^% c( y
    "display_name": "s3_rgw_admin",' o% G3 n1 e$ O5 K* p
    "email": "",
: {( x8 h- g0 J8 x/ y& `" }9 P    "suspended": 0,% \- j% b, C3 ^  \# t
    "max_buckets": 1000,
; g& @# {4 X- q( c7 p8 W" S& y    "subusers": [],6 u6 O  y! n- b! |) Z. L4 h8 |
    "keys": [
5 H1 ~! d& T2 ^! A        {
9 H3 x9 R  O; R            "user": "s3_admin",6 ]. S: m' I. e* \1 f
            "access_key": "s3_rgw_admin_access_key",
* E0 S+ F5 w6 T/ q$ L            "secret_key": "s3_rgw_admin_secret_key"
$ E$ W2 o' V; i$ Q8 A% Y: g        }: _. E8 n+ d* v
    ],4 m7 y; N# \" v. D9 C
    "swift_keys": [],
& u" F8 @1 b( C! p6 L    "caps": [],7 P% ], }; ^- Q) F( L8 X
    "op_mask": "read, write, delete",* C2 s0 s: }& Q2 w& n/ k6 b6 Z
    "default_placement": "",3 d3 G' |" @" \; j$ j. n
    "default_storage_class": "",
' A' e0 N0 b1 G3 S    "placement_tags": [],* M8 g3 v$ v4 @1 L
    "bucket_quota": {" I' Y. a( V, t, X
        "enabled": false," k1 z( q* i4 g2 O
        "check_on_raw": false,
- L/ ~7 `8 O+ a8 D- L4 t5 O6 E        "max_size": -1,! K) s/ o& H: A5 x- y/ z9 E
        "max_size_kb": 0,! @0 t5 r/ h+ d* \  `5 ?
        "max_objects": -1
. F% ~$ A* |  H( X    },$ L* m6 w! I& r0 ]
    "user_quota": {2 b2 T3 Y, O& Q; j6 Q0 u( D* _
        "enabled": false,1 Q  }: H( k, M4 A" W
        "check_on_raw": false,
5 c8 x. F, C. N7 P3 U3 G        "max_size": -1,
. e, a3 o& A/ c6 i7 A5 S' S        "max_size_kb": 0,: X4 @& c* {" D- m
        "max_objects": -18 Z+ J: G  ?- M9 F9 m  Y
    },
' R3 o: A0 b8 s- V+ V5 P) q' `% `    "temp_url_keys": [],
- y7 s5 Z+ H% l( n# k2 R    "type": "rgw",# x, ?/ l# [' d7 {3 F, P( g
    "mfa_ids": []3 G4 ^" n' r, A# `) O
}- f5 w4 F) }  d& J. }+ Z/ O1 x
6 k+ R3 N4 }* u) j9 w% `2 ^# @( O
[ceph: root@ceph1 ceph]#7 n! L2 S5 P! g
[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'
' i- `/ O8 n. i; G5 x, f  [+ Q4 S( \{
' u: j- S% V4 O    "user_id": "s3_admin",5 w+ [- d% I' O  x: a, u, Y- i5 N
    "display_name": "s3_rgw_admin",
% A& k  e  \. h7 v$ ^    "email": "",
2 F. D# s/ C+ [; D* V    "suspended": 0,
4 }" c" `6 ?+ T) F/ R8 Q5 [    "max_buckets": 1000,0 G% J/ E+ f! E* r! Z; Y4 c, Q
    "subusers": [],' o  I# |+ `/ u3 @/ |& ~
    "keys": [. V: f9 N+ H. R. S; I* j* ]  K
        {
) b7 }! J6 q3 R+ t- }; ]( E8 l            "user": "s3_admin",
  e2 f: g" {  _0 z" J! i! O6 q/ ~5 {            "access_key": "s3_rgw_admin_access_key",
; B/ @/ _: M! C% I6 W7 t4 ?& }3 K            "secret_key": "s3_rgw_admin_secret_key"6 l' F) @9 S' k% I
        }4 [' Y! Q, g" O' D3 C7 O2 g
    ],# M5 H. F& }9 Y9 Q
    "swift_keys": [],% S/ t+ ?  W# ]- \8 _8 x/ r% {
    "caps": [],
, P4 b* `9 k% @    "op_mask": "read, write, delete",
7 A0 ?% }6 b8 h1 Y  l+ }, f    "default_placement": "",
# o: D: Q, v: Y    "default_storage_class": "",. K, \$ K3 D# T+ j2 {
    "placement_tags": [],9 g$ @% E# C% Z: R0 G3 c: H1 \7 R
    "bucket_quota": {. g7 n0 |- [4 l% b9 a0 S) r
        "enabled": false,
+ b0 E, p( F7 z, ]        "check_on_raw": false,4 h  c# n- Y; [2 ~) B* {
        "max_size": -1,
" [5 [- t3 \( P4 o( P& z! X        "max_size_kb": 0,
$ V- ^7 i- j# T        "max_objects": -1$ R( R6 X' {  T5 k' Q$ ]
    },
, n5 x" D6 z& d- M, O, d- c    "user_quota": {% M) h$ v. P* y  g$ A) M) W, c2 F
        "enabled": false,7 Y  s- k( ?8 k/ D- f3 c: Q
        "check_on_raw": false,. y% n& ^9 D$ y8 Y- @% \
        "max_size": -1,
3 z7 W4 U# B$ ?1 H, j6 X( H        "max_size_kb": 0,
" s( G0 z. h- Y* w        "max_objects": -1
! v8 T1 _6 v6 L" E    },  N0 O$ j' R/ S4 Z
    "temp_url_keys": [],
) ]& V% e( @* ?% L    "type": "rgw",0 C! r: X- g# {3 `7 w
    "mfa_ids": []
6 b* d1 L# G* S) S5 K5 z}
6 @; J# v$ I% [# e. }, l- H4 G: m
5 h& \. K# T3 U: T  L: y9 bceph tell mon.* injectargs --mon_max_pg_per_osd=100
$ I, r6 I. v/ J. j' w. L2 x- I2 o% s+ v
#----------------------------------------------------------------------------
; M% K  Z9 p6 @% K3 qradosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system
* ~9 s. A  u. o* ~' V- Qradosgw-admin user info --uid rgw_admin --system3 r. b1 X' _2 s9 Y3 t
; G) s+ A+ g2 C6 g3 b/ W. P+ @
3 g/ J- y0 U7 w" h
radosgw-admin realm create --rgw-realm=realm_1 --default
, i+ j% j% j2 i2 aradosgw-admin zonegroup create \6 S! u0 q& m( R: g/ m
--rgw-realm=realm_1 \+ f$ h: A% K6 Y$ S/ X9 ]; O" }
--rgw-zonegroup=zone_group_1 \
! [: ?0 J' s9 | --endpoints http://ceph101:80 \
7 O, W) f% C$ B! a --master --default7 }6 F5 w- l" [$ G3 Y7 H
* q. R3 _; n! T. v6 |

* O/ z3 d  x+ J1 k3 O& A# a radosgw-admin zone modify \
5 u: }  Y1 n2 Y9 K8 e- W1 f3 | --rgw-realm=realm_1 \& _# X8 R& B# M+ {3 H0 E
--rgw-zonegroup=zone_group_1 \
) X' @5 [( _6 I --rgw-zone=zone_01 \& h+ _! s8 ]3 u8 F8 }  }
--endpoints http://ceph101:80 \
6 ^: L8 Y4 j3 _ --access-key=IAWL6PLNFMNM0SLQNWQ0 \! H, |1 Z5 S8 C1 d' N0 d6 X: `+ }
--secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
+ [8 _6 x, t" K; P/ `# x6 m7 | --master --default / r0 s8 }9 W% X2 x2 D& M/ E7 @
6 i4 C9 u1 H7 y: @' [9 m, [; l. y
radosgw-admin period update --commit; `* ~) Z1 E" W' B. t( B8 P
radosgw-admin period update --rgw-realm=realm_1. I* g. |( z" ~
ceph orch apply rgw  realm_1  zone_01 --placement="1 ceph101"$ F' u; [$ z7 V8 @

! b$ p5 `5 t0 z3 q% @2 m# {' j9 C上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:' X  @5 L& z6 ?! s' Z
bash 体验AI代码助手 代码解读复制代码1 Q* d  e/ o" j% E
[root@ceph101 ~]# ceph orch ls
; h/ N+ Y$ E- I! W3 ~- fNAME                 RUNNING  REFRESHED  AGE  PLACEMENT                                IMAGE NAME                                IMAGE ID
9 ]. b. V5 r  }8 K3 O4 valertmanager             1/1  4m ago     2d   count:1                                  quay.io/prometheus/alertmanager:v0.20.0   0881eb8f169f( m/ L  V$ v4 `) y5 B
crash                    6/6  4m ago     2d   *                                        quay.io/ceph/ceph:v15                     3edede73a7c4
9 x# s, W% p- pgrafana                  1/1  4m ago     2d   count:1                                  quay.io/ceph/ceph-grafana:6.7.4           557c83e11646, F0 k& h" ?2 `0 Y
mgr                      2/2  4m ago     2d   count:2                                  quay.io/ceph/ceph:v15                     3edede73a7c41 j& J+ B- y9 m9 Z) L
mon                      5/5  4m ago     2d   ceph101;ceph102;ceph103;ceph104;ceph105  quay.io/ceph/ceph:v15                     3edede73a7c4% f' ]! ?4 E2 l  \( J: D
node-exporter            6/6  4m ago     2d   *                                        quay.io/prometheus/node-exporter:v0.18.1  e5a616e4b9cf' D1 _3 o3 C- s7 x
osd.None                12/0  4m ago     -    <unmanaged>                              quay.io/ceph/ceph:v15                     3edede73a7c4
! B: {" ~2 H2 N7 c" V7 e3 {prometheus               1/1  4m ago     2d   count:1                                  quay.io/prometheus/prometheus:v2.18.1     de242295e2256 o) D8 `. S  W- _( d& E% W
rgw.realm_1.zone_01      1/1  4m ago     75m  ceph101;count:1                          quay.io/ceph/ceph:v15                     3edede73a7c4
- L' w9 p; p5 D6 E# q
" o0 n% F, s, ~) h& l( L7 w! \( Y
2 \) s* O: p8 }0 X如果rgw进程无法启动的情况,可能是集群不健康,查看log:
# a3 ?6 E+ H* }* B1 V& h7 aceph log last cephadm/ V6 n( u# |* v0 S& }1 a0 p, |& y
/var/log/ceph/cephadm.log& y: I  d- W! X2 i6 k3 c: g2 e
bash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm
* I3 j, E: ~* P/ D' i2022-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 healt0 F5 V. N0 x( U0 }- y' L5 M
Traceback (most recent call last):) ^1 o( @+ X4 m1 @: J
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
7 R- x& i( s' ^4 a/ X    if self._apply_service(spec):6 t* ~" _( O3 E7 i; i9 C
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service5 x' L- e7 L% z; q; L; G/ g
    rgw_config_func(cast(RGWSpec, spec), daemon_id)1 G" d, K; r$ f) j
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
" T( C; ~6 ]  \! d/ |5 X' l! k    self.create_realm_zonegroup_zone(spec, rgw_id)  F# Q9 T. b4 e0 c7 m* i
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
- v6 Y" `! f* B8 {    raise OrchestratorError('Health not ok, will try again when health ok')
5 b! f" G5 h$ E! g* yorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok& L$ a/ ?+ P- B% f" D; K; {
2022-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 ok2 l$ i2 \0 G$ y& C" D$ `
Traceback (most recent call last):
4 h% m3 n# y8 p" ?: G) k% V: X  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services$ Z8 r. r; H& R, k1 s8 j6 J
    if self._apply_service(spec):
2 _! q" y8 c1 c& Q  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) _' l3 P2 L! ]# d+ c    rgw_config_func(cast(RGWSpec, spec), daemon_id)
0 D. m) `/ g  t3 e# n" A. z  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
2 L- P  P' D0 S    self.create_realm_zonegroup_zone(spec, rgw_id)
3 D& ?  }0 Y2 g3 |  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone4 G4 |2 n0 v. U$ k: b3 z/ V8 o
    raise OrchestratorError('Health not ok, will try again when health ok')) `! T0 e. k: R( l7 H
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok% M  s2 `( m7 ~. |/ R
2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts
7 k( D9 Y! p* D" g* H# q1 w2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts$ y7 y, U% r" u8 Q( v/ {( Q0 ~
2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts6 ~& l* ?0 E. C" \
2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts
7 x) K# Q# g: h6 C2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts: t7 s8 H3 m( Y$ s
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts% C6 P5 |$ P6 n( N2 i- b# G) z3 d4 I
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
! r/ ~  R9 i- M. N! s. c1 E! yTraceback (most recent call last):4 C+ x+ ^; Z% d. F5 p( f
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
& T# |; e( X+ X1 }3 f8 z( o( t    if self._apply_service(spec):
0 h9 W, _, h5 i  K) M. H( L  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
7 E& h6 L: a! n( A; N/ {  _5 D1 K    rgw_config_func(cast(RGWSpec, spec), daemon_id)) _+ x3 b- {% {: L& {
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
" d) B2 I, _  I1 o" U) Z: a    self.create_realm_zonegroup_zone(spec, rgw_id)# |" Q' b' }  i' G
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone' a( ?$ Y+ M0 l+ J0 v( E; T
    raise OrchestratorError('Health not ok, will try again when health ok')
% I1 h% M2 j( k9 corchestrator._interface.OrchestratorError: Health not ok, will try again when health ok7 [: T2 E7 y: j1 w2 J* M& f
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 ok  M7 q! K  z2 i& Q3 {, m; y
Traceback (most recent call last):
9 y1 p2 E+ k" _8 T  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services0 s" M5 T8 t* i7 H/ s& O
    if self._apply_service(spec):
! [' o0 F3 ?, W2 U  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
9 M& v& _3 c" C" e# ^    rgw_config_func(cast(RGWSpec, spec), daemon_id)
3 q) Y) O2 n  v' f- p8 {( k% l  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
8 W' E$ t! B6 T    self.create_realm_zonegroup_zone(spec, rgw_id)
  `$ s* L& o" s( V  z; s  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
* i2 ]0 M9 w( E$ Z9 o1 |    raise OrchestratorError('Health not ok, will try again when health ok'): E9 ^% H  q1 m6 R
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok& I: p4 u" q" q) {  w
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
  o) P) l9 G4 ^  o, `Traceback (most recent call last):
- k- t: U8 o, m+ h  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services/ t1 `" e' e, G8 i
    if self._apply_service(spec):
4 Z" O$ P4 C! L  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service8 ^1 |4 w5 }0 k# K- N4 O
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
3 M+ }2 h9 v7 Q# v3 m4 v% b  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
* a" a4 m; R8 E9 p    self.create_realm_zonegroup_zone(spec, rgw_id), _+ B$ \$ m$ s2 i" o' m- d( K
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
) K+ C" x1 Y+ @    raise OrchestratorError('Health not ok, will try again when health ok')
1 s/ Z8 Y. L1 {6 M0 yorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok+ F. t3 H9 o& }8 {( l2 r' f
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 ok% V  s' ^& n8 o/ N
Traceback (most recent call last):
8 @' ]9 x" H* p! k! y  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
9 z& R& v) k7 o: z    if self._apply_service(spec):6 B: p5 ^% s% p( e: c& `2 u& ^1 L
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
5 K. f: ~. q& S3 W: g9 V4 X6 S    rgw_config_func(cast(RGWSpec, spec), daemon_id)
- _2 I7 D8 p) e9 t, k- b  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config6 G* N% |/ o  ]  C2 r' n* @
    self.create_realm_zonegroup_zone(spec, rgw_id)4 w6 c1 r, d8 a# @
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone' M" X: Q6 ^  Y/ h- E
    raise OrchestratorError('Health not ok, will try again when health ok')
) u% B0 r1 M1 z9 T% Q! Jorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok0 ]- z6 r% j; R$ U) U0 G
2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec7 i3 i! H: h3 J; X) h7 e& R
2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts
* m; L* g* G. D, y' v# r# F2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts
7 t5 g/ \5 }" o. |1 h2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts
" Y5 A! ~# O; l1 ]0 d( D2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts& [' L; Q% s  S# ^# K9 Z- c) @) s& ]
2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts# }2 G/ [4 U5 l* E' s# y2 @
2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts
% v# f# H8 ?) A3 n$ k# c+ s2022-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
/ _* J3 Z! I1 NTraceback (most recent call last):
: R3 p# R" M, v8 _/ |+ @$ ]  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services3 J& E4 K# V7 Q$ g  R/ O7 T
    if self._apply_service(spec):
  M- c9 U3 t2 Z  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) I; @, A# R$ @5 v* i    rgw_config_func(cast(RGWSpec, spec), daemon_id)1 z& m5 k% T! G; u
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config6 Y& S  p9 b! g4 A
    self.create_realm_zonegroup_zone(spec, rgw_id)
; M' V  A( C/ T$ x- v/ P* z6 I, F  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone/ k- R/ o' X, t/ R7 k' G/ ~+ h
    raise OrchestratorError('Health not ok, will try again when health ok')
. y7 t$ V  g2 l' |orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
, Y4 j- r5 b& k7 R. b2022-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
0 k7 c$ J; C' v2 l4 E6 F6 ATraceback (most recent call last):
/ Z: i/ ~9 ?- w3 E, I$ e  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
6 h+ ^) v4 e: y: }1 i    if self._apply_service(spec):
) q0 F# n1 u# e  d1 x  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service/ g- ?6 j5 U) m3 ?$ a. ~
    rgw_config_func(cast(RGWSpec, spec), daemon_id)# z0 M- u! m9 F2 G) |
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config) u6 K/ W& ]) z- D: k+ L! h" |
    self.create_realm_zonegroup_zone(spec, rgw_id)+ {+ |; E" |6 ^3 ~# R& V/ u
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone) d- w0 W! f8 y8 X6 T* a# J6 E6 Y/ D
    raise OrchestratorError('Health not ok, will try again when health ok')
& o2 d2 V9 v0 c. Oorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok+ v& g; G# ~( ?1 I; `

" @* x/ f! m* r% I& X* ^$ }' E$ B) X8 N! K( a# e: Y
8 ]$ ~. K! {) p% _
进入到docker中
3 [/ g& s" ?1 Ybash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh
2 D& C8 H( B5 }, ]& X0 R7 r3 zsh-4.4# cd /usr/share/ceph/mgr/cephadm/services/
5 A( n2 i$ m2 Tsh-4.4# ls/ l. l/ A7 f/ }0 b" I* l, s
__init__.py  cephadmservice.py  container.py  iscsi.py  monitoring.py  nfs.py  osd.py
/ O4 b0 b# l2 y  b8 o/ [sh-4.4# vim cephadmservice.py' L, x' ^; _4 K5 [- b9 _% h1 Z7 s
sh: vim: command not found6 A- p" s4 [. k/ O
sh-4.4# vi cephadmservice.py+ B5 [5 B  B. p4 S+ \
##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。
" V5 f3 i8 A- Y#进一步,将集群调整为健康状态,再次尝试,可以正常) F0 P& S4 E0 e2 @% s
+ i5 @1 D( K$ N$ X) j
访问s3对象服务,windows下安装S3 Browser& x( I2 F+ T. t$ ?% o
' W7 o. v4 D5 H0 s
创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。
+ F  F& \  `! y$ a( l, ~9 I- M其他常用命令:0 r  X0 v0 [8 |) @$ O
bash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_1
" g) i- R, ~. B! Q radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_10 o. b6 x3 u2 n/ U4 ^5 k' T. F+ @& c7 A
radosgw-admin zone delete --rgw-zone=zone_1, D0 ]# E6 N6 P" j* ?% `& b! ^
2 s2 l8 l4 d0 K/ H1 @8 u
radosgw-admin realm list
7 O" k) Q: d% Z; n: H/ Bradosgw-admin zonegroup list
8 R" x9 k7 z7 S" P$ [5 }radosgw-admin zone list8 v6 n  W5 a6 w: e9 _7 \3 j/ V
radosgw-admin zone list --rgw-zonegroup default
4 `$ p2 u- v# k# Q4 Jradosgw-admin user info --uid rgw_admin --system
; d7 x) S9 ~% c/ M, y. G& F* [" b3 _) D, O- Z0 r
s3cmd mb s3://sec --region=zone_group_1
- {) K- D5 z8 A! C. C: |" `" D$ v: ^' r

# r$ N6 c' k; [( Y+ @& z- w- m' E6 L配置dashboard:
1 N& E+ `3 r% wbash 体验AI代码助手 代码解读复制代码 1752  2022-05-09 11:21:28 radosgw-admin user list& `( u" X+ v& R5 i  o1 B0 c. B
1755  2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin( A0 i& g/ w* \
1757  2022-05-09 11:34:44 vim access.key
2 h* e1 [, b. d' l 1758  2022-05-09 11:35:00 vim secret.key
. f4 B9 ~' \8 h# v' A 1759  2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i  access.key. T% j8 L7 U0 \* n. ?! t( n
1760  2022-05-09 11:35:34  ceph dashboard set-rgw-api-secret-key -i  secret.key+ _2 F: E! s" X' d
1761  2022-05-09 11:36:49 history
" W. h9 Y; L+ s" f4 n) x5 A) X* p+ n7 s. x6 ]
在前端可以看到$ B: M  \* H6 |7 @  w

2 N6 C# s$ J. ^  Y% o搭建主-主备份/ E: R. R% q! u7 u6 D; z1 U3 @
bash 体验AI代码助手 代码解读复制代码) H- F, C) u' D; n! L9 u
; U  Y; m, M: T4 [$ `% U( F3 l
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo  P6 `+ e6 h' d: b9 L
- q* S, j( G: ~( I5 [# B
radosgw-admin zone modify --rgw-zonegroup=zone_group_1 \0 s; c( r8 x" \  d8 R
                            --rgw-zone=zone_02 --url=http://ceph101:80 \
" J: p  J- j7 ^9 |/ e! ^                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \" t' h" M3 G5 D) t7 V0 i# ^
                            --endpoints=http://ceph1:80 + y* X$ \8 R% h# p8 H2 d, ^
radosgw-admin period update --commit: R. Q' D8 D6 @" j5 Y( {0 J  I6 _
ceph orch apply rgw  realm_1  zone_02 --placement="1 ceph1"; _# s) m2 [% F' q

+ A6 k5 E4 w, r查看应用的配置
- L" I' o+ U9 j8 Nbash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump+ i8 y) m' ^' i+ m8 k7 p
6 u7 I$ V: s. W& c/ ^

, ^* }' r" J9 I[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd1 D5 ~: _6 J$ L- A, ~" O* F" e0 B
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7
% Q2 @; f$ J8 f[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll
3 s0 M. k  Z& C+ ^- k4 U总用量 0
) [# `. B# d; w9 `drwx------ 4 ceph  ceph   92 4月  27 18:52 crash
' }0 U- b+ F9 n, ddrwx------ 2 ceph  ceph  133 4月  25 16:07 crash.ceph5
; p* F: {# |! ~drwx------ 3 ceph  ceph  190 4月  27 17:04 mon.ceph5
; }9 G) k6 ?& r3 }$ t( u$ X/ Wdrwx------ 2 65534 65534 104 4月  25 16:07 node-exporter.ceph52 J+ H! a9 p! q
drwx------ 2 ceph  ceph  241 4月  28 19:42 osd.4$ q1 Y3 ?8 P; ?. F6 ^% Z
drwx------ 4 root  root   88 4月  28 10:59 removed
# X9 B* t5 P3 w; V  K; y" H! t( ldrwx------ 2 ceph  ceph  133 4月  28 19:57 rgw.realm_1.zone_03.ceph5.tapydb
7 U; B) w) M) q, P9 h& z: a; j' C& f! i6 h) r' a( V, s7 P8 I
- A& q, ~% l! c
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb
( H1 F& L  @! O+ BNAME                   VALUE                                                                                                                                                                                                                                                      SOURCE    OVERRIDES  IGNORES
9 O. R% X: t" x3 t: ladmin_socket           $run_dir/$cluster-$name.$pid.$cctid.asok                                                                                                                                                                                                                   default6 q! L- K5 W! W$ i
container_image        quay.io/ceph/ceph:v15                                                                                                                                                                                                                                      mon
# t& h( _0 h; x7 p- @7 p8 pdaemonize              false                                                                                                                                                                                                                                                      override0 e4 P9 T9 O5 t4 w4 f( |% {
debug_rgw              1/5                                                                                                                                                                                                                                                        default
$ J# U, n& N$ x4 j/ @) e4 Dkeyring                $rgw_data/keyring                                                                                                                                                                                                                                          default2 D: ^0 H2 L# h' c, l. w. ~2 Q
log_stderr_prefix      debug                                                                                                                                                                                                                                                      default- J! D8 H0 q% e" I: T4 _5 x
log_to_file            false                                                                                                                                                                                                                                                      default
5 j8 k5 {; @! A: i9 S1 i) I- Ulog_to_stderr          true                                                                                                                                                                                                                                                       default: p6 G1 F# V7 S
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]  file
5 z' a, U9 u7 ~4 pno_config_file         false                                                                                                                                                                                                                                                      override
1 Q% [) s7 P1 D3 ?. robjecter_inflight_ops  24576                                                                                                                                                                                                                                                      default/ V# x* T- X- y9 ?+ O" r, H
rbd_default_features   61                                                                                                                                                                                                                                                         default$ k$ Z. t! v! j& M7 z, E
rgw_frontends          beast port=80                                                                                                                                                                                                                                              mon
+ ~4 k+ @8 a1 r- N+ j2 H6 Q4 o5 hrgw_realm              realm_1                                                                                                                                                                                                                                                    mon% l; i% |/ k+ B# A" l
rgw_zone               zone_03                                                                                                                                                                                                                                                    mon
6 V2 |& E( j) N* wsetgroup               ceph                                                                                                                                                                                                                                                       cmdline, e+ R5 c. u2 X' A) ^
setuser                ceph                                                                                                                                                                                                                                                       cmdline
- u# O; l0 H: N: p. S9 s- ]$ ?" d; {. r, M1 \
对于想修改rgw启动端口的,可以修改配置文件3 I( o. a9 B( ^6 h. U2 T
bash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关2 x8 K3 `& ]7 f5 _
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo
% l' m! [" a+ d7 H
8 L' B( d) @: Z/ r9 Q" [- x+ Mradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \
1 Y3 M3 y: c0 d* o4 z) ^( x                            --rgw-zone=zone_03 --url=http://ceph101:80 \* q2 [# i+ ]9 D4 f0 Y# Q' [
                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \" X; J$ Z3 \+ M6 M3 `( ~# T4 Q: g
                            --endpoints=http://ceph5:8088- ~9 [9 w/ |( u
radosgw-admin period update --commit
. a" O" q! B1 \: N9 y# }8 cceph orch apply rgw  realm_1  zone_03 --placement="1 ceph1"
  X3 S  t* `* t$ v
5 t! M7 m+ W1 b7 T/ @8 O; O0 j$ {$ R7 E" i, g! m$ R3 f5 `
[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd3 h, M. b  _2 d0 |0 Y
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
8 i5 Z# R1 E5 ]% b[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim
2 ?- L3 e6 @# ~. v5 h* M9 w3 f7 Y+ k$ n* _7 f& `  f
`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7
( [; I8 R3 P5 ]$ n: W6 v[global]
$ Z; B1 a! y. x; K        fsid = f88b0b1a-c467-11ec-a2b8-525400299ff7
! q" C' P9 f3 d* n" i' v& V        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]( @3 n( i% ]0 E' w- ]% g$ d) N# n
[client]% a" ]  Y* n: f; r, i! V# A
rgw_frontends = "beast port=8088": }( i* [8 k9 R$ f: I
`
( F6 t( i( A# N% Q#然后重启rgw服务
" A$ v0 Q  ], f' G& B! b- F#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends  "beast port=18888"
+ s8 C7 K" M, q, r$ t#去掉config中的配置项,重启服务,也可以生效
# E! i2 h  d! R$ d7 \! W& i* w#至于精确的配置如:7 `& A9 R7 `! {- ^; z! h8 @1 j
`
8 M" {: M  l* r0 O+ {% @# J8 b: K[client.rgw.realm_1.zone_03]! ~2 U- {/ @" b
rgw_frontends = "beast port=8888"4 P% ?6 V" c/ b' \% W9 }
`9 I" L: w6 n$ G, w
#试了很多次,都不好用,官网说的不明白  s0 A3 s. f9 q$ o* y

  P5 ]9 T1 a+ U9 m7 `参见:* L3 V* e& K. q) O$ J2 d, T
: h; T9 |6 T* ]* |
指定rgw的数据池9 R' J0 N& q! @% C9 _$ L
; z1 t% [2 M* O3 R# {2 B+ g
移除osd
/ C7 M$ B1 F  d- ~1 P% |$ lbash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:3 a, [0 d( F* N/ J; |* ]9 O. v
将节点状态标记为out (节点已经不再提供服务)4 d* g1 W0 H) ]8 @
[root@ceph1 ~]# ceph osd out osd.5
$ T6 D9 k6 V% u9 |从crush中移除节点(不删除会影响到当前主机的host crush weight)* ~# o& t5 t* m# T4 e
[root@ceph1 ~]# ceph osd crush remove osd.5" O, Q2 H* H0 c
删除节点& I- `4 X1 h( p3 `( o6 k$ f; g
[root@ceph1 ~]# ceph osd rm osd.5# D+ Y2 n; J0 J! J
删除节点认证(不删除编号会占住)( r0 L; ^9 j0 @& E6 z# J6 }& f- \! i
[root@ceph1 ~]# ceph auth ls
$ Y# f; V& b* j$ k' W6 }& p2 l' l[root@ceph1 ~]# ceph auth del osd.5
! [! Y, j! |3 ^$ v[root@ceph1 ~]# ceph orch daemon stop osd.59 Z8 g2 K( d; p
Scheduled to stop osd.5 on host 'ceph6'& u( \2 b+ R, ?/ |3 Q/ P% r! L
[root@ceph1 ~]# ceph health detail
& c* d* c' D) G7 MHEALTH_WARN 1 failed cephadm daemon(s)
# j* @3 ], u6 |7 Z9 ^' y* x9 l[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)
! p# U/ B& ^- X2 B    daemon osd.5 on ceph6 is in error state% H  Q$ _; _  R" ~6 A/ |) e" t
[root@ceph1 ~]# ceph orch daemon rm osd.5 --force5 W8 v) E4 d' D2 h, o* h- s
Removed osd.5 from host 'ceph6'
+ _6 K  J0 m. C" J) \2 x, s; }( o# l
恢复磁盘:7 ~6 i6 S* `, o* C0 x4 W
找到某个未加载的盘,有两种方式:
6 e  p+ v, |9 n* j* nbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata
! E" i$ \' ^8 P& Y, Q2 k6 f- ^- h. G% J, C; z" G* b: J4 D

. }5 q" i* b4 [3 hbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd
. N0 a, T. T' @; K/ F7 N! P* V, ~  X/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z
. @; f8 ]9 l' b; B7 H[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll
$ C: w: \& x! T5 r$ O7 K0 Z5 G总用量 52
/ n9 O, `8 q0 f. W9 [* s$ Slrwxrwxrwx 1 ceph ceph   93 5月  10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f3* K8 n6 i: o# C- V1 \
-rw------- 1 ceph ceph   37 5月  10 12:47 ceph_fsid; N2 {% w5 {& d2 C# w
-rw------- 1 ceph ceph  377 4月  28 19:43 config
  X6 j/ u4 \# C' p9 q+ G-rw------- 1 ceph ceph   37 5月  10 12:47 fsid8 y" i- Y2 X, n: ]: J$ D6 ]6 m* M
-rw------- 1 ceph ceph   55 5月  10 12:47 keyring% A8 y2 Z/ R2 Y) j8 v& ~
-rw------- 1 ceph ceph    6 5月  10 12:47 ready3 ~1 ?2 j7 X% X, }! h
-rw------- 1 ceph ceph    3 4月  25 17:04 require_osd_release
9 J5 t+ n7 Q% B  I9 Q-rw------- 1 ceph ceph   10 5月  10 12:47 type% v( B& I8 L  ~! y! M# _9 `
-rw------- 1 ceph ceph   38 4月  28 19:43 unit.configured
" ^2 V# M& ]* b  l6 \* x" E. g-rw------- 1 ceph ceph   48 4月  25 17:04 unit.created
* x4 ^/ U' |' |. n, d0 ]/ u; `: `-rw------- 1 ceph ceph   22 4月  28 19:43 unit.image
' E! O- M* r! X! @. d/ D-rw------- 1 ceph ceph  931 4月  28 19:43 unit.poststop$ ^9 M" c/ x  Y) `3 o. G9 v
-rw------- 1 ceph ceph 2035 4月  28 19:43 unit.run
, z  U$ u3 x9 x: X/ k; z/ [-rw------- 1 ceph ceph    2 5月  10 12:47 whoami
8 F0 Q9 h5 \2 Q5 Y9 |
$ d% @5 r. P2 c) t  Q
- `0 T% R5 M7 Y5 d9 Q% @' w' Y[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk: `8 l" I$ C. K: K" b" M
NAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
5 U" O4 Q. x- F: m  p+ C  yvdb                                                                                                   252:16   0   500G  0 disk) V5 h, x! b6 g8 s* H5 Y
└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4    0   500G  0 lvm
: e$ `" ^4 Q3 F' b# v5 O& {sr0                                                                                                    11:0    1  1024M  0 rom
) _2 r% [/ N* i7 ~4 cvdc                                                                                                   252:32   0   500G  0 disk: Q! w3 b/ W3 N0 b4 D! y
└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3    0   500G  0 lvm
, ~4 `6 F& s) W6 c" [vda                                                                                                   252:0    0   500G  0 disk$ J/ o/ t. e$ m% Q$ Y
├─vda2                                                                                                252:2    0   499G  0 part
1 O2 z" t! }5 U/ d: a│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm
4 _. `# W0 y$ a│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home  w) z4 u) o9 \* q" n( j
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
9 P( U7 F, L6 N7 q# G# g8 {└─vda1                                                                                                252:1    0     1G  0 part /boot
6 w. l; Q) U9 l, ?& i( m. o) O/ u/ i
可用确定是ceph6上面的/dev/vdb块设备
/ |9 x% x! H. B2 u% ]bash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用
% O" i, `; w: B, Q, V* F) H
- ]& m/ P  a* k3 O. W8 F[root@ceph1 ~]#  ceph orch device zap ceph6 /dev/vdb --force- _* m2 t3 a* M* ^2 n' K
/bin/docker: stderr --> Zapping: /dev/vdb3 M8 k" R: m2 y) d7 i' [5 J
/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync
9 F  c9 }+ z  l5 o* S8 K1 d/bin/docker: stderr  stderr: 10+0 records in
% }9 {/ f/ G: Z# R$ O, Q/bin/docker: stderr 10+0 records out2 S5 _# A2 `# G  F4 q! Z. R
/bin/docker: stderr  stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s& \; {% |) i/ H
/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>
+ `; v7 r* _# d. r1 X, t[root@ceph1 ~]#  ceph orch daemon add osd ceph106:/dev/vdc9 q4 m; v) N# l
ceph orch daemon rm osd.5 --force1 o$ i' z( p% l4 v# y; _
ceph osd out osd.5: {$ X  j# m- h8 D5 L; R
ceph osd rm osd.5
& o7 M# t& |* ?3 x' Bceph osd crush rm osd.5
$ |7 }( h2 e" h1 y! A# z* |* w/ o/ s( r5 ?3 r" C9 S% B/ J1 q
pg故障处理
7 p; y6 N9 {' C3 A6 zbash 体验AI代码助手 代码解读复制代码
, z# |" R) }. Q4 `4 z9 R+ Z8 _3 {
1 X3 {# W$ d4 `: o3 T[root@k8snode001 ~]# ceph health detail
; q' J2 U. E/ N1 R& O/ yHEALTH_ERR
8 x% |' n. r4 l! [. E9 ] 1/973013 objects unfound (0.000%);
$ \4 n! C4 w, c17 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
+ ?4 c! o- g" g' y% R6 o; G5 UOBJECT_UNFOUND 1/973013 objects unfound (0.000%)
6 `4 I: S+ n9 Q- ^5 y    pg 2.2b has 1 unfound objects6 H9 d3 o* r% ?. s. |( t' p
OSD_SCRUB_ERRORS 17 scrub errors0 o- l0 i) I- `
PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair( Q, A$ m. S4 q6 a  Z& C$ S8 ?9 m' p
    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound: Z9 i! h' _( ?
    pg 2.44 is active+clean+inconsistent, acting [14,8,21]
( q4 _9 A+ `+ |    pg 2.73 is active+clean+inconsistent, acting [25,14,8]. z9 S1 m% K5 w* q) u
    pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]3 d/ A! p0 T% t0 @3 M( [
    pg 2.83 is active+clean+inconsistent, acting [14,13,6]( l! \8 ]( J8 ^: j; x1 N
    pg 2.ae is active+clean+inconsistent, acting [14,3,2]3 F4 a5 I; O; w' ~" j8 j! \
    pg 2.c4 is active+clean+inconsistent, acting [8,21,14]
8 f+ n# ^7 L2 t    pg 2.da is active+clean+inconsistent, acting [23,14,15]8 n$ q9 F5 Z% d* n+ v- {  c/ P
    pg 2.fa is active+clean+inconsistent, acting [14,23,25]$ ~" `% C. E7 G* x0 f0 j
PG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded0 P* m+ R7 i9 i9 j' A
    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
2 c4 E7 o0 O* [+ ]& o
" Q( J! S" _4 L* v2.查看pg map
$ B; ?* c" m' r8 k[root@k8snode001 ~]# ceph pg map 2.2b
9 Q2 F1 g! f( K9 w  Dosdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]
9 h4 K! ^: I$ T3 d从pg map可以看出,pg 2.2b分布到osd [14,22,4]上
  v# N. V4 l3 ?0 w2 t! B
: E2 \1 J- o2 d( J3.查看存储池状态0 H5 z" g% i" X% i
[root@k8snode001 ~]# ceph osd pool stats k8s-1; h. p7 P" a2 K4 }4 D: Z$ s
pool k8s-1 id 2
6 d/ n, z6 K$ d1 J3 w# v7 q+ ~  1/1955664 objects degraded (0.000%)
8 M. b+ O4 @5 @* b& U  1/651888 objects unfound (0.000%)7 b2 U4 _5 R' N& @0 L+ G: G, n1 N
  client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr
1 Z8 J$ W* T8 R& D2 n$ ?
- v3 u/ @6 i4 K( H! @/ x8 |7 [8 |[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-1
% M9 w* K7 W3 O8 \+ _# S6 Q: wpool 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 rbd
1 U% g! x* W2 \# B4.尝试恢复pg 2.2b丢失的块- _6 X$ i$ B$ M0 F
[root@k8snode001 ~]# ceph pg repair 2.2b& t) \7 g2 r8 }8 V
如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
+ a8 g2 y7 m: y# h[root@k8snode001 ~]# ceph pg 2.2b  query# a) b+ s6 ?( B* C' j
如果repair修复不了;' Z" a& o' a0 m. C
两种解决方案,回退旧版或者直接删除
% M" p0 s5 W* _9 k) L回退旧版/ [3 \2 v) q% _1 P, Y/ X
[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost revert3 i3 E- M. V! a
直接删除$ K& B0 S! x% W/ _" p3 }9 o* R
[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost delete$ W& h# u0 q+ g( M' N' G0 E3 k0 I2 V

8 m3 i  t5 n7 i参考:记一次ceph pg unfound处理过程2 E7 H$ G# w* A- B& x/ k
卸载6 T  D4 k+ _2 X9 d% F# n' @% O/ S# _- d
卸载过程:
9 @, B0 x0 F  s: `bash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'6 s( A" J4 G. T* ], w
#找到fsid1 [& E' K* V: L& Z! x( T$ n
[root@master1 ~]# ceph -s
" [: \+ g8 s% ~; m  L7 nInferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6, j, |% r0 m% m4 f. c
Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config7 ^# {3 k' `' \) t6 V' }
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f! K0 o3 x! b0 ]3 s. o
2022-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
* Q0 i/ B4 y! V7 ^2022-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 cephx6 o& h4 ?5 [3 [9 s) X
2022-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+ [! L2 m1 R6 l& _
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
. F7 t1 }7 A! U8 T8 {+ @6 J2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]
9 k' J3 A- b$ }$ X' l. h2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication1 k  D/ ~* G# d6 \9 k. Z3 ~3 e
[errno 13] RADOS permission denied (error connecting to the cluster)  ?! ^; `/ Q9 a( {8 ?
5 M1 e" S( G1 C% m( ^% D4 f# M% M2 b
#使用fsid删除集群
' j, R; J( v1 y[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force( S4 K9 b/ }& N  l: D

; R# y$ I' j. m
- [6 {/ i$ I% ?分发ceph.pub! X1 ]4 M  ], E& L$ t7 d4 o& E
playbook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub" ' C- G& N0 y$ o0 x) V
3 A! [( ^  e5 |: Y9 R6 [  K' E2 K. R
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 _* o- h3 z1 b) B- Q5 E& f/ @, V3 h0 ~1 z
使用 ansible master0 -m setup 可以看所有的变量
* M0 g+ \: S; M, o) K6 I0 r参考:ansible.com.cn/docs/playbo…0 X% b! `/ Y& A' ?7 T
jinja2参考:
9 o' M3 g& M" D2 S7 d% m5 Cstackoverflow.com/questions/3…
- A& x' z! C3 Z, V8 ?, A8 L; G& _2 ubash 体验AI代码助手 代码解读复制代码 playbook -v  2.mon1.yaml4 n" z  s- H; o1 ^- |7 T. i
playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"
: ^/ m/ Q/ ^! [5 F2 Z0 e. G% J" F playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"
3 V" }$ b- H+ }  B7 b) P# e# J9 B0 ^9 _9 V, m
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。' A; T; B/ _0 T& \, e8 q

/ v% i& ]# m; g/ O0 ~6 W添加(add) 在某个地址上新增一个名字为的MON服务。* t1 L/ ^( q' @/ }
示例:
5 ]5 }8 h6 E2 n$ @( u4 G+ G7 fceph mon add  <IPaddr[:port]>
" W0 v& I& N0 m. @! a% Q0 f, \+ S导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:3 t8 P) X5 N2 x3 x
ceph mon dump {<int[0-]>}) l# K. @; w& z. V5 Q' `
ceph mon dump 1  d0 p4 M" O! A0 p& u6 i- [
获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:, r7 Q" t. u5 z4 E. m0 b" R
ceph mon getmap {<int[0-]>}! `5 s" d- E7 G: h+ u- Y1 a# a. G
示例:. n0 H+ k9 F" J. o
ceph mon getmap 2 –o filename- H& E& `! k" z2 e
移除(remove) 移除特定名称的MON服务节点。具体格式如下:
: a1 x9 ^! z, y; j. Y# Z5 qceph mon remove ' k# j/ \9 V+ }9 C5 H  D- o- c
示例:  F+ `& ~- l7 s7 r7 f
ceph mon remove osd3
* Y; J  M' V8 r, ?获取状态( stat) 显示MON的摘要状态信息,具体格式如下:3 z$ L9 e+ g8 i' q5 y1 z
ceph mon stat
& a. m0 s( F5 \0 O! d报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:
1 s; W3 N& W6 f) E/ J8 _ceph mon_status. s9 `% V# s$ K: f6 q; U" P0 p6 `
Ceph命令之ceph mon(Monitor管理)! h; x$ m% Q- V; _( T7 I. Y) h5 B2 Y, u
. ]% }& \+ j# C5 e5 c
% H! P2 r4 I6 Z: _9 D; z6 v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-11 22:55 , Processed in 0.021858 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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