易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 112|回复: 0
收起左侧

centos 7.9安装cephoctopus版本记录

[复制链接]
发表于 2025-12-18 11:00:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
软件版本:
0 ?& w! i5 Y0 g, P- o! N0 R8 a, s: T4 r/ d
7 e4 O) p0 A* j

7 x+ J/ G* B0 P4 {2 x( s5 f* ?# e
. [1 {4 t) ]( Q" e, v- a( S, g
/ `+ s: D" S+ K# W
% U2 }  q) ]6 l
" }+ G. D' ?  J. R) @) ^
- ?! ?$ F/ q4 s+ f2 b% C& E; p( H& u$ g& X; U$ Y/ M
2 U) n' B# ]3 D- N5 z9 G+ U7 C
* U; b1 v; A; P% b5 j" {

8 t/ B6 Z" j6 |
. r; g4 G  d$ e$ b& ^$ M4 n9 @, g# w' d( ?+ O4 o5 z$ I

3 g9 ]% J+ d/ @+ q
1 f5 ^; ?4 @5 e2 N9 ^% o7 |/ d3 D' r$ w; n
软件版本cephoctopus(15.2.16)centos7.9
1 ~% e; u+ Q3 ]8 Y' h9 p1 X+ Tceph官网版本:1 @$ B! e6 A1 @, L: e/ U+ C
docs.ceph.com/en/latest/r…
. h( I1 ]: }1 U机器列表:- q: Z( v1 x0 F+ _: B2 S
  N5 m" L1 u# r
" V4 w7 C  t+ K, q# S' ~% L, h
8 i3 y- D9 h% V/ h

8 R* p- }" k# T% d- a
, Q1 W& V( a* d/ w4 g0 X2 ]& K) }3 R* ]0 s# H0 C! B- ?& z( Y3 T; r
/ f; {5 F; f" i, g

: x, \2 a6 n* m9 O) G; ]
9 c- ]5 w7 L/ Z9 Z& \
6 g2 z+ ~2 n" [* r% C9 P- B- D, _
5 j3 }( L' ]2 \3 m4 x
" N; ?/ U3 ~5 h& R- \. l, |6 |4 W& `' H0 g# x2 t, m7 Z9 o
* a+ C3 K7 n4 D; D/ ]0 W4 y

% a) I" G& P9 V4 @6 k( N, G, k8 U- h* w6 ]( `2 ?, Y

* {5 y: e% _6 o, e& V' T. H( r) Y: q4 G/ K
, c+ h* O3 P+ I! Q) I9 @; H

7 f/ ], ~2 v, A( g( j, o( L9 q. D6 ^- `
" ^; c1 _3 J; w& t1 H& s  o9 b
& e! v6 R3 @* p3 d. ]) N
9 b; F& n! ]. |/ z
. h0 J9 h4 Q7 O' y
机器名称ip块设备
, T: X8 ~, {' f- V- y% T, w' ?master0 12.70.10.161/dev/vdb 和 3 q5 H5 b+ J4 J+ y
/dev/vdcmaster1 12.70.10.162/dev/vdb 和- p6 w! ^6 M& d. L- r
/dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc/ ^; U2 i7 e% A/ Z- j% x
准备工作  _" g4 f" W1 P- O' U3 e6 x
开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。
3 n) q6 l' N& ?: E如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。6 Q& |7 N  `9 o5 P) ^3 [# z
ansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):9 i  I0 y# E9 r$ |: s, ^
bash 体验AI代码助手 代码解读复制代码  n3 H, F/ D5 n! J8 I0 K2 Q
master0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master0
: V7 b5 w2 Q0 z- Rmaster1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1 . P: k% K( w3 v: Z( R4 I& r
master2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2
. F) x  h1 {) @7 N, {( v& Y7 ~5 `4 w9 ]  x  m7 s5 S' [2 X. k6 q' m
[all]
9 }3 b9 d% c  j0 i5 F/ cmaster0* g- Y& r& l9 x6 ?2 H) P; w% H$ D
master1
6 p* w/ ^8 T- G, a; j; R3 s8 g; Zmaster2' o/ ^/ B, c( i
, k, `" V8 r" ~+ F6 a. v6 d( y) w
升级系统内核0 P1 G7 u" F" X- D, t- t' P- i
升级系统内核到5.172 G5 y* T8 C* L. N2 X
ansible脚本如下(1.kenel.yaml):0 S& y$ b3 D& ]- {1 g( I- p
yaml 体验AI代码助手 代码解读复制代码- name: update kernel
6 b) G9 z3 o2 e0 n. {  hosts: all
8 Q/ E7 }+ ]+ ~1 Q/ w0 [& `  gather_facts: True
* p' v$ K) R7 v0 I, {  vars:4 [+ c7 w7 t8 E# a
  tasks:! ^: _# `: t7 c0 M$ d
  - name: create workspace
! a6 }3 N3 ?0 A6 d# L) {    file:
  X, i- C4 I8 ~$ G1 ^      path: /tmp/workspace/7 M7 D  v1 d; Y; W& R0 H/ U& R
      state: directory  o% {" @  X9 y' }/ y; y4 c3 D. G
    tags: workspace& h) m0 ~/ ~+ E0 Z6 _
  - name: yum install elrepo+ V) b( }9 A" w
    copy:/ S: N* v3 U  O6 g2 _$ W9 K
      src: templates/rpm.sh.j24 |7 w5 N# R) O5 a  l+ R& @9 ^
      dest: /tmp/workspace/rpm.sh
8 ^$ y$ Y# f; \      mode: 755/ C( N$ J$ `# y7 E& C' d
    tags:' v6 t5 J* s( U& @. y
      - copy-rmp. g- X1 M3 m* Q) H9 R. ~! h' z( N; ?
  - name: sh rpm.sh
" D* n! _/ U" U, p; G  u# K    shell: sh  /tmp/workspace/rpm.sh
, Z" x" p- P' k6 }' _% v    tags:
0 X! {! x, \4 Z2 [2 ]      - sh-rmp
) o- S; M% D( a9 \) ]  - name: 列出可用的内核相关包0 }. }. S% x5 Y* C( P: T
    yum:$ m1 f* n6 ]( {7 z: }
      list: available
; l- P9 e1 w. v+ y+ T& {7 X2 u      disablerepo: "*"2 E( I6 M' m% g# t: f
      enablerepo: "elrepo-kernel"+ o/ t0 B: S: u
  - name: 安装内核
- u" N1 s- O( E+ V9 b    yum:
# s: [! l; j2 `" ^      name:+ b- L: T8 K* n. Y
      - kernel-ml4 `6 N3 |* C7 O: @% X1 D1 {
      #- kernel-lt.x86_643 k0 H( \2 o) m/ o% H5 e3 h$ \8 ?
      #- kernel-lt-devel.x86_64& F+ R5 u" O) G* x: G: ^
      enablerepo: elrepo-kernel
2 B+ I; P8 w1 q" z0 w) v$ O  - name: 查看内核版本默认启动顺序2 h5 g/ ~! `% e% e7 N
    shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
8 ]2 W; K, U* b+ a  - name: 修改grub中默认版本启动顺序
: S, |4 b( n6 i. X( _, y. N4 G2 `    lineinfile:
3 F* {  C1 f: u      path: /etc/default/grub
6 @+ }, n7 p. M6 k1 x/ ^: @      regexp: "^GRUB_DEFAULT"
- [& I/ c! T( E% ^; r1 U( c  L% Z      line: "GRUB_0=saved"0 S+ C: V! o" R# B
      backrefs: yes6 i) t5 D3 |% I. A1 q3 P, z& W
      state: present
* J2 O: [4 _# M2 [% ]    tags:
, |. S. P: a7 `1 K3 q      - grub& E& F: ^" W; x0 _. N9 B- t& |
  - name: 重新创建内核配置
% b; q7 i- W3 v    shell: grub2-mkconfig -o /boot/grub2/grub.cfg$ t# b. g$ p; @- {7 E: u; P
  - name: Reboot the machine
8 ~' V6 I7 p0 f    reboot:0 Q. h, H1 y# p: p3 H
      reboot_timeout: 300
/ O2 ~: R* N5 k3 m  j% e  - name: uname -r% F  ^) z0 C- ~6 }- F! P
    shell: uname -r+ W& g, L! |& _3 L' M8 C  V' i
    register: version) h! k3 ]4 y2 I4 R4 F
  - name: debug
. {+ \# }6 b$ Z0 E  N6 g# I    debug:9 ?9 {; @* T! c/ \9 X0 S7 l+ A
      msg: "{{ version }}"/ Q2 z$ S$ I( E9 y& d

. k! i" q  h  T/ _' M, @# u升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j2
9 [4 E' r) u8 B/ X内容是:' n3 S, A2 |. @: [, \1 L. ?0 F
bash 体验AI代码助手 代码解读复制代码#!/bin/bash
$ y3 U3 U# G" ~/ h, `. ~rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
* q3 g3 p: N* |! J$ N/ B#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
! a) r: B/ H. x; a1 \  qrpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
$ N' M2 P5 E8 v  [echo 0
: B- \* G2 A# f. u8 n
) i" w+ y4 |+ Y5 v, [  M5 y" k执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级
3 W. a# d0 P6 h3 }安装必要工具和关闭相关配置
- n9 t* `" h& b5 h+ h; k  R' L5 v7 i! K+ a
脚本2.config.yaml如下:1 h0 Q- ?% J! L& S' G8 U
yaml 体验AI代码助手 代码解读复制代码- name: set config$ ~: r4 N4 W: r2 y  z) {( l( B
  hosts: all
8 ^1 Z- L, \9 T$ g5 t( i  gather_facts: True4 Z! G; c: \4 h8 i
  vars:1 C) h: N2 u4 q  k, R7 R1 E% c
  handlers:7 [  t0 x- Z6 |6 b  f" Z
  - name: update_yum8 n# X. u# B1 q& _4 S9 P$ z
    shell: |
" t* j4 n4 L/ {      sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
2 K  e$ G$ d5 k, b# A. ~, E      yum clean all
8 |& e8 K# }( N1 |      yum makecache -y
. p; k" g3 a! P" c$ ?$ M  - name: noswap_service #禁用swap1 z  k8 S& H5 `
    systemd:3 A* n. j! T; A) w# b
      name: noswap$ O. L8 W& \. C+ }% o$ `
      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
* K( J  \# {. }, s& W      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
5 j! L) {: ?6 ]* j, \! }      daemon_reload: yes #yes 重启systemd服务,让unit文件生效
/ ]0 p2 F0 G; E. [- |  tasks:
! n; e! T. R# h% E( V5 B* h- W  - name: back up repo
6 M9 c2 `# f; Y' F" ~/ R- o    shell: |( k( O7 V6 T6 T' p
      mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup2 r) Y2 X4 x0 T3 X) G! x& z2 R0 E
      mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
; t2 e" ?  f( p( D      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup7 r2 i8 |7 r& g% _0 P5 I
  - name: delete /etc/systemd/system/noswap.service #禁用swap
