|
|
软件版本:5 t8 w- k& c9 D6 p8 I; g
9 i4 {, m4 O& u
% E A: f7 |& a2 G; d- k0 S q+ L
8 x3 |- o7 r; R% p r! n) c5 j
5 C: r! }' }. H6 M; }7 }6 J
I0 V! I% {, v" W7 x2 h) C: c5 d( }
9 Z" J0 c' j3 W3 ?+ T2 L
X1 g+ I _, j2 l; G3 c* x
$ y4 a; E3 b. O- T0 e! M& }
- [2 y" D! J) r2 Q+ K5 M! ?: H3 I! X
: C* m7 A2 t% f7 @) o" J, d" B) S" y2 w3 l5 A
8 O# D5 F$ {' A( y9 b& g% M
7 `8 D' A6 @( }) d$ {8 \
$ t' Q# E7 u9 q; X
) w9 L& g# L, v2 R; ?: r/ M0 c& V% V
% f B B, @, w" v2 }* [软件版本cephoctopus(15.2.16)centos7.9 e5 \6 V h9 j# A8 i
ceph官网版本:- o ~+ v% O& f8 }" c/ A; _3 w
docs.ceph.com/en/latest/r…
) Z" l/ }0 u5 z6 H' W, y) b p机器列表:$ @3 ?) E& B: }2 r# S
9 M7 a, P+ q8 {* a1 p6 n
9 e" a' V% T, _# p1 v
' `' g+ f" @6 x9 g! `
2 c7 c; ^$ ]! o" X6 }# V/ W2 V, W$ A. i
F% }- ?6 W1 f; i
% d. ~9 W+ W; Q. o: H0 B
) a$ I9 m8 _" i# u# U! s9 ]7 q: b# Z$ [+ k. E: x+ i$ Y d' ?/ _
0 {7 R/ B: K+ S# }% R5 t
; r7 O8 Z3 V( a' Z( e1 y1 G# T3 N2 C
+ W& ^. s2 Y9 j
$ k' [5 F4 G$ I" w! P/ q! `) g$ F0 t% j3 b. W0 H$ b3 X
/ ]" @. m" _3 u: }3 L* x/ D( q
- u( T' C1 @ K( a3 j7 g9 |5 {5 O' o. Z2 K
+ d1 i7 Q; t# D+ L5 l) V
; `! P/ F3 [/ ?" j* A4 A
4 C3 n% V$ w% i! e7 |" [ ^- a( y+ s2 J, o! \7 i& z
0 K7 |5 M/ t6 S3 v8 E9 n) _) g2 r4 u; G- `6 g
8 X8 r/ [. T1 G* P. _2 W$ \- h' R5 S! X/ g! f: W5 T' B6 A7 Y' u
机器名称ip块设备
) {* \1 w( ]" h0 q: @master0 12.70.10.161/dev/vdb 和 + M3 B8 l0 r [+ t! j4 E! m
/dev/vdcmaster1 12.70.10.162/dev/vdb 和& r9 ^: b$ j6 _& ?
/dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc: _0 T4 e3 ]) X- o
准备工作
& W! }: E0 I M9 s0 Z: R开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。 r/ F0 h- a E8 P: o
如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。
$ _" D1 x1 W! M4 @7 Y jansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):. f/ O, r' b" V% H; i3 ~
bash 体验AI代码助手 代码解读复制代码( k5 O+ ^- \- V6 Z; ~
master0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master0$ q& ~2 }- X' p' D# I
master1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1 " R7 @- i& U- g% y, B7 h4 k6 u
master2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2
. A% D0 {# e( g5 r9 w
0 f* s) g7 q8 g8 e[all]# B- j; [1 P5 D
master04 J( x4 w0 |# V; }8 v( s' G
master1- r; Y" s+ O" }+ L) L3 d
master2
+ X4 A7 G/ m) g9 q1 G0 T( k
6 Z9 l) R8 Y1 l* J. P# D3 ?升级系统内核8 O% _% {6 E. j" u0 f* g, a
升级系统内核到5.17; F# `. A9 [$ ~; }
ansible脚本如下(1.kenel.yaml):% K1 Z7 f$ o* x, I) D0 w+ c
yaml 体验AI代码助手 代码解读复制代码- name: update kernel. X# N- e4 O+ _0 i
hosts: all' d- i9 \, B9 l# N& t
gather_facts: True
* C* i* w8 J, Y8 A5 J3 ? vars:
! G; [0 J8 o) F0 ]9 v tasks:
" k6 \$ D# O# B/ Y* M- _ - name: create workspace
' T0 Z. }( q$ ^, E1 |$ m file:# r" }0 ~3 A3 m( H) n, y
path: /tmp/workspace/6 o/ S( O0 ^' w3 m% v3 J# P3 s
state: directory
* z. M9 p6 b& c' V tags: workspace0 _ q& P) t5 L9 J: b8 d+ _
- name: yum install elrepo
9 T( ~7 O) k$ M C: D4 m/ z copy:
+ N! v- ~* M) J5 U* ] src: templates/rpm.sh.j24 {, o! _8 ~. F7 Z7 x+ m
dest: /tmp/workspace/rpm.sh) M7 v. z7 i* ]% ]- b3 [
mode: 755
: v$ g- |4 C) P/ K% R; X tags:
9 s8 R9 r+ I) _& x - copy-rmp" V0 i1 Z8 _8 \$ H1 Z7 V6 m
- name: sh rpm.sh
& \/ l% j+ s; o" c shell: sh /tmp/workspace/rpm.sh9 Y3 f, V1 x4 K+ K+ }0 R$ \
tags:
5 O( c6 Y4 y% A ^% ?6 A - sh-rmp# d- ?6 T9 `2 V" z. m# i
- name: 列出可用的内核相关包% U4 Q: }$ a8 _: E) {5 B
yum:
7 L' o% `2 B" G: O list: available
1 z$ f5 Y" Q& L ^ disablerepo: "*"2 w# x& g6 \5 W( }& `! c: o
enablerepo: "elrepo-kernel"
0 f# u( }1 o* W - name: 安装内核; d4 I: v$ ^+ u8 ]5 x- t3 h/ i5 X
yum:+ k+ f: \4 y/ a3 b( l; }
name:
0 D. c( y! C+ A0 ?/ N - kernel-ml
7 M7 c8 X) y; a' R* s# K/ L( m* L3 a8 n #- kernel-lt.x86_64* v7 F; j! S2 s7 \; I& H' A
#- kernel-lt-devel.x86_64
8 J# x E3 l4 V% N; f$ Q1 r9 \ enablerepo: elrepo-kernel4 ?( j, B* ~; d$ Q& n
- name: 查看内核版本默认启动顺序
1 V4 h8 @" F% k% D3 P4 \# O n shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
9 R' A) L9 L9 ? v2 c - name: 修改grub中默认版本启动顺序( U4 m6 f }$ E) B, o/ k
lineinfile:
$ z7 N% c0 L) s8 z# S path: /etc/default/grub/ v( M# l# s& C; L# ^
regexp: "^GRUB_DEFAULT"
) R2 |) s& f. _ c line: "GRUB_0=saved"
# r" e( L+ |4 [7 W+ I r% Q backrefs: yes. d, g3 t' s5 w7 V2 J
state: present4 J4 a( T4 n/ G- G3 r0 @1 |
tags:
8 _6 i* y& t0 k$ d7 \ - grub) u* a4 G+ ?) p/ S) m& C
- name: 重新创建内核配置8 l9 m- M! u! ]3 `7 J* i4 k
shell: grub2-mkconfig -o /boot/grub2/grub.cfg% {8 l, i) f1 @' G3 T( q
- name: Reboot the machine" H' N! D# t- l7 m7 N& ]! O! t
reboot:
2 X. m& q! H' z* H& W reboot_timeout: 300
$ Q; N; ?3 E. Q3 Q) a# n3 s! f - name: uname -r
6 z+ F3 f7 j: k. L shell: uname -r
" [ I6 i( C. i( f z6 c register: version
% Q" h1 O P5 P5 D - name: debug! o) h( r# X% p! B& q
debug:0 }/ M0 z8 a) r }/ s H
msg: "{{ version }}"# n {+ S ]' s7 ^0 P; P
6 y* {/ o- ^( u4 X9 s# Z
升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j2' N6 Z: X+ u3 S$ w+ a! j
内容是:* V: h, ?/ H: B$ C
bash 体验AI代码助手 代码解读复制代码#!/bin/bash
) ^5 A( ], {5 W% B2 Xrpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2 R! U, T$ t4 p0 |, I r2 U: q#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm8 _ j1 w" f+ Q7 T
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm( i( _$ A; I# |8 B E. I7 _( @
echo 06 p/ V) o( }. S7 s
6 t' O9 E+ I' J- T5 `
执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级
4 A5 M8 |, }: b& [, `1 f/ A% e安装必要工具和关闭相关配置
T; E% m( A( a# E) X, Z; j/ M* w$ p" i4 W3 M3 e
脚本2.config.yaml如下:
2 O" F% e3 R: Y) b) L Y( kyaml 体验AI代码助手 代码解读复制代码- name: set config e3 u( n% U# b4 \- s3 o
hosts: all6 u0 t% ?' A/ V+ Z& z, c
gather_facts: True2 {( z, `4 g+ U* Z: P
vars:
6 T* F- q( p& P2 x6 H/ G handlers:9 s2 U0 K9 H. q- b
- name: update_yum
# h+ S6 {& q- ^. h/ K/ _ shell: |
7 b1 F9 S( y2 Z6 X( Q sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo# R4 m" k; Y# W- T5 D( [4 X, E4 K" f
yum clean all$ w) N# s& E& }1 f& ] r1 [
yum makecache -y0 {& }$ W( K t( u3 O
- name: noswap_service #禁用swap
# }& L1 N& w" |) Q systemd:6 u/ V$ p, ^ q" j/ C/ X' }
name: noswap: e+ y; q) {8 s" Q- f: K
state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running% Y, g4 \' d7 x0 E; {1 v
enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动! B8 O# ]' j" v# J( F; h
daemon_reload: yes #yes 重启systemd服务,让unit文件生效
0 V$ t2 a: c, `* [- T# g2 q! @; W8 t tasks:
. O2 k5 f' \' _% `# t- L - name: back up repo$ D: V8 L% [0 V, Z) c
shell: |4 s i. ~/ H* D$ G
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
7 x1 F0 j/ s% G, k mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
s5 ` O" _: P' Z4 w1 O mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup; j: W- j# i; ~" J3 h; E6 H
- name: delete /etc/systemd/system/noswap.service #禁用swap
1 G" w. \% B& v; ?+ H file:
9 Y5 R( A, f* r9 A G path: /etc/systemd/system/noswap.service* W' _4 a( w* O2 }. H9 ]
state: absent+ L4 ?# x9 p8 I$ n
- name: download repo #下载yum源
6 J9 Z d* t: D. Z get_url:
* |* c7 y0 U2 ^ b url: "{{ item.url }}"
7 ? X. b8 }3 z1 P7 S dest: "{{item.dest}}"4 A" u& J/ j; K1 f7 L3 G6 X& `
force: yes) {3 q* y2 f6 D% b# s
with_items:: k5 T3 Y& r( k- P3 U
- {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"}
, ]$ A: Y. A* N6 l - {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}0 j- T* M" o; ~0 t* j8 e3 [* a4 y
- {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}
4 a0 B" w9 u$ F notify: update_yum #更新yum(见上面的handlers)
# R" a/ k: H5 Z- [8 R* C( j5 Z/ y - name: install net-tools #安装必要的工具4 u2 q- a0 T! b
yum:
# S- t/ v" q1 C! P5 x name:. N: I9 {( a& @, {+ u
- net-tools
8 y$ k% H( o* `/ B7 m9 {& j5 b, P - vim( p* G# h: B- `% I# I- W
- rsync
0 Q5 b m" M% P/ N( m7 E$ W - chrony& {5 _9 ]/ n. i: B0 H1 k) t. j8 L3 ^
state: present
+ {% v, z& l7 v$ R update_cache: true
& v; d; K% o3 l0 `1 _ P- L, U" F9 p tags: tools( `' @- g9 ]: s3 x- f
- name: chrony_service
5 h% w# k) E$ ^1 V/ j/ G; H systemd: K# ~" @! E0 n+ V; u$ p9 d4 h
name: chronyd
& Z- m. c. W1 H state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
/ D3 ]1 `! w+ `) P9 }5 L, _' p9 U; ` enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
3 x% T$ n0 r: N% z daemon_reload: yes #yes 重启systemd服务,让unit文件生效0 N6 z" }" P" R* X" w' a- {0 P
tags: chronyd3 N: S. L& ~, p
- name: config /etc/hosts #关键 生成hosts文件! w3 y5 }+ w! n3 z3 z" }1 c7 B
template:7 T: n) n y' H
src: hosts.j2
' N* W5 i s* n+ H. [9 P S dest: /etc/hosts
. K6 s9 T/ W; l9 o; g) g* s mode: 0644
& @! q' w8 J( ?! x H7 F6 e( P backup: false! R" p+ k/ g6 ?) _
tags:
$ ]9 B, o- G% x* c: k, J" _5 A; }& Q$ T - hosts
4 f: V9 w% i* @, x( U - name: set hostname #设置主机名
7 p4 n1 X' W3 I* Y p& j' X hostname:
9 W: A0 i" [# x( @7 u/ Y name={{host_name}}3 m! X" [. Q0 Z( N0 }& s3 `" k
- name: set timezone to Asia-Shanghai #设置时区
; u/ J d) l8 s6 e0 E shell: |
" Z( I; _0 L& v. E! f7 F /usr/bin/timedatectl set-timezone Asia/Shanghai
9 k9 H! m$ C/ Y$ j chronyc -a makestep
1 m4 @( |1 P7 L tags:
$ K# D# y& x- E! w - set_timezone
, _! j4 S) ?: M( M( A, [% N' w" ?, M - name: stop firewalld service #关闭防火墙
T3 w$ q0 j3 i6 ]/ ^% W* m service :
0 I' s7 h5 b+ b8 j name: firewalld.service _9 [: f. S0 z; P* W! [/ i
state: stopped
# M1 ~7 r- h: Y @ enabled: no2 l# u8 S; e+ [
register: firewalld_service_result
6 ]: s0 x0 T" U2 W3 y/ q failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg"4 t+ _6 y' L$ k" I% V
tags: stop-firewall
" Y$ ~6 ~- t7 E* j k - name: Write noswap systemd service config file
, H* m+ Y# J. [- c! C template:' T1 [. Q8 ?, f* E# |
src: noswap.service.j2
, f& \9 u* v- W0 Z9 D, L4 H dest: /etc/systemd/system/noswap.service! J8 q5 h2 Y% F4 H+ {: ^. m5 W9 N$ L
owner: root
- _6 j$ s8 @# S- Q/ y& b+ p0 O group: root: E0 d& s3 X: y" l- \4 }/ F
mode: 0644
) `6 E( c( k9 [" P2 n% K notify: noswap_service0 p: N: |( f& D- s1 |7 i
- name: Disabling SELinux state #关闭suse
* i$ y* T" ~% a1 S6 W. i6 D( D: a selinux:
! G5 \0 G5 W' Y$ g8 F$ R* _, ~ state: disabled* o: ~; z( N: w$ T0 ^5 C0 r
- name: Reboot the machine #重启机器. ]5 \3 e- X5 E2 h/ _( }
reboot:; q! D$ r; q7 u: G* P
reboot_timeout: 300
/ m" T6 C! z% X4 i
6 g1 B. w5 a: w/ i% G- gtemplates/hosts.j2内容:
' B" I, H# q2 q* g4 S3 ubash 体验AI代码助手 代码解读复制代码$ ~1 [7 n4 |% q# z/ A$ E
) p2 m8 `! }- L2 {: w' V5 j1 ^
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain42 c7 m8 K: }1 \
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
( s- b l7 H8 a" Y$ G( M% ~/ [' o0 [) L0 d: I) K7 ^! [
+ @+ J, ^* |3 H. k; R
{% for h in play_hosts %}8 ]4 i0 \$ _- _- m" A. r
{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}
& I; B9 I+ w: N4 E7 U{% endfor -%}2 n: F( A) l; S1 P; R
6 W4 ?- ?- J' K; P4 t' L8 R# _
执行ansible-playbook -v 2.config.yaml完成相关配置工作- a" T2 Z, ?9 h* }' z2 v
安装docker; Z1 Y5 o2 e% ^# |: ?1 p
按照官网说法,可以使用docker或者podman,本文选用docker。
/ c, e8 c9 B: w. x, X1 n剧本3.docker.yaml内容如下:9 K$ F( V; K, t, [- S/ @9 j
yaml 体验AI代码助手 代码解读复制代码- name: install docker
! e0 w0 Z5 _7 z; u4 K hosts: all- H. q! f/ e. U4 C
gather_facts: True* K$ t: W0 o4 Z
vars:: V+ r* j c+ ]. X# m( L
DOCKERHUB_URL: registry.aliyuncs.com/google_containers) J6 s7 l8 h: x8 v- {
handlers:
3 S5 @( w) s' `, v. H tasks:9 t s1 P3 B9 }( |
- name: mkdir -p /etc/docker/
6 \! [* [) ?4 T% w file:
, n+ ~6 Y* b! [# ]0 `* E# N+ r1 M7 f path: /etc/docker/ P; H( V+ @7 d4 M( D4 S
state: directory) V; Q/ Q) t! [* Z
- name: install docker& i* h' h" L. o
yum: name=docker-ce
/ J9 F+ i9 J6 ?3 d& t - name: change config of docker% G- H( S. ] b2 L1 i
shell: |
7 s. o3 u" U$ B& |2 i- z cat > /etc/docker/daemon.json <<EOF+ j+ r' F" g% q$ a
{"exec-opts": ["native.cgroupdriver=systemd"],
( M* h$ X/ O4 U( ]$ M "registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]
1 V% W. q3 I, r8 I& l7 v }% m c, R" E# O+ }* p$ R
EOF
# ^2 G5 G) [& z$ m% p& Y tags:0 `- {0 [4 s* G
- config
7 ?, `) H+ x5 C8 _1 w1 g( m5 B+ N5 w - name: add systemctl
: u4 o1 y" z! u7 v systemd:+ I B- E2 J4 X& J0 l) y4 n
name: docker.service
" \% L1 [0 k2 q8 p$ E: L state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
/ ?: Q; M2 W7 f enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
' i) j& T7 \2 R/ `- q daemon_reload: yes #yes 重启systemd服务,让unit文件生效
2 Q) z1 A1 {7 { ? tags:
$ X/ d4 S3 M$ C& [* M - docker-daemon' @7 N! h) Y& D# z6 t
- name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials). p4 U: o5 E+ _% D" \9 p
shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com
; N+ M) A+ V' o tags: login
& Z, w) D) v. G2 n( E0 M
) K+ ^+ e( o' G1 N. ^/ }* v- V执行ansible-playbook -v 3.docker.yaml完成安装docker的工作) ^% ]; x9 o8 E4 K+ s1 r( b* K) ~4 b
开始创建ceph集群
( N5 r; M. G: ?* \5 @- ]2 c' X安装cephadm" f& }: U/ o& [ `
继续使用ansible为集群中每台机器安装ceph
- @$ z9 C1 n7 X% k; E剧本cephadm.yaml内容如下:4 c0 e: H- M, [ `3 u6 A
yaml 体验AI代码助手 代码解读复制代码- name: download ceph
" O+ W/ d+ t1 g# ~ x! T; Y hosts: 127.0.0.1
+ e# Z# u( Z8 c5 H9 ~ connection: local ~' d! B* U; k {& x7 g1 H, z( d
gather_facts: yes
3 O: y, U5 Q1 Q$ o* B4 E tasks:
; Q7 R$ k$ w1 Q) I5 O+ N1 V$ d - name: download cephadm6 c% Y$ r3 p4 {: |* P# ^
get_url:
) ^; D) X$ O) ? url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm D$ {$ Q1 I9 l1 I4 ^, k6 d' V
dest: /tmp/ceph/cephadm
$ n& e4 \! ]1 D/ z; E2 B force: yes" m8 q! z- @0 w+ a8 q) K0 N* X
mode: 755
' o' L; h0 ^7 F timeout: 600
X; _) q* I5 y9 [# d8 _/ M- name: download cephadm and install
% v: [8 }1 u5 ?. T5 d/ e6 v hosts: all0 P% `. c, V* E' _( h1 B7 B
gather_facts: True" k! n W; q% q; V" P, j* m/ F
tasks:
7 P& m" ?) H7 C$ @6 ^9 x2 X: o - name: mkdir workdir
P- g6 y$ a2 ?- [, @! i- D file:
& }- \3 R) g" \1 c/ ?9 ~ V% S path: /tmp/ceph# \' n% y" d0 S, W2 E
state: directory/ ^9 y5 r$ v9 p" q
- name: 分发cephadm安装文件: N/ n: q* ~3 o# E' n( a
copy:
2 c& W% Z5 Z+ N% L src: "{{ item.src }}"
) E8 ~9 O0 {3 |$ Z4 E+ G" H- u dest: "{{ item.dest }}"
& N4 @1 l- B+ h5 e$ t L owner: root
* o/ z$ t* a8 v: F/ f: i6 F group: root
5 g2 i9 m" Z) t+ y4 v. A2 J4 r mode: "{{item.mode}}"
0 O: ]8 W( L3 s with_items:/ g/ b M9 K, f4 V+ ^. W
- {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }
; g5 X6 {& ?3 z6 D, i2 y tags: cp-cephadm% K. P, F1 N1 W( {9 K" S
- name: install python3
8 S) b3 G r' y, {& `1 l yum:
7 {; v2 f; ^4 a name:
4 A! @" D# p- t) o1 ]+ Q - python3
6 M, `& A7 Q* k" `2 s$ p - chrony
* E5 Z2 ^# |- E. U, Y state: present
& ?2 K& G! S* y% e# ~ - name: add systemd4 o+ z2 X: e5 ~4 A3 L
systemd:
) g/ Z( O0 \. E% ` name: chronyd
* f& E3 D! H' b1 [ state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
W+ I$ l( d. r! H enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
; Q+ b8 Q4 Y' t% I6 m' }' l daemon_reload: yes #yes 重启systemd服务,让unit文件生效; Y: P) q" {9 |9 m8 m4 @0 c4 q" ^
- name: add ceph release1 v; D# _6 A0 B4 e; D
shell: /tmp/ceph/cephadm add-repo --release octopus2 { w* L: a& O2 [: L5 l7 U
- name: install cephadm
, M U. [+ E' f: u2 L5 P- A shell: /tmp/ceph/cephadm install
& B, m' U+ Q4 W r$ E) p( y - name: which cephadm, z: j% L, ^- G/ z P+ N
shell: which cephadm
9 V4 v2 Q) Z( B/ v5 h! I" o register: which_cephadm/ p9 `, b6 ^& \! g2 J, _
tags: which-ceph0 \/ Z, O, k* p
- name: show E3 j6 n$ Q, t8 b3 }
debug: var=which_cephadm verbosity=0 #check.stdout 显示出的信息会看的更清晰点& K& G1 [+ G M. U: ?4 d& T
tags: show-result
! P; Q, o0 o$ `; r# [) l2 r6 {" R* L* G
执行ansible-playbook -v cephadm.yaml完成ceph的安装
0 J" ~5 b! E- h M3 Y6 |6 c1 N" X4 k; G7 X
引导集群0 |: ~5 |* d1 j& E) z# _) h
将master0作为引导主机,在其上面执行如下引导命令:
* l9 J% |$ g* j: E& I& K1 E1 Rbash 体验AI代码助手 代码解读复制代码/ m, n7 ^* N* g6 {
: Z( @- b7 d# p[root@master0 ~]# mkdir -p /etc/ceph
$ o r9 {- ?" b5 O/ \6 N( y! }[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161
4 ?9 X% O* z" Z k" u4 \( _8 KVerifying podman|docker is present...
6 u/ h# F9 W9 \/ V; P8 f+ rVerifying lvm2 is present.... S3 c' D! @% W+ v% |9 w
Verifying time synchronization is in place...
$ f) J; |/ l8 p5 HUnit chronyd.service is enabled and running
$ K9 n, n A B6 Y% g8 j# [Repeating the final host check...- K6 v: G. x5 a! |
podman|docker (/usr/bin/docker) is present
7 f/ u7 o& K8 \1 T% xsystemctl is present
5 S2 s' b, W' M# q7 y& elvcreate is present# _! e; g( n( n! A
Unit chronyd.service is enabled and running
/ a9 I( Q! Y7 `/ c# g1 N0 M3 rHost looks OK
" J& c0 {8 v. K+ v* ~Cluster fsid: e3386564-bb02-11ec-af56-525400299ff7
4 Y/ x# r: j9 dVerifying IP 172.70.10.161 port 3300 ...
0 U% x4 l- }% K! p6 i& tVerifying IP 172.70.10.161 port 6789 ...* D% I/ ]! V3 g# z5 s9 Q! t
Mon IP 172.70.10.161 is in CIDR network 172.70.10.0/24
) X7 o5 n; N0 ^8 y5 aPulling container image quay.io/ceph/ceph:v15...
}- T/ _7 e% f9 v9 u0 G9 GExtracting ceph user uid/gid from container image...
" |( ?- z7 ~! g& PCreating initial keys...# a( ~$ j$ V7 [; T! v. c
Creating initial monmap...( N5 P8 j" w2 T6 f D* x% H
Creating mon...
, m2 Y2 z6 u* ^0 g7 Q) ?4 } CWaiting for mon to start...
% j, j8 j: L& U9 a# t5 BWaiting for mon...
4 X |. H4 {0 W' Nmon is available
2 C _+ A6 R5 @! `0 tAssimilating anything we can from ceph.conf...
( o( Z. c7 K; Y9 }# OGenerating new minimal ceph.conf...
, Z+ S% ^4 Q' D1 d7 o& V$ LRestarting the monitor...2 i, ^) A) N9 [7 ~
Setting mon public_network...% F3 M$ X) y5 p4 E7 `1 V. d
Creating mgr...' F; l7 s* F! U4 q' V0 ]1 V, i
Verifying port 9283 ...
5 E; ~& l9 r1 d8 ~Wrote keyring to /etc/ceph/ceph.client.admin.keyring& ?$ ~8 k$ z! H$ }3 D( r
Wrote config to /etc/ceph/ceph.conf
( a" |" I3 n: W- r1 r) oWaiting for mgr to start...9 _* T7 Y5 w' P& k
Waiting for mgr...7 {$ n6 t' x9 ?
mgr not available, waiting (1/10)...! r# R. Z. g! h4 |
mgr not available, waiting (2/10)...
% u5 a6 G/ B" \3 U* w' W$ A0 H0 Omgr not available, waiting (3/10)...: u9 I% u; c- {5 x; [
mgr is available9 @$ ~" j f0 }6 @5 j) Z- D$ `, g
Enabling cephadm module...
0 Z. V0 x6 e# _% M' d1 JWaiting for the mgr to restart...1 J2 r3 v1 J* w# p. I% A' c- S
Waiting for Mgr epoch 5...
, |3 i i3 u7 ]2 t, VMgr epoch 5 is available
& I0 N% k3 n d( V0 hSetting orchestrator backend to cephadm...
: T# _9 p2 n7 r2 N, k9 GGenerating ssh key...% p( Z' e- j' t# E7 D" }
Wrote public SSH key to to /etc/ceph/ceph.pub* J0 Q% ~2 ~. _+ b7 x
Adding key to root@localhost's authorized_keys...
g7 _: [2 \, _$ T: @+ G6 W; lAdding host master0...' a6 W" K% t6 z6 m
Deploying mon service with default placement...% r% G% T6 Q! Q& ^5 r
Deploying mgr service with default placement...* o3 `7 \' I4 I) A0 o" E! A
Deploying crash service with default placement... [( S3 m2 c5 m" o
Enabling mgr prometheus module...
6 U" p7 e' c1 T ]" t) D3 Q/ RDeploying prometheus service with default placement...* C- z) q$ u- M1 D7 }4 l
Deploying grafana service with default placement...# G% r1 j' J: K: A$ f
Deploying node-exporter service with default placement...! T: k* f# Z; N) }- N' T
Deploying alertmanager service with default placement...: A9 A5 w7 |2 C& W5 ]% a
Enabling the dashboard module...
5 o" q0 c" j4 _Waiting for the mgr to restart...+ q) g H9 T# l. z- B: Y" w
Waiting for Mgr epoch 13...* ^4 q' r3 E6 u7 B) Z3 V9 y, m
Mgr epoch 13 is available
! y; [9 i! z+ Q& f% o4 u: kGenerating a dashboard self-signed certificate...* b+ `4 k/ v3 D( K' q( p9 k
Creating initial admin user...- `/ A/ m( V" C, C- @% q; j* N
Fetching dashboard port number...
' M5 q- y# p6 Y( H( L! ZCeph Dashboard is now available at:, ], D6 d% K0 v* ^; L
9 A8 o) X- M: @ G. f* n, Z URL: https://master0:8443/! T+ ~' K9 o; ~/ e) X" K0 k
User: admin0 b, {8 ^1 B4 q2 o% \, t6 p
Password: vym1bdeajd. Y+ ]+ ?4 U- i" o) m, E) }/ E, D! i
% s' N) `4 w b% _- C& p( u- oYou can access the Ceph CLI with:
5 {- D/ ]9 c! y: ^
5 t4 g+ f) c$ v0 [ sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring+ a0 }2 Y, g6 e9 w. H8 f( p
Q+ _$ |: N2 }2 m- EPlease consider enabling telemetry to help improve Ceph:: Q8 V$ S X' K
+ h! c3 r/ Y: [; O
ceph telemetry on# D! m# G" V$ _8 S2 z$ W5 p* t. Y
, L' z5 [' h1 J, Z1 G7 S: G1 M
For more information see:
, Z* h) X& ]6 L: z4 f- j7 W9 j# y# u2 p! N4 I
https://docs.ceph.com/docs/master/mgr/telemetry/
5 }0 u/ \( \3 H) U! O+ Z/ ~# o# V9 w
8 x/ U5 P0 A0 ?, aBootstrap complete.# ^! ]7 I$ `; R( F" @2 G
( Q! p( @! x2 i: S0 d7 K% `+ f+ H! a0 B0 k2 |; [3 ?& n, D
在命令执行过程中,有如下提示:& |! P2 X1 x: y9 H% i, d7 _) L
bash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at : 6 k$ Y# n2 R% y
URL: https://master0:8443/
8 ]2 t5 J/ A4 p! w/ [3 n) w User: admin
) \9 ?9 z4 G5 z9 v+ }3 l Password: vymdeajd
' b; a5 P& d* v# V) i( s9 q/ j, d. V# ^
按照提示,在浏览器上面可以访问:: ?- K" A W4 T6 N2 R, a& K
/ [8 z, m: M! s* s R {% i1 C4 u
进入到管理页面后,如下:% J* V0 X! t" e2 G' X
( ~2 }1 o" A. g参照安装文档,该命令将:" O4 M G8 P) D1 G
在本地主机上为新集群创建一个监视器和管理器守护程序。
8 ~# u. }0 K1 _- f3 o! m( ? c% i) }5 v& l, X2 [- B
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。
$ R& A7 d2 v8 [ X7 M L; P% Z* a1 y9 }将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.
! a3 D9 ^( U# ]. X1 B$ S: D2 U" ?4 I
client.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring./ P- L% y5 m0 F5 L' T
将公钥的副本写入 /etc/ceph/ceph.pub.
- R/ Q# G. i6 e启用 CEPH CLI(必须)
' \% g2 k+ _6 P! V- w: ?/ U继续在引导机器上面执行如下命令,即可开启ceph shell client, v$ \5 R0 X$ T9 N( \6 {. A
注意:后面的ceph命令,均需在ceph shell环境下执行0 G s% q9 U$ @, a' G5 r
bash 体验AI代码助手 代码解读复制代码( E/ q( v3 l: ]. U2 @/ F8 ]; j, k
: y! e5 I6 I0 j% ^" i# v0 w5 c[root@master0 ~]# cephadm shell
4 s" H$ f' x! K e) q: V8 B# QInferring fsid e3386564-bb02-11ec-af56-525400299ff7
7 A+ ]% X3 _0 XInferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config! m. _/ c0 R! x
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
: Y! _0 d v- Y) @
4 A" u" g1 G( l; m$ W4 F7 H& Z[ceph: root@master0 /]# ceph -v
7 y! K! T, h, |1 o5 Lceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)( Z( v- h; W$ a; P
/ [" H' }4 b2 O- C& Q! ^
- Z8 M+ b3 E6 y' X0 _/ X$ D- j
[ceph: root@master0 /]# ceph -s! ~5 Z0 Q& ~. U- y! l
cluster:
' N* y; R- x, A; B& k1 N3 v% e id: e3386564-bb02-11ec-af56-525400299ff7# k' w+ ^1 [* s8 X+ G! k x
health: HEALTH_WARN
' a6 i6 v+ k% I7 V5 @, L$ O OSD count 0 < osd_pool_default_size 39 ~% v7 w B, l; ?& Q2 G
8 _" i/ Y1 H/ Q) A- S
services:# [1 M2 }% n$ }3 N/ _
mon: 1 daemons, quorum master0 (age 48m)5 K3 k- m7 z6 x. U! F; W3 c
mgr: master0.ojikws(active, since 47m) S9 y& b( p' ]
osd: 0 osds: 0 up, 0 in! z! e+ T. @# ]/ g3 o; U& G* k
0 @, x; R0 n: K ^8 P data:
7 R. i( u, g; Y5 b pools: 0 pools, 0 pgs" M% ]" b( D- C) G
objects: 0 objects, 0 B3 _4 j+ r v+ \( m
usage: 0 B used, 0 B / 0 B avail$ {! k' i4 x1 s4 y. V5 `! L$ m8 y* |
pgs:- c" g! j8 a5 V% q
7 O" i a, G/ m3 g% y
将主机添加到集群$ E; |& F9 @9 v7 R! S
1 s1 j( ~: f: q
在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥$ J: |" V( v! F5 X) h
- i2 J' T# G/ s( S: N5 ^% Ybash 体验AI代码助手 代码解读复制代码9 O. L E3 b6 I9 ~( L' y
0 W3 g" B/ u0 g6 n9 ], C, A* Y$ V
[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master1$ {) n; F/ F1 K& Q) B% b
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"( J" r) _ p E6 [9 w: t7 S9 L v4 B" @$ P
The authenticity of host 'master1 (12.70.10.162)' can't be established.8 n% p( s! b* m# \0 M, T2 @0 X
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
6 b) c( M+ Y: L8 ?3 GECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.3 B! P3 U3 E% k6 t. X2 B: G, S
Are you sure you want to continue connecting (yes/no)? yes
( |5 y& \; h, U" n, ^0 Rroot@master1's password:
, g# ?/ b! m' V3 a$ ~0 l
1 ?- ]8 y: a) DNumber of key(s) added: 1/ h6 R' v. V h0 Y- \" Q% }* B. z
+ S- ?2 x' F5 x& tNow try logging into the machine, with: "ssh 'root@master1'"
/ o( e. @- J2 c: I. Y' gand check to make sure that only the key(s) you wanted were added.
% b) c+ W8 i& }7 f
0 b. N6 P+ X* }; i8 a3 `[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2' i4 r( F* g# _( q! \% Z
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
+ S, f- O7 o- V; n9 k, hThe authenticity of host 'master2 (12.70.10.163)' can't be established.4 `! |, C; P3 m9 D3 c: ^% k, v5 q
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
# y- m$ O# C. f' m5 }* FECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.
$ h. t, c- L0 ~5 \Are you sure you want to continue connecting (yes/no)? yes5 T& h3 w1 f" |, m
root@master2's password:
, [) k' \- N e5 T4 X! Y3 b7 e$ S) W9 g `" }& S R
Number of key(s) added: 14 F: V3 Z( @5 N# b5 P) j
9 c2 t$ i" z+ K4 k& a1 L( dNow try logging into the machine, with: "ssh 'root@master2'"
5 @9 R# j/ ~: Q7 {: `and check to make sure that only the key(s) you wanted were added.
) s1 b3 J0 S: z/ V% C8 _. o& p1 ^& d- X- d. g2 H2 w: @8 B
这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了- @, Y b/ b( s. c% `9 p
添加机器到集群:+ ^7 w" E4 _5 b* ]
bash 体验AI代码助手 代码解读复制代码
0 b: ^& ]7 C3 t, ]7 h4 q
) s, [+ X5 o! Z2 L9 L[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.162
) S& u8 m x+ GAdded host 'ceph2'
, s. a# m# Z* R' f% }5 Q[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.163+ i" G4 P+ Z/ R# [, a; k: g; U, U
Added host 'ceph3'2 D8 |% X7 h F8 A, _( m: ~
[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164
$ W0 e4 `1 ?' l* @ o( DAdded host 'ceph4'$ G; d& O( ~% [, k" J- a
[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165
, S" U# v3 n# o3 k$ M4 BAdded host 'ceph5'# h8 `7 J1 O9 f, }* `' l
[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166% _8 `/ x1 ^, ?/ `" ]3 A
Added host 'ceph6') P- S4 Z. u( G' z0 G
4 x* G& o0 ^0 b/ o3 R$ {! Y& N0 }4 K" v7 @5 a! p; R. H) c: J5 ]9 S. R
添加多个监控器
* x- s1 ]5 _ ~/ ^) K配置监视器子网:
" }" r( Z/ s- \5 `/ bbash 体验AI代码助手 代码解读复制代码( g, V1 l( m H4 z a* ]; v
[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
+ X, G/ n. s0 F5 V+ o7 \[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/243 B/ y: J4 b1 @- r, B# P
. O# n U( ?+ p1 t! q##要启动三台监视器,需要调整监视器数量:
& S+ N5 T* z$ Y0 \6 B5 i" g4 }[ceph: root@master0 /]# ceph orch apply mon 3
3 E& P/ P% O) c. YScheduled mon update...
5 G4 S+ @2 \) X- H8 v) r) w( H& _0 F
按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序
1 }6 {. e, T, d+ C l在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。6 V$ _7 Z- F: O( q, x
bash 体验AI代码助手 代码解读复制代码
. C+ l4 C V2 A4 N5 a; d. p! n9 f, R) S
[ceph: root@master0 /]# ceph orch apply mon master0,master1,master2
) R: ], e: S" c: _Scheduled mon update...
$ r; q# T. Z1 ?; w: c+ L% I##加标签
1 R3 w- F9 s8 z) g% r: F[ceph: root@master0 /]# ceph orch host label add master0 mon# \( ^/ l; q6 T$ {1 |! P; `9 y
Added label mon to host master0
. g4 {) D3 Q# Q0 }[ceph: root@master0 /]# ceph orch host label add master1 mon$ r7 K3 y% \. T3 o
Added label mon to host master1
8 q1 _3 E. B. F8 Y2 m5 {[ceph: root@master0 /]# ceph orch host label add master2 mon( y" t& e) w& V7 u7 T+ H+ T- q
Added label mon to host master2
* m/ }) M: I( F- I
# q7 G$ S. b: W[ceph: root@master0 /]# ceph orch host ls& n1 h: M( U7 Z9 ?6 x
HOST ADDR LABELS STATUS
7 I; O$ O2 Q$ ~# g+ Vmaster0 master0 mon
- t+ V+ S% A* r- v6 wmaster1 master1 mon
3 c% C3 v% U4 ~% Y" p! smaster2 master2 mon
, _& H2 Z- }4 n) D
& [% W6 X# j g. Z- \& _[ceph: root@master0 /]# ceph -s5 u0 M8 b/ W9 A0 N4 H5 a
cluster:1 g( o, o+ m5 v1 V5 h
id: e3386564-bb02-11ec-af56-525400299ff7* h6 j2 H9 B! {8 A% x4 Z0 x. W
health: HEALTH_WARN4 N; N N K% T m( l+ t
OSD count 0 < osd_pool_default_size 3* ^+ j$ k4 A9 F4 X" W
' S% y& y5 c5 I0 |6 |2 c3 n services:2 [/ G5 k: r# E7 w- N' f1 @
mon: 3 daemons, quorum master0,master1,master2 (age 88s)
1 h. R% @; L; B; `& s5 ^ mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld
* K+ X4 P6 G B! I osd: 0 osds: 0 up, 0 in+ x: e1 b" f8 d+ g$ s4 m
( A0 k; R) f6 S1 y6 q, | data:
+ C. a" _9 r* A' m& F; b2 \ pools: 0 pools, 0 pgs
4 a, R1 R# T5 f/ S4 M q objects: 0 objects, 0 B# n- c0 D! m' g( P+ C
usage: 0 B used, 0 B / 0 B avail+ G- h$ ^5 D6 x( ~6 ]
pgs:
' E3 v0 a) y) d y* G# A
0 B- f& J1 v7 Y) T- O加入ODS
& N6 Y) ^! N5 O# _2 R可以看到集群三台机器上面,一共挂载了6块磁盘:( E0 V% O( A7 y9 c* J" D4 u8 n
bash 体验AI代码助手 代码解读复制代码' V) U0 n7 G+ r- E1 l- r' |) F0 F
" r8 o6 D5 N- [) _
[ceph: root@master0 /]# ceph orch device ls
0 P0 P6 \$ S) gHostname Path Type Serial Size Health Ident Fault Available0 m2 V; c# J5 i7 ~5 G
master0 /dev/vdb hdd 536G Unknown N/A N/A Yes
) c* f( K, Q/ b; bmaster0 /dev/vdc hdd 536G Unknown N/A N/A Yes
, R: d) Q* @( G& _1 nmaster1 /dev/vdb hdd 536G Unknown N/A N/A Yes
+ s8 D9 t5 ], L0 F8 i1 Kmaster1 /dev/vdc hdd 536G Unknown N/A N/A Yes5 p. T7 m p) x1 ^1 }# P. B
master2 /dev/vdb hdd 536G Unknown N/A N/A Yes
6 w* @) ]4 W: [# \( Imaster2 /dev/vdc hdd 536G Unknown N/A N/A Yes2 e( A; v( U9 a( B2 d9 w
5 S, D% q3 Z! R1 p
当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):
9 j5 W) k8 j4 d$ V+ I! C: E9 [bash 体验AI代码助手 代码解读复制代码
' I' j& B2 t, }5 I
5 t! N _5 U* N/ q A# q- Q[ceph: root@master0 /]# lsblk
a! m: E5 o/ q* b ], VNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT+ i; t8 x# x; o* |/ i2 d9 ]
sr0 11:0 1 1024M 0 rom
6 H* Q% r! j: P, h/ y4 G$ wvda 252:0 0 500G 0 disk
5 S" f, d" Q- r5 p1 X|-vda1 252:1 0 1G 0 part /rootfs/boot
; K+ O+ b$ {4 m! u& o. x`-vda2 252:2 0 499G 0 part
+ F% _& W* {8 h- l7 m/ a1 l6 ^ |-centos-root 253:0 0 50G 0 lvm /rootfs
2 a" s; O) {2 }: [* @( ` |-centos-swap 253:1 0 7.9G 0 lvm% b/ D7 X* U9 F) b5 u" z
`-centos-home 253:2 0 441.1G 0 lvm /rootfs/home- G4 m5 [0 ?( ]- F
vdb 252:16 0 500G 0 disk" ?6 T+ J) Q) O
vdc 252:32 0 500G 0 disk0 j) t! s0 {) [
4 [: D4 Z( O$ y4 e' v
按照官网说法:设备满足# w3 ~# n7 q3 m4 ^1 t
如果满足以下所有条件,则认为存储设备可用:8 K. p. s) q; Z/ j
0 B/ ] ]& y7 |1 }* p
设备不能有分区。% l% t, J; }9 |
设备不得具有任何 LVM 状态。
& ^/ N2 N ]! v' e" d" @! B不得安装该设备。, R8 c2 s$ G' P; E9 k7 r. j/ q, Y
设备不得包含文件系统。6 N4 K: G' w+ M
设备不得包含 Ceph BlueStore OSD。
6 ]$ X4 x/ K- t设备必须大于 5 GB。
5 f) \, |& ~# R# y6 F
" {2 _2 v# {" I& k$ p5 dCeph将 拒绝在不可用的设备上配置 OSD( {' ^. j8 l( _2 ]
可以使用如下命令,将所有可用的磁盘添加到ceph集群中:
+ s7 a9 d! `9 o4 J0 L! M! ]bash 体验AI代码助手 代码解读复制代码9 u1 x- Z, M/ o0 h- o) X6 n
; i: }; {8 }" G$ m/ a! U ~[ceph: root@master0 /]# ceph orch apply osd --all-available-devices
; \3 ^. l' B* A( H K% u& }Scheduled osd.all-available-devices update...: i# ]7 ~+ |- s- j- q
[ceph: root@master0 /]# ceph -s$ {4 u4 }/ S! G$ y
cluster:9 D- l, }3 m8 m* e$ h0 d8 v- A
id: e3386564-bb02-11ec-af56-525400299ff7& a! v( E: H$ ]6 b' o2 d
health: HEALTH_OK+ a' V: h+ b9 r/ j5 k2 i8 X9 Z* V1 m
( X2 y: M+ x* d! ^
services:9 O( a7 e/ f5 r* h! Q' ~- Z
mon: 3 daemons, quorum master0,master1,master2 (age 12m)6 f+ s- q9 Z: j% o% i
mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld
* T- y% D# X# F5 ` osd: 6 osds: 6 up (since 22s), 6 in (since 22s)* X) x, p5 c' |8 X, T7 [: ]& H
7 O% b0 W% x, _7 o8 m$ a data:
- k2 B0 h1 e; n) s pools: 1 pools, 1 pgs. Q+ F" @) K: ~+ v+ }
objects: 0 objects, 0 B
( d2 Y a1 d' C2 Q8 i usage: 6.0 GiB used, 2.9 TiB / 2.9 TiB avail( u6 S# X5 E/ g+ h( D- t
pgs: 1 active+clean- E: D+ Q! y+ V! m
; D! N) Q" ^0 v# x' v8 M也可以单独加入:
% l, ~' z( O' ?7 Abash 体验AI代码助手 代码解读复制代码6 i0 A( ^) j5 f A3 P7 I: i) M; V/ F
* i2 i4 o+ e: [6 z& {; b
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb
4 ?) u/ i: g, z[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc2 Y7 z) }/ L0 }; L
[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb
: G5 F& t* {, t; `( F[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc% o" ^( w% x& O4 |, k `8 ~1 _5 w+ W
[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb9 L1 s4 J9 x. q9 f. `: \
[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc# M: ?. j7 V0 [
8 n9 D$ S7 k: y/ x! c H) W. {( k在前端看到:" l) _% [5 u6 u' A1 p
$ c/ }# Q7 d9 e$ C# M2 r, ?) i/ t& C! y+ j7 ]
挂载块设备
. g/ {# a8 L* O# q# \$ k+ {bash 体验AI代码助手 代码解读复制代码7 v3 H7 x0 L' b* n. P- ]. p* x
( q$ F R& x. H1 U7 E
[root@ceph101 tmp]# ceph osd pool create test_rbd 329 m# j! Y5 f9 _- N: ~. J1 @
pool 'test_rbd' created
! N) \+ @3 `+ C. J: {* a0 ]8 M3 n3 I[root@ceph101 tmp]# ceph df* v; p* w- T2 X i9 y2 t4 ~! k# X
--- RAW STORAGE ---
: {4 B) c) l, Z% ?( n$ K, TCLASS SIZE AVAIL USED RAW USED %RAW USED' R) |6 O& C; [$ D% J& o2 A
hdd 5.9 TiB 5.8 TiB 1.1 GiB 13 GiB 0.22 p( h0 \8 J) J% x- e
TOTAL 5.9 TiB 5.8 TiB 1.1 GiB 13 GiB 0.22
9 C4 B; m& @- H) ?3 T1 e1 B4 C
( ^* B( U4 i3 |+ u2 _--- POOLS ---
+ I0 s% {6 u% fPOOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
) q0 L; D0 N( R& K: ?0 Ddevice_health_metrics 1 1 0 B 0 0 B 0 1.9 TiB) f- l5 A& x6 _
.rgw.root 24 32 22 KiB 36 6.6 MiB 0 1.9 TiB9 y/ j4 i) }# H K- {3 p! k6 J3 K% s
zone_01.rgw.log 31 32 26 KiB 965 55 MiB 0 1.9 TiB
; I/ y3 L) h- ?( H( {1 Yzone_01.rgw.control 32 32 0 B 8 0 B 0 1.9 TiB/ ~* v( \& j T" H* h
zone_01.rgw.meta 33 8 5.5 KiB 16 2.6 MiB 0 1.9 TiB
1 V1 x( p! Q9 V$ _zone_01.rgw.buckets.index 34 8 672 KiB 55 2.0 MiB 0 1.9 TiB
+ d# Q2 B. y, K. I" y8 ]9 S1 R8 {zone_01.rgw.buckets.data 35 32 2.2 MiB 12 7.9 MiB 0 1.9 TiB
+ b5 u) K/ |+ L- O, P% u3 |zone_01.rgw.otp 36 32 0 B 0 0 B 0 1.9 TiB
4 Y" K8 U* ^) q' u0 fcp_pool 42 32 1.4 MiB 2 4.4 MiB 0 1.9 TiB+ _6 L$ j* D( F. |* m9 e
test_rbd 43 32 0 B 0 0 B 0 1.9 TiB
$ E* y( S6 f: U1 r: U( X, U& ^" D##创建镜像. w4 v. Q% C5 C
. C+ v! e% X! u+ }; ^2 U) z. V: M. d
[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd
+ F8 x% A" k1 A5 @$ l' k' B- D
: x E* O7 I7 S0 O[root@ceph101 tmp]# rbd -p test_rbd ls
+ e3 h* j( O7 T$ d! z/ b5 otest_rbd_image_1+ U ?( B& J/ N0 \- _5 h
. t& W; z4 X7 m2 I##检看一个RBD镜像的详细信息
+ t: v2 X6 n$ S0 |[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd
& r2 z+ i9 b3 R, `1 Drbd image 'test_rbd_image_1':4 L v- {* {9 q0 \) T
size 10 GiB in 2560 objects- l' L( Y. J# ^8 j# B. m
order 22 (4 MiB objects)1 ?+ O$ W9 e5 g. x& X2 C/ `) Y, U
snapshot_count: 07 n* o) f) X2 p
id: 2836b2f53ea86
3 y2 x# _/ T1 C* O8 n2 h! F block_name_prefix: rbd_data.2836b2f53ea86
# ]- a, Q- Y8 O3 Q* Z! u! e format: 24 v; U9 F0 c9 g; V d* a& t
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling
( e4 C6 P: i1 N! \* w op_features:
( B3 I1 `4 ?+ U* B( ?/ U flags:' H. \4 i$ J1 q' ]/ a, T9 _: e5 q
create_timestamp: Tue May 10 10:38:16 2022
/ v2 V: c- J1 I5 }0 @& k access_timestamp: Tue May 10 10:38:16 2022
* y4 t5 R7 V2 [+ Y( W$ ]( M modify_timestamp: Tue May 10 10:38:16 2022, L. j) s- ?. t$ e( a) U, A) T: L
journal: 2836b2f53ea86; d8 D- s6 C* x& p
mirroring state: disabled
. d/ e- H# ^' Y( L7 p2 }: V6 C) g! N, B. J
. _ ~; X7 v5 ^" r& n0 K
[root@ceph101 tmp]# rbd pool stats -p test_rbd2 M4 z! ^6 L- }
Total Images: 1* J$ Z; g) q; X3 n. ^3 Q
Total Snapshots: 0
6 k4 u9 W: r, K2 v* R% l. eProvisioned Size: 10 GiB
$ T5 ?$ X$ l' ]9 y; }) ~" h[root@ceph101 tmp]# rbd showmapped
) c" E$ {3 P5 X+ ]id pool namespace image snap device4 \2 I5 x! Q* w" n
0 cp_pool image2 - /dev/rbd0' E# N" | j5 O0 f: q
6 i2 p5 F7 r, J4 F/ W
[root@ceph101 test_rbd]# umount -f /dev/rbd0- d$ u' d8 r0 ^& [+ x9 k8 r
#或者
- c: m& o M9 d% E) l) p1 Z" \; `; d4 z& B; Z4 z" D
[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd0: [/ D2 F/ b5 |) u) Q
##然后将pool关联应用0 [ Q8 ?7 e1 I t' G" e; _
8 b; ?8 ~3 n- S- u8 d! k
[root@ceph101 ~]# ceph osd pool application enable test_rbd rbd) d. ~: K1 J$ s7 g$ ?, H* r! V1 P, Y
enabled application 'rbd' on pool 'test_rbd'
/ l: g5 C4 r- z2 H0 p[root@ceph101 ~]# rbd map test_rbd/test_rbd_image_1
$ R6 c W, c2 W5 R2 F( D+ Hrbd: sysfs write failed% y5 m4 [7 p F+ ^
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling".
, o4 c5 W y. f& ]* z6 @% S- A6 y8 ~In some cases useful info is found in syslog - try "dmesg | tail".8 n$ q$ b$ Y! l
rbd: map failed: (6) No such device or address) @8 v4 W. g7 j" v% j6 X" _' a
`" |3 X4 k j# P
[root@ceph101 ~]# uname -r
$ A' t& L2 r. u, _5.17.6-1.el7.elrepo.x86_649 O$ o- S/ p" i( N" [# L' R: v
[root@ceph101 ~]# dmesg | tail! e% u- e; w7 {+ f8 m" n3 r4 g
[ 9.843030] random: crng init done
+ E+ [: L1 `8 E3 ?+ w[ 9.843034] random: 7 urandom warning(s) missed due to ratelimiting" g6 ]! d2 u! O. L8 q- r6 Q" a4 i
[ 10.669178] Bridge firewalling registered
M- g7 B* j6 r) I) U/ _* w' H[ 22.239147] process '/bin/ip' started with executable stack, B3 U0 [/ l3 W7 }0 t, c: V6 d2 ~
[ 8185.140070] Key type ceph registered
0 u4 f' O/ v, g5 Q/ J0 {; c+ B2 A[ 8185.140395] libceph: loaded (mon/osd proto 15/24)8 u7 n9 o+ v0 ^3 ?' k
[ 8185.141923] rbd: loaded (major 251)
3 h9 }# _8 ~3 h7 `1 \4 Y[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established
7 U2 q9 p& X( J+ |! V# D0 q[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f
/ J. d2 u0 J S6 c1 P4 {$ W[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40
5 ~1 p, n+ s: R( Z7 a q##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling
1 Q8 a; J0 E( I. y9 h. B#layering: 支持分层**(0次方)**8 ~) P+ ~. D3 ?' o c6 J4 @
#striping: 支持条带化 v2 **(1次方)**
/ p& e4 e5 N, C& H$ X- U* n#exclusive-lock: 支持独占锁 **(2次方)**; H7 W+ t( U* L. a. @0 N- X
#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**
* k: ^4 H+ u5 l/ ?#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**
% t' N* f+ d5 v5 L) i#deep-flatten: 支持快照扁平化操作**(5次方)**
5 H) i, ^+ M, I#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
/ u: }* f$ O, Y# i) E6 i }[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling
/ b. [0 O+ X" o7 ?" \[root@ceph101 ~]# rbd map test_rbd/test_rbd_image_1
! m2 F B, b5 u" j5 f- V/dev/rbd0
2 r8 _- j3 B1 q A# V* c5 o#lsblk 查看磁盘
, `5 e, f; t3 G" m/ G R1 x5 a# u R' t
[root@ceph101 test_rbd]# rbd showmapped
+ W& m$ z- ]* O) _4 x* h iid pool namespace image snap device
$ _5 s1 A" E! k3 `0 test_rbd test_rbd_image_1 - /dev/rbd0* Z3 o7 t. y4 Y3 @5 A
[root@ceph101 ~]# lsblk* h# Q/ o# e& _$ k4 _5 r1 B
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT5 N7 F! r7 o" t' a" E* \" Z8 ^, t2 i
rbd0 251:0 0 10G 0 disk) y' t1 O" ?- f, V5 Y$ P
vdb 252:16 0 500G 0 disk( d7 k9 @, c# A. s+ F
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4 0 500G 0 lvm% }$ \6 B6 q5 @) \; ~
sr0 11:0 1 1024M 0 rom
1 F; D2 |9 K2 o1 y+ \vdc 252:32 0 500G 0 disk/ p7 B6 B/ l( M" Q" B
└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3 0 500G 0 lvm
+ p! v4 `" m& b' g: H, u( ~vda 252:0 0 500G 0 disk
. t0 I: G8 m3 i( k }( l9 b4 ?├─vda2 252:2 0 499G 0 part
$ Z* y$ k$ F. k% J) S u" u│ ├─centos-swap 253:1 0 7.9G 0 lvm3 _: i- [" ?( m- e& K6 i. P' |
│ ├─centos-home 253:2 0 441.1G 0 lvm /home
: ^5 i: N, _7 C! s8 F6 E E│ └─centos-root 253:0 0 50G 0 lvm /5 o7 M! p% w% m" u% p
└─vda1 252:1 0 1G 0 part /boot
. g( }" F! [; i8 E+ f: V; g8 b$ t) ^, R4 i8 }/ q8 H2 o, S
5 J. f5 Q& I p+ @, I
# 格式化磁盘
9 ?$ Q- _2 f9 E$ Q% e; ~
& f% D# u; u8 m1 d) H5 j[root@ceph101 ~]# mkfs.ext4 /dev/rbd0
8 [* P/ P {+ \/ I5 S& Imke2fs 1.42.9 (28-Dec-2013)+ \3 X; @/ c3 Q* J( Z( j$ T
Discarding device blocks: 完成
5 a: \/ _9 D: q& ] h" @2 K# M文件系统标签=
+ x9 x0 t. g7 |$ p& i* aOS type: Linux5 E1 o2 v6 U" f. H0 F. I7 U
块大小=4096 (log=2)
- l: h: B5 [7 ^$ d9 o分块大小=4096 (log=2)
) x- ?+ }# h# u2 ~3 f# pStride=16 blocks, Stripe width=16 blocks8 y' T% y" Q: }) Q
655360 inodes, 2621440 blocks; S8 m- H' [; n
131072 blocks (5.00%) reserved for the super user
/ L/ i7 G# A' F" o* q第一个数据块=0/ |0 k4 U2 X+ O. ?: H
Maximum filesystem blocks=2151677952
3 c1 t v M$ `; J7 z3 J80 block groups* X z; j/ U1 |- {" O/ ~# z B$ k
32768 blocks per group, 32768 fragments per group/ e! S0 h) t- O, b4 x
8192 inodes per group2 z# ?' @+ p4 s+ j& x* P6 O% F0 F
Superblock backups stored on blocks:
) T- v" Y: j9 Y: R# m1 u9 q( R 32768, 98304, 163840, 229376, 294912, 819200, 884736, 16056327 O, d: H4 ?$ ^& N! _
. F& t- a: b1 x: iAllocating group tables: 完成7 q; u0 F" o O# l% \7 P
正在写入inode表: 完成& R$ v7 M+ ?6 z7 W! r% r
Creating journal (32768 blocks): 完成
* K9 f0 V4 t- @: K% r$ u1 a6 NWriting superblocks and filesystem accounting information:& _$ e7 h1 T* U
完成0 z* I2 ]3 L1 K# G, g! m9 c0 D# P
1 `- e8 |. K! {2 r) N$ Z/ [ ^1 ?. n# v- o
##创建挂载目录
- f7 O9 s p3 t' l: K# Q[root@ceph101 ~]# mkdir test_rbd/
# p2 }+ [4 Y# e#挂载6 {* T$ y. k. n0 Y$ h
[root@ceph101 ~]# mount /dev/rbd0 /root/test_rbd! T- g! y) ?$ M4 P
[root@ceph101 ~]# lsblk2 s9 z% J1 y/ W1 V
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
+ H0 q& ^) w3 ?9 u$ hrbd0 251:0 0 10G 0 disk /root/test_rbd6 q! K, J8 Q. V, C, i$ K
vdb 252:16 0 500G 0 disk4 |" V8 j' r; U) L
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4 0 500G 0 lvm
" m+ D. _' c& p1 }" I- g9 S. Psr0 11:0 1 1024M 0 rom
* d @6 U' H$ V( `% R$ k Qvdc 252:32 0 500G 0 disk
4 y% [# U3 P4 X4 b$ T└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3 0 500G 0 lvm( y6 R9 {' \6 s9 R( Q, f1 p
vda 252:0 0 500G 0 disk! @3 L. G" H8 L5 S4 u/ r% v
├─vda2 252:2 0 499G 0 part
* k0 W+ W1 n+ s$ D# H│ ├─centos-swap 253:1 0 7.9G 0 lvm
6 P7 @# I8 |! z5 c/ l; F" C│ ├─centos-home 253:2 0 441.1G 0 lvm /home+ {& u6 L p" V5 t, _
│ └─centos-root 253:0 0 50G 0 lvm /" M9 ^/ j9 S: a) J g2 k
└─vda1 252:1 0 1G 0 part /boot$ w3 _% Z+ M0 ~& E+ |
4 h" {6 X9 l% }7 z
#写入小说文档到挂载的目录' y" X6 p& r& P8 V H7 }& z2 F7 [% l
[root@ceph101 ~]# mv bcsj.txt test_rbd// d E: e/ G. k1 Q
[root@ceph101 ~]# md5sum test_rbd/bcsj.txt6 r0 U0 ~1 r4 S
0d615ccd0e1c55f62002134f5cac81cc test_rbd/bcsj.txt0 ~2 {4 q" ^0 M" m
[root@ceph101 ~]# df -lh
/ g/ `" q3 q% Z+ o9 y8 h* i文件系统 容量 已用 可用 已用% 挂载点
9 s3 k6 \; j3 K1 p l# N/ G/dev/rbd0 9.7G 15M 9.2G 1% /root/test_rbd
6 W; L n4 o7 w$ o; W+ y3 Q/ f. s
/ Z5 m3 U6 A& ]4 h$ `/ w0 b[root@ceph101 ~]# ceph df2 G9 V. d( V1 ^
--- RAW STORAGE ---5 ^0 f9 g, T* l% h+ @
CLASS SIZE AVAIL USED RAW USED %RAW USED
, d( ?6 Y4 h: J1 ]% Chdd 5.9 TiB 5.8 TiB 1.5 GiB 14 GiB 0.233 l( z e3 d1 v
TOTAL 5.9 TiB 5.8 TiB 1.5 GiB 14 GiB 0.23
* X8 e/ Q2 X z8 ?$ M, A
$ r8 `2 w8 D5 c1 |5 N--- POOLS ---* i* ~# N, `2 X
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL* Z# |8 d6 @! o0 h7 q' i) K
device_health_metrics 1 1 0 B 0 0 B 0 1.9 TiB1 T/ B2 z3 `0 E. i- n3 c7 o
.rgw.root 24 32 22 KiB 36 6.6 MiB 0 1.9 TiB
+ q5 D. T% V; C/ {: xzone_01.rgw.log 31 32 26 KiB 965 55 MiB 0 1.9 TiB
6 n3 B+ v3 @; vzone_01.rgw.control 32 32 0 B 8 0 B 0 1.9 TiB
) r: V5 o( k7 \! |; ozone_01.rgw.meta 33 8 5.5 KiB 16 2.6 MiB 0 1.9 TiB2 c, c K, [, M& j; T
zone_01.rgw.buckets.index 34 8 672 KiB 55 2.0 MiB 0 1.9 TiB9 v+ U1 K4 w- n: N3 h* s+ ~
zone_01.rgw.buckets.data 35 32 2.2 MiB 12 7.9 MiB 0 1.9 TiB
F! c4 \0 i$ T. [# [zone_01.rgw.otp 36 32 0 B 0 0 B 0 1.9 TiB
( B, w) N6 t3 x6 o* c# k! S& f+ G5 Qcp_pool 42 32 2.2 MiB 2 7.0 MiB 0 1.9 TiB$ k n$ b! ~0 u9 j$ ]+ M' A
test_rbd 43 32 148 MiB 57 446 MiB 0 1.9 TiB
2 \9 ?) r% h& V
. D/ s7 @# }4 p3 A/ T: a% r; z* W; d
对象网关) `1 _1 K6 B" x
bash 体验AI代码助手 代码解读复制代码/ r9 ] ~& Q* O" b3 [, k* x
) S' r; @ E- D# `7 L4 J! n8 P7 iyum install ceph-radosgw -y; h- a0 D7 ^( h9 i; ~
# }- M, r+ [$ q8 C" `
[ceph: root@ceph1 ceph]# radosgw-admin user create --uid='s3_admin' --display-name='s3_rgw_admin' --access-key='s3_rgw_admin_access_key' --secret-key='s3_rgw_admin_secret_key'
7 _* F" O, j: H. w6 `% |{% c) b* Q0 }4 y2 y3 E
"user_id": "s3_admin",6 }$ s# g9 f; ^% c( y
"display_name": "s3_rgw_admin",' o% G3 n1 e$ O5 K* p
"email": "",
: {( x8 h- g0 J8 x/ y& `" }9 P "suspended": 0,% \- j% b, C3 ^ \# t
"max_buckets": 1000,
; g& @# {4 X- q( c7 p8 W" S& y "subusers": [],6 u6 O y! n- b! |) Z. L4 h8 |
"keys": [
5 H1 ~! d& T2 ^! A {
9 H3 x9 R O; R "user": "s3_admin",6 ]. S: m' I. e* \1 f
"access_key": "s3_rgw_admin_access_key",
* E0 S+ F5 w6 T/ q$ L "secret_key": "s3_rgw_admin_secret_key"
$ E$ W2 o' V; i$ Q8 A% Y: g }: _. E8 n+ d* v
],4 m7 y; N# \" v. D9 C
"swift_keys": [],
& u" F8 @1 b( C! p6 L "caps": [],7 P% ], }; ^- Q) F( L8 X
"op_mask": "read, write, delete",* C2 s0 s: }& Q2 w& n/ k6 b6 Z
"default_placement": "",3 d3 G' |" @" \; j$ j. n
"default_storage_class": "",
' A' e0 N0 b1 G3 S "placement_tags": [],* M8 g3 v$ v4 @1 L
"bucket_quota": {" I' Y. a( V, t, X
"enabled": false," k1 z( q* i4 g2 O
"check_on_raw": false,
- L/ ~7 `8 O+ a8 D- L4 t5 O6 E "max_size": -1,! K) s/ o& H: A5 x- y/ z9 E
"max_size_kb": 0,! @0 t5 r/ h+ d* \ `5 ?
"max_objects": -1
. F% ~$ A* | H( X },$ L* m6 w! I& r0 ]
"user_quota": {2 b2 T3 Y, O& Q; j6 Q0 u( D* _
"enabled": false,1 Q }: H( k, M4 A" W
"check_on_raw": false,
5 c8 x. F, C. N7 P3 U3 G "max_size": -1,
. e, a3 o& A/ c6 i7 A5 S' S "max_size_kb": 0,: X4 @& c* {" D- m
"max_objects": -18 Z+ J: G ?- M9 F9 m Y
},
' R3 o: A0 b8 s- V+ V5 P) q' `% ` "temp_url_keys": [],
- y7 s5 Z+ H% l( n# k2 R "type": "rgw",# x, ?/ l# [' d7 {3 F, P( g
"mfa_ids": []3 G4 ^" n' r, A# `) O
}- f5 w4 F) } d& J. }+ Z/ O1 x
6 k+ R3 N4 }* u) j9 w% `2 ^# @( O
[ceph: root@ceph1 ceph]#7 n! L2 S5 P! g
[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'
' i- `/ O8 n. i; G5 x, f [+ Q4 S( \{
' u: j- S% V4 O "user_id": "s3_admin",5 w+ [- d% I' O x: a, u, Y- i5 N
"display_name": "s3_rgw_admin",
% A& k e \. h7 v$ ^ "email": "",
2 F. D# s/ C+ [; D* V "suspended": 0,
4 }" c" `6 ?+ T) F/ R8 Q5 [ "max_buckets": 1000,0 G% J/ E+ f! E* r! Z; Y4 c, Q
"subusers": [],' o I# |+ `/ u3 @/ |& ~
"keys": [. V: f9 N+ H. R. S; I* j* ] K
{
) b7 }! J6 q3 R+ t- }; ]( E8 l "user": "s3_admin",
e2 f: g" { _0 z" J! i! O6 q/ ~5 { "access_key": "s3_rgw_admin_access_key",
; B/ @/ _: M! C% I6 W7 t4 ?& }3 K "secret_key": "s3_rgw_admin_secret_key"6 l' F) @9 S' k% I
}4 [' Y! Q, g" O' D3 C7 O2 g
],# M5 H. F& }9 Y9 Q
"swift_keys": [],% S/ t+ ? W# ]- \8 _8 x/ r% {
"caps": [],
, P4 b* `9 k% @ "op_mask": "read, write, delete",
7 A0 ?% }6 b8 h1 Y l+ }, f "default_placement": "",
# o: D: Q, v: Y "default_storage_class": "",. K, \$ K3 D# T+ j2 {
"placement_tags": [],9 g$ @% E# C% Z: R0 G3 c: H1 \7 R
"bucket_quota": {. g7 n0 |- [4 l% b9 a0 S) r
"enabled": false,
+ b0 E, p( F7 z, ] "check_on_raw": false,4 h c# n- Y; [2 ~) B* {
"max_size": -1,
" [5 [- t3 \( P4 o( P& z! X "max_size_kb": 0,
$ V- ^7 i- j# T "max_objects": -1$ R( R6 X' { T5 k' Q$ ]
},
, n5 x" D6 z& d- M, O, d- c "user_quota": {% M) h$ v. P* y g$ A) M) W, c2 F
"enabled": false,7 Y s- k( ?8 k/ D- f3 c: Q
"check_on_raw": false,. y% n& ^9 D$ y8 Y- @% \
"max_size": -1,
3 z7 W4 U# B$ ?1 H, j6 X( H "max_size_kb": 0,
" s( G0 z. h- Y* w "max_objects": -1
! v8 T1 _6 v6 L" E }, N0 O$ j' R/ S4 Z
"temp_url_keys": [],
) ]& V% e( @* ?% L "type": "rgw",0 C! r: X- g# {3 `7 w
"mfa_ids": []
6 b* d1 L# G* S) S5 K5 z}
6 @; J# v$ I% [# e. }, l- H4 G: m
5 h& \. K# T3 U: T L: y9 bceph tell mon.* injectargs --mon_max_pg_per_osd=100
$ I, r6 I. v/ J. j' w. L2 x- I2 o% s+ v
#----------------------------------------------------------------------------
; M% K Z9 p6 @% K3 qradosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system
* ~9 s. A u. o* ~' V- Qradosgw-admin user info --uid rgw_admin --system3 r. b1 X' _2 s9 Y3 t
; G) s+ A+ g2 C6 g3 b/ W. P+ @
3 g/ J- y0 U7 w" h
radosgw-admin realm create --rgw-realm=realm_1 --default
, i+ j% j% j2 i2 aradosgw-admin zonegroup create \6 S! u0 q& m( R: g/ m
--rgw-realm=realm_1 \+ f$ h: A% K6 Y$ S/ X9 ]; O" }
--rgw-zonegroup=zone_group_1 \
! [: ?0 J' s9 | --endpoints http://ceph101:80 \
7 O, W) f% C$ B! a --master --default7 }6 F5 w- l" [$ G3 Y7 H
* q. R3 _; n! T. v6 |
* O/ z3 d x+ J1 k3 O& A# a radosgw-admin zone modify \
5 u: } Y1 n2 Y9 K8 e- W1 f3 | --rgw-realm=realm_1 \& _# X8 R& B# M+ {3 H0 E
--rgw-zonegroup=zone_group_1 \
) X' @5 [( _6 I --rgw-zone=zone_01 \& h+ _! s8 ]3 u8 F8 } }
--endpoints http://ceph101:80 \
6 ^: L8 Y4 j3 _ --access-key=IAWL6PLNFMNM0SLQNWQ0 \! H, |1 Z5 S8 C1 d' N0 d6 X: `+ }
--secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
+ [8 _6 x, t" K; P/ `# x6 m7 | --master --default / r0 s8 }9 W% X2 x2 D& M/ E7 @
6 i4 C9 u1 H7 y: @' [9 m, [; l. y
radosgw-admin period update --commit; `* ~) Z1 E" W' B. t( B8 P
radosgw-admin period update --rgw-realm=realm_1. I* g. |( z" ~
ceph orch apply rgw realm_1 zone_01 --placement="1 ceph101"$ F' u; [$ z7 V8 @
! b$ p5 `5 t0 z3 q% @2 m# {' j9 C上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:' X @5 L& z6 ?! s' Z
bash 体验AI代码助手 代码解读复制代码1 Q* d e/ o" j% E
[root@ceph101 ~]# ceph orch ls
; h/ N+ Y$ E- I! W3 ~- fNAME RUNNING REFRESHED AGE PLACEMENT IMAGE NAME IMAGE ID
9 ]. b. V5 r }8 K3 O4 valertmanager 1/1 4m ago 2d count:1 quay.io/prometheus/alertmanager:v0.20.0 0881eb8f169f( m/ L V$ v4 `) y5 B
crash 6/6 4m ago 2d * quay.io/ceph/ceph:v15 3edede73a7c4
9 x# s, W% p- pgrafana 1/1 4m ago 2d count:1 quay.io/ceph/ceph-grafana:6.7.4 557c83e11646, F0 k& h" ?2 `0 Y
mgr 2/2 4m ago 2d count:2 quay.io/ceph/ceph:v15 3edede73a7c41 j& J+ B- y9 m9 Z) L
mon 5/5 4m ago 2d ceph101;ceph102;ceph103;ceph104;ceph105 quay.io/ceph/ceph:v15 3edede73a7c4% f' ]! ?4 E2 l \( J: D
node-exporter 6/6 4m ago 2d * quay.io/prometheus/node-exporter:v0.18.1 e5a616e4b9cf' D1 _3 o3 C- s7 x
osd.None 12/0 4m ago - <unmanaged> quay.io/ceph/ceph:v15 3edede73a7c4
! B: {" ~2 H2 N7 c" V7 e3 {prometheus 1/1 4m ago 2d count:1 quay.io/prometheus/prometheus:v2.18.1 de242295e2256 o) D8 `. S W- _( d& E% W
rgw.realm_1.zone_01 1/1 4m ago 75m ceph101;count:1 quay.io/ceph/ceph:v15 3edede73a7c4
- L' w9 p; p5 D6 E# q
" o0 n% F, s, ~) h& l( L7 w! \( Y
2 \) s* O: p8 }0 X如果rgw进程无法启动的情况,可能是集群不健康,查看log:
# a3 ?6 E+ H* }* B1 V& h7 aceph log last cephadm/ V6 n( u# |* v0 S& }1 a0 p, |& y
/var/log/ceph/cephadm.log& y: I d- W! X2 i6 k3 c: g2 e
bash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm
* I3 j, E: ~* P/ D' i2022-04-27T07:57:57.347323+0000 mgr.ceph101.qhgzmi (mgr.14164) 95889 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt0 F5 V. N0 x( U0 }- y' L5 M
Traceback (most recent call last):) ^1 o( @+ X4 m1 @: J
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
7 R- x& i( s' ^4 a/ X if self._apply_service(spec):6 t* ~" _( O3 E7 i; i9 C
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service5 x' L- e7 L% z; q; L; G/ g
rgw_config_func(cast(RGWSpec, spec), daemon_id)1 G" d, K; r$ f) j
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
" T( C; ~6 ] \! d/ |5 X' l! k self.create_realm_zonegroup_zone(spec, rgw_id) F# Q9 T. b4 e0 c7 m* i
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
- v6 Y" `! f* B8 { raise OrchestratorError('Health not ok, will try again when health ok')
5 b! f" G5 h$ E! g* yorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok& L$ a/ ?+ P- B% f" D; K; {
2022-04-27T07:57:57.353366+0000 mgr.ceph101.qhgzmi (mgr.14164) 95890 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok2 l$ i2 \0 G$ y& C" D$ `
Traceback (most recent call last):
4 h% m3 n# y8 p" ?: G) k% V: X File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services$ Z8 r. r; H& R, k1 s8 j6 J
if self._apply_service(spec):
2 _! q" y8 c1 c& Q File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) _' l3 P2 L! ]# d+ c rgw_config_func(cast(RGWSpec, spec), daemon_id)
0 D. m) `/ g t3 e# n" A. z File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
2 L- P P' D0 S self.create_realm_zonegroup_zone(spec, rgw_id)
3 D& ? }0 Y2 g3 | File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone4 G4 |2 n0 v. U$ k: b3 z/ V8 o
raise OrchestratorError('Health not ok, will try again when health ok')) `! T0 e. k: R( l7 H
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok% M s2 `( m7 ~. |/ R
2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts
7 k( D9 Y! p* D" g* H# q1 w2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts$ y7 y, U% r" u8 Q( v/ {( Q0 ~
2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts6 ~& l* ?0 E. C" \
2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts
7 x) K# Q# g: h6 C2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts: t7 s8 H3 m( Y$ s
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts% C6 P5 |$ P6 n( N2 i- b# G) z3 d4 I
2022-04-27T08:07:23.599992+0000 mgr.ceph101.qhgzmi (mgr.14164) 96182 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
! r/ ~ R9 i- M. N! s. c1 E! yTraceback (most recent call last):4 C+ x+ ^; Z% d. F5 p( f
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
& T# |; e( X+ X1 }3 f8 z( o( t if self._apply_service(spec):
0 h9 W, _, h5 i K) M. H( L File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
7 E& h6 L: a! n( A; N/ { _5 D1 K rgw_config_func(cast(RGWSpec, spec), daemon_id)) _+ x3 b- {% {: L& {
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
" d) B2 I, _ I1 o" U) Z: a self.create_realm_zonegroup_zone(spec, rgw_id)# |" Q' b' } i' G
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone' a( ?$ Y+ M0 l+ J0 v( E; T
raise OrchestratorError('Health not ok, will try again when health ok')
% I1 h% M2 j( k9 corchestrator._interface.OrchestratorError: Health not ok, will try again when health ok7 [: T2 E7 y: j1 w2 J* M& f
2022-04-27T08:07:23.615964+0000 mgr.ceph101.qhgzmi (mgr.14164) 96183 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok M7 q! K z2 i& Q3 {, m; y
Traceback (most recent call last):
9 y1 p2 E+ k" _8 T File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services0 s" M5 T8 t* i7 H/ s& O
if self._apply_service(spec):
! [' o0 F3 ?, W2 U File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
9 M& v& _3 c" C" e# ^ rgw_config_func(cast(RGWSpec, spec), daemon_id)
3 q) Y) O2 n v' f- p8 {( k% l File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
8 W' E$ t! B6 T self.create_realm_zonegroup_zone(spec, rgw_id)
`$ s* L& o" s( V z; s File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
* i2 ]0 M9 w( E$ Z9 o1 | raise OrchestratorError('Health not ok, will try again when health ok'): E9 ^% H q1 m6 R
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok& I: p4 u" q" q) { w
2022-04-27T08:07:23.784884+0000 mgr.ceph101.qhgzmi (mgr.14164) 96184 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
o) P) l9 G4 ^ o, `Traceback (most recent call last):
- k- t: U8 o, m+ h File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services/ t1 `" e' e, G8 i
if self._apply_service(spec):
4 Z" O$ P4 C! L File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service8 ^1 |4 w5 }0 k# K- N4 O
rgw_config_func(cast(RGWSpec, spec), daemon_id)
3 M+ }2 h9 v7 Q# v3 m4 v% b File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
* a" a4 m; R8 E9 p self.create_realm_zonegroup_zone(spec, rgw_id), _+ B$ \$ m$ s2 i" o' m- d( K
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
) K+ C" x1 Y+ @ raise OrchestratorError('Health not ok, will try again when health ok')
1 s/ Z8 Y. L1 {6 M0 yorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok+ F. t3 H9 o& }8 {( l2 r' f
2022-04-27T08:07:23.788497+0000 mgr.ceph101.qhgzmi (mgr.14164) 96185 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlacementSpegw', 'service_id': 'realm_1.zone_01', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone': 'zone_01ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when health ok% V s' ^& n8 o/ N
Traceback (most recent call last):
8 @' ]9 x" H* p! k! y File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
9 z& R& v) k7 o: z if self._apply_service(spec):6 B: p5 ^% s% p( e: c& `2 u& ^1 L
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
5 K. f: ~. q& S3 W: g9 V4 X6 S rgw_config_func(cast(RGWSpec, spec), daemon_id)
- _2 I7 D8 p) e9 t, k- b File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config6 G* N% |/ o ] C2 r' n* @
self.create_realm_zonegroup_zone(spec, rgw_id)4 w6 c1 r, d8 a# @
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone' M" X: Q6 ^ Y/ h- E
raise OrchestratorError('Health not ok, will try again when health ok')
) u% B0 r1 M1 z9 T% Q! Jorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok0 ]- z6 r% j; R$ U) U0 G
2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec7 i3 i! H: h3 J; X) h7 e& R
2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts
* m; L* g* G. D, y' v# r# F2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts
7 t5 g/ \5 }" o. |1 h2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts
" Y5 A! ~# O; l1 ]0 d( D2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts& [' L; Q% s S# ^# K9 Z- c) @) s& ]
2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts# }2 G/ [4 U5 l* E' s# y2 @
2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts
% v# f# H8 ?) A3 n$ k# c+ s2022-04-27T08:16:34.288319+0000 mgr.ceph101.qhgzmi (mgr.14164) 96470 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
/ _* J3 Z! I1 NTraceback (most recent call last):
: R3 p# R" M, v8 _/ |+ @$ ] File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services3 J& E4 K# V7 Q$ g R/ O7 T
if self._apply_service(spec):
M- c9 U3 t2 Z File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) I; @, A# R$ @5 v* i rgw_config_func(cast(RGWSpec, spec), daemon_id)1 z& m5 k% T! G; u
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config6 Y& S p9 b! g4 A
self.create_realm_zonegroup_zone(spec, rgw_id)
; M' V A( C/ T$ x- v/ P* z6 I, F File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone/ k- R/ o' X, t/ R7 k' G/ ~+ h
raise OrchestratorError('Health not ok, will try again when health ok')
. y7 t$ V g2 l' |orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
, Y4 j- r5 b& k7 R. b2022-04-27T08:16:34.292193+0000 mgr.ceph101.qhgzmi (mgr.14164) 96471 : cephadm [ERR] Failed to apply rgw.realm_1.zone_01 specntSpec(hostname='ceph101', network='', name='')]), 'service_type': 'rgw', 'service_id': 'realm_1.zone_01', 'unmanaged': Falsene_01', 'subcluster': None, 'rgw_frontend_port': None, 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 's
0 k7 c$ J; C' v2 l4 E6 F6 ATraceback (most recent call last):
/ Z: i/ ~9 ?- w3 E, I$ e File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
6 h+ ^) v4 e: y: }1 i if self._apply_service(spec):
) q0 F# n1 u# e d1 x File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service/ g- ?6 j5 U) m3 ?$ a. ~
rgw_config_func(cast(RGWSpec, spec), daemon_id)# z0 M- u! m9 F2 G) |
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config) u6 K/ W& ]) z- D: k+ L! h" |
self.create_realm_zonegroup_zone(spec, rgw_id)+ {+ |; E" |6 ^3 ~# R& V/ u
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone) d- w0 W! f8 y8 X6 T* a# J6 E6 Y/ D
raise OrchestratorError('Health not ok, will try again when health ok')
& o2 d2 V9 v0 c. Oorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok+ v& g; G# ~( ?1 I; `
" @* x/ f! m* r% I& X* ^$ }' E$ B) X8 N! K( a# e: Y
8 ]$ ~. K! {) p% _
进入到docker中
3 [/ g& s" ?1 Ybash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh
2 D& C8 H( B5 }, ]& X0 R7 r3 zsh-4.4# cd /usr/share/ceph/mgr/cephadm/services/
5 A( n2 i$ m2 Tsh-4.4# ls/ l. l/ A7 f/ }0 b" I* l, s
__init__.py cephadmservice.py container.py iscsi.py monitoring.py nfs.py osd.py
/ O4 b0 b# l2 y b8 o/ [sh-4.4# vim cephadmservice.py' L, x' ^; _4 K5 [- b9 _% h1 Z7 s
sh: vim: command not found6 A- p" s4 [. k/ O
sh-4.4# vi cephadmservice.py+ B5 [5 B B. p4 S+ \
##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。
" V5 f3 i8 A- Y#进一步,将集群调整为健康状态,再次尝试,可以正常) F0 P& S4 E0 e2 @% s
+ i5 @1 D( K$ N$ X) j
访问s3对象服务,windows下安装S3 Browser& x( I2 F+ T. t$ ?% o
' W7 o. v4 D5 H0 s
创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。
+ F F& \ `! y$ a( l, ~9 I- M其他常用命令:0 r X0 v0 [8 |) @$ O
bash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_1
" g) i- R, ~. B! Q radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_10 o. b6 x3 u2 n/ U4 ^5 k' T. F+ @& c7 A
radosgw-admin zone delete --rgw-zone=zone_1, D0 ]# E6 N6 P" j* ?% `& b! ^
2 s2 l8 l4 d0 K/ H1 @8 u
radosgw-admin realm list
7 O" k) Q: d% Z; n: H/ Bradosgw-admin zonegroup list
8 R" x9 k7 z7 S" P$ [5 }radosgw-admin zone list8 v6 n W5 a6 w: e9 _7 \3 j/ V
radosgw-admin zone list --rgw-zonegroup default
4 `$ p2 u- v# k# Q4 Jradosgw-admin user info --uid rgw_admin --system
; d7 x) S9 ~% c/ M, y. G& F* [" b3 _) D, O- Z0 r
s3cmd mb s3://sec --region=zone_group_1
- {) K- D5 z8 A! C. C: |" `" D$ v: ^' r
# r$ N6 c' k; [( Y+ @& z- w- m' E6 L配置dashboard:
1 N& E+ `3 r% wbash 体验AI代码助手 代码解读复制代码 1752 2022-05-09 11:21:28 radosgw-admin user list& `( u" X+ v& R5 i o1 B0 c. B
1755 2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin( A0 i& g/ w* \
1757 2022-05-09 11:34:44 vim access.key
2 h* e1 [, b. d' l 1758 2022-05-09 11:35:00 vim secret.key
. f4 B9 ~' \8 h# v' A 1759 2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i access.key. T% j8 L7 U0 \* n. ?! t( n
1760 2022-05-09 11:35:34 ceph dashboard set-rgw-api-secret-key -i secret.key+ _2 F: E! s" X' d
1761 2022-05-09 11:36:49 history
" W. h9 Y; L+ s" f4 n) x5 A) X* p+ n7 s. x6 ]
在前端可以看到$ B: M \* H6 |7 @ w
2 N6 C# s$ J. ^ Y% o搭建主-主备份/ E: R. R% q! u7 u6 D; z1 U3 @
bash 体验AI代码助手 代码解读复制代码) H- F, C) u' D; n! L9 u
; U Y; m, M: T4 [$ `% U( F3 l
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo P6 `+ e6 h' d: b9 L
- q* S, j( G: ~( I5 [# B
radosgw-admin zone modify --rgw-zonegroup=zone_group_1 \0 s; c( r8 x" \ d8 R
--rgw-zone=zone_02 --url=http://ceph101:80 \
" J: p J- j7 ^9 |/ e! ^ --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \" t' h" M3 G5 D) t7 V0 i# ^
--endpoints=http://ceph1:80 + y* X$ \8 R% h# p8 H2 d, ^
radosgw-admin period update --commit: R. Q' D8 D6 @" j5 Y( {0 J I6 _
ceph orch apply rgw realm_1 zone_02 --placement="1 ceph1"; _# s) m2 [% F' q
+ A6 k5 E4 w, r查看应用的配置
- L" I' o+ U9 j8 Nbash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump+ i8 y) m' ^' i+ m8 k7 p
6 u7 I$ V: s. W& c/ ^
, ^* }' r" J9 I[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd1 D5 ~: _6 J$ L- A, ~" O* F" e0 B
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7
% Q2 @; f$ J8 f[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll
3 s0 M. k Z& C+ ^- k4 U总用量 0
) [# `. B# d; w9 `drwx------ 4 ceph ceph 92 4月 27 18:52 crash
' }0 U- b+ F9 n, ddrwx------ 2 ceph ceph 133 4月 25 16:07 crash.ceph5
; p* F: {# |! ~drwx------ 3 ceph ceph 190 4月 27 17:04 mon.ceph5
; }9 G) k6 ?& r3 }$ t( u$ X/ Wdrwx------ 2 65534 65534 104 4月 25 16:07 node-exporter.ceph52 J+ H! a9 p! q
drwx------ 2 ceph ceph 241 4月 28 19:42 osd.4$ q1 Y3 ?8 P; ?. F6 ^% Z
drwx------ 4 root root 88 4月 28 10:59 removed
# X9 B* t5 P3 w; V K; y" H! t( ldrwx------ 2 ceph ceph 133 4月 28 19:57 rgw.realm_1.zone_03.ceph5.tapydb
7 U; B) w) M) q, P9 h& z: a; j' C& f! i6 h) r' a( V, s7 P8 I
- A& q, ~% l! c
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb
( H1 F& L @! O+ BNAME VALUE SOURCE OVERRIDES IGNORES
9 O. R% X: t" x3 t: ladmin_socket $run_dir/$cluster-$name.$pid.$cctid.asok default6 q! L- K5 W! W$ i
container_image quay.io/ceph/ceph:v15 mon
# t& h( _0 h; x7 p- @7 p8 pdaemonize false override0 e4 P9 T9 O5 t4 w4 f( |% {
debug_rgw 1/5 default
$ J# U, n& N$ x4 j/ @) e4 Dkeyring $rgw_data/keyring default2 D: ^0 H2 L# h' c, l. w. ~2 Q
log_stderr_prefix debug default- J! D8 H0 q% e" I: T4 _5 x
log_to_file false default
5 j8 k5 {; @! A: i9 S1 i) I- Ulog_to_stderr true default: p6 G1 F# V7 S
mon_host [v2:12.70.10.161:3300/0,v1:12.70.10.161:6789/0] [v2:12.70.10.162:3300/0,v1:12.70.10.162:6789/0] [v2:12.70.10.163:3300/0,v1:12.70.10.163:6789/0] [v2:12.70.10.164:3300/0,v1:12.70.10.164:6789/0] [v2:12.70.10.165:3300/0,v1:12.70.10.165:6789/0] file
5 z' a, U9 u7 ~4 pno_config_file false override
1 Q% [) s7 P1 D3 ?. robjecter_inflight_ops 24576 default/ V# x* T- X- y9 ?+ O" r, H
rbd_default_features 61 default$ k$ Z. t! v! j& M7 z, E
rgw_frontends beast port=80 mon
+ ~4 k+ @8 a1 r- N+ j2 H6 Q4 o5 hrgw_realm realm_1 mon% l; i% |/ k+ B# A" l
rgw_zone zone_03 mon
6 V2 |& E( j) N* wsetgroup ceph cmdline, e+ R5 c. u2 X' A) ^
setuser ceph cmdline
- u# O; l0 H: N: p. S9 s- ]$ ?" d; {. r, M1 \
对于想修改rgw启动端口的,可以修改配置文件3 I( o. a9 B( ^6 h. U2 T
bash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关2 x8 K3 `& ]7 f5 _
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo
% l' m! [" a+ d7 H
8 L' B( d) @: Z/ r9 Q" [- x+ Mradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \
1 Y3 M3 y: c0 d* o4 z) ^( x --rgw-zone=zone_03 --url=http://ceph101:80 \* q2 [# i+ ]9 D4 f0 Y# Q' [
--access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \" X; J$ Z3 \+ M6 M3 `( ~# T4 Q: g
--endpoints=http://ceph5:8088- ~9 [9 w/ |( u
radosgw-admin period update --commit
. a" O" q! B1 \: N9 y# }8 cceph orch apply rgw realm_1 zone_03 --placement="1 ceph1"
X3 S t* `* t$ v
5 t! M7 m+ W1 b7 T/ @8 O; O0 j$ {$ R7 E" i, g! m$ R3 f5 `
[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd3 h, M. b _2 d0 |0 Y
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
8 i5 Z# R1 E5 ]% b[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim
2 ?- L3 e6 @# ~. v5 h* M9 w3 f7 Y+ k$ n* _7 f& ` f
`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7
( [; I8 R3 P5 ]$ n: W6 v[global]
$ Z; B1 a! y. x; K fsid = f88b0b1a-c467-11ec-a2b8-525400299ff7
! q" C' P9 f3 d* n" i' v& V mon_host = [v2:12.70.10.161:3300/0,v1:12.70.10.161:6789/0] [v2:12.70.10.162:3300/0,v1:12.70.10.162:6789/0] [v2:12.70.10.163:3300/0,v1:12.70.10.163:6789/0] [v2:12.70.10.164:3300/0,v1:12.70.10.164:6789/0] [v2:12.70.10.165:3300/0,v1:12.70.10.165:6789/0]( @3 n( i% ]0 E' w- ]% g$ d) N# n
[client]% a" ] Y* n: f; r, i! V# A
rgw_frontends = "beast port=8088": }( i* [8 k9 R$ f: I
`
( F6 t( i( A# N% Q#然后重启rgw服务
" A$ v0 Q ], f' G& B! b- F#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends "beast port=18888"
+ s8 C7 K" M, q, r$ t#去掉config中的配置项,重启服务,也可以生效
# E! i2 h d! R$ d7 \! W& i* w#至于精确的配置如:7 `& A9 R7 `! {- ^; z! h8 @1 j
`
8 M" {: M l* r0 O+ {% @# J8 b: K[client.rgw.realm_1.zone_03]! ~2 U- {/ @" b
rgw_frontends = "beast port=8888"4 P% ?6 V" c/ b' \% W9 }
`9 I" L: w6 n$ G, w
#试了很多次,都不好用,官网说的不明白 s0 A3 s. f9 q$ o* y
P5 ]9 T1 a+ U9 m7 `参见:* L3 V* e& K. q) O$ J2 d, T
: h; T9 |6 T* ]* |
指定rgw的数据池9 R' J0 N& q! @% C9 _$ L
; z1 t% [2 M* O3 R# {2 B+ g
移除osd
/ C7 M$ B1 F d- ~1 P% |$ lbash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:3 a, [0 d( F* N/ J; |* ]9 O. v
将节点状态标记为out (节点已经不再提供服务)4 d* g1 W0 H) ]8 @
[root@ceph1 ~]# ceph osd out osd.5
$ T6 D9 k6 V% u9 |从crush中移除节点(不删除会影响到当前主机的host crush weight)* ~# o& t5 t* m# T4 e
[root@ceph1 ~]# ceph osd crush remove osd.5" O, Q2 H* H0 c
删除节点& I- `4 X1 h( p3 `( o6 k$ f; g
[root@ceph1 ~]# ceph osd rm osd.5# D+ Y2 n; J0 J! J
删除节点认证(不删除编号会占住)( r0 L; ^9 j0 @& E6 z# J6 }& f- \! i
[root@ceph1 ~]# ceph auth ls
$ Y# f; V& b* j$ k' W6 }& p2 l' l[root@ceph1 ~]# ceph auth del osd.5
! [! Y, j! |3 ^$ v[root@ceph1 ~]# ceph orch daemon stop osd.59 Z8 g2 K( d; p
Scheduled to stop osd.5 on host 'ceph6'& u( \2 b+ R, ?/ |3 Q/ P% r! L
[root@ceph1 ~]# ceph health detail
& c* d* c' D) G7 MHEALTH_WARN 1 failed cephadm daemon(s)
# j* @3 ], u6 |7 Z9 ^' y* x9 l[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)
! p# U/ B& ^- X2 B daemon osd.5 on ceph6 is in error state% H Q$ _; _ R" ~6 A/ |) e" t
[root@ceph1 ~]# ceph orch daemon rm osd.5 --force5 W8 v) E4 d' D2 h, o* h- s
Removed osd.5 from host 'ceph6'
+ _6 K J0 m. C" J) \2 x, s; }( o# l
恢复磁盘:7 ~6 i6 S* `, o* C0 x4 W
找到某个未加载的盘,有两种方式:
6 e p+ v, |9 n* j* nbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata
! E" i$ \' ^8 P& Y, Q2 k6 f- ^- h. G% J, C; z" G* b: J4 D
和
. }5 q" i* b4 [3 hbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd
. N0 a, T. T' @; K/ F7 N! P* V, ~ X/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z
. @; f8 ]9 l' b; B7 H[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll
$ C: w: \& x! T5 r$ O7 K0 Z5 G总用量 52
/ n9 O, `8 q0 f. W9 [* s$ Slrwxrwxrwx 1 ceph ceph 93 5月 10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f3* K8 n6 i: o# C- V1 \
-rw------- 1 ceph ceph 37 5月 10 12:47 ceph_fsid; N2 {% w5 {& d2 C# w
-rw------- 1 ceph ceph 377 4月 28 19:43 config
X6 j/ u4 \# C' p9 q+ G-rw------- 1 ceph ceph 37 5月 10 12:47 fsid8 y" i- Y2 X, n: ]: J$ D6 ]6 m* M
-rw------- 1 ceph ceph 55 5月 10 12:47 keyring% A8 y2 Z/ R2 Y) j8 v& ~
-rw------- 1 ceph ceph 6 5月 10 12:47 ready3 ~1 ?2 j7 X% X, }! h
-rw------- 1 ceph ceph 3 4月 25 17:04 require_osd_release
9 J5 t+ n7 Q% B I9 Q-rw------- 1 ceph ceph 10 5月 10 12:47 type% v( B& I8 L ~! y! M# _9 `
-rw------- 1 ceph ceph 38 4月 28 19:43 unit.configured
" ^2 V# M& ]* b l6 \* x" E. g-rw------- 1 ceph ceph 48 4月 25 17:04 unit.created
* x4 ^/ U' |' |. n, d0 ]/ u; `: `-rw------- 1 ceph ceph 22 4月 28 19:43 unit.image
' E! O- M* r! X! @. d/ D-rw------- 1 ceph ceph 931 4月 28 19:43 unit.poststop$ ^9 M" c/ x Y) `3 o. G9 v
-rw------- 1 ceph ceph 2035 4月 28 19:43 unit.run
, z U$ u3 x9 x: X/ k; z/ [-rw------- 1 ceph ceph 2 5月 10 12:47 whoami
8 F0 Q9 h5 \2 Q5 Y9 |
$ d% @5 r. P2 c) t Q
- `0 T% R5 M7 Y5 d9 Q% @' w' Y[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk: `8 l" I$ C. K: K" b" M
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
5 U" O4 Q. x- F: m p+ C yvdb 252:16 0 500G 0 disk) V5 h, x! b6 g8 s* H5 Y
└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4 0 500G 0 lvm
: e$ `" ^4 Q3 F' b# v5 O& {sr0 11:0 1 1024M 0 rom
) _2 r% [/ N* i7 ~4 cvdc 252:32 0 500G 0 disk: Q! w3 b/ W3 N0 b4 D! y
└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3 0 500G 0 lvm
, ~4 `6 F& s) W6 c" [vda 252:0 0 500G 0 disk$ J/ o/ t. e$ m% Q$ Y
├─vda2 252:2 0 499G 0 part
1 O2 z" t! }5 U/ d: a│ ├─centos-swap 253:1 0 7.9G 0 lvm
4 _. `# W0 y$ a│ ├─centos-home 253:2 0 441.1G 0 lvm /home w) z4 u) o9 \* q" n( j
│ └─centos-root 253:0 0 50G 0 lvm /
9 P( U7 F, L6 N7 q# G# g8 {└─vda1 252:1 0 1G 0 part /boot
6 w. l; Q) U9 l, ?& i( m. o) O/ u/ i
可用确定是ceph6上面的/dev/vdb块设备
/ |9 x% x! H. B2 u% ]bash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用
% O" i, `; w: B, Q, V* F) H
- ]& m/ P a* k3 O. W8 F[root@ceph1 ~]# ceph orch device zap ceph6 /dev/vdb --force- _* m2 t3 a* M* ^2 n' K
/bin/docker: stderr --> Zapping: /dev/vdb3 M8 k" R: m2 y) d7 i' [5 J
/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync
9 F c9 }+ z l5 o* S8 K1 d/bin/docker: stderr stderr: 10+0 records in
% }9 {/ f/ G: Z# R$ O, Q/bin/docker: stderr 10+0 records out2 S5 _# A2 `# G F4 q! Z. R
/bin/docker: stderr stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s& \; {% |) i/ H
/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>
+ `; v7 r* _# d. r1 X, t[root@ceph1 ~]# ceph orch daemon add osd ceph106:/dev/vdc9 q4 m; v) N# l
ceph orch daemon rm osd.5 --force1 o$ i' z( p% l4 v# y; _
ceph osd out osd.5: {$ X j# m- h8 D5 L; R
ceph osd rm osd.5
& o7 M# t& |* ?3 x' Bceph osd crush rm osd.5
$ |7 }( h2 e" h1 y! A# z* |* w/ o/ s( r5 ?3 r" C9 S% B/ J1 q
pg故障处理
7 p; y6 N9 {' C3 A6 zbash 体验AI代码助手 代码解读复制代码
, z# |" R) }. Q4 `4 z9 R+ Z8 _3 {
1 X3 {# W$ d4 `: o3 T[root@k8snode001 ~]# ceph health detail
; q' J2 U. E/ N1 R& O/ yHEALTH_ERR
8 x% |' n. r4 l! [. E9 ] 1/973013 objects unfound (0.000%);
$ \4 n! C4 w, c17 scrub errors; Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair; Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded
+ ?4 c! o- g" g' y% R6 o; G5 UOBJECT_UNFOUND 1/973013 objects unfound (0.000%)
6 `4 I: S+ n9 Q- ^5 y pg 2.2b has 1 unfound objects6 H9 d3 o* r% ?. s. |( t' p
OSD_SCRUB_ERRORS 17 scrub errors0 o- l0 i) I- `
PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair( Q, A$ m. S4 q6 a Z& C$ S8 ?9 m' p
pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound: Z9 i! h' _( ?
pg 2.44 is active+clean+inconsistent, acting [14,8,21]
( q4 _9 A+ `+ | pg 2.73 is active+clean+inconsistent, acting [25,14,8]. z9 S1 m% K5 w* q) u
pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]3 d/ A! p0 T% t0 @3 M( [
pg 2.83 is active+clean+inconsistent, acting [14,13,6]( l! \8 ]( J8 ^: j; x1 N
pg 2.ae is active+clean+inconsistent, acting [14,3,2]3 F4 a5 I; O; w' ~" j8 j! \
pg 2.c4 is active+clean+inconsistent, acting [8,21,14]
8 f+ n# ^7 L2 t pg 2.da is active+clean+inconsistent, acting [23,14,15]8 n$ q9 F5 Z% d* n+ v- { c/ P
pg 2.fa is active+clean+inconsistent, acting [14,23,25]$ ~" `% C. E7 G* x0 f0 j
PG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded0 P* m+ R7 i9 i9 j' A
pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
2 c4 E7 o0 O* [+ ]& o
" Q( J! S" _4 L* v2.查看pg map
$ B; ?* c" m' r8 k[root@k8snode001 ~]# ceph pg map 2.2b
9 Q2 F1 g! f( K9 w Dosdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]
9 h4 K! ^: I$ T3 d从pg map可以看出,pg 2.2b分布到osd [14,22,4]上
v# N. V4 l3 ?0 w2 t! B
: E2 \1 J- o2 d( J3.查看存储池状态0 H5 z" g% i" X% i
[root@k8snode001 ~]# ceph osd pool stats k8s-1; h. p7 P" a2 K4 }4 D: Z$ s
pool k8s-1 id 2
6 d/ n, z6 K$ d1 J3 w# v7 q+ ~ 1/1955664 objects degraded (0.000%)
8 M. b+ O4 @5 @* b& U 1/651888 objects unfound (0.000%)7 b2 U4 _5 R' N& @0 L+ G: G, n1 N
client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr
1 Z8 J$ W* T8 R& D2 n$ ?
- v3 u/ @6 i4 K( H! @/ x8 |7 [8 |[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-1
% M9 w* K7 W3 O8 \+ _# S6 Q: wpool 2 'k8s-1' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 88 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd
1 U% g! x* W2 \# B4.尝试恢复pg 2.2b丢失的块- _6 X$ i$ B$ M0 F
[root@k8snode001 ~]# ceph pg repair 2.2b& t) \7 g2 r8 }8 V
如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
+ a8 g2 y7 m: y# h[root@k8snode001 ~]# ceph pg 2.2b query# a) b+ s6 ?( B* C' j
如果repair修复不了;' Z" a& o' a0 m. C
两种解决方案,回退旧版或者直接删除
% M" p0 s5 W* _9 k) L回退旧版/ [3 \2 v) q% _1 P, Y/ X
[root@k8snode001 ~]# ceph pg 2.2b mark_unfound_lost revert3 i3 E- M. V! a
直接删除$ K& B0 S! x% W/ _" p3 }9 o* R
[root@k8snode001 ~]# ceph pg 2.2b mark_unfound_lost delete$ W& h# u0 q+ g( M' N' G0 E3 k0 I2 V
8 m3 i t5 n7 i参考:记一次ceph pg unfound处理过程2 E7 H$ G# w* A- B& x/ k
卸载6 T D4 k+ _2 X9 d% F# n' @% O/ S# _- d
卸载过程:
9 @, B0 x0 F s: `bash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'6 s( A" J4 G. T* ], w
#找到fsid1 [& E' K* V: L& Z! x( T$ n
[root@master1 ~]# ceph -s
" [: \+ g8 s% ~; m L7 nInferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6, j, |% r0 m% m4 f. c
Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config7 ^# {3 k' `' \) t6 V' }
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f! K0 o3 x! b0 ]3 s. o
2022-04-01T03:20:37.240+0000 7f27a2b6b700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
* Q0 i/ B4 y! V7 ^2022-04-01T03:20:37.240+0000 7f27a2b6b700 -1 AuthRegistry(0x7f279c05ec00) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx6 o& h4 ?5 [3 [9 s) X
2022-04-01T03:20:37.242+0000 7f27a2b6b700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory+ [! L2 m1 R6 l& _
2022-04-01T03:20:37.242+0000 7f27a2b6b700 -1 AuthRegistry(0x7f27a2b69f90) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
. F7 t1 }7 A! U8 T8 {+ @6 J2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]
9 k' J3 A- b$ }$ X' l. h2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication1 k D/ ~* G# d6 \9 k. Z3 ~3 e
[errno 13] RADOS permission denied (error connecting to the cluster) ?! ^; `/ Q9 a( {8 ?
5 M1 e" S( G1 C% m( ^% D4 f# M% M2 b
#使用fsid删除集群
' j, R; J( v1 y[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force( S4 K9 b/ }& N l: D
; R# y$ I' j. m
- [6 {/ i$ I% ?分发ceph.pub! X1 ]4 M ], E& L$ t7 d4 o& E
playbook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub" ' C- G& N0 y$ o0 x) V
或3 A! [( ^ e5 |: Y9 R6 [ K' E2 K. R
bash 体验AI代码助手 代码解读复制代码playbook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" -e "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub"
9 _* o- h3 z1 b) B- Q5 E& f/ @, V3 h0 ~1 z
使用 ansible master0 -m setup 可以看所有的变量
* M0 g+ \: S; M, o) K6 I0 r参考:ansible.com.cn/docs/playbo…0 X% b! `/ Y& A' ?7 T
jinja2参考:
9 o' M3 g& M" D2 S7 d% m5 Cstackoverflow.com/questions/3…
- A& x' z! C3 Z, V8 ?, A8 L; G& _2 ubash 体验AI代码助手 代码解读复制代码 playbook -v 2.mon1.yaml4 n" z s- H; o1 ^- |7 T. i
playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"
: ^/ m/ Q/ ^! [5 F2 Z0 e. G% J" F playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"
3 V" }$ b- H+ } B7 b) P# e# J9 B0 ^9 _9 V, m
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。' A; T; B/ _0 T& \, e8 q
/ v% i& ]# m; g/ O0 ~6 W添加(add) 在某个地址上新增一个名字为的MON服务。* t1 L/ ^( q' @/ }
示例:
5 ]5 }8 h6 E2 n$ @( u4 G+ G7 fceph mon add <IPaddr[:port]>
" W0 v& I& N0 m. @! a% Q0 f, \+ S导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:3 t8 P) X5 N2 x3 x
ceph mon dump {<int[0-]>}) l# K. @; w& z. V5 Q' `
ceph mon dump 1 d0 p4 M" O! A0 p& u6 i- [
获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:, r7 Q" t. u5 z4 E. m0 b" R
ceph mon getmap {<int[0-]>}! `5 s" d- E7 G: h+ u- Y1 a# a. G
示例:. n0 H+ k9 F" J. o
ceph mon getmap 2 –o filename- H& E& `! k" z2 e
移除(remove) 移除特定名称的MON服务节点。具体格式如下:
: a1 x9 ^! z, y; j. Y# Z5 qceph mon remove ' k# j/ \9 V+ }9 C5 H D- o- c
示例: F+ `& ~- l7 s7 r7 f
ceph mon remove osd3
* Y; J M' V8 r, ?获取状态( stat) 显示MON的摘要状态信息,具体格式如下:3 z$ L9 e+ g8 i' q5 y1 z
ceph mon stat
& a. m0 s( F5 \0 O! d报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:
1 s; W3 N& W6 f) E/ J8 _ceph mon_status. s9 `% V# s$ K: f6 q; U" P0 p6 `
Ceph命令之ceph mon(Monitor管理)! h; x$ m% Q- V; _( T7 I. Y) h5 B2 Y, u
. ]% }& \+ j# C5 e5 c
% H! P2 r4 I6 Z: _9 D; z6 v
|
|