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

centos 7.9安装cephoctopus版本记录

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-12-18 11:00:55 | 显示全部楼层 |阅读模式
软件版本:: y: o, J" S8 @! z; y

$ m: E' Q* v5 O3 b* i: V, i2 Q$ X* E$ ?/ J
# A. e1 i2 g$ s. K% P" g+ d  g
5 Y* T2 u1 s) Q1 V  u; b+ I' w
& ^' ^) C2 I4 ^

! V7 d4 [7 ]9 G
' b6 q6 U# a/ k( b9 _
. ^: D. m; c# F: z  S( j
( a4 B% a, x2 X) C5 D
# Q. H% Y6 N9 T6 S# }5 L: ~5 a" i* u' f, Y) i7 G5 {1 R
/ N8 d' s3 \1 m. @1 ^
0 ?( o( v. Q% K7 i+ l7 ]6 R

/ t- z7 W9 j- y) K$ l0 K
* N8 u8 u( d% p" V& V( B' |6 Z0 c- ?( W( M$ j

2 U8 H) r& ?* B% G软件版本cephoctopus(15.2.16)centos7.9; c  y/ X; L4 \$ M
ceph官网版本:% s. f9 T) T2 R
docs.ceph.com/en/latest/r…
9 s/ s4 B/ f- ]0 A机器列表:6 a# X$ k; n# B/ Y
( y& z2 R. T! P9 P0 {
( q! y: B+ |2 h6 ?

- a0 C" K% v9 V7 h/ O7 R: a% b1 B3 z

' }6 W) T- Z& c$ F! l0 R" O9 f: x2 g* g8 o

# [5 c3 Y. V2 \7 W: f
  N3 o; q9 H7 R) B8 z2 K
' M8 W6 Q! s0 |+ h- c
4 a0 v- T2 H0 X+ ^7 |. }5 p
+ x% S7 S3 o% t5 g; @
8 a5 u' r$ Q, j; o" W" [! g. H1 {0 d
% j/ y+ X* z8 @0 y  {
* @4 i0 y  d& t8 H: ~& @/ D. s. k# u! q
7 c$ |) p9 f9 U9 J1 D# N

9 l1 x3 _7 B) n. ~% o% w% u
8 a- i9 W  S, [( ?" d9 b8 u8 x0 I
1 G, b& `& a& j) X
4 p- t: T' Y! U9 M, o
) z5 M" q* d$ ?" A- }9 w7 g) n; `& `$ J' C* L' R" I% {8 C
0 i2 ]% a6 p2 o
( U- M& E- f- D
' u- Z) {7 R% [$ o
机器名称ip块设备
# n0 F* G' ^6 R# h7 Imaster0 12.70.10.161/dev/vdb 和 $ j7 i8 [% _. e- i5 S) T
/dev/vdcmaster1 12.70.10.162/dev/vdb 和* e; g$ |* d/ j
/dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc
; z% R: h# P7 W) J/ }% M6 m" T准备工作  R' J* p- G. v- V1 x9 ?
开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。8 a1 ~% v1 ^7 a: t1 i
如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。- ]: o: ^  q1 l- Q8 v- k
ansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):3 R0 k+ ?0 ~$ B8 c0 ~6 s, _, }
bash 体验AI代码助手 代码解读复制代码1 S0 Y' s/ Z  |, V) x
master0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master0$ w4 K4 X+ y+ M' Z5 X
master1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1 0 T8 T3 Q; O6 t" `( J/ T
master2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2- c8 K2 M6 J. U8 b4 _

1 `3 T+ D0 A; \5 C( M/ V  P[all]; I% x+ M! v( |7 C7 ]; i
master0
* A- n8 t6 Z. J& M. {3 Nmaster1
8 J# T* z+ j! B, L5 hmaster2
' ]( d' x8 g! m; K
, ]7 o; [6 u4 C& h升级系统内核4 S9 r4 W+ x+ A
升级系统内核到5.17" k( a9 f+ Q4 I0 u0 x
ansible脚本如下(1.kenel.yaml):; H8 h- C6 n- V3 y
yaml 体验AI代码助手 代码解读复制代码- name: update kernel6 V! n: b# N. Z
  hosts: all
4 ^0 U9 H$ X! ?. S, C$ n# p- S  gather_facts: True! L3 R7 l& a, L6 Q  _
  vars:
( n+ ?; T: ]% }, N* N  tasks:
/ `( o# V7 T' u, I6 N2 ?8 O( m  - name: create workspace
) f' z' Z2 N! r; S) U% W    file:
/ w- I7 t0 p+ m: p1 t  `      path: /tmp/workspace/
+ h9 \) V$ q1 I& P! z      state: directory
+ J0 z* F' w  d' {+ m! S: F# R8 V    tags: workspace" P" j) s/ Y0 r, ?# d2 z
  - name: yum install elrepo* z2 a% K4 o# _6 S. {
    copy:
& a, q  M. n1 n+ s) y' A, B& [8 C      src: templates/rpm.sh.j2( S( @! d7 s+ n  k; N
      dest: /tmp/workspace/rpm.sh
# `' O6 Z' G/ r7 Q+ S- _# z- K; F+ L0 T      mode: 755$ u  N8 Z4 y! e" R5 ]; @
    tags:
7 G( a- ?) @5 `& b- `      - copy-rmp
7 K+ F; V+ H2 y) H4 ~9 L  - name: sh rpm.sh
( @6 U+ s' `6 t3 q    shell: sh  /tmp/workspace/rpm.sh+ b! P9 M; \# q5 D
    tags:
# K( i& J  @$ U! x, ]! X, H# o      - sh-rmp
2 R" K) [# ~& S4 H" c8 s  - name: 列出可用的内核相关包
. F8 e: ^8 ^  q4 c5 Q4 |9 M2 ]7 j) c    yum:- d0 I0 ]3 z; t5 E& p: R
      list: available
8 f- t6 ?% \) U      disablerepo: "*"
% _: f& I2 ^2 c( x      enablerepo: "elrepo-kernel"
, q0 r3 f; ?0 o# M( E  - name: 安装内核
" j+ I' d# w' G9 f7 M" s    yum:/ t2 n4 f5 z5 f# O% J+ H5 }
      name:) K  g# o# d( Z8 ^3 _4 `; _5 ~1 o* o
      - kernel-ml" i4 n& l- S) q7 H
      #- kernel-lt.x86_64
8 v! G, O6 a' s3 t& J9 b( y* ~      #- kernel-lt-devel.x86_64( {7 J* l! z5 H8 p: e+ z* D# ~- {
      enablerepo: elrepo-kernel7 Z( m- s! v3 ^7 U
  - name: 查看内核版本默认启动顺序
: q7 f8 B" p& K6 U. _+ e    shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg1 E' o/ R( p/ y
  - name: 修改grub中默认版本启动顺序
$ O& i1 l% F- }3 N% I$ X- \  V    lineinfile:
  T' o. X( ^" _- D, w+ w      path: /etc/default/grub$ k7 Z( }6 M6 i* ?
      regexp: "^GRUB_DEFAULT"
2 a. c# m: k7 Q      line: "GRUB_0=saved"0 n* u* w! w  f8 S
      backrefs: yes
# f7 t2 i$ h+ w2 G* P+ f      state: present7 K- ?+ k1 f( S& Q4 O9 F, m$ h
    tags:
) b$ P  \: q8 `  l4 V7 l3 ^% m      - grub" S2 z- [0 @: T" U  G
  - name: 重新创建内核配置) g' [, C, R' _8 U9 N
    shell: grub2-mkconfig -o /boot/grub2/grub.cfg
) F/ t# D# d3 q( w  - name: Reboot the machine
# I  Y: @; V) X1 P3 O    reboot:
( ?5 {" C# z  x8 T9 x      reboot_timeout: 300
- K' g% \) t8 ~, d  - name: uname -r0 x3 q  Q* _# S9 o6 i4 f& ?
    shell: uname -r
: |  h7 r7 |3 [    register: version' h3 I* i: @. R6 x
  - name: debug
6 B8 R$ {1 T6 l/ ^4 N# Y# [9 v    debug:
: Y! g( B0 ~# E* l0 u, ^6 T% p; Y      msg: "{{ version }}"
* b, {0 X8 b  z. S8 ?: u4 u+ k. n3 H8 G
升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j2
" ?: s! k& S9 c" `& L4 w* u内容是:  ~5 d5 p% E  F, @" p4 V
bash 体验AI代码助手 代码解读复制代码#!/bin/bash
$ z. E3 i5 L- |0 l% @5 _( f4 Wrpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org+ Y3 ~4 K$ o- h- P
#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm! v7 v6 N! M; v! W5 n$ [% n: p$ f
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
1 u! n( ~. w9 \* [echo 0
7 l/ c) ?% l" @1 r. U4 E# [# H* H) D4 A
) A3 N2 Z+ y0 m& V! v( _执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级# D0 y9 m9 }3 Y7 O: w0 Z1 w% L
安装必要工具和关闭相关配置
3 K) i& |  B! z. d% \# i5 T
& [$ ]2 u7 I* N" r/ N6 ~) a脚本2.config.yaml如下:( ^1 r" i, a& a; b& t" Y& `) @& z( @
yaml 体验AI代码助手 代码解读复制代码- name: set config
0 f" {' d4 F, D1 A  hosts: all
8 w+ M7 J( s, P3 F; d" p  gather_facts: True5 |8 D" t' |/ f$ ]5 y9 y( V
  vars:2 D) z4 |3 ]$ i1 p9 l4 t
  handlers:
4 J4 Y4 ?4 W% J7 I) T& t. E  - name: update_yum& a3 t0 R0 u7 |# e
    shell: |4 C8 @/ i+ r* w( ^1 [, C
      sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
; p, i5 T+ d7 |- [, a      yum clean all; T0 z7 w5 D. ?: y& A
      yum makecache -y9 ^) F+ X6 ~  W0 s! h
  - name: noswap_service #禁用swap
( x% v* p! H1 u8 C( M    systemd:/ a  c  m# M) J8 g$ Y# M
      name: noswap
  |% Q  z" ]6 @      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running5 n/ W8 R; ?# ?* R5 |
      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
9 C0 |' b, ~7 w4 A* C      daemon_reload: yes #yes 重启systemd服务,让unit文件生效; [! C8 e5 M. [2 _& a
  tasks:
7 l3 B# O0 O. i  - name: back up repo
( D4 [- O* N6 [$ S5 h9 E    shell: |7 B! [% F. I5 d" `8 |; H
      mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
: Z1 m4 ^& n- |+ s% m2 n5 S      mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup' I- P0 ]- L4 Z& |3 K8 u6 k
      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup: b& Y+ U: `) m
  - name: delete /etc/systemd/system/noswap.service #禁用swap
5 q) B. u" d) p; R7 y# m. {: D    file:
! z' Z" o$ G3 H* I7 j      path: /etc/systemd/system/noswap.service$ @# ]" i2 z' y& }5 n
      state: absent
! m5 [0 v- P. k; a  - name: download repo #下载yum源" ?2 n1 z- y) U/ `
    get_url:
+ M# n2 {7 P" c0 j: z0 j      url: "{{ item.url }}"
4 D, U" c/ M" e( k' X& T" }      dest: "{{item.dest}}"; R  |( u2 e$ z( }' d
      force: yes
8 Y4 W! [1 O, J: G. h    with_items:
1 ]2 p9 S5 H! Z7 E  @, b      - {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"}
9 H( R# F% C* }6 J4 l  L      - {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}
* T+ C/ F% h2 S2 b2 z0 a0 }. U      - {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}$ x" f4 j' W$ @" P
    notify: update_yum #更新yum(见上面的handlers)/ Q" a1 P% t$ Y/ X; v- A1 c
  - name: install net-tools #安装必要的工具( r" u% R2 u) E0 j3 ]
    yum:! j! ^) `) ]$ [0 z
      name:
+ D$ b# U* a+ {  W: Z4 ]3 |. U7 i/ G      - net-tools
$ P6 g6 g+ F4 r& a0 o& V) A, S      - vim
/ V6 s3 G  P& p" y, s! c      - rsync0 t3 O0 }  ^4 \# F) y& [
      - chrony
' X3 F1 U' R; {) M  l3 S- u/ ?      state: present
( V. T! E: g5 q: ?- R      update_cache: true
8 {' r9 @$ J% p7 q    tags: tools
. ?4 l! T/ d, k5 F6 B) t- N  - name: chrony_service
7 |" ~) F8 q. u" b# ^3 e- }    systemd:
% m3 O+ U  ]# [8 w. G! e( k      name: chronyd( i" W8 i5 S& y' _  R; s
      state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
( a0 G0 p  C1 ^, W      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
: J9 f8 W7 a/ k, H3 X      daemon_reload: yes #yes 重启systemd服务,让unit文件生效
5 G& r7 u$ g9 _  E    tags: chronyd
, B( t" S0 Z5 N2 V4 E4 \5 T  - name: config /etc/hosts #关键 生成hosts文件7 p2 w/ w0 I7 }9 ?0 j) T0 g; I
    template:
. |$ u& D: ~( H, m; o      src: hosts.j2" v8 I" V# o% Q  R) k$ Z  c' v
      dest: /etc/hosts
2 R8 j/ c5 P% t5 B" ?8 T8 _      mode: 0644: [7 x: D7 U$ j- M& Z
      backup: false- S- t  ]9 B' U# f& d! Z
    tags:
8 I. _) o: H% p' F% r6 {2 ]! r      - hosts
3 K* G, B( I! }& b  - name: set hostname #设置主机名3 o+ g' D% T* d2 T7 T
    hostname:
2 @0 |9 `& ]; ^: J$ H7 _9 [' m3 @      name={{host_name}}
# N! b4 D- |3 a& m3 d, j  - name: set timezone to Asia-Shanghai #设置时区% l$ B$ u& N% {( k: D" s, `
    shell: |
$ U  q1 N! {  ]; ^; \! K      /usr/bin/timedatectl set-timezone Asia/Shanghai
3 [2 H" K( D, F$ z      chronyc -a makestep
! _3 O0 r, a( f* n" O" a5 q    tags:
/ n" V+ \% ~9 k/ ^% p# z      - set_timezone0 j8 ]" f* C# J/ m
  - name: stop firewalld service #关闭防火墙
; R" w5 h- J* R) P' X/ D0 y    service :& H& ^9 y/ a3 D( J
      name: firewalld.service
2 m, `5 N, B) ~7 f8 b6 W) Y* N      state: stopped* y* ]" U+ m3 V  a; Y- t. q: o
      enabled: no
0 M! i1 `  n! f/ u    register: firewalld_service_result
7 \& W% K  X' I$ V$ G# w    failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg"
- Y/ y; y+ h4 q    tags: stop-firewall
' B* @3 [& ~! b' B  - name: Write noswap systemd service config file
  d/ u- ^  o/ i9 M9 A0 j    template:
+ C1 f! j6 N- |      src: noswap.service.j2, g" ~$ N' s1 n+ h! b: J$ I
      dest: /etc/systemd/system/noswap.service' L7 o: E0 P7 a4 a& r
      owner: root
0 S2 A" X5 B; b' U1 Y      group: root, y& h9 y' ]/ I+ F
      mode: 0644; U8 r5 I+ i) D6 i) Q
    notify: noswap_service
9 G- a/ f* j# K* o3 P0 n  - name: Disabling SELinux state #关闭suse* O  a- u  V  i( H5 T( \
    selinux:% }9 `* U, l# {% y
      state: disabled
$ M& u1 v$ Q6 ?: D" C  - name: Reboot the machine #重启机器
: e. G9 @# p- @# ?2 Q    reboot:# b1 Z% g3 l; S" Z. g
      reboot_timeout: 300
& R! C( ^0 r4 Y* A  j; A' J. X: t7 Q, Q! x+ s3 j
templates/hosts.j2内容:
+ G$ j' P" ?# v4 v8 [; f% d0 |bash 体验AI代码助手 代码解读复制代码; f9 z. I, J. _+ O5 K+ z

+ e6 x& Q! ?2 C6 |127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
6 i+ y" a+ @6 a' v2 X4 q::1         localhost localhost.localdomain localhost6 localhost6.localdomain6/ p' k+ y( d3 _8 q% g2 H

5 A$ ~  |: c( V8 q: A" ~/ y, f
{% for h in play_hosts %}5 m! C8 G. W- d9 K. o
{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}+ d4 ]! c) w8 l* W2 Q
{% endfor -%}( s+ m& V( y) x  f+ _8 w' A# t

% y1 L9 o! u  t* A5 O9 J执行ansible-playbook -v 2.config.yaml完成相关配置工作; }: ]* o4 N% |) S( U
安装docker! S- b. S" T9 f
按照官网说法,可以使用docker或者podman,本文选用docker。  I! F4 J; X' A& B- T: g' P0 ^5 h
剧本3.docker.yaml内容如下:  E8 }9 a$ y+ `# I
yaml 体验AI代码助手 代码解读复制代码- name: install docker/ F: ^4 \; x0 k
  hosts: all
/ Y5 E* F" ~2 o/ D6 k# O! P  gather_facts: True. |/ `1 P/ ]1 g
  vars:
: X4 S7 t: p5 J/ V    DOCKERHUB_URL: registry.aliyuncs.com/google_containers
* c3 a5 x. L% a& p) a- V) f  handlers:1 w1 ?" Y- B: u
  tasks:( u7 }/ X/ Z! o* P+ l* X- f
  - name: mkdir -p /etc/docker/
2 B/ Q; N% n. v8 j  {    file:, k4 y% ^0 q2 G: A8 n: q
      path: /etc/docker/; c0 g) B! E. C0 D! B$ H4 M
      state: directory
: g: S/ }- S% I! e; p  - name: install docker
. V9 t! H( J2 r  s    yum: name=docker-ce, A7 }. n5 {( j$ g2 I
  - name: change config of docker
- k: g5 R# F# b2 ~( x! g* _% s    shell: |
" v% p( f( L7 n2 [4 H       cat > /etc/docker/daemon.json <<EOF
  X2 U2 S# p) l  e+ _       {"exec-opts": ["native.cgroupdriver=systemd"]," ?) |8 ?9 y, u) q+ E, ]' B
        "registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]
7 ~5 {  r, q8 X( @# }       }
# T" u3 x# R) s4 |* `/ u       EOF, T7 N' K4 `# r: F% y' A. \
    tags:; J) N2 k9 B. C+ L# V$ f& B
      - config# \) |7 A! o/ N0 \
  - name: add systemctl* m, W/ b: g7 D3 h
    systemd:
  o" W$ H! V) q3 l- Z      name: docker.service
/ e# S* j: ?: `2 S0 i5 u6 L      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running5 X# |, k6 c) G0 w4 _6 k4 |. R5 d% y& o
      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
- }( x$ z8 ?5 f      daemon_reload: yes #yes 重启systemd服务,让unit文件生效
% @3 h3 J" ]1 i+ A2 y6 P    tags:
% w# M0 U) o- V- M- K      - docker-daemon
% L6 s& Z9 T8 Y5 g  - name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials7 U: ^  @; V: O# t4 x# k* t/ O
    shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com
9 M* P( h# q1 o9 J7 e    tags: login( ?6 Q+ G1 v, h# N7 ^5 F
+ z4 b! Q# J, x8 _& Z  Y
执行ansible-playbook -v 3.docker.yaml完成安装docker的工作& B) c0 p  N  R& R
开始创建ceph集群/ O- D9 ^% h9 l, j$ t: o* y( h
安装cephadm
, d2 ?  A" m- t& v继续使用ansible为集群中每台机器安装ceph
. s, p& G; a* H- ~4 R剧本cephadm.yaml内容如下:- v2 u- k' R2 G
yaml 体验AI代码助手 代码解读复制代码- name: download ceph$ z8 [' M. D4 R/ ?
  hosts: 127.0.0.1
% |! F$ _* K5 G5 p2 W. p5 P( |  connection: local
4 q! j7 C: y+ \7 S4 Z$ S8 r- w: N  gather_facts: yes2 _9 D: J( L) N  [: q1 A/ a" O
  tasks:
. |$ u& B# V/ [% D  - name: download cephadm* N( T$ I0 f' ?5 \2 l
    get_url:9 `7 v2 M' q% q
      url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm* o3 @3 A3 O8 m2 b! v7 W; J
      dest: /tmp/ceph/cephadm
3 t& h$ `0 S8 o0 J1 v2 m' Z+ e      force: yes
+ H" j* }* \9 I8 t      mode: 755
: T5 Q2 w" P8 [3 _, k1 |, \      timeout: 6004 W# ^6 S. b- W, k
- name: download cephadm and install
6 j: \6 d' ~* p; g- A/ C  hosts: all' E8 ^% m% R4 J  o$ N' S' ^" e# k+ d
  gather_facts: True3 Q; Z4 n' A* c* @+ w4 T
  tasks:
) N+ t& N# ]; m5 M$ r* L  - name: mkdir workdir. ~  }/ b3 \8 h
    file:0 l: w0 R: A" D; h
      path: /tmp/ceph1 j3 i+ v6 H9 Z- N9 d7 _; S
      state: directory
+ A6 u( c9 ~6 v+ y  - name: 分发cephadm安装文件- i# a* u4 y! s+ b7 L+ C3 Z. ]2 y0 q
    copy:: }$ @( c' ~, X# Y
      src: "{{ item.src }}"
7 \0 G9 h7 d& K/ x' S      dest: "{{ item.dest }}"
0 n8 W5 Q9 F! o( _      owner: root  o) X: m0 k1 ]7 J! b: }/ Q' e
      group: root
8 Z, d) q- V/ u% o7 e      mode: "{{item.mode}}"
( A  G$ n# R/ o2 F    with_items:% @& e0 ^" b  s/ W: }# V( ~. ]8 r
    - {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }& ^& C! w6 [& B9 d7 g) A
    tags: cp-cephadm
2 A6 x3 U* g' l1 o. K6 \  - name: install python3
' u( z3 E$ N7 e2 I1 b    yum:
; ?+ n5 h6 D, c" F' x. N3 Y: e      name:
( ~0 \& @# O6 @0 g6 j      - python3
0 ~% z) _/ l9 M$ ?: f( _4 u. @      - chrony; {, _4 u: M9 @( _( h7 K
      state: present
* l* x3 c0 H3 T4 ?* y! r  - name: add systemd* i$ `2 e% H- {  a4 U7 S8 S
    systemd:! b" r8 r  ?6 W7 i
      name: chronyd  u  h4 [/ r% H; V: d' c
      state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running/ \; A7 `( s5 t& ^
      enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动% p. Q" W0 |( _4 Q+ M) U! p. Y
      daemon_reload: yes #yes 重启systemd服务,让unit文件生效
. _: l0 b& M6 g# h& {" J2 P  - name: add ceph release
+ X/ _9 ]5 _  d5 _9 W    shell: /tmp/ceph/cephadm add-repo --release octopus
( x$ Q3 q" P5 h- `' e  - name: install cephadm2 w" L% o% p! @& l* E& u% C$ x
    shell: /tmp/ceph/cephadm install" B8 ^/ t$ G) @/ E/ u" R/ P
  - name: which cephadm, R$ f4 w. l* x6 ?5 |7 }
    shell: which cephadm
1 t9 O! s* I( B2 i* f) L# o    register: which_cephadm( j, ~* J% Y1 O1 p+ Z% Z
    tags: which-ceph
3 v# Y$ g" r7 f1 a5 m" W! Z8 R  - name: show
7 I# `# ~" I3 A8 W& ?    debug: var=which_cephadm verbosity=0    #check.stdout 显示出的信息会看的更清晰点
2 k7 g0 x* h+ ^! N    tags: show-result/ _( U; s8 \3 j: j$ W* D

: \5 F7 D& t& z4 D执行ansible-playbook -v cephadm.yaml完成ceph的安装
. {5 u2 X- p* C3 g; P5 X8 E4 ?, ]" l
引导集群8 p: q; Z% K, c8 [8 {8 w
将master0作为引导主机,在其上面执行如下引导命令:* y* _8 c; C" Q4 ^% h0 M/ D& P# y" ~
bash 体验AI代码助手 代码解读复制代码
. T- }3 z" {2 E( z% K
: |" g3 n$ g( m0 E) s[root@master0 ~]# mkdir -p /etc/ceph# P% W0 [  y2 g1 p
[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161
! Y: E0 X# L0 S$ jVerifying podman|docker is present...* l, Z! G& x2 p& c5 |+ Z
Verifying lvm2 is present...
9 T" v3 `$ W& z- NVerifying time synchronization is in place...
; v% E: [9 \  |3 h# KUnit chronyd.service is enabled and running) Z6 T/ U4 @: D, T
Repeating the final host check...( b) `) I. ]; Q& Z* r: I
podman|docker (/usr/bin/docker) is present# c9 B- Q# Q+ {5 A) F
systemctl is present4 v; G, z# |/ J
lvcreate is present& Z) N  T' m. P# d
Unit chronyd.service is enabled and running) T: J' s+ x+ V( ?) f! H; j
Host looks OK
# q6 G2 e, {5 y/ dCluster fsid: e3386564-bb02-11ec-af56-525400299ff7* ]9 o' P$ O( ~1 {) D
Verifying IP 172.70.10.161 port 3300 ...9 e4 P4 A8 M: @* E
Verifying IP 172.70.10.161 port 6789 .... {* `1 D1 Z/ d7 p  O% ~* ~" J7 N4 v
Mon IP 172.70.10.161 is in CIDR network 172.70.10.0/24
) B8 B2 k: L4 r  {+ ZPulling container image quay.io/ceph/ceph:v15...8 ?" }. s6 `5 O  B2 P* o
Extracting ceph user uid/gid from container image..., ^5 y) x* |7 ~& S6 E; I
Creating initial keys...
8 }5 [4 j' w. b' T6 p# E  iCreating initial monmap...& F/ \# h5 r0 w& M+ c+ [
Creating mon...* Q# u. n4 s! T! T6 ^
Waiting for mon to start..., c/ }, |2 Y5 ^% Z3 O4 b( V1 r
Waiting for mon...
' }/ B6 W+ ~4 L4 C* P/ Smon is available
  w! ^5 m3 C& T6 k! ~Assimilating anything we can from ceph.conf...7 W# g% z- V% ]
Generating new minimal ceph.conf...
$ r. v2 b$ o, f+ IRestarting the monitor...
, d3 \3 j( h: l$ OSetting mon public_network...
0 u* u9 H4 |0 F4 b4 p& l- e2 PCreating mgr...
" ^  I+ Z% A2 [1 e9 QVerifying port 9283 ...
/ D' v( s$ ~- f; h1 W. E$ iWrote keyring to /etc/ceph/ceph.client.admin.keyring
* I+ A8 q* M7 G) gWrote config to /etc/ceph/ceph.conf/ {0 V) j4 ?! S4 Q% I% g/ I
Waiting for mgr to start...
  n$ e" {& B9 O, T8 P' S! q1 VWaiting for mgr...! W- M7 `- L, Y$ N
mgr not available, waiting (1/10)...
' ?+ D4 f+ N% a+ y! m; N% x* mmgr not available, waiting (2/10)...
) g) @  D" w  k" m7 g. {mgr not available, waiting (3/10)...' V: t. p" ^3 n6 v  s
mgr is available
" Z4 v  b) S4 H/ m) P# U9 U! ]/ rEnabling cephadm module.../ u4 z. j& ]7 G% C
Waiting for the mgr to restart...) I7 }% v' Y: m, Y& `1 l, M
Waiting for Mgr epoch 5...+ }, S/ f& b7 C" s7 z% S6 N
Mgr epoch 5 is available
6 ~0 g0 m8 z+ k+ p  YSetting orchestrator backend to cephadm...
3 d4 F4 v! E2 g, {3 O, b  Y2 S7 L# bGenerating ssh key...5 `- W, |9 r6 T0 q/ D! @% i
Wrote public SSH key to to /etc/ceph/ceph.pub
5 R, l) e1 y. |, PAdding key to root@localhost's authorized_keys...
8 q- S6 c/ U8 a; lAdding host master0...
& C/ @- L! \& f; x& sDeploying mon service with default placement...( t! p. o; P% z, Y0 U
Deploying mgr service with default placement...
" y1 e# P! ?6 _+ d. D" TDeploying crash service with default placement...7 F5 @2 {% [: H) N0 }
Enabling mgr prometheus module...
# ~7 f4 L( Q6 V, E  }Deploying prometheus service with default placement..." ~$ j$ t3 ^" r5 i; y
Deploying grafana service with default placement...7 a4 M$ H% ^1 T# Y" ~2 _6 n7 J) d) S
Deploying node-exporter service with default placement...4 i1 I& Y* u6 P, `; K  p$ G
Deploying alertmanager service with default placement.../ L: u6 S0 t  u. U. {
Enabling the dashboard module...5 _7 A- H* L4 G0 q, z7 e
Waiting for the mgr to restart.... T7 ^, u8 o2 a( P
Waiting for Mgr epoch 13...; p/ V# H1 S. X9 \* l1 o8 d
Mgr epoch 13 is available; {) k4 P8 s$ h$ t
Generating a dashboard self-signed certificate...
- s/ y& p0 Z+ w! l6 K  ECreating initial admin user...
, m: N8 l' c8 m8 ]) B7 M5 pFetching dashboard port number...
6 M. {& ?/ \+ U' f  p1 XCeph Dashboard is now available at:
3 l  g* l  @4 E, L
  x. _5 c. L  Q0 U& Z7 s" E             URL: https://master0:8443/" U. e) W2 j4 x7 y7 l
            User: admin, l. @; L3 d* [& r+ x1 x6 l
        Password: vym1bdeajd+ b& c3 j: m1 b- o! m: C1 t
/ q8 z! F8 V0 ]
You can access the Ceph CLI with:0 E, e- d( j! ^# \4 p9 ]6 |& e1 v
8 _9 a$ x4 h6 f  G
        sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring( C- Y- z; X( ~5 s

" Q, W) c- j/ b0 uPlease consider enabling telemetry to help improve Ceph:7 s" y  G" d# }! I) r
" ^6 f6 A6 e$ s( O; Y4 t0 m
        ceph telemetry on; r! X# u7 _, ~8 m8 t& f: D  }

) }2 D3 u; k5 X- b0 p5 oFor more information see:5 M* S( J# Y  ~

8 F! B0 |/ _3 d! r: R. E( u        https://docs.ceph.com/docs/master/mgr/telemetry/& T+ e0 G" K% v4 `

1 Y3 d# u+ a4 V) nBootstrap complete.* T& d" k; \" i1 A4 _6 e  Q7 v

7 g7 x( t( h# x2 ?
$ S- V$ M4 p+ a8 H4 @% [在命令执行过程中,有如下提示:
) p+ v% I5 X4 |( ?" X9 Qbash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at : + V& Y# b1 y' s' v! _% ~- {+ d
             URL: https://master0:8443/
* h& q! J; g3 o: s. Q9 t. u            User: admin
4 C: A$ `5 h9 I* \- n& Y1 y0 ?        Password: vymdeajd; r& O6 I8 s3 l

6 g) N# q: S7 M' C2 Y' E. S按照提示,在浏览器上面可以访问:
& n' {( u. O. d% n" M0 `5 A: O2 S4 g6 X% T$ C
进入到管理页面后,如下:/ f* g* P$ W1 P+ G+ I

% M2 I+ i* l6 K1 y5 q# T; s- |参照安装文档,该命令将:7 ?$ W( F4 b+ Y7 k
在本地主机上为新集群创建一个监视器和管理器守护程序。
" q: `6 \2 n! O2 k4 K3 y: ^2 h6 O2 v1 Z- L/ E9 D7 V
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。
- l# ^! [4 S8 X  J) P! n将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.
$ W5 k; j9 K9 Q/ |' P  }! B- M) o- E
client.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.
" X- s. ?9 O/ _* A& u将公钥的副本写入 /etc/ceph/ceph.pub.
. E: y5 x, n: {" u% o1 }启用 CEPH CLI(必须)
" n  W2 F% T% ]  T2 @9 n+ b继续在引导机器上面执行如下命令,即可开启ceph shell client
) l4 g( p% O$ N% g% c( q注意:后面的ceph命令,均需在ceph shell环境下执行
! n# o# g; c+ mbash 体验AI代码助手 代码解读复制代码
; E7 q0 h; W. Y$ u
0 I8 V. M; z. u1 Z  u8 K3 T/ O) k[root@master0 ~]# cephadm shell( D  Q+ E- u2 G7 e% o9 _
Inferring fsid e3386564-bb02-11ec-af56-525400299ff73 N* c! y) R' i# U1 G
Inferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config
. c; Z9 L+ V$ bUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
& L3 N/ A( t% p3 {: B& a
- U9 g4 O; O. {& L6 A% z: B[ceph: root@master0 /]# ceph -v
$ m& n% D3 j+ D# c' Y. Nceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)
5 i- P9 D+ Y- f" n% ?$ |
2 h3 ?: M+ d: c) K6 e; h& r( l4 n$ i1 D/ U
[ceph: root@master0 /]# ceph -s
. S+ I8 Q1 @9 s. l) @. ]  cluster:  @3 j% `+ t, A" E4 B3 j6 k! u
    id:     e3386564-bb02-11ec-af56-525400299ff79 L- i* A0 J& w& h
    health: HEALTH_WARN' c. w+ Q$ V- @+ g2 r% d
            OSD count 0 < osd_pool_default_size 3
; R+ }# H8 A" e) D( k; N6 s( @/ x5 X- Z" \
  services:
$ G& {( ]; X4 L! s& I    mon: 1 daemons, quorum master0 (age 48m)1 `2 }6 F" U# }$ U
    mgr: master0.ojikws(active, since 47m)( M" d& B0 x( G3 ^
    osd: 0 osds: 0 up, 0 in
( t. D- r+ u! o" t" O
5 |8 M! w3 c4 }/ m  data:! U( n- ~) v# x4 F9 q# A
    pools:   0 pools, 0 pgs/ W7 K# ?, d1 q9 m
    objects: 0 objects, 0 B
, \9 L! u1 C! n    usage:   0 B used, 0 B / 0 B avail
2 O( k1 t, ]( x2 a* m. a# E# t    pgs:
- n' u; N# e& O, o/ W0 o* j+ \/ D1 r4 t
将主机添加到集群5 Z/ {; M. C# ], P" c7 e, Y

" i. y2 k' m2 c& T在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥
' T7 m$ h( }% i5 d3 N0 a9 A. H" W  ^# u0 W6 J# d
bash 体验AI代码助手 代码解读复制代码
) k4 c/ f; e8 r4 S! y7 L" v: r' o6 X, W5 X  h( \+ b1 [* c
[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master1
# n9 H* Z8 n4 P1 j# B! G3 [* j/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
" A: V4 D0 M% M( D; iThe authenticity of host 'master1 (12.70.10.162)' can't be established.
$ X1 [- [8 Z# a9 Z/ q: KECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.+ l; V8 m  i& q4 y$ X/ t: a8 z
ECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.; Z7 s+ V- E, q: q4 c
Are you sure you want to continue connecting (yes/no)? yes
5 C( {0 Q( H5 c1 I5 Jroot@master1's password:
& [: f: q$ x  ~0 o* w) N  G3 _  r+ s% x  J' [! G& ^
Number of key(s) added: 10 L& Z) W9 a0 B
2 C1 o. ]0 O- O. H5 f
Now try logging into the machine, with:   "ssh 'root@master1'"
' w0 m) `% z$ F+ @. s  {# Nand check to make sure that only the key(s) you wanted were added.8 Z; \: o* Z: A) y
5 w9 J7 I- m- @# G- f! w
[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2
/ N2 Y8 q' p! y' F# ^* O/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
" q4 D0 G8 _. m9 X. q2 lThe authenticity of host 'master2 (12.70.10.163)' can't be established.( c8 s$ q. |* Z, @+ X7 I
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
8 Z2 _1 G( y+ u; E# w0 CECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.
" i0 t1 l: L! e  d& e" B2 f' zAre you sure you want to continue connecting (yes/no)? yes! W6 v3 t8 g* q8 R% [
root@master2's password:1 R: i# O7 {& q4 C

- d4 ~1 b* x% l  uNumber of key(s) added: 1% D; p' |6 r7 t( _6 T
7 N+ l' w1 l) S0 \
Now try logging into the machine, with:   "ssh 'root@master2'"
; @! }4 [' v6 O  I0 G, O% H* l. Z) [2 `and check to make sure that only the key(s) you wanted were added.7 y# o2 O* ^& ]! ]

" N( [  E6 z5 Z; C这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了
8 y/ |) S) q5 Z2 @4 Y5 s0 {, _添加机器到集群:$ t  {! e' I3 d8 [3 L0 H6 `- k1 U
bash 体验AI代码助手 代码解读复制代码
& W- u6 q2 Y# w& L9 m* P9 `4 u( P4 ~/ h: B" |* v/ X( C
[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.162; {/ m7 \, H+ s5 H  n- g, ^
Added host 'ceph2'  M! n7 k7 u' F
[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.163
  K# |/ Z8 K  t% qAdded host 'ceph3'
- s9 G. }! j$ x/ O8 U* g; j[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164
5 w/ @* D8 K7 w" e, w  w8 p0 q6 c/ kAdded host 'ceph4'
! C* {1 ]( F# \# d! |[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165
8 ^- \, v. {( U: |. `4 }1 vAdded host 'ceph5'
5 ]% P) e+ h4 k' g4 ?/ s$ b[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166! o: Y) f/ }/ f
Added host 'ceph6'1 z( N. a/ P3 j9 t; t8 Q* _

& j* g9 J! F: ?% x& a" I. E5 d$ T5 [( ], H! D; o) j) y7 ?* p
添加多个监控器/ a& C  z* L, H0 c) U
配置监视器子网:
3 [% W% h7 f0 Sbash 体验AI代码助手 代码解读复制代码
# H0 m# x; s' }0 I/ h9 M[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
" P- d7 v5 R. N8 [5 |" U8 {[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/240 z* p. u6 c7 a$ I1 J* s
/ I) h; J/ f% n2 C  G
##要启动三台监视器,需要调整监视器数量:
/ X) Y$ n+ n: P# U$ b9 m( s! Z[ceph: root@master0 /]# ceph orch apply mon 3 8 p" Y1 t- }$ J
Scheduled mon update...
  F) O. p+ A+ P3 p2 ~& }# O# }. S5 v7 ]4 |) @2 b
按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序( b) q$ P2 y5 @/ ^% N( ]: Q
在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。
% _: ?5 V- A. f6 cbash 体验AI代码助手 代码解读复制代码
7 X" n4 b) v: ~* `+ g: @4 M
; I3 Q1 k7 w* J, Q  Z, C) [( d" C[ceph: root@master0 /]# ceph orch apply mon master0,master1,master2
1 P1 ^7 l4 V) S8 OScheduled mon update...  k0 A2 }- ~- I4 Q8 P' ~/ _2 \
##加标签( y4 C( C* `& w# y
[ceph: root@master0 /]# ceph orch host label add master0 mon7 B& a3 _" x% @' l4 N
Added label mon to host master0
0 v* ~- `- }; m( {7 I; o[ceph: root@master0 /]# ceph orch host label add master1 mon, C: W, ^- h6 u, C, E4 p7 s6 K
Added label mon to host master1
/ |: _* z, U- f5 [[ceph: root@master0 /]# ceph orch host label add master2 mon/ M, y; ^1 ~8 _. n) K. S, i
Added label mon to host master2
- r3 O' K7 o# O" y2 ]! \, g
. p1 f! }% [6 n" m8 W2 x9 K  n[ceph: root@master0 /]# ceph orch host ls  i% V# h" s8 {/ _
HOST     ADDR     LABELS  STATUS
5 g' r  j" {( ?* v0 i& \master0  master0  mon
  i  W' k$ Y0 L0 ]+ E/ Gmaster1  master1  mon
3 |" ~( G( m! ]4 Mmaster2  master2  mon6 A% m- z) ~& }! ?% f3 m

3 E. s; O4 F  m0 _+ P" V[ceph: root@master0 /]# ceph -s
8 @' _% f0 C- i0 ^7 _6 I* o  cluster:2 \! u5 U) h- H( n0 Y. {3 L* K
    id:     e3386564-bb02-11ec-af56-525400299ff7
1 D/ d. Z7 }0 F; Q* k% w9 ?    health: HEALTH_WARN
  o8 b* h; l. k. t& C            OSD count 0 < osd_pool_default_size 3$ j) s. F* e, w

. p0 p6 _+ e1 q: V% a  services:
" Z- K; `: e$ ^- V) h; p    mon: 3 daemons, quorum master0,master1,master2 (age 88s)7 Q, {' [/ w4 x
    mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld6 ]! G& C1 V& O
    osd: 0 osds: 0 up, 0 in6 f; i0 d7 o6 y$ f, j
8 W& p+ V0 @# q  o3 E
  data:. t  y; _1 B2 U
    pools:   0 pools, 0 pgs# j9 V/ V( Q/ C. K. q
    objects: 0 objects, 0 B5 }  @+ ~+ L, p* x
    usage:   0 B used, 0 B / 0 B avail9 }+ |- V5 R6 q" @
    pgs:. ]% O% p/ i5 r& M% ]2 N

4 m$ S7 S; i5 b0 I. f2 r( W8 p. z加入ODS
- }* T: g1 W# y" Y' u: Z1 C可以看到集群三台机器上面,一共挂载了6块磁盘:4 W% i4 e. z: C, O) H
bash 体验AI代码助手 代码解读复制代码6 ^$ O! U! U, H1 s. y
# C, q7 x; ^7 `4 Q  F2 v/ }
[ceph: root@master0 /]# ceph orch device ls- d! ?; E* Q) [' K% k
Hostname  Path      Type  Serial  Size   Health   Ident  Fault  Available; [+ Z5 ~  X* A) w. g
master0   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
" N' E! ^! |0 r' ^! l( B4 D/ `6 a* fmaster0   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes; A' n( t9 ?/ |, \) S
master1   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
' @0 D; j  ]' N4 Z" |& Vmaster1   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes+ ?6 o; ?& N  R+ l% }5 ]
master2   /dev/vdb  hdd            536G  Unknown  N/A    N/A    Yes
8 `' u7 T0 e. a5 H, _master2   /dev/vdc  hdd            536G  Unknown  N/A    N/A    Yes
2 k6 i9 v& c& h- n- I) i2 ~' h
, b/ k3 [& `$ w5 \; z% Q% |当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):
& S5 @8 r$ m! Z5 L9 V6 X9 s4 Lbash 体验AI代码助手 代码解读复制代码! V: ]% m- T$ P$ Z

+ A7 C4 A" ]2 @0 V3 [' \[ceph: root@master0 /]# lsblk
0 h" f! b* w7 a! q# QNAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
! w9 m  p. K2 }; s5 x8 psr0              11:0    1  1024M  0 rom- B' t6 E0 P& {; C3 h
vda             252:0    0   500G  0 disk
' u2 e) S2 ~4 t$ e" F|-vda1          252:1    0     1G  0 part /rootfs/boot, W9 ^, b: F: G! A& H; U+ b
`-vda2          252:2    0   499G  0 part1 ^: Y8 {* H" J6 F( Y. }
  |-centos-root 253:0    0    50G  0 lvm  /rootfs* ]3 u2 p8 n2 L/ j% L+ _. V
  |-centos-swap 253:1    0   7.9G  0 lvm
# k0 C7 Y9 a. W7 ~4 C. t5 V  `-centos-home 253:2    0 441.1G  0 lvm  /rootfs/home
& u) [0 f' Z0 u; \, G" Fvdb             252:16   0   500G  0 disk
9 V/ e( |% ?5 H! q- R- g1 ]) {vdc             252:32   0   500G  0 disk) }! c. v: [: C" o
8 C' L/ O, Z3 L- I4 x) G! E9 H
按照官网说法:设备满足# u; Y, c  v0 |+ R
如果满足以下所有条件,则认为存储设备可用:  s1 m# |( r4 |% f2 r; s

% M2 I; ?) K; v) B设备不能有分区。1 e, N" U- _) d6 V/ E% N9 v
设备不得具有任何 LVM 状态。
2 ?1 F% h: B* L) h: h不得安装该设备。
: b2 q# l5 C+ s* r4 H/ V设备不得包含文件系统。
7 R* v4 j5 Q, z& l设备不得包含 Ceph BlueStore OSD。# N4 j) {" t' K9 m/ `6 U
设备必须大于 5 GB。. M( k9 O& j  }6 X8 R' r
7 N" G5 _% g' q% n! {
Ceph将 拒绝在不可用的设备上配置 OSD
5 A& a# w) P" r+ K& l* [+ S可以使用如下命令,将所有可用的磁盘添加到ceph集群中:9 w- l; i) N& z& @8 Q; A
bash 体验AI代码助手 代码解读复制代码
3 ?; k3 |% k% }6 C
: C  M3 S8 L6 m! K, D% H6 Y[ceph: root@master0 /]# ceph orch apply osd --all-available-devices
; |! ^. j( {+ {+ yScheduled osd.all-available-devices update...
* F/ I/ }& x4 `( @7 U[ceph: root@master0 /]# ceph -s
3 |; o- j  b: v8 g& j  cluster:
; O2 R6 _; w/ Q' B. L8 `. j" R, Y3 Z    id:     e3386564-bb02-11ec-af56-525400299ff7
/ x5 G, m9 K9 Y2 }. `    health: HEALTH_OK6 P0 M1 \/ @2 C7 i
& ?. m) f6 h" P8 O7 u& R$ p
  services:9 e3 [1 r) @3 M
    mon: 3 daemons, quorum master0,master1,master2 (age 12m)
& j; A/ U0 I5 ~2 I' e3 G$ ~: T, g* v    mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld
" ?( h5 V1 i" F- s    osd: 6 osds: 6 up (since 22s), 6 in (since 22s)  R% C  Y% P* t5 N6 Q7 S0 t

+ Z/ D$ j5 r, H4 C! j- e8 S  data:) \; F7 q, ~6 s. F4 L1 w# P
    pools:   1 pools, 1 pgs
9 Z: j0 w0 G' d) B9 H    objects: 0 objects, 0 B
& _/ d  h; B9 w5 _/ l    usage:   6.0 GiB used, 2.9 TiB / 2.9 TiB avail
/ C+ @9 w" }. k) x* p! d5 I3 e    pgs:     1 active+clean
+ j6 n8 |4 n% [& J: U* {4 p7 }& u: a' x7 H
也可以单独加入:
9 p) w! l3 `- @6 x7 X4 }; L2 Zbash 体验AI代码助手 代码解读复制代码! `; @& F9 M7 v% D( k

! V& f* U; y7 u- o0 N6 B[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb( a7 }* @( V' t  j
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc
' J* l% b' m( R: ^" U4 ^4 u$ y[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb
3 U. S9 m& g, ]1 w[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc
5 a& ?3 \  M! f- G[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb
1 S) T" k9 c, m( {- c5 W: L- z[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc
/ L  q6 Z' z3 a0 J2 z2 p. l9 _, x  @8 n% j: d" V8 s
在前端看到:
! E0 o! ?* z9 i, w0 n) M1 M$ q' ^" O4 \5 n6 P/ A! y8 R
% ^2 Y( q+ g' ^. c" x. A5 L
挂载块设备" i% ^( f9 y- P+ i$ ]
bash 体验AI代码助手 代码解读复制代码
  s& i7 p0 K* ]/ D* C5 D$ e( o/ l; K3 |" e0 w& l$ ^, n; y
[root@ceph101 tmp]# ceph osd pool create test_rbd 32
# Z& P8 `$ }7 R! c+ q; M  C) Kpool 'test_rbd' created% ]: U) w. Z, f3 ], ]0 {5 s, C9 i6 Y
[root@ceph101 tmp]# ceph df% N: ~+ H- w! t3 u- m
--- RAW STORAGE ---+ Y" {) q* Y* s8 E" J
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED
6 J, U( ~2 d8 _( \+ O5 Xhdd    5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.22: g, R4 M2 z( y! }
TOTAL  5.9 TiB  5.8 TiB  1.1 GiB    13 GiB       0.22
$ \5 J7 J& s, L8 W
4 j, Z+ D9 k) }3 q9 v, L' z--- POOLS ---
& q& t% e' W, v8 V( W2 dPOOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL
7 d8 L6 n& }) h7 mdevice_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB4 Z3 o( V+ i3 ?  {3 F
.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB! Q: j0 V# t; k
zone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB
+ n1 n9 F7 Z) v0 O1 W7 bzone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB$ \9 L# r0 {% i
zone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB. `4 {$ q" a, J  k: b
zone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB8 E' m8 z& ^3 I. ?8 l( K' B
zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB
3 f) q8 k6 }0 Y$ r; }zone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
! I5 {, ~/ g5 M! v. Gcp_pool                    42   32  1.4 MiB        2  4.4 MiB      0    1.9 TiB
" ?7 [4 e. w0 R& y% A4 r9 K( n0 i4 etest_rbd                   43   32      0 B        0      0 B      0    1.9 TiB5 s1 n' p4 w- P6 n
##创建镜像5 B8 k( {! X1 n, t

/ R$ y0 A- \5 [) Q; e/ p' H& i5 {[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd
+ j& p' }9 ]* F1 |6 t$ ^  \% W3 D2 c7 ?% E$ ?: i! q
[root@ceph101 tmp]# rbd -p test_rbd ls1 d: y$ y$ F8 a- d; a' X% w  R  Z
test_rbd_image_1' L6 I. o0 R2 S- |( i) j( z
" ]# h) E/ C% Q6 C) D2 A" ^
##检看一个RBD镜像的详细信息
, {( t3 w" u  I& P1 D. a0 ]' c3 w[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd
8 z$ ~: Q: \2 }- Hrbd image 'test_rbd_image_1':
: l1 X2 [: Z; }: l: l$ I        size 10 GiB in 2560 objects* a' _+ ~- ~( O
        order 22 (4 MiB objects)( z* ]; L/ r# o1 K7 x3 N
        snapshot_count: 0
+ d6 o  @1 q5 N- I: W7 _. u        id: 2836b2f53ea86$ `: `' J2 i+ y2 J" U  O
        block_name_prefix: rbd_data.2836b2f53ea86
+ ^3 G& {! o* a# V' Y6 k" T' z        format: 2
4 \4 c8 T* F( |- p        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling* o, n3 U% O* R# d* |( I/ @/ Y
        op_features:
9 v4 A4 |4 Z' t        flags:$ b! e* R6 S" B3 b6 J! B1 @! a
        create_timestamp: Tue May 10 10:38:16 2022
8 L7 p6 h; d% @* s" R        access_timestamp: Tue May 10 10:38:16 2022
; \7 I" v- P6 j  x        modify_timestamp: Tue May 10 10:38:16 2022
) ~. G# W7 \- [6 b7 ]        journal: 2836b2f53ea86! S( _1 \1 Z9 R) V1 b- x. c1 ~
        mirroring state: disabled8 E& a. l8 X  A
, k' r9 ~  [9 X" i4 G. ?" w. _
7 i! n& ^( W/ O/ X$ z" c5 X
[root@ceph101 tmp]# rbd pool stats -p test_rbd
& ?# [6 C1 `9 p$ N6 gTotal Images: 1
# `. S) s3 D& q* ?5 Q% L9 ~Total Snapshots: 0
7 n+ V& |6 ?! uProvisioned Size: 10 GiB! |+ d" v: Y8 E4 b3 T
[root@ceph101 tmp]# rbd showmapped
: Z) l* W- l1 H) D; Qid  pool     namespace  image   snap  device
7 `, p' E  p& h3 e  T7 I0   cp_pool             image2  -     /dev/rbd0
* @' y0 I. W& n' f  u) \% v5 c
[root@ceph101 test_rbd]# umount -f /dev/rbd0
- q2 }8 ^: p# Q' u1 P1 q9 e#或者
, ^( T: M& X8 s: M2 {, k
4 M0 L+ l& R: `, [7 B! R0 [( Z[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd0
$ I& p# P% O8 C" [9 v) P) Y) O##然后将pool关联应用) q0 t4 Q% [9 c  q8 h/ e8 r) h. f! g
6 d" R: y1 v( F" R1 \
[root@ceph101 ~]# ceph osd pool application enable  test_rbd rbd' D+ i( r9 X! b5 Q! v
enabled application 'rbd' on pool 'test_rbd'
- E* _4 @9 a$ Y8 ^1 _5 @( F! K[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1
/ t. o3 r/ l5 i+ Erbd: sysfs write failed
+ e1 x+ c  R  MRBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling".
% X4 c5 p- d# \5 A" k+ C" {In some cases useful info is found in syslog - try "dmesg | tail".
$ W! A0 ~! k+ q$ ?0 H* R  Trbd: map failed: (6) No such device or address
' Z; ^$ \6 }- C4 P, O
' @8 P% z  W* r$ C, a+ V/ d[root@ceph101 ~]# uname -r
. \2 K+ p0 B- x! t) {; B5.17.6-1.el7.elrepo.x86_64
$ F! P) S, N6 I[root@ceph101 ~]# dmesg | tail
/ Z% \2 P8 y- W[    9.843030] random: crng init done/ i5 ]. Z" X( ]0 S) A5 s# f
[    9.843034] random: 7 urandom warning(s) missed due to ratelimiting
0 ]* f$ }* A5 O: n/ `[   10.669178] Bridge firewalling registered$ O) x: ^! s" G0 F, m
[   22.239147] process '/bin/ip' started with executable stack
; o. }& I0 K3 j[ 8185.140070] Key type ceph registered" m- K7 B/ r* F' @9 `
[ 8185.140395] libceph: loaded (mon/osd proto 15/24)' Y1 G. L6 \* z! C3 q8 [
[ 8185.141923] rbd: loaded (major 251)  p/ t( n1 ^* S- U; P1 S
[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established
; j- r% b1 K/ Y, ~* Q[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f
1 ]% T3 P: y. V$ n[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40        ; ?: p+ L/ H' W: X( {6 @2 Z  |8 g
##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling# t7 Q, X" J2 b# Z" `# g9 T
#layering: 支持分层**(0次方)**
$ U) n4 a' g9 A: Z' ?#striping: 支持条带化 v2 **(1次方)**
& N# p" g8 @) _5 z4 w; W" {#exclusive-lock: 支持独占锁 **(2次方)**
( n# [& d: u" R# @! s#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**/ i1 F' V* M: ^; _* q# ^
#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**6 h; A, g# |4 f$ t1 \
#deep-flatten: 支持快照扁平化操作**(5次方)**
  U1 {- L5 [- P5 z# a#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
6 g7 h9 F* ^6 _# X( q  G[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling
; x2 S( f2 `! ?' W( [: W+ G. y[root@ceph101 ~]#  rbd map test_rbd/test_rbd_image_1. h0 v# F" m0 F1 c3 Q
/dev/rbd0
$ \! k/ z7 G1 c3 K: O' U% s. q#lsblk 查看磁盘; {7 w. w- ^$ W0 y+ X

+ E+ g3 h' g' ?[root@ceph101 test_rbd]# rbd showmapped% D, y# e) B5 u& O. [
id  pool      namespace  image             snap  device
7 \. k+ q& {* n  r+ {/ |5 j0   test_rbd             test_rbd_image_1  -     /dev/rbd0: k2 u( D. ?. A  T4 e/ g; P( W
[root@ceph101 ~]# lsblk
; @  H9 [; v: q' m6 E& m" MNAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT4 l8 e! s% p0 Q# w7 B* O
rbd0                                                                                                  251:0    0    10G  0 disk
0 g$ {0 z" g% U. F" l. lvdb                                                                                                   252:16   0   500G  0 disk5 U7 g' [  ?) `5 J3 [3 U
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm
% Y1 J% E! U* `sr0                                                                                                    11:0    1  1024M  0 rom
1 U( u- \: {2 J( Vvdc                                                                                                   252:32   0   500G  0 disk5 N# [1 n- K; V. s2 c3 K! [* O* F
└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm
6 T: W" j' q- T9 U0 dvda                                                                                                   252:0    0   500G  0 disk
9 M! ]0 s5 S9 f& ^* x9 b2 `# {├─vda2                                                                                                252:2    0   499G  0 part
" O* [' r, z" b, z, M│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm
% A: x: v7 u+ g/ Q; @" t│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home
: O( k* O/ P$ D' e│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /# i% \' j" N# R* H. @
└─vda1                                                                                                252:1    0     1G  0 part /boot
. ^# \. r7 n8 h; |# r
( f9 T9 u1 F; K6 g5 i: p% P/ [: K; D. P9 G8 t
# 格式化磁盘
" l& \! [# ]2 v: i9 @0 ~( b* A! @6 q$ O9 V( S) I5 _$ c" |
[root@ceph101 ~]# mkfs.ext4  /dev/rbd0
/ \' d+ Y/ e& Z9 J3 g0 ^* qmke2fs 1.42.9 (28-Dec-2013)
" L! M7 k: [8 B/ d0 D6 R% PDiscarding device blocks: 完成1 n# I  w& e3 i& J
文件系统标签=
3 l+ }- O6 j( kOS type: Linux
: A# U  K, P7 Z5 \4 v1 H! ?  w3 F块大小=4096 (log=2)$ {5 f& p" V4 H  L: b" M  O2 u
分块大小=4096 (log=2)# u7 K' ~$ ~) p* c; a. u% c6 @
Stride=16 blocks, Stripe width=16 blocks
) p) p1 B+ Z7 o: T0 e, e- [5 a' i655360 inodes, 2621440 blocks
, V2 b% i5 r; P7 g( ~131072 blocks (5.00%) reserved for the super user' T1 [: C$ J( F& A; s) [# c
第一个数据块=0
; L/ j4 ^+ v# [$ t3 m- H& c7 _Maximum filesystem blocks=21516779522 G% ^3 ~) ]" W  I! O8 s" J
80 block groups( b; c/ f7 [/ ]: [- M( i
32768 blocks per group, 32768 fragments per group
* g) n$ S0 B. E8 t9 }8192 inodes per group" a6 e8 M: m( M5 y/ F, h  W
Superblock backups stored on blocks:+ A$ f, ~: e( ~# [- W# h0 N
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 16056322 I" E: Q" B2 r. W& W' o/ }- Z7 C

4 O' U& x& m" e, I. rAllocating group tables: 完成
& \  B5 N# V9 S  H4 x( y  o2 l正在写入inode表: 完成( A( a9 @. W/ M8 o. _; h9 J: q
Creating journal (32768 blocks): 完成
- B' a$ e2 |9 E2 M- }Writing superblocks and filesystem accounting information:
2 I0 C7 `3 Z6 r完成
; I! g6 q& a+ Q0 O7 l5 m3 |. _: K5 D+ G9 X2 E$ c0 v/ ^, W
##创建挂载目录0 C- B1 R) G! Y5 \: D+ V' [4 A, R
[root@ceph101 ~]# mkdir test_rbd/
2 v7 Y# @0 Z" D2 f* H) R# O1 x#挂载
: u, h$ g# V8 ^6 t4 Q[root@ceph101 ~]#  mount /dev/rbd0 /root/test_rbd
' E6 j; `3 J$ n+ P( u  l[root@ceph101 ~]# lsblk
7 [$ x) {  W+ J& p; |NAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT( @: R6 P( e2 H) F, h* d% F4 `( [( ^
rbd0                                                                                                  251:0    0    10G  0 disk /root/test_rbd
. p7 T/ t) s: S( {9 s2 B4 H( Pvdb                                                                                                   252:16   0   500G  0 disk
+ j# D& w( s- Z" `  g3 `└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4    0   500G  0 lvm
- I! D+ ^6 g) }$ S5 r" `sr0                                                                                                    11:0    1  1024M  0 rom" `* N3 N" F, T
vdc                                                                                                   252:32   0   500G  0 disk- R+ a( `* g- R) }/ x
└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3    0   500G  0 lvm$ U  E, ?1 {2 J$ D
vda                                                                                                   252:0    0   500G  0 disk5 j" o+ L/ h7 ^  f
├─vda2                                                                                                252:2    0   499G  0 part" N" v3 x8 z8 q; t' z3 F$ `
│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm$ @& `7 e, r# [5 A5 @4 K
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home. U# L1 Z& ?" `
│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /7 w3 r/ b9 J  m
└─vda1                                                                                                252:1    0     1G  0 part /boot
5 l8 r$ E6 G/ l9 ]- d
5 n( Z9 r0 r. \* o- l9 F& m6 C#写入小说文档到挂载的目录
2 m% L( D( k. t# Z4 f[root@ceph101 ~]# mv bcsj.txt test_rbd/
& g' J9 ]$ ?# `5 K[root@ceph101 ~]# md5sum test_rbd/bcsj.txt1 B9 X3 D* s  y0 L  i" X
0d615ccd0e1c55f62002134f5cac81cc  test_rbd/bcsj.txt
6 x% O- h" c  Z[root@ceph101 ~]# df -lh* @% i# |0 s5 H2 v/ K
文件系统                 容量  已用  可用 已用% 挂载点
$ C0 p( Z& N4 _7 _( Z/dev/rbd0                9.7G   15M  9.2G    1% /root/test_rbd
) h; n# h7 r6 G; f$ @3 V  O) N$ i3 y" r9 j5 a1 U! B1 |
[root@ceph101 ~]# ceph df
3 F/ J" \) g, o--- RAW STORAGE ---+ R9 ]6 C- c( F) k
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED! P$ s; s. `% j5 G* i0 N
hdd    5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23
1 g( ~  T4 M2 a# k, @3 X! d4 n- nTOTAL  5.9 TiB  5.8 TiB  1.5 GiB    14 GiB       0.23
/ w% J3 N! |7 d: \/ l, D) r+ [" C) W, ~' ^! {
--- POOLS ---
& `1 a- `1 e6 t/ R& h9 DPOOL                       ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL# O8 T1 `3 S) P! A1 s
device_health_metrics       1    1      0 B        0      0 B      0    1.9 TiB2 f9 k1 @: j9 T5 T, x
.rgw.root                  24   32   22 KiB       36  6.6 MiB      0    1.9 TiB
8 M# A$ L3 B0 \; Tzone_01.rgw.log            31   32   26 KiB      965   55 MiB      0    1.9 TiB& W' @8 t- ~) r' [. l
zone_01.rgw.control        32   32      0 B        8      0 B      0    1.9 TiB
0 f8 N) e0 Y" ]8 O% qzone_01.rgw.meta           33    8  5.5 KiB       16  2.6 MiB      0    1.9 TiB
5 T5 P4 _+ a" Czone_01.rgw.buckets.index  34    8  672 KiB       55  2.0 MiB      0    1.9 TiB* _0 t- g& f+ n: F
zone_01.rgw.buckets.data   35   32  2.2 MiB       12  7.9 MiB      0    1.9 TiB
- {+ w4 o+ r. B" |8 d" P# \+ \/ n% m" Czone_01.rgw.otp            36   32      0 B        0      0 B      0    1.9 TiB
5 W8 H3 `% S3 I* mcp_pool                    42   32  2.2 MiB        2  7.0 MiB      0    1.9 TiB6 g( B5 @2 ^( q% \$ [
test_rbd                   43   32  148 MiB       57  446 MiB      0    1.9 TiB
5 }( I+ T# u% `/ |8 y8 K, ?" d" }! x* O. T) K, }

' Q+ @1 v; ^4 @) I! s对象网关
: A0 R2 D$ G0 }( S) l% o+ f* z! K/ Mbash 体验AI代码助手 代码解读复制代码
( e! `) L9 \2 K- V
$ g6 \5 B: V9 X7 ^% Iyum install ceph-radosgw -y
  I" c' K$ I+ F! S) {6 T9 [* S% s% S/ ^# o) x/ o' n5 S6 h
[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'
& L) F! z, k- f2 v( k9 A{1 d4 I0 [  a% ?; ^) M& F
    "user_id": "s3_admin",% V5 Y. r) H1 d8 w# k
    "display_name": "s3_rgw_admin",4 W" b) x- i' M+ O: }
    "email": "",% ^5 {4 H& w* l; S
    "suspended": 0,: c( H) b; ^$ O9 `
    "max_buckets": 1000,
$ Q% k& z( V# z  c/ D% X    "subusers": [],3 t( W: q1 F$ F# E0 J" _$ v
    "keys": [4 Q! u2 t+ D  f& \) `, Z2 `$ Z
        {6 J: c6 u0 y  O6 |8 o3 g; ~" b
            "user": "s3_admin",& B' ?; x2 Z! D
            "access_key": "s3_rgw_admin_access_key",$ i9 p, `( l1 G3 Q8 L$ A
            "secret_key": "s3_rgw_admin_secret_key"
! [' f3 M$ K7 Q        }
4 i7 I. ]' f5 p$ w* z; g    ],2 s5 }+ l) h6 Q- U, h/ t8 X6 A
    "swift_keys": [],; w* [6 J& r0 i7 V0 X
    "caps": [],
2 Z$ F# k9 [3 y2 p: j1 K    "op_mask": "read, write, delete",
4 a. Z2 M% [" z8 z# q  o    "default_placement": "",: T7 R0 |2 v! P# ^. m; \$ g
    "default_storage_class": "",
: Z) v- B7 L) Z; p- _" b( X    "placement_tags": [],
2 B( H& {7 `- d    "bucket_quota": {, ]) z1 J2 ~4 K1 y. B+ M
        "enabled": false,
. L% e2 x+ ^" t( P( d3 z& m        "check_on_raw": false,- E) Z; ~( _+ k& p
        "max_size": -1,# a6 K& D2 n, [" V  S) m1 i
        "max_size_kb": 0,
4 I4 b  W% O. Z5 c1 j0 P        "max_objects": -1
  X& P% t# M% l8 K# ]    },
0 t4 h$ _: K* F0 C    "user_quota": {& N- W1 S" p6 v# d
        "enabled": false,2 b; ]: M* T& r- k/ @/ j$ C
        "check_on_raw": false,0 H, X* j% _3 T" ?0 o5 U5 I4 y
        "max_size": -1,
+ Y1 f* Y" q+ a; q" H9 x        "max_size_kb": 0,
9 p' e& i& U) ]& k3 Y6 |8 J        "max_objects": -17 f( ^8 |2 \/ l" n! t8 ~" l5 i+ ^
    },
/ ?1 ^$ @7 V) h6 z8 f% u' r    "temp_url_keys": [],
! M1 l+ z$ \5 c    "type": "rgw",5 e$ ^, z" ?/ |% |  D) O
    "mfa_ids": []( t7 U9 g& t4 Z5 `
}2 n- f2 f7 a1 x3 W& z- C

( b: z* O) i9 e+ N[ceph: root@ceph1 ceph]#
# n' W; Z, Q1 e$ s. K[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'
5 O* K2 T! N6 j! X1 k{
' @8 q% ?+ u) M5 Y: `* o- j    "user_id": "s3_admin",8 j) Y) R: ?/ L# z' S% \% I
    "display_name": "s3_rgw_admin",
- N& T8 X& m' K, s    "email": "",
0 |, j& q* u4 U/ Z3 a! H3 C    "suspended": 0,4 H3 P' @8 L/ X8 Q6 M# P! {' ?  V
    "max_buckets": 1000,
, ~+ C- c- Y9 |( G$ ^# |5 D    "subusers": [],* z0 }1 d; ?0 w9 q9 V1 q, K% S
    "keys": [
: Y! b+ ^2 q7 d7 g        {
! m/ ~, p8 H- l2 K5 U            "user": "s3_admin",
0 B9 S# q7 x, l3 t# g0 l            "access_key": "s3_rgw_admin_access_key",
4 O( j, M/ S/ F) v. l            "secret_key": "s3_rgw_admin_secret_key"
3 \( Z! I1 U1 Q% K( H        }3 s! O8 a& M: W, T
    ],
1 v& T9 l  i! g+ j* U3 d4 r' ]    "swift_keys": [],
" {% ^4 {: |8 d1 `    "caps": [],$ l5 u+ Y1 q$ e( q. T3 N' z
    "op_mask": "read, write, delete",) J$ D8 u- q( }* n+ f
    "default_placement": "",
% @* K' _9 B6 V5 G4 X( z    "default_storage_class": "",3 F' W9 }3 ~7 N2 z  ]
    "placement_tags": [],
5 [7 v4 o7 x4 i( n4 J% o/ a    "bucket_quota": {- B  x& Q2 H/ R: M+ g
        "enabled": false,
' x  [1 M( s3 t9 g        "check_on_raw": false,0 k4 o4 H# `& f4 O4 e* w
        "max_size": -1,) S0 }2 }3 ?2 z, I9 U
        "max_size_kb": 0,8 I4 z* V+ ?$ d  u$ _* W8 J
        "max_objects": -1' n2 ^+ Z, @6 @
    },
0 G- ?# n. L+ y! e5 }- D' l) a$ `    "user_quota": {
3 D+ R# I/ e% {. v, Q        "enabled": false,
3 Q- v1 J! s5 w7 C9 A        "check_on_raw": false,' o- D/ Q3 u. m( @% R4 M
        "max_size": -1,! E' L1 n& X( t
        "max_size_kb": 0,! ^2 b/ U  Q3 P; W
        "max_objects": -1
: u. l$ w" Y- j% r% W: q1 Z3 V  h    },
! L. L* o8 ^3 M, g6 R' F& d& W    "temp_url_keys": [],
; E/ \# W2 E- h/ P! j- \! e/ y9 ?    "type": "rgw",
# \, n3 @; M2 L+ ^    "mfa_ids": []7 e0 p  M1 L8 H* K6 Y
}7 W$ W* U+ {) v+ o. P. }

: C* P" O5 u- Q& r) Hceph tell mon.* injectargs --mon_max_pg_per_osd=100
) {. E) x# I* R" m2 D$ o7 g- n& [& d5 O. e
#----------------------------------------------------------------------------
3 T+ H& a8 s+ O% p( jradosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system$ I# c4 X. ^& d# B- L
radosgw-admin user info --uid rgw_admin --system
. V# L9 l) ]2 c" {9 N0 ]
2 M! h: }1 D' C. e- q5 V& N
2 u/ k$ A  o5 b1 f, e8 Zradosgw-admin realm create --rgw-realm=realm_1 --default
/ f0 v1 h& t, I' E1 s8 H* Xradosgw-admin zonegroup create \) F9 O, c- X# g
--rgw-realm=realm_1 \4 l4 O6 h8 p1 l$ K$ `8 a
--rgw-zonegroup=zone_group_1 \
. y( _; k3 c; w3 U! d; q --endpoints http://ceph101:80 \& a1 [4 u" E; H! M# t5 n* W
--master --default3 y- w: K+ N) F9 b$ h- D2 z
4 G0 z% {  Q& f: G4 P/ ?6 x

3 X( V/ D% J  B8 l9 M+ g radosgw-admin zone modify \" P0 j/ q/ K% c" O2 T
--rgw-realm=realm_1 \
. [1 `" `0 `7 f$ v; a --rgw-zonegroup=zone_group_1 \5 W& C. p3 m9 b  _/ y$ H: h( }
--rgw-zone=zone_01 \# n5 K* ?& {4 |8 z+ T; }. ]
--endpoints http://ceph101:80 \
( ~- H5 y% i2 g0 V --access-key=IAWL6PLNFMNM0SLQNWQ0 \
( x4 G) {' E3 K5 {! B& d8 [" I' I --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \! o7 N. r8 `% Q$ t5 j2 ^1 M8 c) q
--master --default
3 ~4 O! ^: f  o  @% J$ J! w8 O. ]7 X/ H) {- `- _# s4 Z
radosgw-admin period update --commit
0 w' O8 }6 c' m6 y, P; m$ n radosgw-admin period update --rgw-realm=realm_19 v' L8 S1 w9 w6 P( E
ceph orch apply rgw  realm_1  zone_01 --placement="1 ceph101"
7 _! g1 v# o, n( _( G6 f6 o4 ]1 R3 |6 C$ x  \
上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:
% ]2 F: F/ y7 ]0 l4 x. y, hbash 体验AI代码助手 代码解读复制代码
, e" B: q# W0 ?/ q[root@ceph101 ~]# ceph orch ls
" |: d4 R$ {7 ~0 U  A" E# O9 M% E: `NAME                 RUNNING  REFRESHED  AGE  PLACEMENT                                IMAGE NAME                                IMAGE ID
' E3 ?9 s: B. k: g0 ~# galertmanager             1/1  4m ago     2d   count:1                                  quay.io/prometheus/alertmanager:v0.20.0   0881eb8f169f" K" P( c. W/ y' J2 m
crash                    6/6  4m ago     2d   *                                        quay.io/ceph/ceph:v15                     3edede73a7c4
$ x2 y6 }8 o5 u! ngrafana                  1/1  4m ago     2d   count:1                                  quay.io/ceph/ceph-grafana:6.7.4           557c83e11646+ Z" k) t1 r) U; Z& i
mgr                      2/2  4m ago     2d   count:2                                  quay.io/ceph/ceph:v15                     3edede73a7c4+ J) n0 R( t# t- P7 \. X
mon                      5/5  4m ago     2d   ceph101;ceph102;ceph103;ceph104;ceph105  quay.io/ceph/ceph:v15                     3edede73a7c42 d+ P% b% e9 J, f4 E
node-exporter            6/6  4m ago     2d   *                                        quay.io/prometheus/node-exporter:v0.18.1  e5a616e4b9cf! D7 d! P" t7 ~+ ?: o
osd.None                12/0  4m ago     -    <unmanaged>                              quay.io/ceph/ceph:v15                     3edede73a7c48 n4 K) m. j% s: ]: d% @7 C% ^
prometheus               1/1  4m ago     2d   count:1                                  quay.io/prometheus/prometheus:v2.18.1     de242295e225+ t6 N5 |  T1 X2 N
rgw.realm_1.zone_01      1/1  4m ago     75m  ceph101;count:1                          quay.io/ceph/ceph:v15                     3edede73a7c4
  }' u4 t: D2 E& C& ~) T! O9 V6 k/ C' h: b# D. z

! [" P9 ?, g: u- G如果rgw进程无法启动的情况,可能是集群不健康,查看log:4 l1 w) `2 N- `0 S# p# @
ceph log last cephadm
# s: [% d$ t: n6 N7 p7 Y/var/log/ceph/cephadm.log
+ \) p$ j7 F3 q" W4 hbash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm
: Z) c' i8 ~' O% g4 J2022-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 healt6 L2 _3 C4 d. e: Z1 J) G% z* a
Traceback (most recent call last):; {3 t1 W/ y6 F! W
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services3 n( V# r! c9 ]/ p# x9 D. S( L
    if self._apply_service(spec):
8 N1 ~3 f! b% g  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service* D; N- S2 n# o/ }
    rgw_config_func(cast(RGWSpec, spec), daemon_id)! d! l! p' w. G6 B
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config- L- j" d* s: y( U1 `
    self.create_realm_zonegroup_zone(spec, rgw_id)- K8 @0 a1 J9 p2 I, n  b$ R
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone2 P/ m" d2 }* T8 m+ ^3 N8 n
    raise OrchestratorError('Health not ok, will try again when health ok')1 ^4 x( ?! x3 s& Q
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
* O7 Q, T4 `9 e3 i# F1 H! y2022-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
$ H5 O* p( e# s; uTraceback (most recent call last):9 |9 F3 v% B, |) t, i6 b/ D
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services) c% e6 W& w7 Z+ S% ?
    if self._apply_service(spec):
! Z# u4 |: t6 `2 i  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
7 G8 [, r+ O* N2 _. |2 ]# J4 J& }    rgw_config_func(cast(RGWSpec, spec), daemon_id)) p* i' X! T) G% q' |# h2 w+ X3 L
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config  A" c2 f. }# k9 X" H$ c* h
    self.create_realm_zonegroup_zone(spec, rgw_id): `: ^) A4 N$ y: m% q; W, A
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
) P" [/ y: C( {  e    raise OrchestratorError('Health not ok, will try again when health ok')
$ t" u2 w7 I* t2 {; v% L7 worchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
5 s/ K7 p6 V9 d# L9 t0 b2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts& r+ `  C& J' k$ S& c0 E4 [
2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts
6 h! C7 u3 {# V* A9 K4 t  \" x& Z( o. g2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts: S, ^( W8 ~3 C2 h
2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts3 q& r* b8 k; J
2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts# }4 C7 ~2 U& }2 C' V$ X& D
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts
( k. m/ J1 D4 W$ x* R" O2022-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$ ~5 l. e9 I# w  g) O, l
Traceback (most recent call last):$ U9 K# l1 B" ?7 ^! ~/ b
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services# A5 w2 i4 ^3 }6 ]! \
    if self._apply_service(spec):/ J$ N/ Y  o& Q
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
8 d) F" z; e' c    rgw_config_func(cast(RGWSpec, spec), daemon_id)
1 B6 P" U- R5 }* l4 E  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
* n  t2 N& Z9 ^: m6 [    self.create_realm_zonegroup_zone(spec, rgw_id); t+ A. t$ }8 B+ e0 |
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone6 ?5 |1 L  E+ J- i3 @! a; E
    raise OrchestratorError('Health not ok, will try again when health ok')
9 ?! }6 p6 R# d0 j) p3 z, a& morchestrator._interface.OrchestratorError: Health not ok, will try again when health ok& P4 K, O# r" A& @4 n% d; l, h
2022-04-27T08:07:23.615964+0000 mgr.ceph101.qhgzmi (mgr.14164) 96183 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok
" n: U! `, l8 {" o$ e# uTraceback (most recent call last):; b3 [2 T; ~5 u! E# B
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services- s& D4 q5 L' a% C
    if self._apply_service(spec):9 A5 g8 H, g. q3 L/ {# Z, I  j! c
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
4 m5 T8 z6 Y1 ]9 I/ F$ v" Y    rgw_config_func(cast(RGWSpec, spec), daemon_id)
' Z; r: Q  K: B; L  d  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
  f" s4 |3 O5 v; {' n    self.create_realm_zonegroup_zone(spec, rgw_id)
1 c6 C2 R; c( Z  l4 G  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone  c( O  b- f5 C) N$ z
    raise OrchestratorError('Health not ok, will try again when health ok')9 X* p5 f- S  H" B' M( e# o9 U2 ?
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
' z/ a6 R1 J. W( `2022-04-27T08:07:23.784884+0000 mgr.ceph101.qhgzmi (mgr.14164) 96184 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt1 G+ X3 u9 I* \4 Z5 w# B
Traceback (most recent call last):
* m! {3 ?" A8 F' z7 J: b! u  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
: I% m5 ]# H3 b+ N2 p    if self._apply_service(spec):
  F+ g* d  z& _8 E  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
0 M2 J  X$ A* F- S8 V    rgw_config_func(cast(RGWSpec, spec), daemon_id)' l; x: x- D/ N( \7 e
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
6 W$ L3 l# J1 y8 E" O( C( _    self.create_realm_zonegroup_zone(spec, rgw_id)  N& }4 O$ D& }5 l; E
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone3 ~2 a5 G3 l8 `: ^
    raise OrchestratorError('Health not ok, will try again when health ok')
" V* E4 u& ^5 f4 T0 q) Z6 l  V& Zorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok# {* U0 Y9 j" d: Z5 T/ {! A4 Y
2022-04-27T08:07:23.788497+0000 mgr.ceph101.qhgzmi (mgr.14164) 96185 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok* t9 u4 p8 y0 c4 `1 {" U0 ?
Traceback (most recent call last):
3 N0 D0 [8 X9 ?! a' E/ z  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
$ S3 n, c7 w0 f+ X+ R  k4 _- L    if self._apply_service(spec):
$ g  `6 F8 F! R, _& Z  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
* ^4 {- v) n- s( F+ @# m& M    rgw_config_func(cast(RGWSpec, spec), daemon_id)8 f3 |% I# C( @" X  p0 U3 i* g' v
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
. E$ |) I% P4 [- j    self.create_realm_zonegroup_zone(spec, rgw_id)
' {( |& o9 x9 a2 s' p4 b  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
7 s% ?# a* \0 [, D! C. i9 M0 s    raise OrchestratorError('Health not ok, will try again when health ok')9 p. x5 P& \; R) K: U
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
: M( k! S# T' O* Q0 D# Y2 }2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec  t5 Q  X* s. ~+ ~# p
2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts+ G- g6 j+ J# \0 h: d% `1 {  |
2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts' e- _4 q6 B4 I4 f7 K- M
2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts" J  _- B- a2 S6 j" u
2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts2 I' q' Y5 K1 O* y3 Y
2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts
$ c' [& _. K0 `( Z6 S2 T4 a3 Z2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts
/ Y5 p5 E0 Y  M& a7 z2022-04-27T08:16:34.288319+0000 mgr.ceph101.qhgzmi (mgr.14164) 96470 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
6 J' T1 C& P# {" rTraceback (most recent call last):
; k4 ?: k7 E0 l- R4 p# D  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services- O+ Z2 \0 n5 V! o2 B- I; w# v7 ~
    if self._apply_service(spec):, X/ I3 y: e7 _8 S4 n# w
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service4 y8 C$ Q9 j4 Y
    rgw_config_func(cast(RGWSpec, spec), daemon_id)
9 h6 j3 m# g1 X. j% F/ c  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config8 b) ^; z; m" _# R" H1 ~
    self.create_realm_zonegroup_zone(spec, rgw_id)
; ?+ Y' E3 r3 B7 A* F  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone6 n8 @( M% n4 m( E/ M: \8 _. q
    raise OrchestratorError('Health not ok, will try again when health ok')5 G7 x6 `! W' p$ @" p7 ?" v5 e
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok  }: v4 L& ^9 [  L( E
2022-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
* e# @  d7 ]. A0 D' TTraceback (most recent call last):, V5 @1 g" o, q' l
  File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services, r, O. f6 r7 E1 g3 I3 l
    if self._apply_service(spec):
$ u: t! q' B5 _  File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
2 i* Z+ T7 N$ o* L    rgw_config_func(cast(RGWSpec, spec), daemon_id). r1 w9 \  g2 ]' T5 w
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
3 ]- u1 e7 l6 ~# m& @' ^( X    self.create_realm_zonegroup_zone(spec, rgw_id): o+ c, |0 w9 h$ t/ ?! B( C
  File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
% J: e# P( w/ Q' R2 m( ?    raise OrchestratorError('Health not ok, will try again when health ok')
1 x8 v) O# A3 E! @  @+ @, \orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok! |/ h  k+ b' ], J7 i, P

8 h7 P" [' t: n% v1 W( u. Y2 g3 e& x" _( w/ |* ^/ K. U3 I

* @; n2 g* Z- `5 L" ~& a* H9 O+ r进入到docker中
1 c$ `8 D: r; j) e9 p, P6 h. w! n, ]bash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh
- A, Z4 a) Q* q4 Nsh-4.4# cd /usr/share/ceph/mgr/cephadm/services/
* v; n, ~5 s0 f8 h6 Wsh-4.4# ls
2 w3 P2 l0 t, v, S2 P  j% y3 ?__init__.py  cephadmservice.py  container.py  iscsi.py  monitoring.py  nfs.py  osd.py% ^6 e0 d4 t* O9 T* i. B- Q7 E$ v
sh-4.4# vim cephadmservice.py
; k4 |, \/ f/ a# B2 y5 jsh: vim: command not found
- o; Z" O. V/ X3 U* X, h1 ^1 a' {sh-4.4# vi cephadmservice.py3 t3 Y5 p8 V  b9 n
##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。) o  q* A. V9 _( b! V# R
#进一步,将集群调整为健康状态,再次尝试,可以正常
. h; I; ?" f/ u7 n& }0 D9 X* E8 R9 G0 u$ v
访问s3对象服务,windows下安装S3 Browser
$ d. @- W0 h5 v6 A* _7 J" O
; j3 s7 d8 Y: P4 [创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。. ~/ h2 d7 `0 |- c+ ~3 @
其他常用命令:2 l0 B# K7 B1 K" s5 M. r+ X; g. @0 ?
bash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_1: J* t3 M* D% X3 z% {$ ]+ Z
radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_1
% ?: e/ {3 G5 r6 G" ~ radosgw-admin zone delete --rgw-zone=zone_1* V: t7 Q7 Q$ q' s" T  e

9 J& w+ _# {* pradosgw-admin realm list" Z# A7 Y# B& W* G2 j! c6 L! O3 I. N
radosgw-admin zonegroup list- y: p0 s; H2 Y2 t" L& ?
radosgw-admin zone list
7 J( z/ ^& _& O- X2 `radosgw-admin zone list --rgw-zonegroup default
4 w3 ?" N2 F" \4 Q1 E5 F( Dradosgw-admin user info --uid rgw_admin --system* D) F) \$ G2 }
  @! e  Z. v3 E5 a
s3cmd mb s3://sec --region=zone_group_1
& a3 L# s* r6 R( o3 w$ X- j- t. S! x( b1 X; v  y+ f' O7 o
. R2 |1 o5 H) l: B# c/ |  P
配置dashboard:5 r6 f( ^( W8 `  W
bash 体验AI代码助手 代码解读复制代码 1752  2022-05-09 11:21:28 radosgw-admin user list
1 O2 ^6 X* Q- r! _/ M4 O! F 1755  2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin
  v8 q; x7 S% t( s 1757  2022-05-09 11:34:44 vim access.key* P6 b/ c- E1 l% i' h3 K
1758  2022-05-09 11:35:00 vim secret.key( n  X5 K% {; J5 x2 g4 m7 N, J) h; O% `
1759  2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i  access.key, d, u. }2 Y- e# `* W
1760  2022-05-09 11:35:34  ceph dashboard set-rgw-api-secret-key -i  secret.key
8 Q  Z, p& S5 i8 `+ t 1761  2022-05-09 11:36:49 history8 Q, s! ?) c$ }/ |# g
+ C0 Z  a& \$ |( z" [' _
在前端可以看到& Q6 R2 I2 }% N% w: Q' G
4 F, C" S6 o$ c8 k8 D
搭建主-主备份& Y$ C( D, a2 d2 z2 Y) {
bash 体验AI代码助手 代码解读复制代码
8 K# Q7 N6 D- J# K5 n# `! q
) @; a9 s& M6 oradosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo! e, I7 \% {) k7 t+ R
, W: o- ]( J1 H/ o
radosgw-admin zone modify --rgw-zonegroup=zone_group_1 \
# B& c& d: ?, S  u+ E                            --rgw-zone=zone_02 --url=http://ceph101:80 \
1 E( o/ q0 j) y# @                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
8 B$ ]% r" f5 ~- ]                            --endpoints=http://ceph1:80 . T- j5 D) x# g
radosgw-admin period update --commit
3 f$ ~9 x. P- J& nceph orch apply rgw  realm_1  zone_02 --placement="1 ceph1"
6 w8 d8 b# A; K! i
! e% y  f* a0 A& S# I6 R% e查看应用的配置
# R$ o' t% Q( }6 F/ M# ]bash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump
! R% Z% l/ N# w" O) ?, Z1 \- H  N6 a3 N1 t
2 {6 L+ t- Z; \
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd5 s! Y6 }  h+ ~1 m; `8 V; {
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7
+ \% S# \) m8 V' \4 X; {/ c6 k7 I[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll
4 S+ X" M7 \+ h) s3 m总用量 02 j2 q1 L$ H% M
drwx------ 4 ceph  ceph   92 4月  27 18:52 crash
: x$ X0 f$ P* N. y/ m! \drwx------ 2 ceph  ceph  133 4月  25 16:07 crash.ceph5' x. m( i$ ^* o9 Q
drwx------ 3 ceph  ceph  190 4月  27 17:04 mon.ceph50 J0 s6 l: Y9 O8 A3 c/ Z+ l* T, C$ w
drwx------ 2 65534 65534 104 4月  25 16:07 node-exporter.ceph5
: ?4 H# ^/ W  }$ h( B2 f# }* Kdrwx------ 2 ceph  ceph  241 4月  28 19:42 osd.4
/ J. V8 Y! h& t! ^' O% Rdrwx------ 4 root  root   88 4月  28 10:59 removed. ]% H3 ~: N- B( u
drwx------ 2 ceph  ceph  133 4月  28 19:57 rgw.realm_1.zone_03.ceph5.tapydb
3 O/ M' T4 _, B! s$ O$ `. d
- Z/ c% q5 _3 v% B- j" y$ Q( H
! |4 \# t9 D- ]: ^; i[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb
% l; ~- v2 P0 j' k* V3 p9 X( |* ^NAME                   VALUE                                                                                                                                                                                                                                                      SOURCE    OVERRIDES  IGNORES
5 l+ E1 p; U) ]# l. K6 v6 Oadmin_socket           $run_dir/$cluster-$name.$pid.$cctid.asok                                                                                                                                                                                                                   default( B  {0 C' I/ f( m3 z
container_image        quay.io/ceph/ceph:v15                                                                                                                                                                                                                                      mon. V. |& @" e7 J* c% x
daemonize              false                                                                                                                                                                                                                                                      override
7 j) P& Q/ T' _. K& o- T2 [debug_rgw              1/5                                                                                                                                                                                                                                                        default& k. d: t5 Y/ @7 Y. A! L6 R& @
keyring                $rgw_data/keyring                                                                                                                                                                                                                                          default- O9 D) Q! k; k8 j9 @6 T
log_stderr_prefix      debug                                                                                                                                                                                                                                                      default; `7 P" f6 m% J8 ?8 }
log_to_file            false                                                                                                                                                                                                                                                      default
+ G4 t, P8 F8 l% rlog_to_stderr          true                                                                                                                                                                                                                                                       default4 v# u8 H7 u) J5 R* m' R$ E
mon_host               [v2:12.70.10.161:3300/0,v1:12.70.10.161:6789/0] [v2:12.70.10.162:3300/0,v1:12.70.10.162:6789/0] [v2:12.70.10.163:3300/0,v1:12.70.10.163:6789/0] [v2:12.70.10.164:3300/0,v1:12.70.10.164:6789/0] [v2:12.70.10.165:3300/0,v1:12.70.10.165:6789/0]  file) B  y" y1 A3 G% d' Y, b
no_config_file         false                                                                                                                                                                                                                                                      override
. S( c5 S5 Y: |" w/ K3 iobjecter_inflight_ops  24576                                                                                                                                                                                                                                                      default
/ y$ J  ~# \. {+ P7 V4 vrbd_default_features   61                                                                                                                                                                                                                                                         default5 Z6 N! _5 D7 d, v
rgw_frontends          beast port=80                                                                                                                                                                                                                                              mon
; x: B* a; V# B, G) N2 n9 y9 J: Xrgw_realm              realm_1                                                                                                                                                                                                                                                    mon4 L5 v9 D7 u5 [8 l
rgw_zone               zone_03                                                                                                                                                                                                                                                    mon3 ]2 `7 @; l: ?7 A
setgroup               ceph                                                                                                                                                                                                                                                       cmdline
& h. W! }0 }1 v1 K- w  esetuser                ceph                                                                                                                                                                                                                                                       cmdline+ _( Q- ?- a9 Z: }! `) t+ n

% x$ V+ I% C9 k" @, R1 o( V对于想修改rgw启动端口的,可以修改配置文件
& w: o8 S* d- a. r; jbash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关, V$ k0 C5 z! V* y2 Q; `! V' f
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo9 M" n3 A$ R- o7 a8 z6 |

( i( B, k4 u# l+ R5 L' Z6 Sradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \) p7 r# g1 y8 M+ D2 [# Q6 u. X
                            --rgw-zone=zone_03 --url=http://ceph101:80 \! }3 S, P& D/ v8 U
                            --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \* e* a( Z4 j! b8 i
                            --endpoints=http://ceph5:8088
- @/ O6 o0 H/ C* \4 Qradosgw-admin period update --commit
0 l% J+ k4 O. E  a3 M- aceph orch apply rgw  realm_1  zone_03 --placement="1 ceph1"$ i: n9 ^" C) B8 C

4 R# w9 |) J8 a, r1 G
2 p) ~- j. n. f[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd
/ m0 k( G$ R6 ^. Y1 D/ }/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
3 B0 [/ J* F' {0 M5 Z" [[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim
% r: d+ y' M! M" |$ F/ M* K8 J3 M" h) _. N6 z- p3 l3 B: t& J5 X! q
`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7
% M6 q8 N* {* _  E[global]
- U( _- |  q) `" r' E. [& L5 K        fsid = f88b0b1a-c467-11ec-a2b8-525400299ff73 R: j  P0 f: T# k3 C7 {
        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]
' C# D/ N, N+ ?7 x+ E4 S2 M' v! @[client]: s$ i( f9 ?, _. D3 D5 x
rgw_frontends = "beast port=8088"
  K+ T4 J8 ]! k' e; {- V7 J5 ^`3 c5 `0 Q6 C: K/ z
#然后重启rgw服务
1 e" I2 V3 S3 m/ k) c4 \4 P#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends  "beast port=18888"$ ^$ a# m3 V! t6 x
#去掉config中的配置项,重启服务,也可以生效
6 }9 N2 z# P$ H+ e, Q#至于精确的配置如:
- I) S/ m% ^' |+ E# w# z. _7 X$ P& a`5 t6 Y; p4 @4 {4 H5 w
[client.rgw.realm_1.zone_03]
$ e. i& C& g2 Krgw_frontends = "beast port=8888"
4 l2 n! a9 A) u`
4 x+ o$ Y8 |' X4 s8 O4 H1 H#试了很多次,都不好用,官网说的不明白
: |; H+ q% L" z+ ]  L! l7 l" \: Z0 Y% k9 ^+ e# a
参见:% L( l+ `1 @8 A( A0 J
( g9 p8 g4 c$ W% B; E( N
指定rgw的数据池, k) C! y0 v* L) O

- ]! Y9 N1 A) s7 O! o1 r移除osd! W. e: G: X' D8 L" Q6 S3 q
bash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:
% Y1 N. e* Q" M8 o( r5 y- t将节点状态标记为out (节点已经不再提供服务)6 ]6 z( ^3 O/ a3 r7 b: o0 Y
[root@ceph1 ~]# ceph osd out osd.5
9 q2 `  e; u, {' l# Y从crush中移除节点(不删除会影响到当前主机的host crush weight)+ X3 P. K2 O4 x! y1 I7 j* q' |0 ~
[root@ceph1 ~]# ceph osd crush remove osd.5
" }. B) ]9 {$ p3 A删除节点% [4 [1 @" o& {" H- N/ T, T1 z! s) F' U
[root@ceph1 ~]# ceph osd rm osd.5
* P) |, b1 g7 B/ M' H" ~删除节点认证(不删除编号会占住)2 X$ J/ d0 M: m; k6 R3 p
[root@ceph1 ~]# ceph auth ls7 F0 d/ Q, v" J+ l0 v( O
[root@ceph1 ~]# ceph auth del osd.5
3 w3 E3 ^" A5 W) }: G) A[root@ceph1 ~]# ceph orch daemon stop osd.5+ U4 B0 d5 j6 \  U2 S9 W; [! s: I
Scheduled to stop osd.5 on host 'ceph6'
7 y4 k' |8 Q& z9 ^# B6 d6 N8 `& E[root@ceph1 ~]# ceph health detail
0 Q! y5 A5 W% c8 @7 V% b2 F  nHEALTH_WARN 1 failed cephadm daemon(s)
/ M' |0 B0 V% }[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)
: K' T" A) H. w$ g1 r    daemon osd.5 on ceph6 is in error state
2 @: D- R; x, q3 k4 ^) l8 h0 X4 v[root@ceph1 ~]# ceph orch daemon rm osd.5 --force5 L& K, Z& |+ D  Q
Removed osd.5 from host 'ceph6'
. k6 z, Y) k$ T! v% l# @& c3 y9 F0 C- \1 M
恢复磁盘:- j( O% r# C) U' _) }& h
找到某个未加载的盘,有两种方式:
2 W: L. E7 G: i/ }! B' lbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata  L& ?- w! U1 Q/ Z

  o; \/ B5 i! _1 Z! g& i( D1 O
5 {  B: ^, q- b  y' g2 |2 E6 tbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd# p; ^" |: ^1 Z- o: p
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z& e8 g! }( n8 e7 e. G
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll
5 M! t: l1 S+ O8 J4 l总用量 52- B8 Q$ f1 ]" r& x/ z8 t
lrwxrwxrwx 1 ceph ceph   93 5月  10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f35 n; V$ s1 ]$ ?" Y$ j+ G
-rw------- 1 ceph ceph   37 5月  10 12:47 ceph_fsid
. ]" k% k+ e4 n1 J8 T8 Z) U" h-rw------- 1 ceph ceph  377 4月  28 19:43 config
: i; g# I6 F" O0 E. A" Y-rw------- 1 ceph ceph   37 5月  10 12:47 fsid
# M: ?2 E* N/ {4 H: h7 ]-rw------- 1 ceph ceph   55 5月  10 12:47 keyring* t8 }5 K" n# e6 V" P: R+ g
-rw------- 1 ceph ceph    6 5月  10 12:47 ready& [; B( \0 B8 Q+ `! S* }
-rw------- 1 ceph ceph    3 4月  25 17:04 require_osd_release$ p7 J, N$ L, X6 {( \# a+ w& c; B
-rw------- 1 ceph ceph   10 5月  10 12:47 type8 U& ?: O) w& ?- q; @1 f
-rw------- 1 ceph ceph   38 4月  28 19:43 unit.configured
# j0 |: q/ N# n/ u8 c-rw------- 1 ceph ceph   48 4月  25 17:04 unit.created6 O7 C$ s8 B- C* ]
-rw------- 1 ceph ceph   22 4月  28 19:43 unit.image
+ V3 s. t  z6 w( K7 f* Y0 g: k& Y-rw------- 1 ceph ceph  931 4月  28 19:43 unit.poststop9 L5 q/ G, ?* f  M% w7 X
-rw------- 1 ceph ceph 2035 4月  28 19:43 unit.run
  O8 M8 P7 o0 Z+ I-rw------- 1 ceph ceph    2 5月  10 12:47 whoami# I2 Z: q4 W" h+ y& \( D% \
( ]& Q0 x- h; Z
/ M) h' f; X. i
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk8 T/ ^! R) ]7 c5 j
NAME                                                                                                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
# r! Q  @. o/ `; uvdb                                                                                                   252:16   0   500G  0 disk2 e8 J4 Y$ x4 `" I4 n: F
└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4    0   500G  0 lvm
  B. L0 ?; [/ ?% `& t. D* Tsr0                                                                                                    11:0    1  1024M  0 rom& ~8 {. x7 N: \# ?
vdc                                                                                                   252:32   0   500G  0 disk
3 d! j& D2 D- x0 t! i* ?└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3    0   500G  0 lvm
; [: m3 S. |: x) \vda                                                                                                   252:0    0   500G  0 disk
0 `' t' Y3 z; G) E2 |% F( ~├─vda2                                                                                                252:2    0   499G  0 part" ?+ e8 L" `) u- k3 t4 {8 E! o  Z0 T
│ ├─centos-swap                                                                                       253:1    0   7.9G  0 lvm$ r0 p( W( A: [& q  ~3 y7 F
│ ├─centos-home                                                                                       253:2    0 441.1G  0 lvm  /home
5 Z7 f. K$ M6 v# i5 n3 v* K6 k: `4 G│ └─centos-root                                                                                       253:0    0    50G  0 lvm  /! z& L/ Z" V. _* V
└─vda1                                                                                                252:1    0     1G  0 part /boot( n+ b  `& _. W, H0 Y3 T, X/ Y
$ D( Q# O9 K" k7 P) ^5 H
可用确定是ceph6上面的/dev/vdb块设备
0 H' y- ~% I2 I1 jbash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用
. N, L& z+ o0 `0 a6 p* `4 Z: u# h  ^, p: T
[root@ceph1 ~]#  ceph orch device zap ceph6 /dev/vdb --force
) h0 _0 Q/ W: W8 u$ M1 o/bin/docker: stderr --> Zapping: /dev/vdb
# }+ a( L! I3 l; x) O6 \% N  l/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync- {& J& v$ e. B0 g! C
/bin/docker: stderr  stderr: 10+0 records in* k. P( s- {; ~0 x& ?% j
/bin/docker: stderr 10+0 records out
1 J+ ^, y" w$ b1 E! R/bin/docker: stderr  stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s; l" q/ C3 W5 a$ P" P# a# `/ k
/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>8 _5 @4 |/ v: R: X1 m
[root@ceph1 ~]#  ceph orch daemon add osd ceph106:/dev/vdc
) l% p* L7 I( |  yceph orch daemon rm osd.5 --force
% P' G& v) I" P0 Q3 i# Xceph osd out osd.5  g0 a' L: q! g
ceph osd rm osd.5  t$ o* W. R$ h: K) k" `
ceph osd crush rm osd.53 y8 O2 q0 y# p; Q7 h9 [: ]

6 Q% A3 ]0 F; h+ j0 w0 W+ Y) D! E2 epg故障处理: S; c; _3 _! i1 j/ ]+ O: _" d
bash 体验AI代码助手 代码解读复制代码
. i! E( n2 d8 c. z1 v5 p$ _
0 n9 v$ x8 [8 L[root@k8snode001 ~]# ceph health detail& W$ G3 s7 l4 ^: O. b0 z0 ?! T
HEALTH_ERR) }, w* w+ `' O
1/973013 objects unfound (0.000%); 9 w. O7 x2 `( R% y8 R
17 scrub errors; Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair; Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded+ O, t$ P3 k- Q: I* [* x2 F; _; o
OBJECT_UNFOUND 1/973013 objects unfound (0.000%), G, R: `3 X7 k
    pg 2.2b has 1 unfound objects
. U( t5 Q6 |/ iOSD_SCRUB_ERRORS 17 scrub errors
( C( y7 E3 R. I' p, @PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair
8 k' M& N1 o6 X' L6 w; _& x) P* ~    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
5 t  W) [& B# A3 Z% I# [    pg 2.44 is active+clean+inconsistent, acting [14,8,21]
0 V+ o, L2 B  E) A, e" Y' v    pg 2.73 is active+clean+inconsistent, acting [25,14,8]- n2 i: ?' Q# e4 z6 f9 K, h
    pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]
$ h: H3 \2 |4 [    pg 2.83 is active+clean+inconsistent, acting [14,13,6]
0 O) ?& R8 k/ h7 n    pg 2.ae is active+clean+inconsistent, acting [14,3,2]
( X3 ^5 l6 T7 P3 Y' h    pg 2.c4 is active+clean+inconsistent, acting [8,21,14]
& i% K* z3 K8 r2 Z6 y$ t    pg 2.da is active+clean+inconsistent, acting [23,14,15]
6 O. x. k% H3 I) q: s- x: f1 \/ X+ z    pg 2.fa is active+clean+inconsistent, acting [14,23,25]
8 d8 F8 c" H7 ^2 S5 uPG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded
3 e! y* |* D) X& b    pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
! J" U- t$ ^5 N- ^! a" X" s0 k
2.查看pg map
7 l8 o/ D* O- A* h  O[root@k8snode001 ~]# ceph pg map 2.2b3 q! m/ f# S" J' n' e
osdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]
8 d8 l! ~7 s9 v0 E! g从pg map可以看出,pg 2.2b分布到osd [14,22,4]上8 V& M( n( \/ o0 c  u
& j) Y& X  Y8 P* V3 Y! d( U3 T$ Y
3.查看存储池状态+ E  N( V4 |: Y) i4 Z0 o
[root@k8snode001 ~]# ceph osd pool stats k8s-1
  w: u& ?7 c7 h! `4 Cpool k8s-1 id 2
/ R+ G+ J& ^! I# W  1/1955664 objects degraded (0.000%)# A. l: u) I; _: }6 d; ~
  1/651888 objects unfound (0.000%)9 U5 G& w5 X$ f' A; h* G/ w% e
  client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr
, U  h$ f$ W& Q' I( b& H4 Y9 Z
. ?7 ]2 B5 x+ {  s  k0 D[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-1
1 [6 o1 T& b, ^+ z/ M) s6 Wpool 2 'k8s-1' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 88 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd
5 T& z9 d% v3 `4.尝试恢复pg 2.2b丢失的块2 L/ b: _* g8 t4 ~$ v5 [/ Y- @
[root@k8snode001 ~]# ceph pg repair 2.2b
+ p3 A/ A2 c9 @如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
! a; S# Y" q! i6 j[root@k8snode001 ~]# ceph pg 2.2b  query
# a( G% L# E6 d- |如果repair修复不了;# @( S6 ]% @+ x) D; {6 n
两种解决方案,回退旧版或者直接删除
$ s5 C2 V4 V- n0 T5 Y& h回退旧版
% o  g% w, B  [$ `6 k& Y' M[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost revert
& Z6 j' x. x( |" P; _直接删除+ U9 X/ V& a- ?. _4 M, ?) f
[root@k8snode001 ~]# ceph pg  2.2b  mark_unfound_lost delete
) E0 j; o+ H( |+ l; J
3 t! Y7 T1 P2 D- O参考:记一次ceph pg unfound处理过程# I8 `% }" n& O7 Q6 Z, r1 Y, a+ Z
卸载/ O( J9 {! _$ A
卸载过程:9 g8 u, [3 A( W4 z3 w
bash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'
7 _; O- |6 R; t  {8 Y. V% k! E#找到fsid
8 n6 a9 |* y" ?4 G" A8 d: D[root@master1 ~]# ceph -s
+ l; {  u+ G5 A8 tInferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6
- T* D2 P0 X( ?0 [Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config
- e$ T, u! H% @8 e, @# @! J' N3 j) \5 FUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
& b- g  R2 n' I* P* ~1 L/ l& e2 E2022-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 directory3 t6 u( `! Z+ u+ u
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$ U) y/ E9 J$ r2 ?
2022-04-01T03:20:37.242+0000 7f27a2b6b700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory$ B: l0 A5 {/ Q! H. [: f
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% j3 a9 k- b: C+ r. @0 W
2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]# F8 D  W# E  P) ^8 A, n/ s$ @6 {
2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication% V9 m* o3 p. o" K! c
[errno 13] RADOS permission denied (error connecting to the cluster)) h5 K3 A* A" A  Y) `3 h! T

  b1 a$ F! B6 p  e5 W4 e#使用fsid删除集群7 Q: t& {* L- Y# p; m
[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force; U- A9 }+ S; J: f/ c9 y

: [' `2 S6 `  _( |- @
; ]: J( `2 H! b2 G7 G) a0 u分发ceph.pub
; |% N/ ]7 I7 M( d$ L+ E. g  rplaybook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub" & s6 B; r& S) x" K- T7 W' Y' I, @2 H) H

5 U( w7 u4 W! p4 r% p/ y4 _) \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"2 k% o) p5 d% O8 B% Q/ J

% Z! A9 M- m: i+ e" J: G. u* C' ^使用 ansible master0 -m setup 可以看所有的变量3 @/ G! B7 Q/ u9 |7 x4 i
参考:ansible.com.cn/docs/playbo…
* W7 V8 p% Y! _! `7 O8 u, J5 `/ \jinja2参考:
5 C2 d) x# ?6 m" ]stackoverflow.com/questions/3…( ]6 B4 Y$ \3 _' J" @' B! W  S
bash 体验AI代码助手 代码解读复制代码 playbook -v  2.mon1.yaml2 Y0 X' z* o4 l1 t5 P, y8 O# w5 o
playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"/ `8 A6 w6 P  r: e6 o! p- l
playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"+ ~. N! Y  U5 y; B
/ {: o1 X  l" d- `5 ^% u% Y' _
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。
+ K& G6 \8 W2 x+ \2 }/ l7 q, |8 W! O' y9 w
添加(add) 在某个地址上新增一个名字为的MON服务。' z* Y0 X  j- b- E% U
示例:9 E; `" c* z2 ?& {  s
ceph mon add  <IPaddr[:port]>$ J7 Y1 A+ r3 m6 O1 W6 x6 u: L
导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:
4 D0 @& D, q. w) @# s# Fceph mon dump {<int[0-]>}) _; [, |+ Q( }; v7 J# C
ceph mon dump 18 Z7 ]0 w1 C. a8 l1 s8 L6 ]
获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:
/ K7 s2 @5 R4 Q& n  fceph mon getmap {<int[0-]>}, n. Y' y" ]# A& w' z! a
示例:
. F. r* ^* c! h. ]9 Yceph mon getmap 2 –o filename
) s  k, Q( s; D& L移除(remove) 移除特定名称的MON服务节点。具体格式如下:
# c- A* H$ ^% Gceph mon remove
2 d* ?: s4 [- @/ A: n示例:( Z1 o0 U3 Z+ d( ~3 n$ A6 d9 z
ceph mon remove osd3( B& j8 _$ ]" k5 f: E
获取状态( stat) 显示MON的摘要状态信息,具体格式如下:$ x1 E0 [- n+ B, H' Q; M1 c! n
ceph mon stat
3 C; u' D" P& {' k$ q" R报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:$ T( K6 K2 k! x$ I
ceph mon_status8 A9 O7 g$ K4 B: |2 S" q3 x4 y% T" P
Ceph命令之ceph mon(Monitor管理)' F+ c+ ?# ]* e5 [8 M/ ]7 ^
; K/ C0 x1 v' {; {0 Z

6 h9 C7 w7 e, l$ U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-11 23:05 , Processed in 0.028220 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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