: a8 U/ {, y' K" ~" v, x    file:6 `/ U, m& L8 G' k3 ^
      path: /etc/systemd/system/noswap.service' B3 K; s7 E' I' M: }& P2 w
      state: absent& O/ i$ Z# C% ]9 X4 o
  - name: download repo #下载yum源. e8 I2 O, _: U; h& h  J' X
    get_url:
  a1 |1 d6 b3 X( z, X      url: "{{ item.url }}") P1 Q, p6 H6 q$ `- O8 o
      dest: "{{item.dest}}"
: B- Y' ~! \% A: \      force: yes
1 P$ b7 m; @: ^* @    with_items:
' C0 L. G3 [9 d& O( a" V3 a      - {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"}: ^: a8 V. e/ |+ a8 s( A
      - {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}
* w  X) M' W( O) [* f$ i      - {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}
4 v, e$ m( c& E% M    notify: update_yum #更新yum(见上面的handlers)
2 Z& z4 c9 H) {  ?& ~% _) q& e  - name: install net-tools #安装必要的工具
' u7 E. t& u% H    yum:
- A6 Q: I$ G! Y) d      name:1 P' e8 t9 I7 b# k% ^+ K# C
      - net-tools
, W5 ?8 {0 Q+ t+ |! W$ j      - vim
! ]+ }5 V% B& Z4 Z3 `      - rsync
( r6 e7 \' \1 i: A+ D      - chrony
. u* F: J9 L0 H; y: \5 u3 d& t      state: present" s7 Z8 I1 \3 t8 N3 |4 \
      update_cache: true0 P& M, i9 _5 }
    tags: tools
& l2 y6 W1 ]5 T! }5 E/ K  - name: chrony_service6 M( ?0 E5 z" s7 b( H$ _: [
    systemd:" p8 @1 `2 b( @: W+ c8 u" K
      name: chronyd
/ @) m" X3 @3 M6 \  h      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
4 U  w' K6 V$ V1 u7 d9 G# x+ n  `      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动) v  g) b8 @. {* x! L  T5 f2 @
      daemon_reload: yes #yes 重启systemd服务,让unit文件生效( Y4 l( ~" }. u: u+ F# U
    tags: chronyd5 [5 J" @( t" i' ^6 O8 l# D. n6 v
  - name: config /etc/hosts #关键 生成hosts文件( M: @0 C. @" @& b( C
    template:
! b. I# N3 P0 L: F! j8 Z      src: hosts.j2
: e* ?& H# N# O7 Y3 f9 E      dest: /etc/hosts
5 [+ s: b) \- d' t6 L+ T0 d      mode: 0644
7 I: l0 W/ w; M- ^, T& f) I) j      backup: false4 ?# y) L9 s7 W+ d2 S, R
    tags:6 \* r8 _$ |  d1 d. D% f0 i
      - hosts; t7 m2 r! a. }& c( E
  - name: set hostname #设置主机名. W) }2 w) |& U7 v+ ]' D7 `+ K4 J
    hostname:
$ T/ w; R5 ~# }, R6 u2 r      name={{host_name}}% G% |& S  c; l6 D
  - name: set timezone to Asia-Shanghai #设置时区
5 w$ u. [3 _; B8 N( A( _% h* {    shell: |
% T, _( W: z8 B. B      /usr/bin/timedatectl set-timezone Asia/Shanghai
, t& ]0 i  \. D  x4 F5 C: `6 A& R9 f      chronyc -a makestep- k) H9 k7 w% m0 f
    tags:
; m! a4 @9 L( R4 U$ r. }7 }      - set_timezone" V  t! k0 z5 u* ~- H
  - name: stop firewalld service #关闭防火墙
. \& r+ n1 H# K. @; B    service :
3 D7 ~1 _; n$ H! K; x, {8 B      name: firewalld.service0 Y% F5 e& @* p: |/ C2 z* f2 W' Q
      state: stopped6 K, X: B* [6 F8 N
      enabled: no5 J" o, q: Q; l% s$ O
    register: firewalld_service_result
) x/ `% j4 ^* S+ ~    failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg"! w# F+ J7 A" t6 S( ^- z
    tags: stop-firewall$ O" B+ x# ?" A/ N8 C. B- L: F) N
  - name: Write noswap systemd service config file. X( _7 _) |0 a5 ?0 A5 U4 K
    template:
2 O3 a+ p% J1 A" s      src: noswap.service.j2# s& l* v5 Y# r; M* d0 V7 c
      dest: /etc/systemd/system/noswap.service
) b) P1 g, ~& ], [/ Y      owner: root
, v1 W4 S4 _+ p9 F, a4 O' X" \      group: root
- w! d/ B* x( O9 s      mode: 0644
) p0 ~  C, k; r" y    notify: noswap_service! R6 V$ i! s$ E4 T: Q; j, i
  - name: Disabling SELinux state #关闭suse3 n5 q0 Q0 o% A! R  [0 |, r! d3 f9 u
    selinux:8 }! B5 q( F: O3 r0 Q( h
      state: disabled
! t5 _2 [3 V+ R2 P  - name: Reboot the machine #重启机器
% p! i/ P* j; J& m    reboot:+ Q" V6 S9 c2 C  e" c# X* r
      reboot_timeout: 300
5 }3 \0 V0 F5 W- Z7 p7 Z# d  n# g  `' U; t! |" p
templates/hosts.j2内容:
9 Z' `9 O& H$ B1 Q% d2 Y+ Obash 体验AI代码助手 代码解读复制代码) K$ A! C+ b! Z; q  P" r; D$ H

8 r! u1 D0 o! d8 [127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
+ C( {: m0 M( n' H1 S! N4 ?::1         localhost localhost.localdomain localhost6 localhost6.localdomain60 q, f+ t) ]% u" N% D

6 x  t" m$ i3 G  |4 y+ F+ u. V( _/ U
* f6 r1 m9 |% U' k4 D{% for h in play_hosts %}
, L8 X& G; X1 w& Y  K7 n{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}
7 N4 v! E' B- u1 c* ]{% endfor -%}
# Y7 [& t6 b: y# d+ ^) j) Y& ~2 \6 }" L$ e! d/ g1 r
执行ansible-playbook -v 2.config.yaml完成相关配置工作
% X" I) `( {6 b" k) ~+ Q2 n安装docker
0 I3 V" \* M5 b! }" X2 K按照官网说法,可以使用docker或者podman,本文选用docker。
/ _3 `- M9 i$ w5 f剧本3.docker.yaml内容如下:2 E  [; l+ u* c" Z  s0 A1 s' ~
yaml 体验AI代码助手 代码解读复制代码- name: install docker
+ ~9 n3 e: k* J) i; z# z  hosts: all
1 A& v+ b$ K6 Q- A2 O8 }: l  gather_facts: True/ {1 G! C) ?: S% e2 w
  vars:4 u6 G+ B1 b6 [& \
    DOCKERHUB_URL: registry.aliyuncs.com/google_containers
9 o) P# E, k$ r8 A5 d" w$ d  handlers:
* z. d1 I. l9 u  tasks:
9 m% }, W0 ]) ?5 L  - name: mkdir -p /etc/docker/4 n% U! d1 h: U' o, C1 e, [
    file:8 e3 p- b9 [4 Y( q$ {
      path: /etc/docker/
1 V: G  C+ o3 m$ ]: b/ L      state: directory
& @6 r* m+ P$ ^. Q' ]  - name: install docker4 D0 J3 X0 c  G7 |+ e
    yum: name=docker-ce
6 s7 n: G; C( l0 V( {3 d$ j1 e1 {  - name: change config of docker
- m5 f: E6 o* y: S5 F    shell: |5 x0 p! \0 w  U2 @
       cat > /etc/docker/daemon.json <<EOF
" K8 d2 t- M' O7 j       {"exec-opts": ["native.cgroupdriver=systemd"],
4 ~  h6 O% y. F# D, G        "registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]7 t# A: x8 v5 r1 Y2 l
       }2 b) k% q1 v6 Z( Z' B, u
       EOF
" \- ]" ?7 I, J4 k6 ]$ s    tags:
) Y4 u# X/ f; N) e      - config1 ]: T; p# j: B% i! _) S# B1 P
  - name: add systemctl
' {" Z. T5 \2 J( @" h4 z    systemd:
' @3 {" {5 }9 T3 z      name: docker.service
& C" G6 x2 U% h9 q      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
' n* ?) e, h/ w2 g. f; H4 l/ [      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
0 V4 W; X1 n3 W" B3 }% @8 B      daemon_reload: yes #yes 重启systemd服务,让unit文件生效' Q7 U. v7 Z6 u' a) Z# B
    tags:* M, L, _, c% ^3 B2 }! m* [/ P) e
      - docker-daemon
* ]( a  ]7 e' L" l0 v& C& Y2 X6 G  - name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials7 B1 y( `. e( \( [
    shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com6 A: ^: p4 H5 T; @
    tags: login- @5 v7 `; ?. f* H
% z6 k1 O. F+ \2 f
执行ansible-playbook -v 3.docker.yaml完成安装docker的工作/ O2 ?! [8 G' N2 u7 U, H
开始创建ceph集群5 }. Y9 ?* ^" |' @
安装cephadm1 c  l+ h% y9 f/ \. G
继续使用ansible为集群中每台机器安装ceph
% D9 S% F& R9 O* d剧本cephadm.yaml内容如下:
( c9 l7 K+ K+ Qyaml 体验AI代码助手 代码解读复制代码- name: download ceph& m1 r+ X$ V2 \4 T3 s
  hosts: 127.0.0.1
; i6 b! U+ }& @! C- N/ M2 D. F" B  connection: local$ C. y6 J/ h3 ]$ C" y
  gather_facts: yes
. p& K% d# ?( e3 h8 H. f* A  tasks:" J7 z4 n1 `1 o
  - name: download cephadm, {9 S  ~1 E# ]) K5 @' A, k
    get_url:7 m* v: p# Y; A) ~/ |! ^
      url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
! N5 p+ b6 h2 X# u      dest: /tmp/ceph/cephadm7 f4 k! E' G. v0 ^
      force: yes5 A4 Z' F6 }7 A0 ?
      mode: 755
$ e% |: N7 C2 s4 Q      timeout: 6002 q/ m+ o7 a9 i1 \9 }
- name: download cephadm and install
  u. ?0 ~: x. ?1 \# G, o2 h  hosts: all9 c" G* U6 R* e# y* r
  gather_facts: True
, k' q7 l4 N$ [. ~- K$ J5 ^  tasks:6 c! U% R# n4 D. l% L' z: x8 T
  - name: mkdir workdir
: |1 J6 M5 N( ?    file:0 O* h- G( n5 E; v
      path: /tmp/ceph. i) Y- f) G6 a/ Q, @
      state: directory$ T; Z2 h: N% G' {, c  U6 N- d1 x
  - name: 分发cephadm安装文件, m' w) U; ?8 u; Q3 r: H4 w6 a
    copy:* l4 w3 J0 a9 }4 j5 }$ h
      src: "{{ item.src }}"
+ ?( C4 K8 R! T  P1 _, A* b8 ]. E9 ?      dest: "{{ item.dest }}"
! u) L- o3 U1 D+ M, P$ p7 Z      owner: root/ J( C* f3 N( n- A
      group: root
: ?* }: p% v% x; ]: {, v* c+ Y4 Q' X% B      mode: "{{item.mode}}"/ D+ f$ Z. ~, C- R) N
    with_items:
) f2 e( @* `9 X- ?    - {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }
& E5 W( `) q+ B6 N4 g: A/ O+ p    tags: cp-cephadm, b+ R! X8 K# ?) r# T
  - name: install python3
( V3 y1 V$ K* _/ y# P* f    yum:
3 g" V" x1 P+ R1 x      name:6 N! ]0 S# l+ A) M
      - python3
+ n& |" R' X$ @1 \4 L' {7 n      - chrony
4 e6 e. n2 e% Z      state: present+ T9 @: M9 _& b" u
  - name: add systemd8 Q% ?) B( s+ k, g- q/ K
    systemd:
; E6 S9 H2 W1 x$ |% [3 z3 V# J      name: chronyd1 J" d% D, o% @5 ^4 b- T
      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
" M8 B  A* d/ q0 d      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动3 b$ [9 U9 R% F" R9 s
      daemon_reload: yes #yes 重启systemd服务,让unit文件生效6 \3 A2 Q* F0 T$ E0 m
  - name: add ceph release
4 G3 M* B0 V: ^% I! _6 J    shell: /tmp/ceph/cephadm add-repo --release octopus
7 P# R2 H) A% e  - name: install cephadm* u. c' [# r! H* I  v
    shell: /tmp/ceph/cephadm install( L& @9 X5 ?! m. P, a. y) u
  - name: which cephadm
; B5 V6 k. O6 U    shell: which cephadm
/ s) c0 r0 @+ y. _    register: which_cephadm
% w) ], y0 n( F+ r    tags: which-ceph
# Z3 c8 {4 |. L+ F* J' i  - name: show
) o0 a+ j% D2 q% Z    debug: var=which_cephadm verbosity=0    #check.stdout 显示出的信息会看的更清晰点# {! k! K# i* C, e1 ?% f3 D
    tags: show-result# R6 h) y1 _5 _" }
, P2 W; ]7 ?0 x. n' P- B
执行ansible-playbook -v cephadm.yaml完成ceph的安装
! C( r; [. K* _5 U" y9 g% K0 b7 i3 i
引导集群
; X; Z( \' g1 R1 K- k将master0作为引导主机,在其上面执行如下引导命令:
# E. T* T: G2 Z4 z# x. F- C% \" Abash 体验AI代码助手 代码解读复制代码" L  X& ?* v+ B& \
& @, B- T. P/ B* i' k
[root@master0 ~]# mkdir -p /etc/ceph
9 O$ C$ o6 W( M" ?[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161, o$ X4 O& j6 u- g* ]5 B/ G
Verifying podman|docker is present...
2 @8 x6 e8 g+ pVerifying lvm2 is present...
6 T$ R! _, ~: @/ x/ yVerifying time synchronization is in place...7 \  I/ j! n$ F- b, t$ z
Unit chronyd.service is enabled and running
: A& l5 G8 R5 K) B; i2 BRepeating the final host check...$ W- g% ?9 h: t: v# N% o, V/ Q2 F
podman|docker (/usr/bin/docker) is present
  j( I+ A; L- v2 `7 D2 E* ]systemctl is present! |0 v0 Q2 r; ^
lvcreate is present6 T6 T! |2 s3 s
Unit chronyd.service is enabled and running
1 ^2 o/ n7 N% P$ V+ t3 \Host looks OK4 H' g9 C+ I& I$ I6 z# [+ W
Cluster fsid: e3386564-bb02-11ec-af56-525400299ff7+ T6 R- C7 A7 g' ^5 f9 n3 x' {
Verifying IP 172.70.10.161 port 3300 ...
! d+ j( H0 l  p7 M! [) r0 }Verifying IP 172.70.10.161 port 6789 ...
# `& E; _4 b$ Y9 m: t) U  GMon IP 172.70.10.161 is in CIDR network 172.70.10.0/247 m' |# Z4 q5 z+ r1 J
Pulling container image quay.io/ceph/ceph:v15...
& d  i0 p1 Q  g  I7 tExtracting ceph user uid/gid from container image...( c8 S8 e0 }7 x7 j$ K" m0 k
Creating initial keys...
" h+ ~2 }& a+ F/ RCreating initial monmap...
9 u& }: G8 J1 ^% O' t/ yCreating mon...
# \& z$ U+ O$ iWaiting for mon to start..., Z' Z  _0 V! ^
Waiting for mon...
7 O- B5 z9 E( w" Z: S/ hmon is available
( B- O$ @/ ?% @; UAssimilating anything we can from ceph.conf...
/ D& E% W! k! ^! LGenerating new minimal ceph.conf...! y0 t1 P* O1 ^- K
Restarting the monitor...
9 |/ v6 ~, R0 [. |6 g, oSetting mon public_network...
1 g7 M# @4 M( H4 q/ E& H5 X) T+ W" `Creating mgr...
' a# t! S0 S# H* V1 R0 p, XVerifying port 9283 ...
; K* J/ v$ I$ h( eWrote keyring to /etc/ceph/ceph.client.admin.keyring
8 n) l1 s6 A' W1 J. iWrote config to /etc/ceph/ceph.conf7 a8 S+ n: N+ y/ c8 o
Waiting for mgr to start...$ ]5 _4 N9 U8 x* i
Waiting for mgr..." q+ F4 j( @% d& S2 d' m* g
mgr not available, waiting (1/10)...
4 a9 x& [, p% z  Hmgr not available, waiting (2/10)...
( x7 t. w. L3 I* D5 m$ gmgr not available, waiting (3/10)...
! a# [  x; ]% ~6 u- xmgr is available+ x- q7 V5 X, f. T5 `+ O
Enabling cephadm module...) \2 n' e$ H6 v$ l% [; W
Waiting for the mgr to restart...# N) I7 ?8 j* P' z% A) m7 Q! S
Waiting for Mgr epoch 5...
8 w  `7 E1 O+ c! PMgr epoch 5 is available% G! W% d. L+ {0 c0 N( i
Setting orchestrator backend to cephadm...1 r+ }9 x# k1 ~3 I
Generating ssh key...
+ m) U+ |( ]  y# l1 UWrote public SSH key to to /etc/ceph/ceph.pub8 m: S# X5 C3 V/ o$ X
Adding key to root@localhost's authorized_keys...& h* u. F/ @: C1 ~4 Z
Adding host master0.../ B; F2 z) G+ K9 n( o, r9 O
Deploying mon service with default placement...9 p' d  @# ~. L
Deploying mgr service with default placement...* `3 L0 ^$ M4 f9 @7 J
Deploying crash service with default placement...
/ Y  T# R/ L  B  B$ v/ REnabling mgr prometheus module...
% O% i+ `' L# m* f9 @6 k% ^Deploying prometheus service with default placement...4 f" m3 r2 o! b- S( c! G
Deploying grafana service with default placement..." s, @* n/ e- i# P# m
Deploying node-exporter service with default placement...$ ?, s( E+ b5 E+ s5 E
Deploying alertmanager service with default placement...
" ^$ z( g& Z& s5 w6 T& j  L9 LEnabling the dashboard module...+ `) \! _) v! Q/ ]; r1 T
Waiting for the mgr to restart...
! R8 l* a& |: L- U* c5 YWaiting for Mgr epoch 13...# j& U7 L5 L' {; ~/ j
Mgr epoch 13 is available
: \1 V0 ?7 H) ~& J. L! B; V" _Generating a dashboard self-signed certificate...% c" h9 `: Y1 A2 u' ?
Creating initial admin user...' J) C) v) |  u6 b+ z
Fetching dashboard port number...
* Z3 }  F9 [; }0 [8 PCeph Dashboard is now available at:' a- G7 _1 n* ?

' ^. M% ?  O+ c7 w& J7 [" ?- R7 r             URL: https://master0:8443/5 {- }1 Z; N, x/ B
            User: admin
/ v+ m" n8 A8 w. ^' ^! T        Password: vym1bdeajd& ^. p6 K* {! V4 i- K- N4 Y
9 \$ D( W0 n$ D: i
You can access the Ceph CLI with:% v7 G3 u+ b/ H6 |' P: S- ~

; w3 r4 ]/ y6 d/ h$ }        sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring- T6 t' a: E6 d
2 \. `! L& U4 [, ]: K
Please consider enabling telemetry to help improve Ceph:$ r) P1 V, x1 d0 ]/ M, T9 ], B6 B3 x
8 o8 ?+ l3 I# {6 ~) n7 _- f: W5 P
        ceph telemetry on9 p+ r- n& T! [% ?$ S1 X& N$ H

0 }, E. F' f: S5 j3 [For more information see:. ~/ m, W2 S2 f# x! k7 R

: t" B; g$ R( a0 l  Y        https://docs.ceph.com/docs/master/mgr/telemetry/
9 O2 T, {1 T$ y9 T* r9 Z9 k
: J5 V2 A7 b6 ZBootstrap complete.$ E9 V7 C' k/ R% h; y% ]

1 g$ }1 N5 L% i2 w8 H  S( S) e& c2 r1 D$ Y! T- a
在命令执行过程中,有如下提示:+ U# u$ P9 T! H+ B3 L
bash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at : 0 t/ c- P" g) f$ D! x9 ~2 K
             URL: https://master0:8443/# `% n- ^# K1 D$ n+ K( V
            User: admin
  ^' e" {% W( }" j4 B: _( W        Password: vymdeajd
( n, T" l5 `: m7 @7 n5 a
& ?' n4 w+ O8 s3 J2 K: \按照提示,在浏览器上面可以访问:
. `6 h: n4 k$ e; _9 c7 Q2 Y) A" h5 t- E; v, V
进入到管理页面后,如下:# l7 V9 z" F! R% Y
& A" N* B# _1 V- B7 b0 ^& g7 N5 u
参照安装文档,该命令将:
. W! c& v' T2 |) y. h. q3 L在本地主机上为新集群创建一个监视器和管理器守护程序。  J$ j/ i6 n. a
8 M  d0 E& g. S5 N% |( v
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。, k2 @/ ^0 q6 X. j/ b# c
将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.
: Y0 F" U, a. C* W
* P; R* ^  R5 u( iclient.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.9 p' f" M5 j) x& A
将公钥的副本写入 /etc/ceph/ceph.pub.
; t" `9 m, O% p8 ?% F1 ]5 I启用 CEPH CLI(必须)
0 U0 I% _0 s* A# E5 ~" L3 r继续在引导机器上面执行如下命令,即可开启ceph shell client0 v1 B6 ~8 j* W9 o9 A% a8 b
注意:后面的ceph命令,均需在ceph shell环境下执行
7 H- w. ^) _3 Z0 K) T: Lbash 体验AI代码助手 代码解读复制代码3 |+ i+ }6 s- ^

