- 积分
- 16841
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
软件版本:( N. o# H* L; N2 R. ^& Z& W6 X; t+ h* v
6 ]) Q# f; H/ k; P6 `& k# L {' l" p1 }2 v' ]+ ?* T! u" D, g
( \- U9 \. h! J" x2 C8 R
# _) F9 C) {0 _. m3 K; s/ B) c: s6 Z( d. h$ n5 A
$ s: k _5 w; ^. S$ t( E) b- k* P
: x! O$ ^# ]+ l; ^0 I
% \" R- b6 j; S7 W2 G( w; c. f
( s% \: a% Z+ G
& a1 I' p7 S0 x( l
! c1 u% q+ t9 x, v, P& _
W& X# i" g0 |( `& F
7 B# [: M6 C2 _* c1 ? ?- |
# _3 W, q4 ~2 c# D* \* @( ?
. M" J3 }, W$ `+ s: l. V) G3 |$ O, j6 v1 p& O7 c# B9 R4 W4 A
/ `/ n% K x$ P. a; H# P9 v
软件版本cephoctopus(15.2.16)centos7.9
: J1 T, C- H) \3 k: h- S: Uceph官网版本:2 k8 L( i: e2 K& D$ p
docs.ceph.com/en/latest/r…; d$ e# z" B: ?4 M1 A1 R
机器列表:, l7 M5 N" Z# c5 u* `8 o2 q6 l
- v7 @3 S7 O- l; z& q( K/ _3 l# m/ R. [$ R
F% M! l+ O/ r0 l0 ? j4 T: S: F4 r) k
c! d6 G5 |6 k" s4 y7 U
; ]5 x+ p) Q: U+ V8 k
+ Q6 @) k% v( Q( ]/ U% i* @
/ w/ Z# a* d0 y# a
; A* u5 k! ?2 [3 p8 [
# y6 u, V2 M' T" ]. x1 ^4 P' L: C2 P/ O8 H3 u h
* c4 T5 _# g( X1 L5 I. a* C
& X( h# X3 e. F g' l4 m: y& }* G1 ]1 q7 B1 j
4 n7 K+ M+ v5 L2 Z$ ~/ S: A% _1 t* ~9 Y
: n$ i) A& h5 i; t+ A1 N" E6 c! z, C- a( e$ w. z% m/ ]7 a
7 d- P E0 b4 ]' Y9 H1 J
+ H6 v; T* F' s1 i; ]& ~* l+ b5 t, C+ X1 Q; C- g" M# s) h4 u
+ j6 n$ _) j- ^$ Q+ Z
+ k7 a; [* l- K# ]- g
- m7 n0 s- y# h# }3 C3 A0 w E/ B% \
机器名称ip块设备
' c; g; p& k% Y7 n; {( ]master0 12.70.10.161/dev/vdb 和 3 f c' }3 A0 Q$ @$ j! u" ~ c$ ]
/dev/vdcmaster1 12.70.10.162/dev/vdb 和
: ?2 @7 _6 [3 y /dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc7 Y3 ]1 O* c. i8 s
准备工作: v* s; `8 f/ A* z2 ` d* C% R# b
开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。' J$ A! p$ O! a5 B* g, D
如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。
% h7 X0 H/ L2 ?2 m) B: P% s& Z, Aansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):- q2 I9 G$ {' O: Y! f
bash 体验AI代码助手 代码解读复制代码
! W+ Z2 I5 n, E9 S2 Pmaster0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master02 D4 B* T% B; _& B! I% S
master1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1 0 C7 L, N" B; a7 c3 y
master2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2
: X$ R1 c' _5 V0 N X. M4 P* C( z& w9 Z! g3 |' `
[all]
& O/ R* A$ s) \* [master0# T4 q( c2 M- W: h
master1$ S" l. o; b% s9 ]6 j; S
master25 H1 o$ }7 _% \$ {
1 X1 a A- r \ O9 z" _升级系统内核
9 f- s1 j6 v5 F升级系统内核到5.17
|. V* z5 ]4 N* _+ G6 `6 @ansible脚本如下(1.kenel.yaml):3 J$ J$ L* J) f$ ^: u( P4 z2 l
yaml 体验AI代码助手 代码解读复制代码- name: update kernel
# d \! h( X3 M( U0 s hosts: all
0 a4 d* L% b8 _1 M gather_facts: True
" \: _3 I" z# S( A+ b: I vars:) I, p5 [! L& ]" X) [
tasks:
1 R8 ~, l3 @6 k2 k+ ? - name: create workspace
, t9 Y A( [6 P/ R4 w) q H file:
) y5 Y' s" L; P" V, O: m) t; } path: /tmp/workspace/
& }- X5 ~: \# T, r1 f' w state: directory8 i4 k( V4 m. w9 k; I4 Z
tags: workspace
' Q* N( o7 L. S4 Z! v) W - name: yum install elrepo8 m) z; I# ], ]/ L) B9 |
copy:. q ^6 L6 `; g; w+ ]
src: templates/rpm.sh.j2
) t. Q+ M4 ~7 V" ~ dest: /tmp/workspace/rpm.sh
. U+ c1 J K) g9 X r" g mode: 755
$ b1 H) A! P$ y5 t. O. P) A tags:
9 g& b, G% w9 `' d9 g8 N* u1 u - copy-rmp- B8 i9 M4 O% f2 |- [! y
- name: sh rpm.sh0 s M/ f7 [, y& Z8 b k) R2 D
shell: sh /tmp/workspace/rpm.sh
" Q& D1 }1 J# ^2 v tags:
* q' e0 A1 G. S" E2 p, i( ` s* e - sh-rmp' T" l% r7 ?8 B% t" I
- name: 列出可用的内核相关包 r% ]) d! J. `
yum:3 D" ?/ s l; Q6 V/ B
list: available1 Y* `) u, f& x* E8 ~$ U! w
disablerepo: "*"2 z% k& G7 }+ T; w# d
enablerepo: "elrepo-kernel"
3 a, ?2 Q% g% |7 |) w - name: 安装内核+ ]2 A/ |3 G7 \" W" n) m
yum:5 e6 q+ K- s! r9 `% f
name:# s8 K$ P2 H8 z+ X; h
- kernel-ml
& j1 _$ Y* S: Z% p, N* q) X #- kernel-lt.x86_64
3 p9 C6 I' P) ? } #- kernel-lt-devel.x86_64
1 \! \" c. @) r6 w8 [- g enablerepo: elrepo-kernel, s p- X+ v# ?. J$ g
- name: 查看内核版本默认启动顺序
% U% ^! N' J$ k: {& @: g shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
- z4 ^: T2 ~: b$ v3 V p - name: 修改grub中默认版本启动顺序1 z) A- L3 m! L- Q# m( K
lineinfile:, l0 Y$ Z8 s! `2 X
path: /etc/default/grub) [2 b% j1 K( N3 `% n# p8 A" y
regexp: "^GRUB_DEFAULT"
! v) t/ l. ]% |* W, S. ?5 [ line: "GRUB_0=saved"
: V. X- ^1 c- p5 j/ H backrefs: yes
: _; {: R( w& r' P* h state: present0 n7 u& D: y% \+ S; y
tags:/ {: w& O( ~) h6 A
- grub3 j9 x+ d3 W. J# D, I6 R1 z
- name: 重新创建内核配置
7 }3 F$ h( A. k& E2 Q! f shell: grub2-mkconfig -o /boot/grub2/grub.cfg6 Y6 m) A* i6 D/ ]8 A+ c
- name: Reboot the machine( T J& C$ Z" W6 G5 h- O4 q
reboot:
- ]1 _8 _6 v/ y2 C& Q& D! E reboot_timeout: 300# W- ]/ d5 {: E
- name: uname -r
$ J! [, E9 @4 S" q) i1 D7 @ shell: uname -r
7 R1 }& `, v; F register: version# m/ }. T! ]+ I* M3 q) S
- name: debug. F, i9 L! g' g( c6 Q
debug:* _& h. N! n: w1 n& p0 n
msg: "{{ version }}"# L9 ?# {9 f6 l4 o# S
B5 G2 y, Q2 t) j, l升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j23 ^$ K8 X# x3 N, g% |! C% K
内容是:
0 s. _% k/ y9 M6 Pbash 体验AI代码助手 代码解读复制代码#!/bin/bash r& t- \" k6 z% Z2 J
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org8 X- [6 G0 @4 @* B/ j0 O' _: R
#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm4 j$ \, ]# T( `: y/ d: L" z
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
' }9 z# B% K! g8 Qecho 0
% }# P+ g6 c3 t2 m8 t& K
F" Y8 h( Q* {- E7 n2 U执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级% u. A- a. s. B i* a
安装必要工具和关闭相关配置5 n; }6 Q& z6 k z( ]; ?$ X: J9 J
; M& X+ h1 ^, g. r% [6 Q脚本2.config.yaml如下:! s7 k% E/ O V
yaml 体验AI代码助手 代码解读复制代码- name: set config
! S5 d5 ]5 ?/ g( c, ~ hosts: all% n( T. ?8 C9 `8 i4 b0 q* a/ V% V
gather_facts: True$ h7 s2 }8 j& w$ Q$ Q7 w: { f2 y
vars:6 |& u: [; N3 ^" l8 P4 `
handlers:% |6 i" E3 C/ d% m2 ]: F, ]
- name: update_yum
# l1 |5 I5 @9 ^: P3 F, I- q shell: |
. |& b" _6 P2 n! Y0 m sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo/ {; O2 i5 b8 A# S
yum clean all
7 c3 h% k X; L3 j yum makecache -y
* ] }! {! b6 B" B - name: noswap_service #禁用swap# o( [) q" A0 `+ n5 P% x# V
systemd:. l0 D. | g3 l* G& n1 d7 w
name: noswap0 _2 Q5 v/ T5 u' F# F* i0 t
state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running5 _: v/ w" Q4 I& T; f/ _
enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
) K9 }' h/ z' i) ]4 k- s) s daemon_reload: yes #yes 重启systemd服务,让unit文件生效% r7 [/ \, t* K& m8 u
tasks:" b% L3 K! b& Z' Q% P* d
- name: back up repo
4 Z) Z: k5 c5 l' W0 J shell: |) i/ Y4 Q" p9 \$ ]" @* J+ E/ a
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup+ \+ C& v# g- F3 X
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
2 N# n2 y% }1 \; L8 e$ s# b! E9 K7 _ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
6 ^: m9 B% G: N - name: delete /etc/systemd/system/noswap.service #禁用swap! Z* i% J8 S& N- j$ B
file:$ b( B' `# S4 z. p
path: /etc/systemd/system/noswap.service& ^2 f9 |# U7 R
state: absent
1 s, e6 F1 ^3 s+ A# m) l - name: download repo #下载yum源
& e9 _7 j/ C' ~ get_url:
) Q' r( |2 m8 n url: "{{ item.url }}"
1 R& s6 V+ R3 I) k1 W$ e+ i dest: "{{item.dest}}"0 F4 ` O9 B7 ~7 q5 @+ ? }# Z
force: yes8 E( q2 @+ f, L0 z2 X! v
with_items:( t s' G2 p. H" R
- {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"} O+ a( e w( d/ w4 K { s3 C
- {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}+ Q3 f: Q% s: H: `3 y
- {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}
- |2 g+ [5 Y! k- J" y: U: I notify: update_yum #更新yum(见上面的handlers)& p6 L; X" T# \1 ~5 j
- name: install net-tools #安装必要的工具; N ]9 r! ~ `
yum:
3 Z8 h' k. W9 L+ B9 C( k name:
% E0 Y3 }- N+ D- o4 N5 u7 m% X - net-tools& P, C! ^' |" ]/ |# i, Z! N: U! z6 o
- vim
; l/ I) T v# n& q& v - rsync
2 n# q2 g z6 ~2 s. }) }' ` - chrony
, l8 U$ @7 A1 J, ^' y. O9 X( s. Z state: present
* W. v$ R$ n" e4 \ update_cache: true
# d$ U+ j* A' D* c tags: tools
5 }" s& L5 e8 B Y - name: chrony_service
1 J1 `1 l$ o& i! B- t systemd:6 }4 V. H( P4 q
name: chronyd& ] \$ l6 q4 ?( Z4 h1 {
state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running: ] T& Z1 Y$ H4 ]( n
enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
! Q- e& f/ l3 K/ A0 b daemon_reload: yes #yes 重启systemd服务,让unit文件生效
9 u c( Y7 S. B, n" |; T5 P tags: chronyd3 ^: f( V2 A1 C6 }: z& U; R
- name: config /etc/hosts #关键 生成hosts文件
2 H8 n/ A" E" N9 Q4 o) ^$ n; V template:
9 E& P$ u: J+ I: B1 A G src: hosts.j2
7 Y; e8 K9 \2 |' j) D7 H1 k" a dest: /etc/hosts
& h* A5 Q1 W+ O/ D0 O mode: 0644
7 Z& a, W. @& p/ j9 B backup: false
; u4 N7 P5 o# q: M tags:: s- a$ Z+ k% H4 Q( \- l
- hosts# ~; u4 ]6 N6 c2 y, F* ^
- name: set hostname #设置主机名9 M9 n4 [6 u W% [' i# B
hostname:, l ^1 S6 ^6 L/ S. D7 |: H5 ~
name={{host_name}}( j* f& s% ` J$ i) Z) z7 c
- name: set timezone to Asia-Shanghai #设置时区9 s- A" i; J0 T3 ^/ `* g
shell: |
6 o8 o/ n/ Y/ e- d. G /usr/bin/timedatectl set-timezone Asia/Shanghai! M/ ^" \' m1 Y+ V9 y5 I
chronyc -a makestep
+ [* ]8 m& f/ B6 n tags:
' }3 k, Q7 z, o( [1 R3 v - set_timezone
% o7 v L, U1 n' t. b t - name: stop firewalld service #关闭防火墙
- K$ O/ E9 G8 ^3 D service :6 Q- ^! t% k D6 N* L0 [& \
name: firewalld.service, h9 ~8 X" b$ ]- U, R. o
state: stopped
# b" y. a! w% G5 ? \ enabled: no- B; O8 H' O0 t& s+ G& D
register: firewalld_service_result5 o1 J; q. e- Q' e, f' m) O2 f
failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg" H! t" l. i* c1 w
tags: stop-firewall
" N7 p( x! |0 D - name: Write noswap systemd service config file
( w' b B5 ]' i# c) D* ? template:# O! h) ~# H( b% X H
src: noswap.service.j2
: x5 G" x! k# u8 C3 { dest: /etc/systemd/system/noswap.service& V$ ~+ Y8 G) U7 e
owner: root9 q$ f4 b1 m: d+ a$ _/ W8 I
group: root O1 B7 P$ Q3 D8 d& K
mode: 06445 l* D7 `' x, @9 D
notify: noswap_service
7 J3 I( N7 Z& N9 i" a2 E% n - name: Disabling SELinux state #关闭suse# B$ J, Y# ]8 X7 _
selinux:
! [9 X! [1 B, [2 c state: disabled
( G; N* D- [9 Y+ k) g/ M0 d, H - name: Reboot the machine #重启机器
3 C& o, x: k+ d" l8 r reboot:
' u: a% i( {- L2 d; _; [- E4 I reboot_timeout: 300
0 K4 a, X" [! d: E: p2 }% A" V$ F
templates/hosts.j2内容:
# O! Y9 b9 }3 c, W. q3 G. @9 r7 s2 i) ubash 体验AI代码助手 代码解读复制代码
' z( L7 x5 D6 C' Z$ k1 v( i4 ]7 I( h7 g: ]: t
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain47 y/ ] K4 ]3 ~! p5 `& }
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6+ K8 e8 C" a6 w8 H& p, l
/ T2 f3 U0 L! A+ x1 F& z
1 L7 Y [$ c) E( [3 E" \
{% for h in play_hosts %}
% @6 B8 ^ L* p8 A$ w- d" L{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}2 d8 H9 {/ w* c
{% endfor -%}
1 X, p; R) n- g, M3 t/ G5 }8 X+ e: X4 s0 w+ C; h* u. y
执行ansible-playbook -v 2.config.yaml完成相关配置工作' Q) H: h& z% i; ^: `& }. `
安装docker
$ w( a' ~% W0 v1 O& J: Y按照官网说法,可以使用docker或者podman,本文选用docker。7 d& V" @5 O" t/ O( R
剧本3.docker.yaml内容如下:
8 f& o1 c# R+ D* U/ o- V2 R0 E, z4 Tyaml 体验AI代码助手 代码解读复制代码- name: install docker
; i) M9 a: B; n+ z& K! N hosts: all8 e$ h$ ?/ b0 ^9 V
gather_facts: True
( }+ b+ [5 e2 P& {1 z vars:- R& `- f1 V2 N9 F4 |6 A, n2 A
DOCKERHUB_URL: registry.aliyuncs.com/google_containers$ t/ m. Q! d. R
handlers:
0 G+ X( \/ r2 f* o% ~6 K" g tasks:
9 h5 u# S+ p( Y2 Y - name: mkdir -p /etc/docker/
' c% h2 g) ^1 b( P. ? file:( C% ^" }8 r, ~, o% M6 C) ]3 |
path: /etc/docker/1 u7 g1 J/ w* B( y" w7 S
state: directory. m! _" X: }8 o8 K
- name: install docker7 }' R, Y7 R( U1 q. U8 l% n" H+ ^
yum: name=docker-ce
6 |8 u- K& m- H; k0 R& y+ w8 d+ U - name: change config of docker
) ? b4 n# i$ c7 B v2 Q shell: | h; W5 u1 e3 O/ ~* b
cat > /etc/docker/daemon.json <<EOF
4 F: K+ \: _0 M, M! S {"exec-opts": ["native.cgroupdriver=systemd"],: F1 n. ~. v5 G
"registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]# M% S2 W( n* |! t: r* h
}
$ p) [. @4 r9 k; L4 k* v% n EOF) x8 B7 o! H+ O: u7 Z9 d" `( I
tags:; J3 ^5 K- c/ \" s
- config# I# W1 M U e1 P9 @/ M8 u1 j, C2 l2 j
- name: add systemctl- J3 K1 q8 U7 l* z# S
systemd:' R5 R3 s6 }4 |3 p* E3 h/ [$ e
name: docker.service
; R6 B( i5 D( C8 B0 Y" X state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
9 X2 Q) X. z8 ~, l( L5 V% P( \; A enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动7 K, X5 C @7 [' |1 N" j8 E5 L
daemon_reload: yes #yes 重启systemd服务,让unit文件生效
8 j1 H/ A0 `0 Z4 ] tags:
o0 r/ Q3 p3 Q5 T) y - docker-daemon
! Q& F7 `4 X7 S) l7 F - name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials)
% l9 e' y" C/ g, s! @ shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com% X$ U% V7 U9 P1 n9 f9 N, W
tags: login" r8 D6 W: D0 H7 j3 H- M+ m
! y5 v$ K( w: o: D; ?1 y
执行ansible-playbook -v 3.docker.yaml完成安装docker的工作
$ \8 ?& S, D4 @- x! f0 G; P! w开始创建ceph集群2 _" X2 g% v/ d% ?* g
安装cephadm2 u+ H: D8 B8 V- ?$ D
继续使用ansible为集群中每台机器安装ceph$ q4 F: E6 z' B- x2 `0 _
剧本cephadm.yaml内容如下:7 G2 w1 Y6 X2 V* d; `
yaml 体验AI代码助手 代码解读复制代码- name: download ceph7 y+ B+ b3 g* i% I
hosts: 127.0.0.1
/ _0 M- ~; {4 B: b/ m' A connection: local' o/ W/ d; U$ P, s! I- y
gather_facts: yes, B2 n2 G/ M6 a2 [8 N" F
tasks:
) q R5 v* d+ j1 x9 v" N - name: download cephadm
; S9 x! q; p6 V% o& P+ T2 J get_url:
' {0 ^* O8 Z( S( u url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
( B$ i. M5 p% J5 Q0 r, U" d dest: /tmp/ceph/cephadm
" N+ ~9 L# ^9 [ force: yes
4 k. v) h l5 K6 G" R7 { mode: 755
0 M1 Q* ?8 N2 U$ f) |' Q timeout: 600
: Y! o7 z B/ Z- name: download cephadm and install7 H0 F4 x+ b- [4 T$ B% C; O
hosts: all
* u# D# w0 b; I0 i, [) h gather_facts: True D5 k8 I S. A, ^# v0 u4 s" W1 g
tasks:
2 Y3 M6 u- I$ m - name: mkdir workdir; a1 T6 l& h7 X) p- ^ H
file:& o0 N9 w$ U- [2 \: ^4 S
path: /tmp/ceph4 L x5 V" q4 Z( J
state: directory
# s9 m3 ~! P0 J( I - name: 分发cephadm安装文件, \4 S% c8 }; X. R) t: h& p+ J
copy:2 ^. E) N: s1 f
src: "{{ item.src }}"
" T; o% `: b( }4 Y5 y$ g dest: "{{ item.dest }}"
" h0 ?) c" o$ H# n3 u5 Y owner: root
% I/ N8 Y! v$ E: q) N2 A& d. K group: root+ r+ d3 h6 E/ \4 K' G
mode: "{{item.mode}}"' A* Q' e- f* C3 G- Q, F3 M9 `8 }
with_items:4 [* S8 n8 d- M: x: @6 ? D
- {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }
a* Q: L) B7 X$ r6 z5 ]5 } tags: cp-cephadm6 H1 x# `: W8 h9 H) w
- name: install python3
; b6 q8 |6 O: a; ^& z% n/ R g yum:
# ]( E* J& I2 n' J R5 z name:
" D$ B7 p: i* P6 E - python3
% W, n9 ]) |& E9 y, j# k - chrony
1 l1 X/ h6 W# k9 Z state: present3 i, n/ w5 Z2 g5 ^
- name: add systemd% W. A0 }& d0 _% n! y
systemd:
4 N: R& m8 I8 E- _3 q name: chronyd
3 k; y9 x+ [" i7 x state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
5 M/ K5 r4 ^, q enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
$ O, E x' m- H" x daemon_reload: yes #yes 重启systemd服务,让unit文件生效
4 X& U1 ^9 Y9 T1 P; c+ q6 i - name: add ceph release* p% ?# X6 U8 ]6 A- @8 C8 g
shell: /tmp/ceph/cephadm add-repo --release octopus8 C+ p8 ?- P' G
- name: install cephadm
6 Y q, K: u5 b& g4 t6 X shell: /tmp/ceph/cephadm install
: P% @! b; M% I! r! ]6 q - name: which cephadm$ L- [4 J1 Z7 q2 m. D F" _
shell: which cephadm
8 n/ O6 @( j( w3 }' T9 p5 u' S register: which_cephadm
5 a$ Q) Q& Y$ Y& c6 V tags: which-ceph
) Z1 `, V! `, E$ L4 ?: l - name: show
. S$ S/ \$ G% \6 S6 m$ E/ A- ` debug: var=which_cephadm verbosity=0 #check.stdout 显示出的信息会看的更清晰点) y E$ x" m' p
tags: show-result
" T0 x$ J }, ?# ]; V0 f; u8 u* \
6 U( M; P; _3 }9 m- [7 v* P执行ansible-playbook -v cephadm.yaml完成ceph的安装
5 m' W8 c T" V/ `
, X- G* H7 R [4 r* y引导集群" U, K j0 X# j( Y# C5 {. }
将master0作为引导主机,在其上面执行如下引导命令:
+ ^$ X! A5 X$ B, Y \+ Z# B- Nbash 体验AI代码助手 代码解读复制代码) G9 k; ]/ l3 [0 r
$ D u6 }7 I7 V+ Z. L[root@master0 ~]# mkdir -p /etc/ceph, w$ ?6 K& e) N5 x
[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161) v3 f$ t( a6 Z* i
Verifying podman|docker is present...
! ^4 J# T- Y" X# hVerifying lvm2 is present...
/ |0 c+ q; F5 {# r2 l! k9 }6 s7 nVerifying time synchronization is in place...
9 o% Y3 o! E- FUnit chronyd.service is enabled and running
) Q$ D0 x. m6 _. U- @+ zRepeating the final host check...$ z- N9 B3 [' [/ t/ V& D& j
podman|docker (/usr/bin/docker) is present
0 T$ P+ S; W$ X1 O$ g3 csystemctl is present9 V9 C! K( u8 i5 S7 L
lvcreate is present- [: V2 c' Z2 }* e$ r6 l
Unit chronyd.service is enabled and running
7 f& ]& C; \. h) w F; {. T8 F6 nHost looks OK
$ B2 l! M( X7 oCluster fsid: e3386564-bb02-11ec-af56-525400299ff7% h4 i! x) J2 Q" g
Verifying IP 172.70.10.161 port 3300 ...% Y) a) o' O' k8 E
Verifying IP 172.70.10.161 port 6789 ...; k' d, _: }0 a
Mon IP 172.70.10.161 is in CIDR network 172.70.10.0/24
p+ O8 r7 T( _ dPulling container image quay.io/ceph/ceph:v15...
/ v. z1 G! D6 [/ a1 ]2 FExtracting ceph user uid/gid from container image...( @2 A) P, T, G4 [
Creating initial keys...
8 q: w0 C+ ^( aCreating initial monmap...$ U% @1 `) Y. v1 w9 \& P, H0 B
Creating mon...$ f2 M! q& J# O1 e' w
Waiting for mon to start...
: Z5 B) a/ v7 WWaiting for mon...
* h: |' `9 J- y* U. Gmon is available
( m) q/ L+ w6 xAssimilating anything we can from ceph.conf...
' E) d O$ C( U0 A5 p" C8 EGenerating new minimal ceph.conf...
. n+ R* d' W T! w d7 lRestarting the monitor...
4 s. b, Y& F+ o& `! tSetting mon public_network...5 V, E; w3 X2 ~% N3 i( Q# C) f
Creating mgr...
3 ?& I4 M: L" S3 l% [; ^3 PVerifying port 9283 .... ^* A" u9 I K* X6 s
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
& E x$ K. v' ?4 \; o- b& x7 uWrote config to /etc/ceph/ceph.conf
+ L* z6 k, e9 LWaiting for mgr to start...& D# \. ]/ k( o" U! B, o
Waiting for mgr...
# a; K/ a7 N$ Z% H0 Lmgr not available, waiting (1/10)...
' c( y5 c8 A( Fmgr not available, waiting (2/10)...4 s" \$ T! i6 }1 _9 e. j1 p
mgr not available, waiting (3/10)..., e A- x% {' C! C
mgr is available
9 n/ `1 Z- x. ]! Q+ }Enabling cephadm module...& |2 D* C+ ?9 _! M# _; {; V4 Z
Waiting for the mgr to restart...
B6 R- Q, i( P) ]! MWaiting for Mgr epoch 5...
N( h) b% G! I5 U3 T) |2 jMgr epoch 5 is available
8 j) B% \2 e* u+ FSetting orchestrator backend to cephadm...1 C q: q6 q- v2 r" W5 y9 B A& s
Generating ssh key...5 r# s# ]9 c; M9 @3 u
Wrote public SSH key to to /etc/ceph/ceph.pub4 D- R2 E- }$ c; M+ B/ N; H8 |
Adding key to root@localhost's authorized_keys...
" P6 ^+ E6 h5 XAdding host master0...* W7 ^1 E" k7 g& l: d- B
Deploying mon service with default placement..., R# l9 e: U, W5 H" b& _8 o: U
Deploying mgr service with default placement...
/ {$ Y; _* O' I/ b W, [4 pDeploying crash service with default placement...
' T4 ^- S' X, t3 ]; Z4 MEnabling mgr prometheus module...
0 [& h2 m! s- T: |; }Deploying prometheus service with default placement...
( n U7 F; L2 {Deploying grafana service with default placement...& E% k$ h2 u( ^
Deploying node-exporter service with default placement...: R: N K, S3 t9 X1 ?( Y
Deploying alertmanager service with default placement...
4 t( v/ E& ?# ?- w% O- i( I# _Enabling the dashboard module...- {$ P& ` o; l- e* }
Waiting for the mgr to restart...6 A( v$ ^9 u8 h9 |/ M8 M7 Q
Waiting for Mgr epoch 13...
) O, a7 H" ]& f1 Z% O7 iMgr epoch 13 is available
& |2 N- [% @! pGenerating a dashboard self-signed certificate...: f9 J. s) n# J: O+ C1 [' i9 O
Creating initial admin user...) @; n, M9 \; o0 X) e7 _
Fetching dashboard port number...1 g- G$ ~( H. H6 \! i* {# s& N
Ceph Dashboard is now available at:/ z* L6 P1 r& ?, B
' s; [/ L0 N: p( D+ Q$ M" ~6 q
URL: https://master0:8443/- _5 X) I3 x/ F/ x7 a+ A1 q
User: admin& a$ j/ @" Y! n( v2 ]" T$ o8 P
Password: vym1bdeajd& @* L z: T3 O& f" ~/ V% @
$ R" f8 s$ B/ qYou can access the Ceph CLI with:
& G9 I# y6 c' N. D* h& [8 m2 a% y3 o5 i2 }1 {2 b
sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
, Y' {( E' h( M, `- t9 c4 p" J0 h+ H; E K9 Z$ ?3 P5 A
Please consider enabling telemetry to help improve Ceph:
' P1 T" U/ M6 |6 e2 u4 q8 p# m4 Q! [/ {$ O" v" X
ceph telemetry on9 b- T+ [9 ^ _5 V% u1 Y
" Y7 c# ^8 o+ Q8 ]* z, @
For more information see:0 ]5 V( X. k6 o$ e; ~$ `
; {8 v3 B- G! ~
https://docs.ceph.com/docs/master/mgr/telemetry/5 d6 U$ L7 m. a! s1 E$ n5 s4 W
7 {8 ?$ x8 K. i* q/ a% v7 s- bBootstrap complete.& \2 m7 e6 W: e- j
# o, z& N- F5 `
/ L3 r8 g) j9 G! ~1 }2 D在命令执行过程中,有如下提示:6 e! D+ s: o2 b( Y& E* F! i
bash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at : - o2 ]: c: q: K" t$ U8 }0 h9 d: m. H
URL: https://master0:8443/, s. E& h: X& Z# S# c/ [/ P
User: admin4 G7 `. f% \% S5 k9 w
Password: vymdeajd, v d0 D) X5 o; A! n* F+ Y
, ~5 t6 _ o O% [$ }按照提示,在浏览器上面可以访问:
8 U1 k: T7 X4 ?1 f$ ^( Q U; E1 R1 B: r1 V2 G% ?' Y3 s& Y
进入到管理页面后,如下:4 ~& N$ K1 ?. x
8 Y& o* ?) _# c参照安装文档,该命令将:' m0 n% V: M' w$ B6 n
在本地主机上为新集群创建一个监视器和管理器守护程序。
( w/ t2 |1 b' P) o. w+ `' _: Q. r: _" Z8 ?& d v- i, Y
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。. x7 ^" I9 l5 m1 \
将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.
9 s9 i- U, E! @& [; i
0 l9 Q) b. ]3 q* ~% [client.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.- i# i7 J4 K* n" p; G
将公钥的副本写入 /etc/ceph/ceph.pub.
( o! P2 L" x. j9 `( F7 P启用 CEPH CLI(必须)' [5 A+ @, W" y6 _: D
继续在引导机器上面执行如下命令,即可开启ceph shell client
# K4 }7 o' w/ \9 I! O注意:后面的ceph命令,均需在ceph shell环境下执行% Q- w* `: k8 n, B" @
bash 体验AI代码助手 代码解读复制代码
5 t( N6 b5 L- D# l- @
. Q% b/ u2 \# X' g0 y0 q! ^# c& |[root@master0 ~]# cephadm shell! S6 @6 Y4 W5 n4 a
Inferring fsid e3386564-bb02-11ec-af56-525400299ff7
# y ^5 f) e- X U7 A, [+ p/ gInferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config
" O8 r3 `) K$ @, b2 j- }' ]Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
) B$ F( U2 K' U ^/ j
) c' z5 Y" S3 b) |, y- X9 u[ceph: root@master0 /]# ceph -v
2 I+ D5 P% W# D, E+ Nceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)/ f( A7 J3 t! ?& n/ q0 Y& n" [3 V
/ d$ v5 M( M7 b2 S
8 g5 b% r( s4 c# l[ceph: root@master0 /]# ceph -s
3 {1 U+ G! t) {" E$ U6 A8 |% U# B cluster:$ Q, K, {- K2 O
id: e3386564-bb02-11ec-af56-525400299ff7 m' d+ e4 Z* a: Q+ U a
health: HEALTH_WARN
! ?$ d2 K, f' I2 u2 n OSD count 0 < osd_pool_default_size 3
0 N/ }4 p) M- c E4 g
' C+ `& R. T; _/ Z0 u services:
3 k% u6 s1 x, j) [ mon: 1 daemons, quorum master0 (age 48m)/ E+ e U% M. x {
mgr: master0.ojikws(active, since 47m); `/ Z6 e4 |, \( l& j6 R3 N) @& ]
osd: 0 osds: 0 up, 0 in/ {' Q7 A* W' P8 _
8 O/ ?; ^7 M( R6 C6 f" U/ H
data:( I& x, \. L) ?2 K
pools: 0 pools, 0 pgs4 W O- | x9 c) m" v
objects: 0 objects, 0 B
6 ~5 k% O: X6 C) ~% D3 X- e4 o usage: 0 B used, 0 B / 0 B avail0 v5 C1 [7 _( k
pgs:
4 r4 [2 h# `! T+ a# D) I
# i* u, |" ?. F J将主机添加到集群5 v V9 e7 l( T& u
# E" n; O6 ~& W3 R E在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥7 Z" {% Y* g2 q3 b4 W
, w& I! F" |0 B
bash 体验AI代码助手 代码解读复制代码2 I8 q9 x# d! n3 F, W
" E! u+ Z) Q- l8 `) Y9 y[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master1
0 y1 ?3 k5 M, }% w8 I2 j J6 T5 I/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub". J% y0 S' I# b5 x. L! @5 t
The authenticity of host 'master1 (12.70.10.162)' can't be established.
& \1 X) S/ f0 ~5 r" q- e, l( qECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
, c: M0 Z3 o7 K8 Q3 ?" h& E' d1 y& E/ V0 CECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.. o# |( t, n+ }8 `4 R
Are you sure you want to continue connecting (yes/no)? yes
" q% _- ~. c3 @ f/ O4 yroot@master1's password:! i2 f1 f0 b$ v( Y2 \
; \( B3 T, l# l3 p- x7 d
Number of key(s) added: 1) V7 F$ a) n' v8 V/ n& p: z7 U
) u! h. Y9 A1 x# c X _Now try logging into the machine, with: "ssh 'root@master1'": d" {% X" p) C+ d
and check to make sure that only the key(s) you wanted were added.
$ \9 {' B( l" _- J& M' o T
9 @. e- J' I+ |[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2
# }$ J1 s# S# N) o m' b' L/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
: }% h8 y/ d+ q( LThe authenticity of host 'master2 (12.70.10.163)' can't be established.# f$ m' P; H4 F0 b0 U
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc./ e! ^& Y' ?' `0 b0 t) y; D
ECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c., n6 f$ p8 ~8 W0 e5 ^
Are you sure you want to continue connecting (yes/no)? yes6 v+ }8 @6 ?+ S) f
root@master2's password:
2 Y5 z4 X% h/ v+ H' L! V
3 p3 I d5 p L" d) Q* JNumber of key(s) added: 1+ u& H; Y! o0 K, |$ p/ N7 b
8 Y. \* p* B4 q$ I! r
Now try logging into the machine, with: "ssh 'root@master2'"' d% N% N8 ~+ J* x5 b+ c6 j
and check to make sure that only the key(s) you wanted were added.) b4 w' m6 w R' n4 h
# X/ I+ g( U; X2 H这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了) x x1 ]0 d2 }7 Q- U W. N3 v
添加机器到集群:
9 E- g- {" ~ H. P2 H' C# J. k( nbash 体验AI代码助手 代码解读复制代码
7 R, q" v% }$ N9 V$ d4 ~; h/ _! I5 L( P8 t2 ?0 i; k- s1 I- M/ U
[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.1625 }! b* ^* s+ d0 f& k& `# L4 d
Added host 'ceph2'
5 d! s4 t. P( @, z( c1 D% B$ |. e7 V[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.163/ d6 }: e5 X/ o$ x
Added host 'ceph3'
; D7 F1 d& m0 ^- U3 {[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164
8 J. L A( _0 M( R* i( m& \% ^Added host 'ceph4', ]. \+ |( A: @1 m9 K$ P
[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165* E) _. \! W+ P9 Y* F& t- ~3 y# h, X
Added host 'ceph5'
( s4 v7 w' I; ?( m8 O$ n8 k+ r[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166( M. B# Y; q! K. y$ ^
Added host 'ceph6', a7 z8 Q% H5 T/ S! Y, S4 Q! A- n
4 B! b, o" n& t/ k
+ o# N* W3 Q& x5 J" `) I9 g添加多个监控器9 {* a' v+ }+ h0 k8 B* ]% _
配置监视器子网:
3 o7 O" z( o6 n( d J+ F- r: |bash 体验AI代码助手 代码解读复制代码
: ]2 r8 M$ d- D3 v' S8 l9 r7 C$ _1 H[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24) P# a- _8 E0 g. @7 ?
[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
3 h2 @) h4 P2 q
$ E; d% u* j$ B# D# t' U##要启动三台监视器,需要调整监视器数量:" L, [; `7 Q9 b) O
[ceph: root@master0 /]# ceph orch apply mon 3 , ^- \0 P6 z+ E- U0 C* f
Scheduled mon update...% s: w$ ]: t& b8 P- U9 ^
7 Y/ ~+ N4 v6 k# z
按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序6 G8 F3 O. S# A3 B( f, R
在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。, _8 o( J) a1 x7 |6 y) L! U: S
bash 体验AI代码助手 代码解读复制代码# |" _* Z: ^! M, k! c
& Z! z8 r. K" u$ \1 }[ceph: root@master0 /]# ceph orch apply mon master0,master1,master2 s. b" |# N+ g- i- O9 x9 ]' T
Scheduled mon update...
) [; V* W7 U |/ P. X5 o. Q##加标签5 f" a+ R. ~% R
[ceph: root@master0 /]# ceph orch host label add master0 mon9 \2 s9 J# o% k g7 B) o
Added label mon to host master0, K2 b" Z! S; j- e; U( x6 X
[ceph: root@master0 /]# ceph orch host label add master1 mon
" E% Q+ o$ H, i9 l) }6 K+ hAdded label mon to host master1
" N) v0 d. L4 t, I, B1 O* k# C) \[ceph: root@master0 /]# ceph orch host label add master2 mon3 U3 o! Y- g, {( y1 F
Added label mon to host master2: H9 A3 @& s9 X( A8 ?/ [
}4 q4 U- w7 g) S/ y" d" |8 J
[ceph: root@master0 /]# ceph orch host ls/ U/ Z" I( l+ v2 ]$ c$ S1 N
HOST ADDR LABELS STATUS$ `* h A& `+ I/ p$ P
master0 master0 mon1 @4 q7 B4 u6 o; e$ |2 `3 D7 u
master1 master1 mon2 Z- X2 _* v% w( Q% Q
master2 master2 mon+ B$ A9 d/ K$ i: v5 k ?8 r
7 O; {5 y& N% ?4 N
[ceph: root@master0 /]# ceph -s- Q4 K2 f0 B4 J5 X% N! k4 ~; z
cluster:
$ x1 }5 s2 z, J8 P0 O" g id: e3386564-bb02-11ec-af56-525400299ff73 @9 x3 N" ]0 X9 R' S
health: HEALTH_WARN
5 ~' t; C+ Q' S OSD count 0 < osd_pool_default_size 3& A% w, s, D0 }; H, V
0 z) r) y2 `3 @! S services:+ L( I; A4 F/ |3 N6 x U3 u
mon: 3 daemons, quorum master0,master1,master2 (age 88s)$ L m6 m9 e7 o" r
mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld
' g/ Y" v& q( b+ K- }3 Q! T osd: 0 osds: 0 up, 0 in1 y6 W; ^2 v" N: K+ H
3 a4 d$ p; a5 i5 H/ H7 Y7 g2 ~ data: ^! m" n. H, g' U8 ]6 g
pools: 0 pools, 0 pgs
) C( H- e& L4 U objects: 0 objects, 0 B# H1 ?( x/ J- U5 S
usage: 0 B used, 0 B / 0 B avail
, |! _1 Q( e, h- V" } pgs:4 Y8 U& @- t* p8 v; e) i d1 [0 u) J
* {! Q% j. h1 D加入ODS) d& b' c. |4 ~) R
可以看到集群三台机器上面,一共挂载了6块磁盘:
* ~# e. `0 k& w9 n2 D3 o8 t9 Qbash 体验AI代码助手 代码解读复制代码7 c J8 m8 S8 m1 v" e6 ~2 V4 H
$ k6 a% a, I3 l {; _[ceph: root@master0 /]# ceph orch device ls, _; w* s, E% o% U2 @* f3 } E o
Hostname Path Type Serial Size Health Ident Fault Available5 j9 g7 ~1 z" v* C2 R, Q: u
master0 /dev/vdb hdd 536G Unknown N/A N/A Yes
+ f. Z0 \- n! Mmaster0 /dev/vdc hdd 536G Unknown N/A N/A Yes- Y& M; u' n! a, z5 _' D9 v
master1 /dev/vdb hdd 536G Unknown N/A N/A Yes
( n& E; O' U3 V& omaster1 /dev/vdc hdd 536G Unknown N/A N/A Yes
5 h/ i6 m, Z7 Bmaster2 /dev/vdb hdd 536G Unknown N/A N/A Yes3 z( {* Y" [: x
master2 /dev/vdc hdd 536G Unknown N/A N/A Yes
6 U; Y; U; M. _. _6 J, u3 ?( Y, y ^4 i
当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):
7 o/ @2 S, s- t [6 U0 Tbash 体验AI代码助手 代码解读复制代码
2 O- D/ c; p& z6 x3 C( o0 ] V( A- d& Z) M3 X
[ceph: root@master0 /]# lsblk4 |/ j3 @- S; }: |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
$ P7 p# U( ]3 S3 l8 f7 ^# f7 Asr0 11:0 1 1024M 0 rom
, D0 X; b. k8 Kvda 252:0 0 500G 0 disk
1 y3 C5 `, j8 }) A- U, E; S|-vda1 252:1 0 1G 0 part /rootfs/boot& e& {, B2 f/ e% [# b8 C" c
`-vda2 252:2 0 499G 0 part( m* w: H) I$ W1 v/ j
|-centos-root 253:0 0 50G 0 lvm /rootfs' C4 ?5 f4 g8 {% y m- }6 B, G
|-centos-swap 253:1 0 7.9G 0 lvm
7 u) \" f& [+ T `-centos-home 253:2 0 441.1G 0 lvm /rootfs/home
5 s, L6 H( z W; Y. ~9 ` }) `" pvdb 252:16 0 500G 0 disk3 O' m9 @/ L; _ K, C) t/ x7 c \* R J
vdc 252:32 0 500G 0 disk9 b* _8 J4 i' [! G) o' _: t
0 x* `7 ?: w$ ~- a' M" w! f按照官网说法:设备满足/ R+ W( J7 ` i$ i V
如果满足以下所有条件,则认为存储设备可用:
! i+ c5 R G A0 O/ x
1 }' s V" M/ G$ r5 M" U设备不能有分区。, S4 D) o; a1 Z0 Z) y
设备不得具有任何 LVM 状态。
( O1 w0 n" k" ]" ]不得安装该设备。! o- @0 P4 o* W( k0 t6 u" _
设备不得包含文件系统。
8 o# e# y& k) B6 ]4 F& S设备不得包含 Ceph BlueStore OSD。7 I( ~3 L9 b4 ~) s d! _" i5 `
设备必须大于 5 GB。
5 l0 f0 A- d4 L- k& L: `; v# y! e1 O9 N( y0 X
Ceph将 拒绝在不可用的设备上配置 OSD
1 L2 S. B% x- p" m- G) I1 @可以使用如下命令,将所有可用的磁盘添加到ceph集群中:
4 G& D% s/ w) ?3 N2 S7 R" b! Gbash 体验AI代码助手 代码解读复制代码
+ W. N" E) Y6 w a# c, c
1 o7 i: ^9 X+ Z/ _; U2 C[ceph: root@master0 /]# ceph orch apply osd --all-available-devices
3 J( Z. \5 h% @9 y. AScheduled osd.all-available-devices update...! l/ G& k( m4 J0 d K* {, s9 z% o
[ceph: root@master0 /]# ceph -s
# C! q1 n3 f7 r, o6 L cluster:
0 I1 P1 o, O3 ?) n* W J9 u$ A id: e3386564-bb02-11ec-af56-525400299ff71 u& D: D7 X, l- b% Q& o
health: HEALTH_OK
0 o' ~2 R. E7 G9 I7 ]. G4 w# w! V8 W) c
services:
5 G8 g5 h; M6 k. m% M mon: 3 daemons, quorum master0,master1,master2 (age 12m)- F% Y" O* {% Z& `& ^1 b
mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld# s) p+ r+ ]2 R3 W, l# j' P% ]
osd: 6 osds: 6 up (since 22s), 6 in (since 22s)
/ y- S. B: c+ d+ I5 |! R; E8 g1 d! Z% S9 u, n. [' l
data:
$ i0 F0 \' N5 @* `4 T8 D) V( U7 L pools: 1 pools, 1 pgs
( K; _* j% o. C; f objects: 0 objects, 0 B, F5 l5 L! U p# d3 [6 m
usage: 6.0 GiB used, 2.9 TiB / 2.9 TiB avail
* A. w% |5 u% y4 x( h! N! B. t pgs: 1 active+clean
9 c) a w8 Y1 ~ G+ @
7 O$ D h% O- }也可以单独加入:
$ J9 n l. n5 I+ q# jbash 体验AI代码助手 代码解读复制代码9 @0 c* ~7 o L. n* M
2 ^" [4 Z ~" {# [! E6 {1 g: d6 n[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb
3 C8 ?, W. |4 D9 W, S8 K( i' I[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc$ S7 P; `* m# d; q! j4 _
[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb4 }. a3 v! Q3 _* C
[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc
& q8 E4 m# S6 u& q[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb+ Y" D7 c7 m/ |+ u8 N/ _
[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc% w& X3 J H. f- [) a' N
3 R. Q# b3 \! {7 M- ~$ c
在前端看到:! a5 B, k' ^' i4 t" I3 B0 V
' u( Q/ K) a2 m. r
" t$ d+ c" B( I C6 Z5 @挂载块设备+ {7 \% I S9 m6 G- Y# G: r2 C6 C ], }
bash 体验AI代码助手 代码解读复制代码: R1 m8 D* x* e& B5 c9 H
" \ o7 V" G7 S/ ~7 z) k[root@ceph101 tmp]# ceph osd pool create test_rbd 32
% S0 a. ], L2 Y7 J m! Q" G% @pool 'test_rbd' created) u& L5 D" ]5 J! @1 D1 ^
[root@ceph101 tmp]# ceph df% _* z; F1 R2 P" r, T& Y3 W- _$ C
--- RAW STORAGE ---
6 v. X; o n/ D' o) J+ ~( Z: RCLASS SIZE AVAIL USED RAW USED %RAW USED( |2 [4 s# x( h! [) s0 J7 T
hdd 5.9 TiB 5.8 TiB 1.1 GiB 13 GiB 0.22( L+ R* `9 L- j& P
TOTAL 5.9 TiB 5.8 TiB 1.1 GiB 13 GiB 0.22
; c; @. x; d+ k$ Y
. n9 i7 i0 P5 B4 q--- POOLS ---
* p9 ]1 V4 X" D9 uPOOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
$ P1 K- ~8 {6 L. q1 {device_health_metrics 1 1 0 B 0 0 B 0 1.9 TiB
( a8 M) U$ R8 e: ?$ f.rgw.root 24 32 22 KiB 36 6.6 MiB 0 1.9 TiB
! t! N- h0 ?: _7 d. Szone_01.rgw.log 31 32 26 KiB 965 55 MiB 0 1.9 TiB# r/ g. d! u) a; ]
zone_01.rgw.control 32 32 0 B 8 0 B 0 1.9 TiB3 X; x2 V" m7 q: j7 o5 H
zone_01.rgw.meta 33 8 5.5 KiB 16 2.6 MiB 0 1.9 TiB
, Q9 p& G: u* h; s4 q. `zone_01.rgw.buckets.index 34 8 672 KiB 55 2.0 MiB 0 1.9 TiB
: N' D- Y( B$ a2 h4 q7 Z4 t- Qzone_01.rgw.buckets.data 35 32 2.2 MiB 12 7.9 MiB 0 1.9 TiB
) U$ E$ w8 r" k! szone_01.rgw.otp 36 32 0 B 0 0 B 0 1.9 TiB' y/ u$ b* {' e7 H
cp_pool 42 32 1.4 MiB 2 4.4 MiB 0 1.9 TiB4 O- M: C% I6 Y* D- l! ?
test_rbd 43 32 0 B 0 0 B 0 1.9 TiB9 ^& d" X3 Q7 z$ B8 h8 i5 R
##创建镜像) D. n. @4 h9 _
5 H) Q2 J- |# X/ z4 p1 K[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd4 f a* n& S' U0 `) z$ u9 G
0 C$ H' s% ^# X: m( A# U( z[root@ceph101 tmp]# rbd -p test_rbd ls# q6 K2 D5 |% ~8 S( b/ y! r0 a
test_rbd_image_1
5 u2 I$ K& S- s* f8 W5 |; A7 z X" r+ x0 s: n
##检看一个RBD镜像的详细信息
1 ^1 O/ e8 Z/ m7 K[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd: _. t/ _# s+ U6 t$ o9 U/ P2 j; y
rbd image 'test_rbd_image_1':
3 O; B* B3 ^: C! t) r+ A; Q size 10 GiB in 2560 objects% l9 k! ^+ X) s( h* A
order 22 (4 MiB objects)
# ^( [. |) @# c snapshot_count: 07 K9 e2 v2 E0 e3 j Z4 v/ f$ T
id: 2836b2f53ea86, ?3 j* j! r3 l5 ^% Y; F4 g
block_name_prefix: rbd_data.2836b2f53ea86* [- C. F, S) F. u
format: 2) e; | A9 M. s1 N9 c3 q: t. {
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling
6 u# i/ f2 h! y Y8 c# @6 k op_features:& U$ A7 F- t( Q3 J8 w4 {
flags:( j- R" S2 F; X& m" v
create_timestamp: Tue May 10 10:38:16 20221 V, h$ P6 z- r# V$ u
access_timestamp: Tue May 10 10:38:16 2022
9 ^- B0 a+ w; x modify_timestamp: Tue May 10 10:38:16 20224 B# Y4 A' @# ]4 x- f' f" |% p
journal: 2836b2f53ea86- V$ e3 {" J! ^6 K g
mirroring state: disabled. n4 [7 B) J5 D- |
8 U" e5 A* R; t# m) q7 I
5 U/ z5 D5 z3 P% f0 d& ?[root@ceph101 tmp]# rbd pool stats -p test_rbd
: p' y" c7 c0 W/ {& i0 oTotal Images: 1# p% W/ B; ^4 B3 a c
Total Snapshots: 0
3 W# d' A- H, ^& m" m: ]. SProvisioned Size: 10 GiB: Z; I4 F8 h8 _3 H F3 O
[root@ceph101 tmp]# rbd showmapped
! I* ]" m: u( ^6 O. h' Cid pool namespace image snap device
( I$ n9 H/ u7 F$ `0 cp_pool image2 - /dev/rbd0
9 T, V4 q, W# C, G, a- i$ [2 w, p9 l: I. g& [+ F
[root@ceph101 test_rbd]# umount -f /dev/rbd0" }; s8 L5 Z9 G% q/ ~2 A
#或者
/ r( g' f& y/ X& q8 h
) O8 {! ~& g4 _1 m- \[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd0
: j7 U: {1 B7 {1 Z6 ]##然后将pool关联应用
6 U0 Y) S1 j* O& g# w
8 {3 p( M. h. K* K7 v9 l[root@ceph101 ~]# ceph osd pool application enable test_rbd rbd+ [3 \6 b2 }* o7 x! c0 @9 u# \
enabled application 'rbd' on pool 'test_rbd'
3 A* v; W8 G W( }8 @% |9 Y[root@ceph101 ~]# rbd map test_rbd/test_rbd_image_18 M4 H3 M! H+ @
rbd: sysfs write failed
" W; i. x6 r D) f4 [9 K+ [1 RRBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling"., F: j5 |2 _& U" n5 x" Z
In some cases useful info is found in syslog - try "dmesg | tail".
; \- x; Y/ v/ t. B [% \rbd: map failed: (6) No such device or address
1 g0 J0 j3 F7 \: v
! O& Q9 d. J% Y" X( G[root@ceph101 ~]# uname -r
% [" g$ S6 H- ?4 W/ P( X8 D9 b5.17.6-1.el7.elrepo.x86_64
) G/ F/ U! H3 ^+ i: n# u- U[root@ceph101 ~]# dmesg | tail' U6 D. q6 K8 p6 I
[ 9.843030] random: crng init done
) w; u" {7 Q' F0 F1 a9 w3 h; k[ 9.843034] random: 7 urandom warning(s) missed due to ratelimiting
! N' r9 K3 f. m) z5 y+ R[ 10.669178] Bridge firewalling registered* F- N; e. l# X& J' w; R/ N8 R
[ 22.239147] process '/bin/ip' started with executable stack
* X2 k/ s9 v8 g# a+ B0 p6 {* L" l/ z[ 8185.140070] Key type ceph registered/ I" w J) T* `% l
[ 8185.140395] libceph: loaded (mon/osd proto 15/24)
' p+ e. `6 X1 \$ f[ 8185.141923] rbd: loaded (major 251)
5 j# P. R1 j7 D# m6 {[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established
6 i0 o) n1 |) l# l[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f8 Y X- q9 g# k9 M
[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40 + `" I1 G4 ^( d* {) z8 ~6 h5 F
##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling
4 Z& v; w; P& ~: `#layering: 支持分层**(0次方)**1 _+ ~+ z& g3 b0 t
#striping: 支持条带化 v2 **(1次方)**% L6 O! l8 D4 }8 a
#exclusive-lock: 支持独占锁 **(2次方)**9 _0 k0 a u% {
#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**3 x; G8 P0 I1 I+ c; V
#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**. E O" K1 r5 S2 H" ~0 B
#deep-flatten: 支持快照扁平化操作**(5次方)**7 ]9 |" J/ r/ j4 k3 L# G+ p% {
#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
2 O% {0 r2 O3 J4 k% f+ b6 E[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling, l* ?/ S" Y) c+ ~
[root@ceph101 ~]# rbd map test_rbd/test_rbd_image_1
, z2 W) f5 t' E, H$ h" b/dev/rbd0
/ V7 [: O& O! Q- X) q! E( C8 S( @#lsblk 查看磁盘3 z5 Z; L8 Z6 [ I# j% b
/ K: F B; Z6 F
[root@ceph101 test_rbd]# rbd showmapped# h8 e( _0 W7 t8 A0 C, a- ~; ]
id pool namespace image snap device$ K, ]8 t3 A+ B# z4 J" ^$ v v
0 test_rbd test_rbd_image_1 - /dev/rbd01 L5 x. ]5 L, r/ ~
[root@ceph101 ~]# lsblk
1 L2 s" Q3 S- KNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
2 R7 s- E Z# W7 l# X' o$ {rbd0 251:0 0 10G 0 disk* n$ m' h5 t/ o2 ? k
vdb 252:16 0 500G 0 disk/ k7 S- x3 t1 X. j' Y5 z# _
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4 0 500G 0 lvm. b' } O* ~2 o% D& e
sr0 11:0 1 1024M 0 rom* p: t" t8 l) L
vdc 252:32 0 500G 0 disk
$ @" F. k" c4 O└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3 0 500G 0 lvm
3 o2 E4 J" s0 T- h$ v6 X2 Mvda 252:0 0 500G 0 disk4 R" _/ [2 L+ D; _1 n
├─vda2 252:2 0 499G 0 part$ Y7 j4 r1 b% z
│ ├─centos-swap 253:1 0 7.9G 0 lvm8 P1 ?+ W+ x% M$ r6 E+ [8 y; x
│ ├─centos-home 253:2 0 441.1G 0 lvm /home
' h( l! A2 L* N6 D% E) B│ └─centos-root 253:0 0 50G 0 lvm /
7 V+ N; Z/ w9 s& m" X/ a2 J" k└─vda1 252:1 0 1G 0 part /boot/ R2 T. e, c" H+ T. c0 K& o
9 N: L; e7 i5 c) j3 c( w
, A3 ]5 G2 N5 R+ D# 格式化磁盘
0 S! c, Y8 N# Z1 M5 K7 J! s
, z1 s( w q* F: v[root@ceph101 ~]# mkfs.ext4 /dev/rbd0
8 T8 e# S1 B. gmke2fs 1.42.9 (28-Dec-2013)5 i' {6 J2 F5 v* R- S g
Discarding device blocks: 完成
4 {! Y4 q0 p# K文件系统标签=
3 t3 a0 D5 I4 L N) K( kOS type: Linux5 S# |0 V3 @ @8 C8 w
块大小=4096 (log=2)
% F9 n3 P& b' b5 c分块大小=4096 (log=2)0 o. ?! X) W! {! ^0 @4 Y
Stride=16 blocks, Stripe width=16 blocks3 E) j$ D5 |. O* l
655360 inodes, 2621440 blocks
5 T6 N5 b0 U p `$ y$ ]131072 blocks (5.00%) reserved for the super user5 y7 m5 }/ f0 f5 Y) R
第一个数据块=0$ V4 M4 u$ _4 r H$ B- z/ n
Maximum filesystem blocks=2151677952
% i5 C+ R7 F7 p; L+ e1 [80 block groups
& X0 W. i6 R: I) o6 N5 @: M32768 blocks per group, 32768 fragments per group
5 d( `& b$ b/ q6 Z o8192 inodes per group0 U8 Y `' L1 a
Superblock backups stored on blocks:
( l5 C% s F8 A9 @+ a6 {" B 32768, 98304, 163840, 229376, 294912, 819200, 884736, 16056323 ]+ t, @0 e7 H" B& n
* y1 L9 q$ m0 AAllocating group tables: 完成0 @7 ]2 m1 n1 P3 v
正在写入inode表: 完成, V& w9 }2 \ u) s/ K6 q# ^) j
Creating journal (32768 blocks): 完成) P3 o6 e* H( h$ @
Writing superblocks and filesystem accounting information:
- G* i) E2 t2 b4 |, w" G完成
* p% ]3 C0 R3 b# ^( L$ L4 j4 C* h5 b
##创建挂载目录
" S" Q0 c5 [0 a2 B[root@ceph101 ~]# mkdir test_rbd/2 L2 ~) I d$ b+ [5 A/ z
#挂载# D. w9 d/ B% v5 L4 e3 v
[root@ceph101 ~]# mount /dev/rbd0 /root/test_rbd8 M1 O6 s$ O3 ^8 H5 s" B3 ?
[root@ceph101 ~]# lsblk/ W. X4 y& r- e% d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
2 T( g: r E4 [' T# \* Orbd0 251:0 0 10G 0 disk /root/test_rbd
- D, P4 [: g; U6 w2 Ovdb 252:16 0 500G 0 disk8 _9 M! z- o$ v
└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4 0 500G 0 lvm
, i4 e, T$ l: ?0 ~6 G! ?+ O0 w# Lsr0 11:0 1 1024M 0 rom
6 V' r! H4 _ I' E- vvdc 252:32 0 500G 0 disk
3 a' S& o6 q' P/ M$ @└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3 0 500G 0 lvm
2 A$ J) B3 o+ k" d) Dvda 252:0 0 500G 0 disk) {4 u5 {/ f. | z+ y
├─vda2 252:2 0 499G 0 part
, L" K& u) E+ C; D0 B- u9 {( h q│ ├─centos-swap 253:1 0 7.9G 0 lvm! A# B( |( I9 h
│ ├─centos-home 253:2 0 441.1G 0 lvm /home
7 ~$ |* s& v( S- k' |│ └─centos-root 253:0 0 50G 0 lvm /: z# T5 N9 x1 t/ @
└─vda1 252:1 0 1G 0 part /boot: f. o4 e; R1 ?& d! a, u' _. B$ M
- {8 s$ }4 Z: A: T6 E/ v) ~1 }
#写入小说文档到挂载的目录( N2 |4 Y& B/ |4 p1 V- w
[root@ceph101 ~]# mv bcsj.txt test_rbd/
( X" t+ x1 \4 m/ W0 ][root@ceph101 ~]# md5sum test_rbd/bcsj.txt2 R5 @0 P$ t) n8 x8 h
0d615ccd0e1c55f62002134f5cac81cc test_rbd/bcsj.txt
: z0 N9 e4 k' n7 K- O) p- q, r[root@ceph101 ~]# df -lh! P6 r4 w3 \9 {; D2 ]/ |. J
文件系统 容量 已用 可用 已用% 挂载点/ a$ t4 l1 A5 n) u3 r& @
/dev/rbd0 9.7G 15M 9.2G 1% /root/test_rbd
( | B6 A1 n9 j6 k) i' p
* f4 A# v- @# x$ r; i( I# @) \& b[root@ceph101 ~]# ceph df8 I5 o% F8 j7 T& U& B/ C2 E
--- RAW STORAGE ---0 E& T; u9 W* T" Z9 C! `
CLASS SIZE AVAIL USED RAW USED %RAW USED
& ~+ Y* e+ o5 R7 L. Chdd 5.9 TiB 5.8 TiB 1.5 GiB 14 GiB 0.23
. w1 M. _! ?! j W( A# Z# ~: zTOTAL 5.9 TiB 5.8 TiB 1.5 GiB 14 GiB 0.23
1 Y7 d+ y2 ~) |, n
1 T. w) E1 q8 [# r5 s. }& A--- POOLS ---
0 V! @5 S8 ^3 T' T; Q% OPOOL ID PGS STORED OBJECTS USED %USED MAX AVAIL: w; x! k/ v3 i2 }! u& I# r
device_health_metrics 1 1 0 B 0 0 B 0 1.9 TiB# x: a! d$ T! M$ T* }
.rgw.root 24 32 22 KiB 36 6.6 MiB 0 1.9 TiB" U$ x) s6 J1 N6 \: z5 j' D7 s
zone_01.rgw.log 31 32 26 KiB 965 55 MiB 0 1.9 TiB
3 f; V& S; p/ t) ]3 N0 [8 pzone_01.rgw.control 32 32 0 B 8 0 B 0 1.9 TiB
) J; M' G8 u+ }zone_01.rgw.meta 33 8 5.5 KiB 16 2.6 MiB 0 1.9 TiB
: o; Z3 h1 J. N+ E: _) O+ |' gzone_01.rgw.buckets.index 34 8 672 KiB 55 2.0 MiB 0 1.9 TiB
: {# ^- C0 B- z. m4 _zone_01.rgw.buckets.data 35 32 2.2 MiB 12 7.9 MiB 0 1.9 TiB$ A8 q$ x; v$ S
zone_01.rgw.otp 36 32 0 B 0 0 B 0 1.9 TiB4 d& e5 F6 j' I! p) m
cp_pool 42 32 2.2 MiB 2 7.0 MiB 0 1.9 TiB
5 O- ?: r3 V) m* Ftest_rbd 43 32 148 MiB 57 446 MiB 0 1.9 TiB
1 K# s6 C4 Y3 f$ D5 _# A
# u+ {. z9 i' _) U& P" A5 L4 f7 x1 W4 T2 ?+ r+ e" h
对象网关
# w' ?# i6 [; t: q2 V9 T- X& Ybash 体验AI代码助手 代码解读复制代码; Y, K R, y1 z/ A
6 V: ?6 h) o3 ?7 p- A) dyum install ceph-radosgw -y
7 M. }0 ~1 v: g3 M3 ?7 N2 y: Y
- b5 B* G k* N A5 J[ceph: root@ceph1 ceph]# radosgw-admin user create --uid='s3_admin' --display-name='s3_rgw_admin' --access-key='s3_rgw_admin_access_key' --secret-key='s3_rgw_admin_secret_key'. J' M# Z% e3 \6 I
{- F0 m Q6 V0 E7 I/ {: Q, n
"user_id": "s3_admin",) c2 J( c I2 b* h. E
"display_name": "s3_rgw_admin",
- P( D& U1 b( R: g+ V; K6 \$ y# s "email": "",0 `9 q# _0 g/ r5 a; ?% Q
"suspended": 0,' v C0 o$ o) `; W7 H/ Q
"max_buckets": 1000,
+ X& c" w3 W3 Q* H/ |0 e, A5 O "subusers": [],! }, W, f' ^2 p* O8 T
"keys": [
6 H, `0 B9 v* I {9 }1 L( J% c# ]2 Q+ T) B( D
"user": "s3_admin",
! d, U- ]8 \; z$ g4 ?. X "access_key": "s3_rgw_admin_access_key",; V v: _ d' N
"secret_key": "s3_rgw_admin_secret_key"( _0 V# I2 [/ ?7 J- K
}! L: D0 Z! K. G
],9 L( B+ O* z* u) m1 I5 o
"swift_keys": [],
; D: R) m- O! j7 Y7 [ "caps": []," `# H- c: K% ~( @. C' P; P( X, [0 O2 [
"op_mask": "read, write, delete", G/ ^- d& o0 [6 h1 X) b V+ Y
"default_placement": "",
. U4 ?* D4 I7 i* F8 v3 Q( ^8 N "default_storage_class": ""," V2 e6 q' s3 [2 x* ? f; N3 C
"placement_tags": [],
/ _! D4 S7 m; I: o$ Y6 E "bucket_quota": {( S0 @+ L0 |7 S; i Y
"enabled": false," E7 U: N: e% Z1 C1 l9 R V. a
"check_on_raw": false,
7 P. a% t& g; m- ? "max_size": -1,
8 C9 H0 M9 K% E" A/ w* S- B0 q "max_size_kb": 0,
9 C3 D" _% Q, S4 O' F+ ]3 B "max_objects": -1! E5 ^6 l7 o$ A
},: ^- _. m7 S" a# R
"user_quota": {
1 X) |; ~+ e2 N7 E: { "enabled": false,
6 {* s% F) [# [ "check_on_raw": false,
+ P9 B a: w& ` "max_size": -1,# K! I1 y$ y6 @1 m% W
"max_size_kb": 0,, l+ }4 G7 r) R) [. e
"max_objects": -1
$ u. K" H& A( \ },$ e4 V) \2 q8 @6 @) h
"temp_url_keys": [],
- W" e$ s" x4 F "type": "rgw",8 T/ Y+ V, u2 Y# @: O
"mfa_ids": []
8 z" ` o1 q7 F3 [/ D% D}
! B& C. k4 x3 T& a3 ?* g$ z1 o+ r: M
[ceph: root@ceph1 ceph]#+ ?9 B/ k3 |) t
[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'2 {. I8 u# H6 s) B+ ]/ y
{
& [! o8 K/ X- ]$ _4 F- b3 } "user_id": "s3_admin",! z% f8 H+ b7 m: P4 b
"display_name": "s3_rgw_admin", o- B/ X: s2 q
"email": "",' b! \8 K4 R' F# ?
"suspended": 0,
7 w$ Y7 _' \, @7 |. c6 \ "max_buckets": 1000,
/ s$ ~9 h) ~' x4 P, J: ? "subusers": [],* \5 Y9 e+ c$ }) `9 R( }
"keys": [
1 v8 o# z1 M2 s* B& J! l3 Q {
( L" [6 Q8 n+ ? "user": "s3_admin",
/ A, U0 K+ r( H* V4 {% ~6 K+ Q T "access_key": "s3_rgw_admin_access_key",
4 w: f0 u0 t7 `& _ "secret_key": "s3_rgw_admin_secret_key"
+ t1 S. i+ l+ Q1 V6 R0 b }
5 g) E3 A, N; N; i$ L ],
$ p7 l: D6 s& L- j "swift_keys": [],2 x7 p8 x) {, x( b
"caps": [],: M V2 Q/ M9 N% I7 ^5 t
"op_mask": "read, write, delete",
4 C! u1 r7 F- B "default_placement": "",
" \% S) q, B) D# T0 N9 k "default_storage_class": "",
0 q# ~+ |( D) R; s, B. J% x "placement_tags": [],
$ r8 c/ {$ [' F: | T) B# j' O "bucket_quota": { q1 q5 @& f. n2 P" I. T
"enabled": false,
) z/ I/ r% E1 i$ k/ n) K D "check_on_raw": false,
3 f5 R7 Y# P: {+ X r "max_size": -1,
0 G5 T0 m: n) Z: O4 v& b, e "max_size_kb": 0,
5 I* G/ h( T- m, Y+ c' H( l8 ? "max_objects": -1! O1 a7 R8 } e+ R) j3 }& \- o5 H
},
$ M* a( M' A/ q0 c( Y. G# D "user_quota": {
. L9 _5 ~" z+ C, ? "enabled": false,
, x' r( y# a# ?7 N "check_on_raw": false,
/ C& d# A- U2 U" u: R. l "max_size": -1,
a. u# ?, r# P. V0 Q! g! M' f "max_size_kb": 0,# r$ _6 W+ @; `7 H
"max_objects": -1! |9 y' |, [$ A6 m9 J0 C1 M& `
},0 T) O# k5 ~& i5 q# Z0 D6 ?; I3 F
"temp_url_keys": [],% i( e- j/ u, i% n' W
"type": "rgw",
3 `4 f+ D+ n4 l+ ^ "mfa_ids": []
9 y4 T r7 a, i}
: N& h. e5 V5 V9 X- z1 N
6 O) q/ ^3 D8 L2 N7 Sceph tell mon.* injectargs --mon_max_pg_per_osd=100 - t: d& z% s" ^* {: `9 n2 N. _
" F; I, S. x* F
#----------------------------------------------------------------------------1 O5 c1 v, v; C0 E' R% L& \
radosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system. H4 W+ N+ J) v' r4 U# v9 ]
radosgw-admin user info --uid rgw_admin --system" t1 m9 u. `# Y5 v: l* k+ Y
: y7 a1 Q* u' j4 w- n! F
1 }- m4 D& L1 A
radosgw-admin realm create --rgw-realm=realm_1 --default
; O" }* m/ T5 Z1 w- I' v/ U5 Hradosgw-admin zonegroup create \+ [5 M# K6 Q% `- L
--rgw-realm=realm_1 \
/ I, s4 c% W9 q$ g* g' m --rgw-zonegroup=zone_group_1 \9 `( j Q& p7 _; A" b7 p
--endpoints http://ceph101:80 \+ v! N/ L: b) c; G. a
--master --default
1 ~3 f$ J+ d) w* v" J! V1 e2 y0 k/ \7 e% [* z3 [
2 E% a! k/ i' N1 n% }
radosgw-admin zone modify \
& B: R8 L/ h# T n --rgw-realm=realm_1 \
# l+ Y5 P9 y T/ `/ X6 N; x7 L --rgw-zonegroup=zone_group_1 \
7 U: ^* B( ^; \; P. m( { --rgw-zone=zone_01 \
U; z5 O' j7 J2 U! x5 O --endpoints http://ceph101:80 \
8 F/ e, h/ g( b( J --access-key=IAWL6PLNFMNM0SLQNWQ0 \
" d9 B& f) q3 I --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
) T) N3 J ? z) T; R5 D --master --default * R2 @% G5 v3 O3 t+ Y8 @
% @" \0 Y2 E! G
radosgw-admin period update --commit
: i2 t, G$ v7 ~) R! Y B radosgw-admin period update --rgw-realm=realm_1" Q3 F& m, w% A" s; n2 P7 K2 M
ceph orch apply rgw realm_1 zone_01 --placement="1 ceph101"# p# p; Q+ l' H5 F* Z& }
* Y# r- h* J, T J: I
上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:+ V1 u! J0 g/ v
bash 体验AI代码助手 代码解读复制代码
# i$ S0 y" I4 \* H6 z& c$ y4 b[root@ceph101 ~]# ceph orch ls7 F( h& G! v( a! }# p
NAME RUNNING REFRESHED AGE PLACEMENT IMAGE NAME IMAGE ID
8 c" B F% |" w5 _/ f% D( B) s" ^alertmanager 1/1 4m ago 2d count:1 quay.io/prometheus/alertmanager:v0.20.0 0881eb8f169f0 E* B* `' }: i2 x% H
crash 6/6 4m ago 2d * quay.io/ceph/ceph:v15 3edede73a7c4# L( F+ v- D- W' w' r; e
grafana 1/1 4m ago 2d count:1 quay.io/ceph/ceph-grafana:6.7.4 557c83e11646
) C/ P. ?1 d' W6 q8 {mgr 2/2 4m ago 2d count:2 quay.io/ceph/ceph:v15 3edede73a7c4" Z+ c5 u! t6 k; Q4 k
mon 5/5 4m ago 2d ceph101;ceph102;ceph103;ceph104;ceph105 quay.io/ceph/ceph:v15 3edede73a7c4
$ N! _; q( [% W7 c4 m, a3 Znode-exporter 6/6 4m ago 2d * quay.io/prometheus/node-exporter:v0.18.1 e5a616e4b9cf. w3 {, t5 i; ~! y! C
osd.None 12/0 4m ago - <unmanaged> quay.io/ceph/ceph:v15 3edede73a7c4
; s* x: P% q4 o% j% bprometheus 1/1 4m ago 2d count:1 quay.io/prometheus/prometheus:v2.18.1 de242295e2258 T$ z3 \1 H6 ?- o- Y- \9 }; Z L
rgw.realm_1.zone_01 1/1 4m ago 75m ceph101;count:1 quay.io/ceph/ceph:v15 3edede73a7c4, P3 }* e. \. K: Z
% }! |4 F" N% j: v$ D* H* M( d- ]9 f4 u% P/ D- P$ \ {4 W. t9 ?1 W
如果rgw进程无法启动的情况,可能是集群不健康,查看log:$ ^8 y0 n9 [$ \9 b& @
ceph log last cephadm
* o/ P8 c0 |, V7 k/ a+ ^/var/log/ceph/cephadm.log; m, W+ Q/ n9 O) H# ~
bash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm3 r; ?* l9 G$ @/ z# U
2022-04-27T07:57:57.347323+0000 mgr.ceph101.qhgzmi (mgr.14164) 95889 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt
/ C! x- i {: A/ J2 _Traceback (most recent call last):
8 y5 ]7 h# _" o File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
" U) @; h( D3 P9 d* a if self._apply_service(spec):7 [1 P* D( L8 Q q) J
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
& u9 T1 ]" \/ X; j& b rgw_config_func(cast(RGWSpec, spec), daemon_id)/ \2 R D; B! s. Q
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config( Y' i# Q% V" E; H" f% a7 Q
self.create_realm_zonegroup_zone(spec, rgw_id)
$ V6 |% U$ Y# D File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone$ n4 n7 R& u3 X1 y
raise OrchestratorError('Health not ok, will try again when health ok') `6 \( d N, F4 p" p* w
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
9 m* r* |! v9 n+ m3 z7 I2022-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
- E: q! j8 X, R$ }( ]9 [- ?Traceback (most recent call last):, i3 Y$ v9 y) k; o6 U
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
V5 R0 `$ m; L4 o if self._apply_service(spec):
: X, q+ _8 m5 T0 [* g) Y: M File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
2 t) f3 W F8 l: z6 U rgw_config_func(cast(RGWSpec, spec), daemon_id)4 K0 d+ r3 N1 J2 p/ u- {
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config$ I* ^" R) K" Y2 b1 O
self.create_realm_zonegroup_zone(spec, rgw_id)- w9 b0 V9 S6 K
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
4 M# E6 \% D( _7 I- h# F8 | raise OrchestratorError('Health not ok, will try again when health ok')
1 ^( n1 O- _! C/ {orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok( H y5 H- q2 u7 o
2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts* U2 h$ a) E, s* i1 A1 s% S. g( M, R
2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts% R1 O" S' e9 y
2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts
* b7 N3 h8 r \/ H! s2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts% [7 j% O8 @ l T5 M
2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts$ N( U" @7 [2 N- C9 q
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts
) x! T% P, X, N# V7 G2022-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: O t- v6 x4 l% g9 t
Traceback (most recent call last):
' A* g( E5 y7 \/ i- J File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services& |% o2 O* i& o5 O, q* e
if self._apply_service(spec):3 q" O. }2 ^ v, w
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
1 \! @8 k. l5 l% t2 O7 c rgw_config_func(cast(RGWSpec, spec), daemon_id)/ F$ C2 o' ^# C$ L Q" y1 A+ o) D3 i
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
9 e2 c* h- k( G9 t self.create_realm_zonegroup_zone(spec, rgw_id)' _" [- i1 p) t$ H6 Z" R: w
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
0 M1 R! n# N% F/ S! I" m* y raise OrchestratorError('Health not ok, will try again when health ok')
; _; N5 X M: W% G( X' v% eorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok0 y. z1 w: }% D$ W- S
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
6 j& c3 O' v+ g5 p6 l* j+ DTraceback (most recent call last):
- t. @- l7 H7 [" w( W2 k0 G& g2 \ File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
+ T( S5 k: C5 W# y* A/ G5 o if self._apply_service(spec): L; }9 A- X' s. \+ ~: C
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
$ u5 D- x+ x' w0 s5 R rgw_config_func(cast(RGWSpec, spec), daemon_id)
# c. H8 N+ t5 A* r: G0 D File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
+ r% a- J8 W8 C6 V9 d) k self.create_realm_zonegroup_zone(spec, rgw_id)2 ^/ S1 F5 v6 i ~8 ]
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
5 [& b3 r6 C" F- }6 ]% b raise OrchestratorError('Health not ok, will try again when health ok')
2 ]6 q9 d2 `9 p9 D* u5 iorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok2 v5 s+ |6 @8 J$ Z* N+ @: ]
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
5 S- ^0 N& }( ]3 ]" ?. Y6 STraceback (most recent call last):
4 G% P6 _& ~8 D8 }7 u6 C+ {3 P File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
" N) u& H& _8 C1 o if self._apply_service(spec):
( h3 }& ]- J4 K: X* D, \ File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
$ ]9 n+ T4 d0 z- ? rgw_config_func(cast(RGWSpec, spec), daemon_id)
0 s+ \1 p% S9 {) X; R File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config2 t1 @! j$ Q6 F
self.create_realm_zonegroup_zone(spec, rgw_id)
9 L1 C- G( @ U/ T; C File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
M8 w0 ^" t6 V. d0 D4 V raise OrchestratorError('Health not ok, will try again when health ok')$ [& {# b5 q2 f! \+ p* f
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok! v" q; \. V1 I9 }6 h S# k2 i
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
8 F3 A# J. \/ D9 E: l% iTraceback (most recent call last): p( }5 s+ U/ ^4 } z2 E
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
/ s( `5 O5 z8 |/ v) W if self._apply_service(spec):2 X- }* I1 E! T3 w9 r
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
4 S$ G/ @; P$ I rgw_config_func(cast(RGWSpec, spec), daemon_id)
& k" s, ?$ ]3 ?, w5 N) L5 z File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
9 |4 h% [( f& \" u1 c self.create_realm_zonegroup_zone(spec, rgw_id)6 S: h5 H" ]6 P7 y; d! w
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
# G! i9 M( b& D- Q3 j- L raise OrchestratorError('Health not ok, will try again when health ok')1 X1 D3 J/ h9 O/ I* i* t% s% Q
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok) o$ p( I8 z2 S- l7 B
2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec s) _2 o( F4 h& [: _
2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts
: m* i2 k. j; {. _2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts3 g' I) h U& N9 d' [9 W$ y
2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts! [: A- m* |. y9 l* W9 H& x
2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts: a7 ]" K O R3 ^3 D
2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts
, D! ]: r8 X( |8 C) u, k6 \ V2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts& n* P# y1 Q/ d: N& r, Y" L/ X9 Q0 }; j
2022-04-27T08:16:34.288319+0000 mgr.ceph101.qhgzmi (mgr.14164) 96470 : cephadm [ERR] Failed to apply rgw.realm_1.zone_group_1acementSpec(hostname='ceph101', network='', name=''), HostPlacementSpec(hostname='ceph102', network='', name=''), HostPlaceme': 'rgw', 'service_id': 'realm_1.zone_group_1', 'unmanaged': False, 'preview_only': False, 'rgw_realm': 'realm_1', 'rgw_zone' 'rgw_frontend_ssl_certificate': None, 'rgw_frontend_ssl_key': None, 'ssl': False}): Health not ok, will try again when healt, G9 b/ u. \# m1 C) o
Traceback (most recent call last):- [: t' R- s- `& m
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services1 [& J5 U# L% Y4 X- B
if self._apply_service(spec):
' ?: t7 w: W3 h1 P/ ~% ^( ]( T3 V& _ File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) `8 P1 }" e& [9 M rgw_config_func(cast(RGWSpec, spec), daemon_id); y/ ~0 ^& ~) ?! s$ u
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config! @* ?. Q# K0 y) K% ?& P
self.create_realm_zonegroup_zone(spec, rgw_id)4 U' l) f0 P; d! O; [. m
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
0 x, g" p$ U; ~+ Q8 I raise OrchestratorError('Health not ok, will try again when health ok'): x9 ^ I* p/ G* C u
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok9 R7 E) W4 [, N6 o% N; b
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, 's6 a* e5 M2 T' @, f1 g1 ?
Traceback (most recent call last):
' a& ^+ t9 p5 I File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
1 Q# f% i/ B9 k' s8 c$ y7 [4 D if self._apply_service(spec):! q* k, t' k+ i- b; [6 i
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service7 u1 O% m0 M+ ^: V! R
rgw_config_func(cast(RGWSpec, spec), daemon_id)6 ^: P0 W6 p4 V5 T( |2 {1 h4 A1 b+ `
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
- }. Y* e+ z8 E self.create_realm_zonegroup_zone(spec, rgw_id)+ k: x% Y+ \) ]0 s/ M: _4 e8 o
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone/ m- }' W7 M# w5 O" v0 s, w
raise OrchestratorError('Health not ok, will try again when health ok')
+ b! J% g8 F4 sorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
% X# f- J% [, S6 Q- S. C" t
& }1 `& I# }9 b t5 C
( I8 C& L+ C* ?
+ q3 `( \0 L7 ~+ \' s进入到docker中- m; U5 h( D' Q: g( s
bash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh
( N* S6 I: ]- Ssh-4.4# cd /usr/share/ceph/mgr/cephadm/services// d/ t8 V9 Q1 O9 [5 b& j1 J
sh-4.4# ls
5 j8 p2 _! y" } M8 ]: y__init__.py cephadmservice.py container.py iscsi.py monitoring.py nfs.py osd.py
0 G% f- h2 Z$ O, Psh-4.4# vim cephadmservice.py
/ } \5 @8 r; q3 b: ~; Ysh: vim: command not found
3 j; o0 c8 q# Ish-4.4# vi cephadmservice.py
1 Y! O% F$ J2 f3 X; X4 W$ ^##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。
6 O! {0 o: E! l" s#进一步,将集群调整为健康状态,再次尝试,可以正常' i$ Z$ F# M$ l) x( }
5 o1 H8 W9 A; @9 a2 {; [3 T
访问s3对象服务,windows下安装S3 Browser
5 a7 D7 `: q1 x/ R8 H% K+ U
) F4 b' d& C+ s* }3 S$ Y4 g" i创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。: M8 Y/ ` M( }
其他常用命令:
0 h+ ~3 t# V( Ibash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_1
1 T) y8 }( y. K0 N. ^ radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_1
8 q" ~; N4 L7 M2 p+ T( e; G radosgw-admin zone delete --rgw-zone=zone_1 _" U' _/ n' }% y7 a/ D
) w# @! t! T5 C8 @# O0 L# a" mradosgw-admin realm list; B7 ?% s1 h5 b1 r, J% t3 x' c
radosgw-admin zonegroup list1 {9 s/ H e5 N1 u7 g5 N7 N
radosgw-admin zone list
* L" D* _- j" _8 mradosgw-admin zone list --rgw-zonegroup default) b! L3 n2 D0 b: H
radosgw-admin user info --uid rgw_admin --system! K8 ^6 L6 L& b
( U& f1 U7 }, C+ f. m
s3cmd mb s3://sec --region=zone_group_13 m8 B x/ P& t) H0 N
' R4 t* x/ Q* _
4 g# q" a1 m: W) Q$ L5 ]% I' [6 x3 O配置dashboard:6 G4 a) { U0 ~# x
bash 体验AI代码助手 代码解读复制代码 1752 2022-05-09 11:21:28 radosgw-admin user list
: v' I3 w) l' B" L2 r" { 1755 2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin
6 Z6 |: X$ s7 g, n0 | 1757 2022-05-09 11:34:44 vim access.key4 G3 E. {+ ?; S+ t
1758 2022-05-09 11:35:00 vim secret.key. R) j( K0 y# ~( f, A
1759 2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i access.key
- F4 w D' x+ W$ q X% M) j5 S 1760 2022-05-09 11:35:34 ceph dashboard set-rgw-api-secret-key -i secret.key
' U0 x$ C: S* ~ 1761 2022-05-09 11:36:49 history
0 i, z4 x% Y* T( E
) s0 q4 g8 g$ j5 B( R& X4 L1 ^在前端可以看到8 F/ L4 g" t% a4 r
. ]5 g0 w) w) ?2 j- l& s8 q搭建主-主备份
1 U. @: |' H6 P7 P& Obash 体验AI代码助手 代码解读复制代码
3 f8 [ d% s: Z. Y3 Q' m8 e2 ?: m( X: c7 |0 k" e$ \; V- C* P+ v) ^
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo0 X5 J- _' U) @2 F
( \6 M! _" u, L# nradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \4 ?9 J8 y& b) _- X" ^: Y7 z
--rgw-zone=zone_02 --url=http://ceph101:80 \4 }9 R0 C1 e1 U" r8 p, x \
--access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
8 G$ l' L& a/ x- L --endpoints=http://ceph1:80 + B7 V0 ?, x _( S: w, E; p& R
radosgw-admin period update --commit
- b% I0 c6 X! oceph orch apply rgw realm_1 zone_02 --placement="1 ceph1"
# ~9 H: Z3 G% w3 f+ i7 ]. K k, ^0 c
% d# @( z! ^+ T; ]% A: n查看应用的配置
4 Z) i5 d U; X; Z$ O; fbash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump
" P% p0 I" Y- \9 q) V+ U8 Y# \; p$ X" i7 w0 _1 j$ P+ {
: n9 v- l9 f- G% {
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd8 [9 {5 g9 h- I4 O
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7
. G7 i$ r+ {, I7 s% ^8 l, N[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll
4 c) w5 a/ d% S1 S总用量 0" z3 l& |7 k. ^+ ^3 o& h. u4 J
drwx------ 4 ceph ceph 92 4月 27 18:52 crash
- ~# l7 P3 T z; g: ?# }1 @0 i9 Adrwx------ 2 ceph ceph 133 4月 25 16:07 crash.ceph5
( J# O6 N6 m0 d8 ?: D' \. _, o5 s. `" gdrwx------ 3 ceph ceph 190 4月 27 17:04 mon.ceph5- L3 b' h9 S' h) `9 i
drwx------ 2 65534 65534 104 4月 25 16:07 node-exporter.ceph5( Y$ k& P/ _; J" F
drwx------ 2 ceph ceph 241 4月 28 19:42 osd.4
. n% ]7 C$ _+ J5 x ?6 K! r qdrwx------ 4 root root 88 4月 28 10:59 removed
' {: C6 _+ _! i& Ddrwx------ 2 ceph ceph 133 4月 28 19:57 rgw.realm_1.zone_03.ceph5.tapydb( j( z6 ~4 ~% L6 U D
5 v: g$ `$ W# b: B0 ?0 [$ E
& q- K# f/ Y" G6 W$ N[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb
: U" u4 w; e; U( ANAME VALUE SOURCE OVERRIDES IGNORES
; w! Y5 e7 L$ k3 Dadmin_socket $run_dir/$cluster-$name.$pid.$cctid.asok default
1 O7 b3 Q' ~; \/ V- f$ I0 \/ ycontainer_image quay.io/ceph/ceph:v15 mon
8 @1 @) c, o% J4 a hdaemonize false override" ~- c" }5 P# x$ T
debug_rgw 1/5 default$ s5 D0 A0 Z; \. n$ u: `
keyring $rgw_data/keyring default+ w0 `6 i6 ?# w7 A
log_stderr_prefix debug default
* i5 s. P5 _, z% _9 P. Zlog_to_file false default% t7 ]8 y" h" q* u
log_to_stderr true default
) q8 C0 u3 @1 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" J' {/ X7 K3 \: K+ Q# R
no_config_file false override
$ Y8 H. s7 n8 f* f, z" }# B' ~objecter_inflight_ops 24576 default
+ _6 ~6 n" R* b, \, \: r/ W6 {rbd_default_features 61 default
7 ~) z' }' Q# U/ S5 Yrgw_frontends beast port=80 mon
* ~9 m, C3 l" a$ |" Yrgw_realm realm_1 mon% @' q8 V8 J7 _ _) c
rgw_zone zone_03 mon
3 O3 V2 C8 c; X! v8 z" p9 {setgroup ceph cmdline5 b/ |6 C% O0 z1 M: }
setuser ceph cmdline% C8 H8 I( Z! o' B; B4 @, X
/ B# ] k, y4 q& N对于想修改rgw启动端口的,可以修改配置文件6 S5 W& ?# ~% b% E/ t
bash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关
6 @3 s8 w: V/ g4 c/ v7 hradosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo
, q% r( D6 ]* Q' Q* l/ C$ o- S% }6 w3 _1 ?8 ^/ F
radosgw-admin zone modify --rgw-zonegroup=zone_group_1 \4 P) j1 c1 d6 ^1 o- B
--rgw-zone=zone_03 --url=http://ceph101:80 \
. t6 Q0 E7 K8 @( x6 p3 q --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \
" M; k ]) l/ x f --endpoints=http://ceph5:8088' A) ?8 M; ?# n$ f+ e
radosgw-admin period update --commit6 ^9 F/ o9 \# A, V/ _6 e
ceph orch apply rgw realm_1 zone_03 --placement="1 ceph1"- _% g8 h h4 K3 h; F$ e6 \
# l, ?4 V% b* |# p7 z8 T& Y0 S
) C. S' p( j$ q4 x: a- D[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd+ T M. `- U& M* [: B6 L/ X3 a& J
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
( y0 B7 w8 {6 n2 d% \0 x[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim
3 m- K& ?- K, M2 R. l
+ K) B H* i# t5 a; ]`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7
0 F6 Q! H. a* B3 e/ M- Y" w[global]
% g1 ^' F. X3 W fsid = f88b0b1a-c467-11ec-a2b8-525400299ff7& b; ^6 ~' x6 {( ]+ F) ^
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]
. B; j2 h7 z- {& A[client], N- ^. X: q9 g+ L i
rgw_frontends = "beast port=8088"3 {/ @8 U# p) [
`+ S7 T" E$ @; j' D
#然后重启rgw服务
1 h. [% {: U; J5 {#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends "beast port=18888"1 m$ s: n8 i0 u4 E2 b0 L( ~
#去掉config中的配置项,重启服务,也可以生效
' k& t6 q3 `7 W6 e3 k% f#至于精确的配置如:
% l+ j* r9 u7 H% m9 z: {`6 i9 j i! a+ H
[client.rgw.realm_1.zone_03]
- ]6 d* j- }* ?" a( a" z& q0 ]# V# Qrgw_frontends = "beast port=8888"
9 n3 E5 |% g; ~' x) c/ g`
' c7 |) X; L A" O' o2 x p% i#试了很多次,都不好用,官网说的不明白 G i; J# W$ E
( m" T7 N$ g4 X6 R; u# B" |
参见:1 d4 _) }% v, P5 n+ w* q
7 Q2 y: q: m- ^7 m1 n" v0 F8 r. v
指定rgw的数据池" t7 T; x! V0 R: Q$ ^
, [: d. r4 f+ u+ N5 K% u移除osd
& f+ p$ U, i; W6 f/ y' Ybash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:7 S* d P! J* s8 F D1 q$ x4 Z. N
将节点状态标记为out (节点已经不再提供服务)
! G7 p7 y/ \; R. @3 D) Z- d0 j[root@ceph1 ~]# ceph osd out osd.5
5 ]9 J' t# |0 c' S) z x从crush中移除节点(不删除会影响到当前主机的host crush weight)! X1 D' o! _# {# z: ~1 f/ {
[root@ceph1 ~]# ceph osd crush remove osd.55 ?& I9 G7 j2 P9 _- w) F
删除节点3 D8 {) c1 d+ s& c$ c6 T
[root@ceph1 ~]# ceph osd rm osd.5! F1 z+ M3 M" F0 Z7 T2 L
删除节点认证(不删除编号会占住)$ M/ M; q' Z+ X* H4 t/ P
[root@ceph1 ~]# ceph auth ls5 M3 L+ x; r/ `" o" z5 }- I0 }- K- f
[root@ceph1 ~]# ceph auth del osd.56 w& C3 ?6 s7 M7 F k
[root@ceph1 ~]# ceph orch daemon stop osd.5; _' Z9 X9 a9 U; Z
Scheduled to stop osd.5 on host 'ceph6'
# Y7 k* e/ x5 t Q[root@ceph1 ~]# ceph health detail
; E2 F/ p1 X. A! c9 x4 H% J' {HEALTH_WARN 1 failed cephadm daemon(s)7 O& j% E6 Y( A4 C8 j& u2 Y
[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)7 h" B8 K! r3 X/ `/ d& x8 I/ a& ^
daemon osd.5 on ceph6 is in error state
% w4 }2 T& U+ k9 P[root@ceph1 ~]# ceph orch daemon rm osd.5 --force$ e5 O2 f1 H2 n' z9 ]: {3 j" Q4 F
Removed osd.5 from host 'ceph6': f8 `2 H) A! v k! J) R
- j$ o( l% G% B4 O. L8 L恢复磁盘:
9 [3 y) f% L: q) U1 n5 v: x找到某个未加载的盘,有两种方式:; x& o7 q7 d0 A0 D; a
bash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata6 W% f7 Q- q6 i7 u- F3 L
( T3 C- |$ Q% t( c' n: l: ~
和
9 F' {' i1 m& @$ ybash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd
$ ~2 `) S% M: ?) k' U2 K# g/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z; ?; h/ Z3 X" s5 C, V+ {# ]
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll$ r( `) u* q$ K4 e8 ?8 ~0 e3 V
总用量 52
* G B$ i3 N- s/ e% `- blrwxrwxrwx 1 ceph ceph 93 5月 10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f3
! A' [. ^# Z9 q' \- P9 B-rw------- 1 ceph ceph 37 5月 10 12:47 ceph_fsid
/ l$ d" c+ G7 Z2 z# ^' ~-rw------- 1 ceph ceph 377 4月 28 19:43 config% x2 n1 t3 A/ y4 y
-rw------- 1 ceph ceph 37 5月 10 12:47 fsid
3 N. z) K. v1 `, N-rw------- 1 ceph ceph 55 5月 10 12:47 keyring4 Q- D3 @+ C9 r8 h# s
-rw------- 1 ceph ceph 6 5月 10 12:47 ready# e4 L! C* O$ ], v
-rw------- 1 ceph ceph 3 4月 25 17:04 require_osd_release
& l9 p- ]6 x; ]4 [-rw------- 1 ceph ceph 10 5月 10 12:47 type8 B Q2 _; O* L: r6 T% z$ o& _% X
-rw------- 1 ceph ceph 38 4月 28 19:43 unit.configured- t$ p6 O7 |7 r+ p* G0 e1 L
-rw------- 1 ceph ceph 48 4月 25 17:04 unit.created6 |" a6 c5 R# o' Y; U
-rw------- 1 ceph ceph 22 4月 28 19:43 unit.image( j/ v4 Z) r9 _9 C `/ C) k
-rw------- 1 ceph ceph 931 4月 28 19:43 unit.poststop
% h' Z4 o9 ^: w( a1 w* p-rw------- 1 ceph ceph 2035 4月 28 19:43 unit.run `& \9 L7 x7 w: T C9 Y
-rw------- 1 ceph ceph 2 5月 10 12:47 whoami
* z5 e; p7 x4 g2 \2 s+ Q
* Q$ F; E& L$ U d$ V# c3 w6 p6 b5 U/ p
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk
' ^2 d) }6 Y) S# G9 F5 CNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT+ ~/ F3 L) K) E( E0 K
vdb 252:16 0 500G 0 disk
* y8 g% M$ N- C7 h f' }9 U3 v, z5 j" a└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4 0 500G 0 lvm" p: |: \1 b$ @' U5 h
sr0 11:0 1 1024M 0 rom/ T0 k4 C9 \, h5 ^8 |# s
vdc 252:32 0 500G 0 disk
8 A9 x+ M9 g* W+ @2 U8 N└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3 0 500G 0 lvm
* M4 X9 y8 n/ @/ {vda 252:0 0 500G 0 disk& I+ K% W8 N4 w/ H4 z. k5 V, i
├─vda2 252:2 0 499G 0 part
+ m1 ]5 w- l, V+ l$ I% @* A│ ├─centos-swap 253:1 0 7.9G 0 lvm
( d F/ \. ?8 p) D( V% S$ l│ ├─centos-home 253:2 0 441.1G 0 lvm /home, z" O; ?, Z! K: U2 P8 S
│ └─centos-root 253:0 0 50G 0 lvm /
$ x: e7 o* s9 F/ d% R" a( {└─vda1 252:1 0 1G 0 part /boot1 n: o& M4 {) ?2 h8 K
3 P# x9 h: Q3 D2 I% z4 w- {可用确定是ceph6上面的/dev/vdb块设备* q: [! \* r" _. H9 }
bash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用. Y" ?( F5 m7 X
5 @# G, A3 y1 _+ o+ `5 K7 [3 A4 D[root@ceph1 ~]# ceph orch device zap ceph6 /dev/vdb --force
- t9 R1 k5 o) i, ^/ D/bin/docker: stderr --> Zapping: /dev/vdb# Z; H* N7 D9 p: Z1 o
/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync7 N, [2 f7 [( d$ X' q
/bin/docker: stderr stderr: 10+0 records in. ?7 j7 J% A# f' x
/bin/docker: stderr 10+0 records out" f$ g# b( ~5 K+ `3 f& E! j" x
/bin/docker: stderr stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s
% K/ M; }% F4 d8 J* b% ~$ w/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>
9 ?& s& L, G$ L7 w5 t! a8 c[root@ceph1 ~]# ceph orch daemon add osd ceph106:/dev/vdc
5 Z' s; p& \8 w5 E$ u! Mceph orch daemon rm osd.5 --force) M2 m4 W6 r2 K- w4 j! d+ c9 P. [- K
ceph osd out osd.5
& j% E4 g8 a3 N4 y1 N! w7 Pceph osd rm osd.5
Q2 G5 c- D7 C4 G" m' [ceph osd crush rm osd.5, {8 [- s$ D+ C9 Y( o3 H" K% _) c
5 F* B) l' ~9 y4 Z- V. ipg故障处理
7 n# n! x8 P a8 Ibash 体验AI代码助手 代码解读复制代码 v. ]* l6 }9 x' F
Z5 u1 O9 y d# ?2 l/ ~% B[root@k8snode001 ~]# ceph health detail( ]( o1 C( Q5 O7 \: P
HEALTH_ERR
3 i! |+ U7 @" I5 j0 ^- Y) i5 z 1/973013 objects unfound (0.000%); 5 U+ c. x: @) u" ^* S
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
5 }4 g3 D" l9 R. LOBJECT_UNFOUND 1/973013 objects unfound (0.000%)4 ]& s3 [ t; b8 A$ c
pg 2.2b has 1 unfound objects# f* b- x+ n- c* U9 l+ z' D' P
OSD_SCRUB_ERRORS 17 scrub errors( a+ M' x3 ^$ g# c9 X6 O6 h% ^
PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair
, x' ~) @$ Q* x pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
2 B9 X9 B- x6 G* x. B pg 2.44 is active+clean+inconsistent, acting [14,8,21]
! O7 s: C5 C. D [- R# R pg 2.73 is active+clean+inconsistent, acting [25,14,8]
R0 k: T: R8 y% C; j4 K& P) j pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]
, n5 R( z6 r6 b0 x pg 2.83 is active+clean+inconsistent, acting [14,13,6]
* ~# ^) g1 z' |7 o" L$ _; L7 N4 ] pg 2.ae is active+clean+inconsistent, acting [14,3,2]
' p7 ?" E1 c" h4 l" h pg 2.c4 is active+clean+inconsistent, acting [8,21,14]
4 @8 l2 J+ v" |2 b! w2 l) _ pg 2.da is active+clean+inconsistent, acting [23,14,15]1 I3 t) l: u1 ?" A' z
pg 2.fa is active+clean+inconsistent, acting [14,23,25]
1 i# J; ]* J4 }3 ?: K/ EPG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded9 d h' z4 k2 D( g, |; s
pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
1 Y. ~& c, _; m9 j# {2 ?- ~/ w) d" f$ \; j" Z
2.查看pg map- \7 `( y$ H# p2 |9 k& V/ l
[root@k8snode001 ~]# ceph pg map 2.2b
5 t) i; h8 r6 iosdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]" y! q4 R' D4 k+ z1 C, Q `# o7 e
从pg map可以看出,pg 2.2b分布到osd [14,22,4]上1 W/ b6 n K5 n# ]+ X: \
7 e8 C* ]! n) e9 j# _3.查看存储池状态; I1 W7 @1 E. N7 S- z& _
[root@k8snode001 ~]# ceph osd pool stats k8s-10 ?0 M9 I1 ^2 {
pool k8s-1 id 2$ Q y2 k3 j2 o; n0 @6 A& D
1/1955664 objects degraded (0.000%)9 s8 U1 [0 K7 v
1/651888 objects unfound (0.000%)
# I$ h; Q# P. y6 a client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr* J' j: R( {/ c% t- {& V1 F/ d
, @+ y5 v% {5 S) v2 ]6 f \0 ^
[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-15 d" {; @9 N- I+ N0 v
pool 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& b' I/ x9 G( h. g0 {
4.尝试恢复pg 2.2b丢失的块
/ ^( g2 d, n+ {6 o8 q[root@k8snode001 ~]# ceph pg repair 2.2b
1 \' m. s% Y. |6 e+ e. V如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
, i. L$ H" T8 S/ v" [- d3 g[root@k8snode001 ~]# ceph pg 2.2b query* l; f' r# d5 q) ]7 H
如果repair修复不了;
( S* ~: b! }+ l% ^7 t两种解决方案,回退旧版或者直接删除
) N( K% J' q1 P+ k3 t回退旧版
* h2 h7 h8 t$ U% t3 P, Q[root@k8snode001 ~]# ceph pg 2.2b mark_unfound_lost revert
3 J# J, O2 w1 O5 }% K6 J! C; w+ G) u直接删除0 [- r: [/ i; m- s+ A7 h1 l0 C
[root@k8snode001 ~]# ceph pg 2.2b mark_unfound_lost delete6 T% |9 ^ |; _2 g6 q. ?6 l0 x
* j% O4 ?% l& H# \, `$ ]
参考:记一次ceph pg unfound处理过程
, J, j1 a2 P9 T# ^卸载6 {7 s% E& ?8 \7 {
卸载过程:" f$ Z i9 O' A
bash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'
) T1 u0 e0 N6 g' g2 Y" v#找到fsid
, P7 F' l/ ^& J8 G- Y, a7 t[root@master1 ~]# ceph -s/ a6 r" M( d! p4 M
Inferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c60 \; |& h2 @6 I0 R9 H
Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config z6 f+ k9 K/ c8 m8 z
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
) [$ W5 S2 `- t. `7 A# [0 _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
5 {5 j& Q6 K; P# G$ ^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
/ j& I H: G7 Y2022-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
C% u! U& k6 q: U4 S2022-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
# p K4 d- x) R( f$ r2 o4 p x, r2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]5 a/ j( x R$ g$ [
2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication, l6 A* ?9 b- H3 w
[errno 13] RADOS permission denied (error connecting to the cluster), q! d4 k: T/ Y; z E
' p+ e2 W. J) S _
#使用fsid删除集群
) H3 |' r, J* ~+ v2 n3 O) q( x, y[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force
, `0 I$ E" l# L V; y
: b" ]' X- \& p0 ^2 e8 L7 v) G1 z" `
分发ceph.pub/ B) U" o/ R- |% w
playbook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub"
1 Z E( i9 u/ X( z; U: G或2 N/ Q7 Q; W9 e A9 E7 I8 g8 g
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 r/ y0 L# w3 o( e4 I! {7 C! \- b% e& P* B
使用 ansible master0 -m setup 可以看所有的变量/ `' S/ n& ~4 b2 K! J0 q0 l: t; t
参考:ansible.com.cn/docs/playbo…
( c3 `- P6 C! j( z! a" I. Cjinja2参考:
! U3 k i! _4 w* U. l. G* Sstackoverflow.com/questions/3…
; C4 b! g5 r/ Kbash 体验AI代码助手 代码解读复制代码 playbook -v 2.mon1.yaml
' R" R7 I, }- ~8 S0 }" W! V* d6 b9 i! m* F playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"; I' z B/ V' D& b" U# ~1 Y
playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"% E; w( m7 u+ _
! H5 w) X0 q6 l6 Y9 @6 ?0 Y3 k- o0 _
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。
" S$ D. E5 c% k3 h0 Y5 B) Z: ?4 G2 Z/ z* [2 D7 T
添加(add) 在某个地址上新增一个名字为的MON服务。' {7 u f' z7 \; w9 C+ W% Q; _
示例:) L; V2 i, h* y) I5 \
ceph mon add <IPaddr[:port]>7 \3 {3 n: s1 u; l- P
导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:) n+ `4 U1 l( z% E
ceph mon dump {<int[0-]>}& F# S" b2 h2 |0 N; y
ceph mon dump 1
_9 C; l f D* N5 o获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:2 T# D- V4 C8 L. B: z, e
ceph mon getmap {<int[0-]>}
1 @0 A4 D7 n" Y1 M: g. g$ F8 K示例:
; ~" w( w% @; F6 Xceph mon getmap 2 –o filename. b8 H; j5 v o+ Q F6 c9 l
移除(remove) 移除特定名称的MON服务节点。具体格式如下:
) V5 d i* s* d' z5 vceph mon remove . d% \' a$ l8 c$ p! ?2 O
示例:+ Y! D& t/ m2 {3 W7 i; R9 y
ceph mon remove osd3
) s. ^; G0 |, v4 a+ J获取状态( stat) 显示MON的摘要状态信息,具体格式如下:
# D5 j% G. X3 c# a0 }ceph mon stat/ ~1 k4 p7 u8 p
报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:
E9 D/ R' w& j$ [ Uceph mon_status
: w" i+ ?- `" |, g7 k. N$ p9 ~- C8 ]Ceph命令之ceph mon(Monitor管理): P& I* ?4 W( z7 | ~5 n
7 h: J, n5 L O$ }& C: B! b1 d# n5 ^
|
|