; ]. K0 g0 U6 v5 t1 v4 ][root@master0 ~]# cephadm shell0 A; P; F1 F' Q: F
Inferring fsid e3386564-bb02-11ec-af56-525400299ff7
: N' |. z/ e5 C0 p: I' {! |4 l! UInferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config: C. V6 W1 _) Y+ L
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
4 e& ]% m4 v' }1 i) H! a* q4 T1 m9 M8 A3 Y% B1 H) Q
[ceph: root@master0 /]# ceph -v7 F& v. M. O& z) w7 M/ M, h
ceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)7 c5 I) \+ M) P- @
7 [% }  e& Z) m. s0 |7 H8 E" @1 K/ M

+ r3 R/ S7 E/ a/ Q9 G+ h* B2 S5 _[ceph: root@master0 /]# ceph -s
( v7 t9 M+ \6 W( K9 s  cluster:# Z$ y  P8 F. Q+ {$ W
    id:     e3386564-bb02-11ec-af56-525400299ff7/ d& Y8 Y$ K; r- g: C0 V
    health: HEALTH_WARN! g2 N& |  K7 v) C% ~
            OSD count 0 < osd_pool_default_size 3
1 m+ c. f0 E3 E! |! V
. P/ i( m7 F/ Y; d; E7 c4 C$ u  services:! X7 B' N  T$ G6 Y) \7 J) l+ Y
    mon: 1 daemons, quorum master0 (age 48m)
: a3 }6 M$ ?) d4 Q, V, p' |' n# m    mgr: master0.ojikws(active, since 47m)
7 }* ?* Z$ h0 m; Q' v* Y    osd: 0 osds: 0 up, 0 in* }$ }( b6 b9 M2 b! o- @7 A( q+ Q% S$ ~

* e+ ?/ O5 y8 A; V2 p9 Y. R  data:
8 p3 D2 y/ ~/ l    pools:   0 pools, 0 pgs- K6 P8 e0 |0 s' P. D9 H$ `7 O
    objects: 0 objects, 0 B1 i  v- U! L, M3 e1 P9 v
    usage:   0 B used, 0 B / 0 B avail3 |" P, B- E: F# {- I0 y1 Q
    pgs:; T3 W) A% V7 ~( u

' f! q8 j" e3 m4 z将主机添加到集群
0 n& I, Y3 |: ?; u& Y& n4 {( c' K  W, ]
在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥) `9 z! a% k1 s$ ]* H& g' X% k: H

; k7 f6 w9 D$ s) S" D) M3 hbash 体验AI代码助手 代码解读复制代码
5 g, P% Y' A: H6 D
& }% t, ^! @+ K3 C* B& o, ?4 Q[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master15 l: J! |/ m% z1 S1 R
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
$ M/ U& T8 L- Y' iThe authenticity of host 'master1 (12.70.10.162)' can't be established.
4 n+ `: x* T; i  `, vECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
: D/ Z8 o. |: v3 M, V% [3 JECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.
1 n! E  ~- t  N7 W7 p/ m1 b# S6 BAre you sure you want to continue connecting (yes/no)? yes
' ?; k- Y0 ^6 m& g& n% Groot@master1's password:
& G; Y3 z' E8 T' C, _. w$ |+ v2 l9 \; ^& c
Number of key(s) added: 1
  E3 \0 R. ]  k* B$ @9 A+ D, ?4 _  Q' K- v* C
Now try logging into the machine, with:   "ssh 'root@master1'"! }5 M- _4 v; ^4 A
and check to make sure that only the key(s) you wanted were added.  _0 E/ i7 e0 j4 o* [) ~, Y

. N& i5 z6 \! n1 h/ f[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2  G; F0 n( h: e9 v6 I' \+ Q/ ^
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"3 c. |" t6 Q+ ^' [( v
The authenticity of host 'master2 (12.70.10.163)' can't be established.
2 b, |" I; ?3 nECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
6 ]1 }1 f- Z9 H1 F7 bECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.* i9 `* x/ d* u7 ~  R7 t
Are you sure you want to continue connecting (yes/no)? yes
" `3 g( \2 r( Oroot@master2's password:! ~, }) o! h' K. Z
. |2 |* J, X  U
Number of key(s) added: 1
8 K' U8 q* A' O' C% j9 p( |, N6 `5 m0 J; R5 }
Now try logging into the machine, with:   "ssh 'root@master2'"
, D- y) m% V6 g3 Pand check to make sure that only the key(s) you wanted were added." d) x' I" a* S# K6 a, y, z

& u. @, l2 p4 D. j* w0 l  u4 k) ?这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了1 ?, r0 l7 N. f/ M2 ^4 J
添加机器到集群:+ Z: |8 j8 c0 d# _
bash 体验AI代码助手 代码解读复制代码+ G4 a7 G- f2 ]& n3 m

, ^% `8 a( |6 G[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.162
# Y$ J# R2 q5 C0 D+ O+ cAdded host 'ceph2'- l' \3 x. h: h' ?% O
[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.163
5 i. o" _8 e- n, ~- \! x) o( e) BAdded host 'ceph3') @- p1 w) l0 {
[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164+ Z6 J+ K1 F% x5 z6 Q2 z# w
Added host 'ceph4'0 Q) \' E$ V" z. x
[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165$ w0 c/ Y/ M8 Y* w* V: B
Added host 'ceph5'
7 k3 J- G' M/ }[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166
" Y5 S: e- p  Y$ P9 Q5 xAdded host 'ceph6': e( S( C6 l' Q
. V, c# d# ~* }  F' [- o
% [5 N6 Y; P4 k9 }: J
添加多个监控器: ~, x# S7 \$ t6 h) z8 K
配置监视器子网:
- w4 F1 E& I4 F# ?: T& J8 W, C/ tbash 体验AI代码助手 代码解读复制代码3 X  x4 |& ?3 I" Y. ~5 W' z
[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
' `) q% M0 c  T1 F) U3 Z& _[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24. ~& t8 {# w& A
/ a2 h/ P; y+ I& {1 s$ Z
##要启动三台监视器,需要调整监视器数量:
1 \& B3 T$ o9 Z" k; L& m# a/ W6 V# U[ceph: root@master0 /]# ceph orch apply mon 3 ) H& ~" G9 r+ L5 `1 h: s
Scheduled mon update...) n  \4 U) b8 q( A' }# S& f

; I1 o& L% \* U  y# M  H3 V$ a# K按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序: v9 I) ?! x. g) ~& |: U: P8 @
在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。3 t8 e7 g# L" B" {4 w) x
bash 体验AI代码助手 代码解读复制代码: |$ `3 O1 [7 f3 C8 }0 x* P/ B+ h

# N3 f2 J7 h6 v. q5 U[ceph: root@master0 /]# ceph orch apply mon master0,master1,master26 ?1 _* c! s! Y
Scheduled mon update...! i  Y  P; C6 m, Y
##加标签5 T8 t% f% M( e  H7 |4 n* j
[ceph: root@master0 /]# ceph orch host label add master0 mon! K( q) I( F5 j3 w
Added label mon to host master0. \( r% S: |* U1 M4 M4 J, O) F
[ceph: root@master0 /]# ceph orch host label add master1 mon% o! i( {7 o! m5 q1 ]3 d( q
Added label mon to host master10 f" l: U0 V% o0 [
[ceph: root@master0 /]# ceph orch host label add master2 mon. m4 f9 g- ?' t. P
Added label mon to host master2. P- `8 I7 @$ P$ X$ z

; Q! u& H! M9 m' g[ceph: root@master0 /]# ceph orch host ls
# ]+ i, O. I5 A7 [2 t. q. FHOST     ADDR     LABELS  STATUS4 s0 V' h8 W; `- ^; S% R" k8 I3 s, Q1 m
master0  master0  mon
& k/ s8 [5 x7 @# B, Y2 X% Jmaster1  master1  mon7 ^: i3 a# h. P& E8 T6 u
master2  master2  mon; p% }2 Z! X: h$ x) e9 o2 A5 R
8 d/ [2 Z9 Q; _9 r
[ceph: root@master0 /]# ceph -s
/ T* E: g/ n' }/ w. d8 o  cluster:
8 a5 m  {0 x) i    id:     e3386564-bb02-11ec-af56-525400299ff7
) n4 x9 N/ t. |    health: HEALTH_WARN  k; d' C) l- j/ B7 m. S3 x/ u6 c
            OSD count 0 < osd_pool_default_size 3
( C6 p$ `# T4 a; X  v% w' E; Z, b/ U& ]3 {, _
  services:( x" I7 C4 [: q6 B
    mon: 3 daemons, quorum master0,master1,master2 (age 88s)
  P% x9 b, b1 [. A( r  \    mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld
  [6 z! `0 ~8 h  Q7 H9 N    osd: 0 osds: 0 up, 0 in
& M6 v' v/ m; C1 A8 r- v% g0 f( H7 m7 ~2 r: g9 W6 E
  data:
# r: R# W5 n3 g: t4 Z' Q4 i    pools:   0 pools, 0 pgs' L1 }9 m% ?5 z% V  j
    objects: 0 objects, 0 B0 g: G2 M5 k% B/ o
    usage:   0 B used, 0 B / 0 B avail3 V+ n& z' Y; [! E
    pgs:8 l% z; O6 b* D- F5 H$ u; g, w3 y( u4 M
# Q8 _. K( Q. Y1 ^$ Y5 E1 y( ?7 {
加入ODS
+ w( ]  N% c8 v  W# ?% Q7 p0 Q可以看到集群三台机器上面,一共挂载了6块磁盘:
1 R' o" y: \' l0 _bash 体验AI代码助手 代码解读复制代码* x1 _, E3 [* n. E9 r9 k. p

* \5 A& [, C8 \& j. ~) g[ceph: root@master0 /]# ceph orch device ls3 \7 I7 j, t# ?0 @9 A  b/ g
Hostname  Path      Type  Serial  Size   Health   Ident  Fault  Available
( k& j, c& g4 y) m2 ^master0   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes$ l, l, L3 a" E
master0   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes
& ^8 {/ R0 L9 U( T) Qmaster1   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
5 }/ Z! ]$ c! ?$ xmaster1   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes
0 S' I) E, k0 lmaster2   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
0 q$ w' X  B; l9 pmaster2   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes) @% @  J/ n6 r+ i/ E# i% V, E% y- S

# B5 i! ~1 O0 c" d; Q! i$ t当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):' r* G  d  f) f0 R% v0 i: U
bash 体验AI代码助手 代码解读复制代码
: o5 b4 ]) z5 C) F7 ~+ p
) Z" R9 f& N; I5 G+ s1 I8 y[ceph: root@master0 /]# lsblk
! z3 e7 X  _0 I- b3 T, B/ w$ FNAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
. \! A! h3 c9 R; Z) Asr0              11:0    1  1024M  0 rom1 d5 C3 N* `0 \8 W- ?
vda             252:0    0   500G  0 disk' a' j, z5 ^8 Y. J, ^$ T& N
|-vda1          252:1    0     1G  0 part /rootfs/boot3 K& V; q" R! `5 _# c, H" r9 ]
`-vda2          252:2    0   499G  0 part
0 S* E8 S3 d; Q2 S$ z2 d  |-centos-root 253:0    0    50G  0 lvm  /rootfs5 U5 X4 H4 J( m7 w
  |-centos-swap 253:1    0   7.9G  0 lvm2 _# }5 ]) `2 C, }9 E! T+ l( u, U
  `-centos-home 253:2    0 441.1G  0 lvm  /rootfs/home0 k% V- a; w5 i& i; ]: ?/ p
vdb             252:16   0   500G  0 disk, U1 K7 u- X& }# x+ E
vdc             252:32   0   500G  0 disk
  C. X3 u% I, j. _
- r& s: T- i5 z; o& F按照官网说法:设备满足
  M7 B  X0 C2 h+ H% u6 b2 g如果满足以下所有条件,则认为存储设备可用:  ?) w$ U2 }% u" u- ?

' K  n' m+ I9 q3 I6 P. K2 G! p3 Q设备不能有分区。
& S6 I; P' {7 e8 e设备不得具有任何 LVM 状态。
7 @$ w4 r7 o7 d6 y7 Z不得安装该设备。& T3 M: j0 f2 y/ K% C  w
设备不得包含文件系统。# p$ ?' B# t3 _
设备不得包含 Ceph BlueStore OSD。& I1 a, e7 h) r) a& }  E, E/ L
设备必须大于 5 GB。
0 }$ ^( N3 u- D0 `# E! x
$ ?8 {! W- _3 `( m0 t' h7 c1 ]Ceph将 拒绝在不可用的设备上配置 OSD
6 {. E, A& Z8 f) [/ k) X可以使用如下命令,将所有可用的磁盘添加到ceph集群中:
% o5 y* g6 v% c: Pbash 体验AI代码助手 代码解读复制代码
3 Y' d2 c1 |2 i$ p0 [# i* R( X
( \# O& x/ K+ K" I4 e[ceph: root@master0 /]# ceph orch apply osd --all-available-devices
- S( A6 ^/ L; d9 Y( F4 s; zScheduled osd.all-available-devices update...; z4 n$ P: `& j
[ceph: root@master0 /]# ceph -s
, i4 {5 y% C/ q8 q8 J  cluster:
" n' g7 _' c4 S  {" y    id:     e3386564-bb02-11ec-af56-525400299ff7" i  o4 r7 l% g: q
    health: HEALTH_OK% i$ e2 c+ |9 l, a& u% {

% E0 q" Z1 g+ k  services:
; t! K$ \  P5 O1 p/ O0 a( B2 p' o    mon: 3 daemons, quorum master0,master1,master2 (age 12m)" S; o" X6 i. n, u3 X
    mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld6 G# B: F! |( H3 h
    osd: 6 osds: 6 up (since 22s), 6 in (since 22s)
; v$ E0 X0 ]+ h6 U( z0 }% v6 k$ E( i% r% b( g% Z1 _2 K/ G7 B
  data:
. Q' Z5 @! b4 T! C    pools:   1 pools, 1 pgs0 J& u* g( J% g* `4 {" X
    objects: 0 objects, 0 B
  H- h/ n/ Y; f# M& u. y/ Y: s  `    usage:   6.0 GiB used, 2.9 TiB / 2.9 TiB avail( v8 `2 M8 ]) d) K! L5 V! U
    pgs:     1 active+clean+ A- G# w2 Y0 B( N

' t0 A8 I+ x" s& ?. q# ~+ O5 s, Q也可以单独加入:  K9 \: n6 Y+ A; ]( D$ ~9 C
bash 体验AI代码助手 代码解读复制代码
' h  W1 l$ e; A$ o3 R& }8 a$ a5 ~, N! t. o- q; U1 o/ e
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb: M% m! T( @7 z( j: {
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc8 e% S# B( a! p4 Y$ {: J( v
[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb
+ F0 V+ f1 `3 e- y# a[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc+ P; d9 G0 I+ ]- t+ }0 l( l
[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb
7 F1 p7 F5 @  z" N4 b[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc
1 |& ]7 ?, Y0 r; t/ S7 v% b  p
, l& Z# h+ Z1 W. b- V在前端看到:
2 V# X3 D2 |2 o: `: z5 i
0 Q0 q0 M% U9 n- h, i5 J" d& E+ F. [6 X
挂载块设备
9 c% `* }3 W. W6 _% C3 ibash 体验AI代码助手 代码解读复制代码
8 q7 ]; [. T% n% b: x; t% G. |* n  Z  r3 i3 F/ d8 ~) y6 x( U. q
[root@ceph101 tmp]# ceph osd pool create test_rbd 32
. y1 l5 v9 x% R7 j$ S( Dpool 'test_rbd' created
2 N5 |5 G8 U0 K& B: v& e/ N[root@ceph101 tmp]# ceph df% T  O  U" `8 W: M; R) J
--- RAW STORAGE ---
, f3 V( Z7 I! @+ ]: u0 LCLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED1 d' k/ M7 l2 `2 m
hdd    5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.22
6 X% S- S, `1 tTOTAL  5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.221 C3 e# W0 x1 q* o1 y, C# f( q+ _8 ^
( M# m- r' R+ J( U
--- POOLS ---
. a, ?/ R$ f5 Z8 m/ y. o% NPOOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL" q+ h5 P* |; `- A9 d
device_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB
! [3 D$ Y+ v7 W/ A.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB
% M) o# q3 ?9 D6 zzone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB
7 a) m3 b/ M, V+ Y! f9 @zone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB
2 T- _( ^: b0 Q3 Y# W/ |) \* yzone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB* t: Z/ h" U2 L+ G/ H  S) L9 k" y
zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB
1 h- G$ z* ~* l% A- ?# Hzone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB
, J1 M. C/ A. `  v+ p2 I# }" @1 mzone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB7 u7 b$ ?: k: Y: R
cp_pool                    42   32  1.4 MiB        2  4.4 MiB      0    1.9 TiB% R( }/ m. O9 f' J# p
test_rbd                   43   32      0 B        0      0 B      0    1.9 TiB
' \5 s, r  T; h) S##创建镜像' o1 ?) H2 o) P$ p
0 E0 Z) L$ {2 a) H1 D: S! b$ v+ L
[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd
1 _4 i, T" n4 N( _; v( k6 t5 o. F$ M; s2 V
[root@ceph101 tmp]# rbd -p test_rbd ls5 f# N9 Q% [, m" G# N7 H) N4 T
test_rbd_image_1
) _1 p; K, o7 s5 k& N
3 Z  U* y7 V* w- b4 i##检看一个RBD镜像的详细信息* T  |; U" F: D( _  S
[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd; @* b5 \$ T$ a- D5 U# \8 w
rbd image 'test_rbd_image_1':- T: ~9 v0 O& F
        size 10 GiB in 2560 objects
. y. V1 E6 a/ y! l7 o        order 22 (4 MiB objects)) ~1 i; ?  T6 q' r" J
        snapshot_count: 0; K4 o: q: b+ \/ X6 L* q
        id: 2836b2f53ea866 G- \- x! O* M2 T
        block_name_prefix: rbd_data.2836b2f53ea86- Z# c/ z4 [; H3 B
        format: 2% K* q! d, X8 _1 x
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling" C- \  D; o) b4 T& K  [, \
        op_features:
$ J9 L& ]" p) G2 t        flags:
" b6 Q: y) x% D! j4 m        create_timestamp: Tue May 10 10:38:16 2022
$ u0 P/ I4 u" j" p1 y2 G) ]        access_timestamp: Tue May 10 10:38:16 2022
7 b5 h, ^! X% {3 B1 k. i% Y        modify_timestamp: Tue May 10 10:38:16 2022
# W& U  m: E8 @* d6 o4 R        journal: 2836b2f53ea86
) _0 R$ t( e/ ?1 m  u- r        mirroring state: disabled; K& ^+ M8 S3 Z# u" ~! B1 |% L

2 ^# q* ~0 c$ |( v: _# q9 ^. `
" U; D/ l7 i( U$ f" T[root@ceph101 tmp]# rbd pool stats -p test_rbd
7 x2 {) d+ C2 ]( A1 zTotal Images: 1
- q0 \7 m9 Q8 t- ]! OTotal Snapshots: 0
6 p$ @, R: J* @2 t/ i" uProvisioned Size: 10 GiB1 c' A" y+ Z! k
[root@ceph101 tmp]# rbd showmapped6 R" ~) b0 f5 e  x' O( r
id  pool     namespace  image   snap  device6 z0 m6 x3 ?; A0 }0 |' m5 n5 Z1 c
0   cp_pool             image2  -     /dev/rbd0- E8 Y. X+ n2 S8 @2 k
8 V. j3 \# J, R/ V
[root@ceph101 test_rbd]# umount -f /dev/rbd01 G* p3 H" b/ X( \' P" R7 O
#或者8 i. Y& U3 f; x. Z1 h
- p6 l/ U7 Y9 q( z
[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd05 Y* s7 R) Y: |: f6 y
##然后将pool关联应用
. r3 `* g1 @' }  x: M( e; t- @9 b$ H2 G% b  H
[root@ceph101 ~]# ceph osd pool application enable  test_rbd rbd  h- w% E3 m$ a$ k9 w" z
enabled application 'rbd' on pool 'test_rbd'
) q7 J9 N2 H5 r. y" h[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1
: n/ T9 {1 i- L; L& m5 F3 q% Orbd: sysfs write failed1 v. L/ Z/ {9 `
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling".
1 l' [" j; P$ E1 B# j3 o; P8 iIn some cases useful info is found in syslog - try "dmesg | tail".
/ P4 F$ b5 `& D/ U9 G2 e$ e# Srbd: map failed: (6) No such device or address" w: ~# {! F1 D+ B  W  c* l) ]
6 [2 e0 Q+ n, G5 d5 f
[root@ceph101 ~]# uname -r$ S3 L2 A$ g9 Z$ {7 a8 I
5.17.6-1.el7.elrepo.x86_64
8 b: H1 K' ?- e2 n: C! z[root@ceph101 ~]# dmesg | tail3 ?0 j5 x" }) W1 @1 B6 V* H" |
[    9.843030] random: crng init done
5 T! ?6 r4 y$ u& _4 i& G[    9.843034] random: 7 urandom warning(s) missed due to ratelimiting
+ L. |3 c  h% [8 Y7 Z  [' O; i( c[   10.669178] Bridge firewalling registered* D9 C! w$ S# r+ y; b% Z
[   22.239147] process '/bin/ip' started with executable stack
' F: E- p/ ]( F4 Q[ 8185.140070] Key type ceph registered/ ?) d  a7 U/ w
[ 8185.140395] libceph: loaded (mon/osd proto 15/24)
0 L4 x5 d+ H; X* Q8 u( |3 s[ 8185.141923] rbd: loaded (major 251)/ U& x; Y8 X0 @; ?& ]
[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established
- E& s( J1 Y  n' e[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f
, y/ h$ B& U0 p. R. v5 N7 m[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40        & L; [& Y+ T7 S3 S
##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling
; j& `( Z7 I* ^% T( y9 u#layering: 支持分层**(0次方)**
3 W1 I% V2 U, A6 y; {. f#striping: 支持条带化 v2 **(1次方)**
' [) `) D2 ?# R: W/ _9 M: q#exclusive-lock: 支持独占锁 **(2次方)**6 c7 M  H5 k2 o, y7 t& _% f
#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**7 Z# T# k- F0 j
#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**2 e" p0 H6 r0 |
#deep-flatten: 支持快照扁平化操作**(5次方)**
8 c' Y$ P$ M  U* o% R#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
' a, R; D( \8 r) r$ r  D[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling3 s; Q5 x9 I4 G# f3 E7 T, g& P
[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_11 E, A5 _2 a' H( n+ ?6 S+ s
/dev/rbd0# f' ?5 j& @( Z0 L; }
#lsblk 查看磁盘
7 j+ c0 n& v& T  J& T' w# ^) G# z2 o* }0 n& V! o
[root@ceph101 test_rbd]# rbd showmapped1 ~: v& ?( L- r) C. T
id  pool      namespace  image             snap  device
' ]! K1 ^  j3 f0   test_rbd             test_rbd_image_1  -     /dev/rbd0# e, k8 K% {- o% D7 s/ E
[root@ceph101 ~]# lsblk
0 w0 b9 W! ?8 LNAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
1 `' ^+ Q3 o+ Vrbd0                                                                                                  251:0    0    10G  0 disk% p8 i3 }! ]5 W4 W
vdb                                                                                                   252:16   0   500G  0 disk0 Y; @8 c7 g7 E2 k; w; D
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm7 G4 h; c( d& i" t7 \
sr0                                                                                                    11:0    1  1024M  0 rom8 R; u, }: ]( x( y2 u
vdc                                                                                                   252:32   0   500G  0 disk
& _; @$ Z  t' R└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm* }1 n- G, e* r  a3 F* r
vda                                                                                                   252:0    0   500G  0 disk0 H4 g+ F9 v  n
├─vda2                                                                                                252:2    0   499G  0 part* P& ?( Z" K' {( p3 i
│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm5 a6 |. m* f6 Y, ]
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home( [7 g2 N3 P! E8 `$ f8 [
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
6 @" N! z7 ]3 k& J) a. Y; m0 O% R+ t└─vda1                                                                                                252:1    0     1G  0 part /boot% K. `, l. j" ~8 {# V7 P; b

1 ]7 L9 w6 Q% ~' p  k4 r* g: z% i) r; O
# 格式化磁盘
1 q0 U6 ]' ]. w+ {" S% |, F( z' n  |2 u5 k# N3 o
[root@ceph101 ~]# mkfs.ext4  /dev/rbd04 a- E3 W1 i( |* d5 B  I' \
mke2fs 1.42.9 (28-Dec-2013)
: y; d; K. R1 H! t$ k. P& XDiscarding device blocks: 完成
) j' n4 m" S. `% O6 }文件系统标签=
2 [+ C) Z) A" x- ]. e2 W/ y5 U2 yOS type: Linux
6 N8 u6 o: l9 `; t- Y: b块大小=4096 (log=2), ~# Y+ x. a1 y2 u! \
分块大小=4096 (log=2)1 G  y/ i! l+ }9 a% d& ~2 Q
Stride=16 blocks, Stripe width=16 blocks
5 _: D  q- l6 p8 o1 y0 y4 h655360 inodes, 2621440 blocks
+ N; Q1 e$ U0 q# ^2 o. t131072 blocks (5.00%) reserved for the super user& b6 f) e: n$ F& {" {" S
第一个数据块=08 Z& _% ^! S. m1 e
Maximum filesystem blocks=2151677952# N3 \* B+ Q9 r. a- X
80 block groups
; `, X  t; F+ x3 ?* ~. r32768 blocks per group, 32768 fragments per group
( G' f+ N1 K% T6 r8192 inodes per group
" C. h, F3 R5 F* {* PSuperblock backups stored on blocks:
. g0 k; Q0 r' l        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632" L$ n! V  d; l$ Q- z- `

$ A) x( w; a' r2 x! UAllocating group tables: 完成
% T, m4 _+ M1 K* b: j正在写入inode表: 完成
* Y0 y; u3 C, |9 j( R! W& ?9 n$ vCreating journal (32768 blocks): 完成
. F7 }* Y" ^" R( }+ E3 S" xWriting superblocks and filesystem accounting information:$ ^$ D# s% i  w6 j( b2 _9 c
完成- M% ]* c( u! ]3 i: C

' m& l- _3 F  {/ u$ t  `6 T##创建挂载目录# C% _1 \# H7 p* w" @
[root@ceph101 ~]# mkdir test_rbd/; H  M: W: ^+ Z0 B( m2 ^( d
#挂载
3 ^, v" ~& l4 e; y* e  t[root@ceph101 ~]#  mount /dev/rbd0 /root/test_rbd! M7 w. b0 r8 B3 I; K/ }' Y0 u
[root@ceph101 ~]# lsblk
# b  M0 ~& M  U5 _3 T/ v8 }+ sNAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT# X4 V  V; A% F5 V% ?" d& H
rbd0                                                                                                  251:0    0    10G  0 disk /root/test_rbd
( V, Z- p0 \$ W/ rvdb                                                                                                   252:16   0   500G  0 disk
. j* `" N" w1 e* }└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm4 A- A( s7 v+ k$ N
sr0                                                                                                    11:0    1  1024M  0 rom
8 [  K1 |3 q' U5 Q: lvdc                                                                                                   252:32   0   500G  0 disk
) M6 d: m- v" c3 d! w! N└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm5 i2 l! ?& @+ i3 j
vda                                                                                                   252:0    0   500G  0 disk; ^: [7 u# s( O0 U, W/ S4 r' G
├─vda2                                                                                                252:2    0   499G  0 part
" C! i/ v: D& {9 {│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm. H# I  w# q; w0 j
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home3 L% N1 E* V  H' H+ a& q
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
6 {. N# {: b% o" ?└─vda1                                                                                                252:1    0     1G  0 part /boot2 h) {/ F( z% b9 R* Z

4 b% c# u: L8 ]# j& `# k7 b#写入小说文档到挂载的目录8 Z" |/ _9 g5 T1 F0 Q" ]
[root@ceph101 ~]# mv bcsj.txt test_rbd/- c. k" W. h  r. S7 \
[root@ceph101 ~]# md5sum test_rbd/bcsj.txt; G8 S! N) K: f5 v8 d2 U
0d615ccd0e1c55f62002134f5cac81cc  test_rbd/bcsj.txt% T- M# f) a) Y  X( K# Q
[root@ceph101 ~]# df -lh" |3 V6 d" h! A# m
文件系统                 容量  已用  可用 已用% 挂载点
9 b6 p- ~  V) R, z/dev/rbd0                9.7G   15M  9.2G    1% /root/test_rbd. e$ ^" K4 c8 z8 X: D

5 f* J0 o; ?/ S" h" q! n. P* x0 h[root@ceph101 ~]# ceph df
/ [7 k' ]$ [) X" i--- RAW STORAGE ---
& q  W; q1 k# |' D9 vCLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED7 y' M8 q& m! F& i
hdd    5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23
6 L+ K5 x" V. n2 c3 }: I5 [TOTAL  5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23
2 H+ O2 a4 o* z& O5 b3 g. o% c1 _  e+ d+ C$ p" J
--- POOLS ---) j1 x/ v- V8 g! H& Y
POOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL! S# @7 {+ u4 }* K
device_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB) I, b* q: \7 x, h# l. q2 |
.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB( b) Q3 C" }' K1 b; K. `
zone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB& x, ~% A3 a, s0 |: \" Z
zone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB  x: Y3 r( G+ }" J# [3 D
zone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB  k) s) Y# l7 G1 U
zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB& L) v& R( H" a3 D* e
zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB
, M4 w6 ~# K3 zzone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
* M6 r8 Y7 y* zcp_pool                    42   32  2.2 MiB        2  7.0 MiB      0    1.9 TiB
# `+ a. O1 o" Z; Stest_rbd                   43   32  148 MiB       57  446 MiB      0    1.9 TiB5 `+ m- _0 S* p3 f+ K/ [1 [3 f

" l6 X, o' R( R6 x/ q) w! f; r" V( E
对象网关
5 I  H# g* g  I" m7 u0 l' x5 F  qbash 体验AI代码助手 代码解读复制代码
6 A8 d$ }. O' o% b1 E+ ]4 }% j
. ?' F/ B: I8 ?  t2 _yum install ceph-radosgw -y3 M1 K( X# ~3 m; }9 [

: ]- w# W! H# Y' J[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'  J1 L4 L. O3 _
{8 j2 j  {% H$ u& F7 d
    "user_id": "s3_admin",
# q* g7 |) y( W+ ~$ l    "display_name": "s3_rgw_admin",( Q/ ^1 h' a) r
    "email": "",
5 x3 A3 l( O+ G    "suspended": 0,
" i) y7 p, Z, N& c1 }4 n7 \    "max_buckets": 1000,5 }; w* q" @) g: a
    "subusers": [],
& p2 @' a7 }  g% e. r* z    "keys": [! \1 E0 q2 g5 `! L- v3 y* C- }
        {
0 E) G+ |8 b1 H0 S- k' E            "user": "s3_admin",
. s& {' m5 D! x; _            "access_key": "s3_rgw_admin_access_key",
* O6 I8 T  I. u1 [3 V# j2 Q            "secret_key": "s3_rgw_admin_secret_key"& s7 u6 [& x: n" O9 E# |
        }
, l  {' O9 n5 z    ],7 q8 X2 F- p" X$ r- d
    "swift_keys": [],: E1 `4 @, K' M) b2 y% Q/ s7 h0 \
    "caps": [],
- k/ p- ~& R4 |4 [" j    "op_mask": "read, write, delete",+ T: |) ?. q, {
    "default_placement": "",
* y6 k( G5 R) j3 q; ~+ E! s$ y    "default_storage_class": "",
1 V  m3 R8 C5 g) s' G; ?  h% w  u    "placement_tags": [],3 H! s  R. f: u- a6 |! Z
    "bucket_quota": {8 y% |* p' _& |2 g! o
        "enabled": false,' ~" Q; I+ G# c5 o# J$ {" M
        "check_on_raw": false,4 q- }* h) T0 ]: o
        "max_size": -1,8 c& \  `) d6 X2 t9 J
        "max_size_kb": 0,
" y! R& O& _% p2 [        "max_objects": -1
. ], Z" g& @( V& s$ I! o! g    },
* Y3 a/ f5 g2 s$ v    "user_quota": {% Q& B5 s% b% x) ?3 p
        "enabled": false,
5 V4 M  c- e$ z, C$ |8 |        "check_on_raw": false,; b) b. E' _+ v' p
        "max_size": -1,2 t1 g) w9 d: x
        "max_size_kb": 0," Q+ W3 q% k# p' X5 r
        "max_objects": -1- `" w0 ^% n6 y0 G  I
    },( `% |1 ?( d0 K2 a3 g
    "temp_url_keys": [],
% {* Q  _6 z3 w4 D    "type": "rgw",
" E  a6 O: v) Z5 m* k2 N    "mfa_ids": []
2 R+ l9 Y0 s" T}$ Q4 }# N$ Z7 F' @

0 `, i5 {, u; U4 ?( {9 F[ceph: root@ceph1 ceph]#5 B0 y( e' b5 P6 w
[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'
: ~8 p% o3 y) n  k{$ J' O# W- a+ k. ?3 S& v4 }, o
    "user_id": "s3_admin",9 C( {4 \! y  C! I
    "display_name": "s3_rgw_admin",8 C# w6 N7 Z( O% _+ t3 o  A
    "email": "",( @# [1 |% }7 j0 C2 ~: z
    "suspended": 0,
3 i+ P6 T7 m4 ]1 f5 m4 p( H2 P    "max_buckets": 1000,3 g) l5 v. h* V  B
    "subusers": [],2 i, t3 D5 Q! b
    "keys": [8 q! O& C% P4 v
        {( L/ ^& F" @7 [9 x. p5 [
            "user": "s3_admin",
( g# N8 G1 ]; m1 ~- l/ j            "access_key": "s3_rgw_admin_access_key",
7 K+ ]9 C+ i  N) v& V; e# z            "secret_key": "s3_rgw_admin_secret_key"
, N3 d# k- ^, G% r  u        }( |5 ~0 {, G; K
    ],
* |4 f1 _. h6 X    "swift_keys": [],
2 d9 F* L9 h! i% h    "caps": [],
2 I1 f; o- i/ K" Y    "op_mask": "read, write, delete",
4 @* t% r* W  F8 e: x! o    "default_placement": "",- A! `2 p) a4 h" R0 f. [8 a: X2 A
    "default_storage_class": "",
' s, g- D5 v1 [& V9 b9 o* ^    "placement_tags": [],& k& W$ f! E4 W
    "bucket_quota": {
+ r: i: T" J1 L  R7 f6 p        "enabled": false,
& I" Q; q/ V5 T$ Q* P  C2 t5 e        "check_on_raw": false,
) p: D9 ]2 A7 G" j        "max_size": -1,
: e6 ]$ H4 l+ k  }$ [% S        "max_size_kb": 0,
/ s# R' p; X; {4 r& y! m8 ^$ @        "max_objects": -1
) A; W( Q& Z  s6 c    },/ ]9 o4 J" M6 |* T$ [' b
    "user_quota": {
4 O, w" m2 C- \( a3 ?" q* M, T        "enabled": false,
" G2 a: W! T5 A) s5 v7 \        "check_on_raw": false,4 L9 N# m! \) P" `# I
        "max_size": -1,
9 U- U, p& a  K; m+ E! T2 h) e0 ]; U        "max_size_kb": 0,
; X8 n2 B5 d* R9 q) [, ], [        "max_objects": -1
- O- B  ~9 h  V. a    },
  k6 c5 n* B0 c    "temp_url_keys": [],
$ q1 X3 h1 M" ~7 W. I    "type": "rgw",: A- d( |8 v( T- {. c
    "mfa_ids": []
' ?, E. T( U) P: @0 Q, a}4 k. g6 c" j2 d1 r5 E$ y6 p1 x

+ _1 t- ^* {- B, z$ gceph tell mon.* injectargs --mon_max_pg_per_osd=100 & e9 R& _5 x* D2 m

* p. u$ a- U, X) F2 t+ w9 {#----------------------------------------------------------------------------
- J# Z* ]  x0 Z9 w# Vradosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system
/ P4 \& H/ a  _" Q8 K8 ~radosgw-admin user info --uid rgw_admin --system
. W) x5 \/ ]7 b/ T- J( }& W$ H/ Y/ ^

( p1 b9 N# i$ q0 y6 Lradosgw-admin realm create --rgw-realm=realm_1 --default* A/ v$ _9 \0 R% x( h( A$ @" \1 b0 z
radosgw-admin zonegroup create \1 H! Z& n+ R- _$ K2 e: B( z" {
--rgw-realm=realm_1 \" \, h  s7 X  e- Y
--rgw-zonegroup=zone_group_1 \
6 U# |1 w/ _! F7 v% u --endpoints http://ceph101:80 \' c, C# t; B% n5 w
--master --default
& y& O/ H1 t; f, g7 w3 P
5 p% ^  R0 r. h$ U! \, D+ P4 j/ y. M+ T4 q% a3 s
radosgw-admin zone modify \; {7 e7 N7 c& h6 b* A7 L
--rgw-realm=realm_1 \' b2 ~& m8 l) h% M5 E0 y. e
--rgw-zonegroup=zone_group_1 \5 M3 V0 x& }" @0 W- F
--rgw-zone=zone_01 \
% P$ G! ?# z7 z% \3 Q* v/ A$ \ --endpoints http://ceph101:80 \
# w9 L' P9 x# s1 e: F5 Y3 C --access-key=IAWL6PLNFMNM0SLQNWQ0 \
4 T; M" T. f( \6 Y6 |% o4 R. R --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
- j. _% h2 \- l4 Z3 [/ ]. R --master --default
" r1 F$ o/ {2 {1 `+ P! r( H3 l, h6 Q5 w3 _6 T
radosgw-admin period update --commit
% f" u; X# ]1 J2 O: O; F radosgw-admin period update --rgw-realm=realm_11 R, c2 o& N1 O' v
ceph orch apply rgw  realm_1  zone_01 --placement="1 ceph101"
; i- D% w8 o3 \8 m% b
5 F7 u% U1 c2 M上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:
/ B' ]/ q7 N* H/ Y6 Lbash 体验AI代码助手 代码解读复制代码
# k+ Q/ ?; y) ^[root@ceph101 ~]# ceph orch ls2 B. @! u1 X; l
NAME                 RUNNING  REFRESHED  AGE  PLACEMENT                                IMAGE NAME                                IMAGE ID8 c$ X. p+ Y- M% n( g
alertmanager             1/1  4m ago     2d   count:1                                  quay.io/prometheus/alertmanager:v0.20.0   0881eb8f169f& L+ w) Q! {8 {6 B
crash                    6/6  4m ago     2d   *                                        quay.io/ceph/ceph:v15                     3edede73a7c4, V4 y/ z( S/ Y; d, h) o
grafana                  1/1  4m ago     2d   count:1                                  quay.io/ceph/ceph-grafana:6.7.4           557c83e11646
5 h; I+ w5 w  n# ~mgr                      2/2  4m ago     2d   count:2                                  quay.io/ceph/ceph:v15                     3edede73a7c44 W  j8 ~4 Q( y  X% U' m
mon                      5/5  4m ago     2d   ceph101;ceph102;ceph103;ceph104;ceph105  quay.io/ceph/ceph:v15                     3edede73a7c4- j- ?) d& [, c/ v1 T! Z! g
node-exporter            6/6  4m ago     2d   *                                        quay.io/prometheus/node-exporter:v0.18.1  e5a616e4b9cf
2 E  v6 Q; f  i. H" K* W) M' i8 sosd.None                12/0  4m ago     -    <unmanaged>                              quay.io/ceph/ceph:v15                     3edede73a7c45 z  I* m* A# u) I/ j
prometheus               1/1  4m ago     2d   count:1                                  quay.io/prometheus/prometheus:v2.18.1     de242295e225
- ]  X" P1 i9 \# f, N) }* Prgw.realm_1.zone_01      1/1  4m ago     75m  ceph101;count:1                          quay.io/ceph/ceph:v15                     3edede73a7c4
, T& e+ g: }& ?8 q$ N; Y0 p2 I' k$ U4 x
2 \& W; u% H. y
如果rgw进程无法启动的情况,可能是集群不健康,查看log:
3 o5 E  v0 I0 ~+ fceph log last cephadm2 W5 {' \3 X  y, H+ _; a; Z! T
/var/log/ceph/cephadm.log  J; B. q1 [. V. N
bash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm
9 }1 V( B$ D' }/ b. s9 V2022-04-27T07:57:57.347323+0000 mgr.ceph101.qhgzmi (mgr.14164) 95889 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
8 R2 h& ~8 |1 M+ ?5 `  E( v$ ?Traceback (most recent call last):# f- h0 ]# E, c- K
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services! S5 f- O9 }8 c" U  o' G
    if self._apply_service(spec):) ]1 c  `& G+ G" t
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service( H6 n8 X3 F) R8 X4 \7 F( Z4 f/ M, R
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
6 i# ?( I$ r* l, }1 o$ f1 @' u  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
: _" J6 a6 \0 T3 T    self.create_realm_zonegroup_zone(spec, rgw_id)( ^* ~+ o( D. c& w- ^* @/ d
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone# Q& r2 W# S: l, j
    raise OrchestratorError('Health not ok, will try again when health ok')" G( |8 V, X9 l5 Y  K% J8 v
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok9 r- \) N+ Z* m1 {
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 ok: g: P: P/ e3 g5 h$ s4 H! m0 I
Traceback (most recent call last):
; D9 b3 s4 I0 H' G8 Y. F8 i  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services0 h' R7 w5 q- Y4 Z4 n# J0 l
    if self._apply_service(spec):) {# |& Q% y3 ^. s8 L3 C4 v/ D
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
8 O6 `( a8 l, B9 V: a: ~    rgw_config_func(cast(RGWSpec, spec), daemon_id)$ R, i. Q( D) L7 E0 W
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config, B' y  F$ h% E% H( q6 o9 h, G6 s
    self.create_realm_zonegroup_zone(spec, rgw_id)
/ |, D: A; v# n- I  a4 Q& ]  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone8 D3 V/ N$ H; M+ w( Z3 R0 @
    raise OrchestratorError('Health not ok, will try again when health ok')
& K$ n2 y* _' F1 E* W+ z" Uorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok% o- a/ S+ A0 U
2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts0 w+ i) @' Y3 x
2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts& m9 v8 I& m7 j: K( n7 Q; x
2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts
& Q/ ?7 V" T4 q& h! R. J2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts
% j% u7 z- U! L. F+ F$ Z& p/ ?2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts5 j: u: b0 @' O3 _: J- |
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts$ D3 w/ a6 b! I0 }# f  Q- 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
! f$ f# ~- y% x- I+ N3 Y# b+ D- I$ ZTraceback (most recent call last):8 e3 d8 C. J6 b8 K9 w( e
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services" g. w/ K1 {8 a: q5 k8 v+ [
    if self._apply_service(spec):. }. k. j8 w! y) E) G% |' L
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service  P7 D8 k" X4 J: ?/ c" b
    rgw_config_func(cast(RGWSpec, spec), daemon_id)! x1 E$ u8 z: p* L
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
* Q& P1 G' P1 n( D    self.create_realm_zonegroup_zone(spec, rgw_id), o: z: @% q$ R- t
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone' Q# U( ?0 u6 B- C# ?. q8 l# F
    raise OrchestratorError('Health not ok, will try again when health ok')# z# ^& q1 q# R& [
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok. ]+ V  v: D6 o3 r9 |" n
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 ok2 }4 |) [$ ^9 x
Traceback (most recent call last):3 v, R' g2 r. |) B! Y" v2 `8 Y4 S7 O& o( f
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services' O8 H' ^% K% p
    if self._apply_service(spec):
$ _# d2 J8 S% A( s# C6 B9 k  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service, M, v5 |9 V5 [6 z. r8 _
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
. ?9 z7 Z' F) w. V4 `, X% q  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config  ~6 ~9 ^. X! ?+ I
    self.create_realm_zonegroup_zone(spec, rgw_id)
; e- H4 f6 B/ G* i% I, k  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone( |$ z9 u- b3 k( m3 i  U
    raise OrchestratorError('Health not ok, will try again when health ok')
" Z3 f+ G2 @3 X0 s6 Qorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok- T% h$ l7 {* v1 r
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
8 E" F0 y# S! F+ ^/ W8 iTraceback (most recent call last):
& y1 K5 A. x) I* W  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
' t; k0 F) H' o/ V- Z) [. t    if self._apply_service(spec):
. i6 \7 T9 A) T! f+ S/ u0 x  w0 y  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
1 S; s0 h5 f  F9 T    rgw_config_func(cast(RGWSpec, spec), daemon_id)7 g" |6 u6 R( I+ e/ \5 c
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config  f" r6 L( G' N) Z. j2 b
    self.create_realm_zonegroup_zone(spec, rgw_id)
# I- O  F4 y/ o  e, D6 O  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone6 r, ], ]( D9 Y
    raise OrchestratorError('Health not ok, will try again when health ok')
5 j% n1 Y% I! B0 ~8 [6 `  worchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
$ W9 k4 d) a( _1 |! N" D5 R! T2022-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 ok0 e# D7 I& N9 D  K# S
Traceback (most recent call last):
- k3 E* ^; a8 G" F; n2 Z: k  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services9 c/ }2 Z1 Q# |6 E/ T; z; i6 ]4 U& Z
    if self._apply_service(spec):
) _; P4 {9 L/ a1 G& _+ ]6 _  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
( m$ V3 f' s" |/ x$ }# \" m0 e    rgw_config_func(cast(RGWSpec, spec), daemon_id)
  \  X  L2 x: j1 T% l' N6 M$ \  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
3 O) O! P# @+ e+ I* C    self.create_realm_zonegroup_zone(spec, rgw_id)
& S, r2 _8 u( F& p7 H  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
+ ^' }7 J- c, J0 [1 z! J    raise OrchestratorError('Health not ok, will try again when health ok')3 D1 {# x- N/ A9 e4 b7 g
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok! l6 `/ C/ o& Z+ D6 `
2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec
8 e) R, y1 v4 ^2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts
. S7 j/ ~! ?6 r! c! h2 ?2 `7 d2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts6 i+ u0 J: }  H& I+ J& @
2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts' c' `, |6 `! g$ e9 {( s
2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts
# k$ M9 G( ?9 _# {# c: b4 @2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts
) N$ o9 M% X  y* R$ ?$ R, l2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts  O/ v' g! C, i. ~7 k7 g
2022-04-27T08:16:34.288319+0000 mgr.ceph101.qhgzmi (mgr.14164) 96470 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt4 {- M6 i+ u. ^' C
Traceback (most recent call last):
% H; z6 c" O5 n" z5 t; R- y0 B4 O  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
$ h# s/ l4 D& D6 w( f4 T    if self._apply_service(spec):
& O, w- v( Y2 p  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service0 I- ^& s  v  T* q! v4 F" |9 w
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
' I% A; J; ^" C2 u& n6 p  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config: y; n7 H2 y2 y
    self.create_realm_zonegroup_zone(spec, rgw_id)! o9 o5 x- ?/ w1 c9 u
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
! B- T9 |$ t% @" R    raise OrchestratorError('Health not ok, will try again when health ok')
6 B* y& R& v) k9 q0 Uorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
1 P" U1 A0 c1 V- ?' W3 F- @, I/ Q0 J2022-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
! H; l9 ?  z4 g' {Traceback (most recent call last):
. q+ @9 s: }- r" W  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services# B2 T9 X/ K& n7 x+ u
    if self._apply_service(spec):# s5 n# B( v+ n$ ~1 ]
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service4 V0 D3 s  z' @9 R
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
  f+ g" M  L; e; H; _$ `  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config8 v5 l. c7 l1 M* F
    self.create_realm_zonegroup_zone(spec, rgw_id)0 Q/ H% E! j- m4 v& I9 a
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
3 j& }$ ?& l, l: k1 d. k    raise OrchestratorError('Health not ok, will try again when health ok')
8 F/ p7 C# S4 a- U8 |% borchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
2 k5 X! c5 O' X# Z" v" F3 P; ?: N. p: r+ j& l7 }

2 c: |2 l2 X$ a' S/ I# w5 _/ U6 [" J3 [
进入到docker中0 M! R+ }; J8 h& c; D6 ?# S/ v2 V
bash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh
, H4 [4 M! ?% N! L- A# L4 z8 W( Lsh-4.4# cd /usr/share/ceph/mgr/cephadm/services/# u, r, o( r. j* Q& g6 \
sh-4.4# ls
+ o- G# Z; P! y" T) w# f__init__.py  cephadmservice.py  container.py  iscsi.py  monitoring.py  nfs.py  osd.py
0 L0 |7 ~2 }. r3 J) d6 T0 }  p8 Ush-4.4# vim cephadmservice.py; d. j( n2 Z. g/ E- B. y* H
sh: vim: command not found
/ ^+ D8 h1 Q& Esh-4.4# vi cephadmservice.py
9 S! u6 E; W$ M. J7 @  c##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。4 A7 I- {, d& A5 d' w
#进一步,将集群调整为健康状态,再次尝试,可以正常
0 x. P) k4 ?) E2 K; Y$ t3 _  `  x( M
访问s3对象服务,windows下安装S3 Browser
, [" l6 _  U; v( _2 T& e/ ~: u3 y2 `* y7 J) ^  j7 v
创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。
/ S, u5 f* i' h* h% S5 {其他常用命令:' C2 M% D, S9 ^2 R; Y
bash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_19 t/ I2 b& Y- X9 {) k) P
radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_1: K' n( k. y, [
radosgw-admin zone delete --rgw-zone=zone_16 e( C% ^9 K9 n( N0 z' O1 ]! {

( z6 H' @/ F% T2 V7 A$ Q0 ^9 [radosgw-admin realm list
9 u  Y9 R/ }2 d1 mradosgw-admin zonegroup list# |/ h! O6 H; s: V. J1 m& J" G
radosgw-admin zone list1 |: ~7 }/ T; v4 Q: g( C2 V  E& b' A. H  n
radosgw-admin zone list --rgw-zonegroup default; p, S! C8 ^: p0 P
radosgw-admin user info --uid rgw_admin --system
; e1 c6 {, H2 t2 H' E1 y+ u  X  Q+ `* o0 q3 s. ^
s3cmd mb s3://sec --region=zone_group_1/ r% H) f6 F, K6 S9 w

! w8 @" E) z) Y2 W! I3 s4 D# U4 g" Z. e* B: q. y% D) @
配置dashboard:
' n2 v; C, b0 E* |+ {/ [( }5 Ebash 体验AI代码助手 代码解读复制代码 1752  2022-05-09 11:21:28 radosgw-admin user list
5 I. ~; f( S" Y0 T4 q8 c( f 1755  2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin
& Z, b: v# W. W) w! d! f+ s0 a 1757  2022-05-09 11:34:44 vim access.key
; B/ X/ a& k" \" j7 z( m" X( E 1758  2022-05-09 11:35:00 vim secret.key. p% [3 H! [  C  o
1759  2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i  access.key! D! Z$ ?' ^' M8 v" I, {  f8 N" E
1760  2022-05-09 11:35:34  ceph dashboard set-rgw-api-secret-key -i  secret.key. y8 v. \( T+ \7 e$ p9 a/ n+ H, i
1761  2022-05-09 11:36:49 history/ L: p. \, C- P
/ C* }/ e0 L2 P8 p4 C, b
在前端可以看到1 g, M  ?7 f* u  |
' y* H' _3 t# q% p) x8 T
搭建主-主备份: s, c1 f% |2 y+ W2 g/ m7 C
bash 体验AI代码助手 代码解读复制代码
6 s* _) r6 e  x" j' L( a( q6 ?6 O( X- j/ s( r) b
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo
1 F+ b* U8 o2 p& Q6 s4 W, _  \
5 p/ S0 A3 \& V$ U. xradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \( C( Y4 B  W9 _3 U4 @9 O% M
                            --rgw-zone=zone_02 --url=http://ceph101:80 \
& S1 \" ~- Q4 X" @% [/ P) F                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \0 w" b* _! V9 U. m
                            --endpoints=http://ceph1:80
( H2 Y) e0 H8 r& P0 i4 S8 {2 xradosgw-admin period update --commit9 p: w0 n+ d+ m5 C8 n$ M. c" Q
ceph orch apply rgw  realm_1  zone_02 --placement="1 ceph1"8 C3 F* K0 s1 C2 d$ B
  _6 f. S1 k& b+ Y
查看应用的配置
  k" m, T+ s* Z7 Rbash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump! g) l1 L' i" x0 G, D

1 E" ?; F0 p5 L  E
/ ~. r4 `' d6 ?& u. X5 X( [$ w/ R9 W[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd, f2 F5 y- ?2 y8 N
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7
. W' u4 }5 W7 s- k, b[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll( n! O4 U8 I* C7 q: y; l1 g/ N& c
总用量 0& v2 k& x( O- M1 f* ?
drwx------ 4 ceph  ceph   92 4月  27 18:52 crash  I2 d5 G/ W# V2 {8 n$ @9 h
drwx------ 2 ceph  ceph  133 4月  25 16:07 crash.ceph5
1 {0 w6 o: S7 U* }# V- cdrwx------ 3 ceph  ceph  190 4月  27 17:04 mon.ceph5
8 W# x6 L; f9 s& l/ h+ [drwx------ 2 65534 65534 104 4月  25 16:07 node-exporter.ceph5" x, T" K' d, ]9 N! Z) [
drwx------ 2 ceph  ceph  241 4月  28 19:42 osd.4
$ U. ^6 Y# I2 H" D5 `2 Cdrwx------ 4 root  root   88 4月  28 10:59 removed
9 {6 y* f! {2 X( p- L) vdrwx------ 2 ceph  ceph  133 4月  28 19:57 rgw.realm_1.zone_03.ceph5.tapydb
* D$ M5 e( ~  t
$ e2 u* l- v8 o, Y* \' ^9 T7 X( ~# s& c
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb) j% P5 W' [! j* [# W
NAME                   VALUE                                                                                                                                                                                                                                                      SOURCE    OVERRIDES  IGNORES  E. X6 p  Q( E* T
admin_socket           $run_dir/$cluster-$name.$pid.$cctid.asok                                                                                                                                                                                                                   default
$ |# T8 l' A, _5 w' h) t9 `( ocontainer_image        quay.io/ceph/ceph:v15                                                                                                                                                                                                                                      mon4 \* x- ]* s( w+ @- B' Q$ q
daemonize              false                                                                                                                                                                                                                                                      override) x0 r- x" w, ^8 l/ ]
debug_rgw              1/5                                                                                                                                                                                                                                                        default; V- H* O7 _" t" b+ a- ?8 x) Q5 t6 F
keyring                $rgw_data/keyring                                                                                                                                                                                                                                          default
  _2 \. K8 s7 Plog_stderr_prefix      debug                                                                                                                                                                                                                                                      default
5 X; i8 w3 g) _2 H; v: b% @log_to_file            false                                                                                                                                                                                                                                                      default
$ X! J/ J: }0 T( s- Q! [log_to_stderr          true                                                                                                                                                                                                                                                       default
5 B+ l* b$ o$ t4 m5 zmon_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
+ M5 \6 i, B; f' Gno_config_file         false                                                                                                                                                                                                                                                      override
- ]4 L3 @" t  \5 _" i; T0 L6 \( lobjecter_inflight_ops  24576                                                                                                                                                                                                                                                      default' m3 g$ e2 O2 m1 C/ u0 g4 M8 I
rbd_default_features   61                                                                                                                                                                                                                                                         default+ O5 o9 @! u9 W# z
rgw_frontends          beast port=80                                                                                                                                                                                                                                              mon2 L+ v1 |5 w- `* n7 x
rgw_realm              realm_1                                                                                                                                                                                                                                                    mon
) Z; `' k' ?' r1 Z8 B. rrgw_zone               zone_03                                                                                                                                                                                                                                                    mon: b* ~! M( ]* _! {- q% u+ R
setgroup               ceph                                                                                                                                                                                                                                                       cmdline1 ]5 ]6 c( S* C( x- O1 a; {9 U1 Q( p
setuser                ceph                                                                                                                                                                                                                                                       cmdline
  E2 j- W; Q2 U$ A- Y. k( m
$ [+ \& F5 H+ o对于想修改rgw启动端口的,可以修改配置文件
' t; I7 r% x+ a  D" v8 f+ gbash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关; V& z5 }# ^+ p6 H2 u: Y
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo7 Z1 e/ t$ q$ `2 G
- e; t6 q8 f* N6 O; Y
radosgw-admin zone modify --rgw-zonegroup=zone_group_1 \2 s1 M6 y+ ?1 j1 a5 J
                            --rgw-zone=zone_03 --url=http://ceph101:80 \
" V+ f4 A4 N* k, `; u                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \. {. {, I9 x7 j% t% a
                            --endpoints=http://ceph5:80888 \0 O  m' i, k5 Y! t
radosgw-admin period update --commit9 D) U5 e5 f8 H- a' ^/ s) L
ceph orch apply rgw  realm_1  zone_03 --placement="1 ceph1"+ R; W# ^: \) {4 Z! Y

/ X: `0 y* P" F% {$ S' D+ p
! M5 T* _7 L8 ?. f+ r[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd& p+ X$ e0 P3 g" j; l! F% T
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
. {' W# P: R; ], h[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim8 k1 s( y8 a' b# U
( B& f% A+ O% T) \0 W; R8 R
`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7
0 A. ~+ s# v" u[global]
# X4 |7 L. A3 U5 _9 k" E1 e8 s' o        fsid = f88b0b1a-c467-11ec-a2b8-525400299ff7
+ {# r/ ]$ ~9 |! A) B. t        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]& O" g: L* x; K' G
[client]; G0 M: k, r* X. S: I% q2 o% J9 M4 Z
rgw_frontends = "beast port=8088"9 \0 l# e/ I# }" y; v6 y+ r2 E
`/ ?) r/ N- J' O5 e) U; V
#然后重启rgw服务
" v; k% u4 v( B% r#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends  "beast port=18888"
! l4 [5 J  z" l7 y, d) g) ]#去掉config中的配置项,重启服务,也可以生效
! ~$ u: U$ A" o8 p6 H- g; X  l# W#至于精确的配置如:
1 _( d$ N: F: @, W+ @5 B' a`
" J1 t7 q6 }6 c# ?+ j7 J[client.rgw.realm_1.zone_03]
/ y/ V" t* ^; d" k3 G6 h9 {' Urgw_frontends = "beast port=8888"
& {* X2 ^  }$ N/ `6 }$ t`3 S8 |- w5 l9 ?+ |8 o+ R& s" `
#试了很多次,都不好用,官网说的不明白. O9 Y5 L# b% G5 C! h; X( l
( @/ i+ P0 |- {8 J* c
参见:
1 i* |& I3 i5 X. F. {" i
5 @& ]' Z  ^) L8 L( o7 T- |& o2 D1 b2 D指定rgw的数据池
' i: h. H$ e+ h0 i* n- c. G& G! s, y' B* u' N& @" O' b
移除osd* ]% Y& o. ?& ~
bash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:" }- E  N! T0 e  x. F3 q+ P
将节点状态标记为out (节点已经不再提供服务)
4 c. t- w5 h. |5 U# F[root@ceph1 ~]# ceph osd out osd.5" \% V' J8 a- L% e3 H
从crush中移除节点(不删除会影响到当前主机的host crush weight)0 Q* d2 z( H5 |( E
[root@ceph1 ~]# ceph osd crush remove osd.56 O+ D" v$ t# E  z
删除节点( }5 v0 P+ y% L: I4 F3 e
[root@ceph1 ~]# ceph osd rm osd.5
% _: p( E0 q+ j5 v# d! \删除节点认证(不删除编号会占住)
7 R9 }* \( e% Z[root@ceph1 ~]# ceph auth ls
/ F/ c/ ^! a( @/ p  O2 W/ x[root@ceph1 ~]# ceph auth del osd.5
) a' z: ^5 u  @1 L% I[root@ceph1 ~]# ceph orch daemon stop osd.55 U' B9 ^# S5 g3 m3 D! X0 h
Scheduled to stop osd.5 on host 'ceph6'
2 T  D) [) `8 ?" y' ?[root@ceph1 ~]# ceph health detail" Y- o* S8 e2 d7 j1 {' w. {' f. X
HEALTH_WARN 1 failed cephadm daemon(s)8 b1 I9 O/ @* k" O8 m
[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)0 k4 a& H" q5 a; s, ~
    daemon osd.5 on ceph6 is in error state6 o8 _. |4 h; N0 L# j
[root@ceph1 ~]# ceph orch daemon rm osd.5 --force8 K6 X2 o' j; E6 a" W  P* y1 I
Removed osd.5 from host 'ceph6'9 D0 ^8 i4 h7 O% s. t4 L; W" \
# O1 ?  D/ R' f+ }6 b! K0 q
恢复磁盘:, ~$ @# r5 W- `+ E7 R
找到某个未加载的盘,有两种方式:
8 Y4 x7 {$ g8 L, Ubash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata
3 t' H  l1 W' ]$ s2 p4 d+ B. }5 s6 k

- K& e- }( s6 I9 obash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd9 Q+ o$ @" K+ }' B8 M. L. A4 \
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z2 ^/ ?; X; S2 O3 {! _* G9 l6 P
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll& _  L% T4 B" V: J8 F' J
总用量 52# Z9 O/ E$ @% P" M1 R# {6 f
lrwxrwxrwx 1 ceph ceph   93 5月  10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f3
+ w2 V' s+ P8 U# g. ~; \8 \-rw------- 1 ceph ceph   37 5月  10 12:47 ceph_fsid
" I( w8 k# w, x+ W- h( ~-rw------- 1 ceph ceph  377 4月  28 19:43 config
4 R1 E6 [8 o! y; Z4 C-rw------- 1 ceph ceph   37 5月  10 12:47 fsid
3 w" `/ G) h  M6 e-rw------- 1 ceph ceph   55 5月  10 12:47 keyring3 _9 Z, F! x  r$ h
-rw------- 1 ceph ceph    6 5月  10 12:47 ready
& p, n8 O8 H4 i# H* K& O. N-rw------- 1 ceph ceph    3 4月  25 17:04 require_osd_release% j8 s' b' s( X8 y( i
-rw------- 1 ceph ceph   10 5月  10 12:47 type
7 {" W& ^* d, _( ?9 W; ]-rw------- 1 ceph ceph   38 4月  28 19:43 unit.configured( ~) N& L; `* J& y
-rw------- 1 ceph ceph   48 4月  25 17:04 unit.created
+ h4 h, Q4 _# N3 c( q3 B-rw------- 1 ceph ceph   22 4月  28 19:43 unit.image% F( U1 j2 a. A# w; v! B/ a- m5 A
-rw------- 1 ceph ceph  931 4月  28 19:43 unit.poststop- z! s  S+ W* p
-rw------- 1 ceph ceph 2035 4月  28 19:43 unit.run& m# g/ N. T/ i. @  S, ~
-rw------- 1 ceph ceph    2 5月  10 12:47 whoami1 \; w5 `5 o% R4 b+ f# D9 v
7 s) J% s- S7 x! v# l: ^, s" o

8 V0 L$ F3 k1 n[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk
- ]! T% d# V* kNAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT2 ]! z) k0 d" B9 r! b+ _1 r
vdb                                                                                                   252:16   0   500G  0 disk7 J) C% G2 G7 M0 Y# G; E/ |
└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4    0   500G  0 lvm, C9 r2 V- j1 d# X" `
sr0                                                                                                    11:0    1  1024M  0 rom) U9 Q2 d) V: w  G( O
vdc                                                                                                   252:32   0   500G  0 disk
, E6 ]( ~3 `/ k$ }7 A% r* n) q. }└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3    0   500G  0 lvm# i( _9 v4 R$ k( W# V& k
vda                                                                                                   252:0    0   500G  0 disk
5 v' R1 ^3 f$ ?' w  j" _5 c├─vda2                                                                                                252:2    0   499G  0 part
' F8 Z. s- z# o" O; l│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm
1 X+ c8 |0 o6 j. K) y& t. r│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home0 J$ J! k1 ^+ e3 v! \) F4 U
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /
' x: p& b' d) ]" }1 q% D- j└─vda1                                                                                                252:1    0     1G  0 part /boot* W: X& d6 `/ y5 p2 Q+ d

8 A, A: \8 J+ k# L可用确定是ceph6上面的/dev/vdb块设备
0 Z7 {/ q1 T0 X7 kbash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用  v2 C8 A( A( L$ }# G9 {$ y- f# K
6 i5 v( b0 N& ?; P% p4 {6 f: \
[root@ceph1 ~]#  ceph orch device zap ceph6 /dev/vdb --force; Z6 l4 [* S2 G) s4 F8 f0 }3 |1 Y
/bin/docker: stderr --> Zapping: /dev/vdb5 `; n- C. @, C% p8 f8 z
/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync% k; x9 ^: _, s% `% E
/bin/docker: stderr  stderr: 10+0 records in
- r! h: {. \* ^. C% U" j* H5 G: w3 ^# f/bin/docker: stderr 10+0 records out; J: Q% Z$ D: h2 l" [, w$ C$ t! p
/bin/docker: stderr  stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s7 Y3 K, d" q0 D. [: B+ E* T
/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>3 E2 t0 j/ N6 G4 J
[root@ceph1 ~]#  ceph orch daemon add osd ceph106:/dev/vdc! y$ x) s/ b" J$ D7 z
ceph orch daemon rm osd.5 --force
# ?) O' C! i! j& L3 Wceph osd out osd.54 i+ k$ d# r5 `& C# Z
ceph osd rm osd.5
! s$ B* ^4 R5 I! {3 Bceph osd crush rm osd.5
! ]' J0 I/ a) \3 b4 o6 \" `  Z( x+ g% r& P9 M6 _' l. g6 N
pg故障处理
5 O4 Q1 P0 {& u: b  f6 y7 I; G( sbash 体验AI代码助手 代码解读复制代码7 e# j0 N8 d; s6 q: k/ W, c" Q8 M

5 A8 M/ T# U; O& c[root@k8snode001 ~]# ceph health detail
& h% |7 a( T1 ~1 fHEALTH_ERR1 Z$ }( k6 Q0 F9 M. `
1/973013 objects unfound (0.000%);
* o3 P* I- b/ ^8 D, w8 T8 d/ h17 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 degraded7 @5 Q- ]: B+ O" ^% f
OBJECT_UNFOUND 1/973013 objects unfound (0.000%)
& C. g) \' ~1 G/ K    pg 2.2b has 1 unfound objects
: L% b+ S9 f% {, WOSD_SCRUB_ERRORS 17 scrub errors: r; R* |3 b! I0 g
PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair
) ]& u5 _; G! r# B/ r) h/ G4 H    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
3 Q- o$ Y. W0 y- y% |    pg 2.44 is active+clean+inconsistent, acting [14,8,21]1 w9 m9 m. {, o. i, |) h
    pg 2.73 is active+clean+inconsistent, acting [25,14,8]$ o7 y* o* Q( O
    pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]1 ]2 Y" Z( L$ M  H2 o' B4 g8 ?/ A9 Y
    pg 2.83 is active+clean+inconsistent, acting [14,13,6]0 G  [" M! O: m. [
    pg 2.ae is active+clean+inconsistent, acting [14,3,2]
( ~  q: Z; _  P  l. `    pg 2.c4 is active+clean+inconsistent, acting [8,21,14]. B$ H. y8 u- O) ]! A* k: `& e
    pg 2.da is active+clean+inconsistent, acting [23,14,15]
9 v6 F% V: I4 K7 @8 u    pg 2.fa is active+clean+inconsistent, acting [14,23,25]
& Q* F3 z7 u  I! Q2 n4 x, i* ]PG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded1 g' C9 K; g" Q8 k
    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
- T+ J6 c9 `; {6 L
; t5 o7 O1 i- {: z" V& Z6 `2.查看pg map
* ^+ r# |; w; K9 x8 Z& ?[root@k8snode001 ~]# ceph pg map 2.2b
  B! ^1 i5 W/ y$ c/ {# `/ [9 e$ `osdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]. I4 ?! g! G& V
从pg map可以看出,pg 2.2b分布到osd [14,22,4]上0 V' z3 U% M2 d
! I; {: @5 ^* }; W7 A
3.查看存储池状态. i3 G6 D/ u' y# k
[root@k8snode001 ~]# ceph osd pool stats k8s-1
7 B/ d0 `$ @3 m. p; x) _pool k8s-1 id 2' n1 v# X' V  ?( W  S
  1/1955664 objects degraded (0.000%)
9 ^1 f; ^* o9 f- S$ J  1/651888 objects unfound (0.000%)
; a; U; D8 Q2 m, F* o  client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr
; `$ z. K5 c) X+ I( c( u
+ m2 z! a. r6 N* z' _) K[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-1
) [5 L# e" c" o9 ?% E) o$ p: K* Lpool 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
. P& z4 w% {' \( D2 h- Q& M( ?4.尝试恢复pg 2.2b丢失的块0 {) |* m6 Z$ v+ z
[root@k8snode001 ~]# ceph pg repair 2.2b
0 B% G* Y5 B# W# `1 c0 `  u8 o如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
: G, g; g; A* v* T9 k6 u  V+ u[root@k8snode001 ~]# ceph pg 2.2b  query
: H" Q! [. d/ u9 q如果repair修复不了;
, Z+ B8 O6 O3 Z* Q9 W% |$ G' C% i两种解决方案,回退旧版或者直接删除: P4 D: v7 C& _- q5 I! a
回退旧版% L7 F; D# x1 T5 {# D, Z# _
[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost revert0 k& o4 l1 Y( N+ Y  d9 Q5 L
直接删除
' v/ ]; c& D2 x9 Y) c1 E[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost delete
* _' U4 ?- p/ }2 b( y$ @& n! A5 h
& M4 [6 T* b# G& }; l& s参考:记一次ceph pg unfound处理过程1 w! B8 `, S" R1 I$ J0 J
卸载" @, l, V- P0 ~# y1 G& Z9 x
卸载过程:6 |8 d8 e* v( V: }4 R9 W4 _
bash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'+ X4 P4 I3 |: ?& ?
#找到fsid
: n& L% ?  X  m* m[root@master1 ~]# ceph -s
& o. d$ m2 r9 n# ?8 i' ^9 hInferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6/ C9 ]$ \; @& L9 O- f
Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config
8 J! h: L+ a6 |: kUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
' L# v, n9 A7 Z9 ]1 ], D& o' |9 H2022-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 directory6 r, F- x2 s  M% n6 j
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 cephx
6 A5 I% ?5 w/ Y( d) y# o, o2022-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! Q8 s1 T1 P' y" w
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- D6 M# S# R2 b& s  u& Q6 V3 g7 ], r
2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]
& g, c  v* I/ p+ Z$ U2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication
- ~5 |6 n% d0 Y( r1 J* }2 j5 [[errno 13] RADOS permission denied (error connecting to the cluster)7 T% X1 y7 Q8 n) [4 f

; a  r7 O: y. A9 Z1 R9 z8 q#使用fsid删除集群+ ~/ Q) X  o  t* K& t
[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force
7 S" ?8 v2 ?2 V# s! r# l! O
1 ^' g' F* ?; z$ J. E5 w2 V2 a8 W' Z: L7 h+ K
分发ceph.pub
8 E6 }5 N# n8 C$ j2 }1 Jplaybook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub"
& @0 I: b' x; w5 h) v6 p0 d9 B8 M3 h, e; q$ j6 G  a
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"
, g3 {) N, z; ~5 m- g6 R! z+ C1 m( Q
, ^8 z: h: D$ f* ?使用 ansible master0 -m setup 可以看所有的变量! [! K# z/ ~/ `
参考:ansible.com.cn/docs/playbo…
) p+ q3 W. z' |3 N' @" @- \jinja2参考:8 Z/ W! \  i, \
stackoverflow.com/questions/3…: i& E6 H0 L3 @
bash 体验AI代码助手 代码解读复制代码 playbook -v  2.mon1.yaml/ k. q* a2 r& ^+ Y. z: A; \
playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"
7 Q) h1 n. i5 k! T: M playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"1 D9 V! G6 ~: M0 o1 X# a
, C; B2 m9 R: L4 @* Q/ }6 i
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。/ s3 Q# \+ e! u5 P) l7 c+ E

; |5 I. C* e6 Y- J  q- H) A添加(add) 在某个地址上新增一个名字为的MON服务。
1 O4 ~  E3 P3 A7 ~) ?+ M" M示例:2 f& d3 P) a8 c! R
ceph mon add  <IPaddr[:port]>9 ^# u7 f; T1 c- U7 E1 q9 Z
导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:7 u! i7 k! d& Z9 C" L
ceph mon dump {<int[0-]>}
6 Z; s9 ]+ C% V( N8 d' iceph mon dump 1, ]  A, O+ }! i) j
获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:
; n4 }2 {( P9 i5 u( X! f6 F! vceph mon getmap {<int[0-]>}2 [, k. }9 {7 |! }8 ~' l, s
示例:
0 ^& ^5 }2 h, ^, e1 r- A" Rceph mon getmap 2 –o filename  t' p8 L6 M$ E; M  z/ x, Z+ ]
移除(remove) 移除特定名称的MON服务节点。具体格式如下:. U$ ?9 F0 W7 O# E& |3 L
ceph mon remove
/ Q( I' I4 W0 H+ g" b. i示例:6 N$ K+ e% b& L0 N# E: Z0 j6 u
ceph mon remove osd3" U8 K9 P) M: Y/ v1 z
获取状态( stat) 显示MON的摘要状态信息,具体格式如下:& x9 `  i+ m( ~
ceph mon stat5 [8 g" c( r8 u
报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:
8 n4 P0 ]. o( Q) B- }6 w+ Oceph mon_status3 P$ X! Z7 c8 b) T* a2 b& N
Ceph命令之ceph mon(Monitor管理)
' |( R: m+ ?% S' `- o9 z% u+ Z; |2 N  T7 w( R, _5 G* O- Z* `/ L+ Y' d2 t
" q3 ~$ g% p' P9 D  O# X6 u2 y' U
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 23:59 , Processed in 0.095800 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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