|
|
软件版本:3 t g& ?" }. h0 G+ a6 Q! a
. |6 ~* N: B" L% k$ q
8 O3 m5 \! H( V# ~. b/ z3 c2 z4 T: x1 S# y" [3 @1 K
\1 z* ~: n+ H _) }& i1 \& P
( o. y5 D) J ^! O% [# D. R4 r! d
9 [4 v! n7 A& x; t" Q1 m; v9 z; d+ Y, V1 ]7 {/ {+ N6 ]8 q0 {( {
5 j+ V+ R* Y4 ^: }6 V0 ^0 G: V
+ O% t- e4 I% V# q4 @( ^. ^) w, f: e$ }
) V% v9 t, v9 @4 [
0 s4 ~' a! q, e( h
0 m, O! a4 H% U0 I3 |
# O( a+ r& G) E! q! X6 a/ p+ N' V0 R: |7 k V* |
- h' L2 C' }9 W5 Q/ g6 h: Y& r
# z8 c+ f, H R @( P% \软件版本cephoctopus(15.2.16)centos7.9, A) }; @2 i, }' S' Z& n' c/ N
ceph官网版本:( l" B* b6 M, f9 \# E4 Y* d
docs.ceph.com/en/latest/r…
* j8 u0 }7 Y q+ J5 m- F机器列表:
) @; |, T4 a& F( `$ @% z- M) ~, d% |6 a# b+ G: T# I
& G) j; _- r; o+ O7 r
/ u4 S _3 ^( K, Z. T2 c
4 v8 m5 l; K {! E$ }8 O3 p
6 w7 D6 n5 L4 V1 Z: m7 F& D1 j1 ^) B! ~+ K' ?
6 a+ \2 {! ]* ~) G% S. X; ?
7 g. K# ]- y; Q* t- q, y; A' P. B2 N [: |- e7 v
0 R2 T& Y$ w7 y" I- {- T
9 K) _ {# B# Z( M# ]
' z7 j, D( _; N: \2 V% u- Q4 M, {' ^
, a2 {/ E, W1 u0 W9 V5 m- y# ^* L
6 q" o$ z, O) X* g. T& B; {, ?( l9 P
# F! o+ f! N( I* T& a! S; A4 R) a7 x3 ]3 a- N$ `, u/ g7 X
3 ] |2 z$ p4 `* i9 R
. C, Z! ^1 f3 s- k& \) p, D6 `# {3 [0 L3 t+ Q: R
, s' Q: c/ v! ?2 A2 J2 C& x" c ^ q
$ a0 V6 N* Y; [5 ?% e2 ^
# ?' E: h" f+ b机器名称ip块设备0 h' M/ A6 J( M3 a8 a( k6 |2 S: P
master0 12.70.10.161/dev/vdb 和 3 D1 n) P$ B3 x$ ]
/dev/vdcmaster1 12.70.10.162/dev/vdb 和
& x0 I( a, b% G" a6 c0 `9 Y /dev/vdcmaster2 12.70.10.163/dev/vdb 和 /dev/vdc
/ T- n" ]% w D7 x准备工作
" ~! J! t/ E: o2 U4 G" q8 D' i开始使用ansible做些准备工作,实际开始搭建后,不用ansible,因为cephadm本身就是一个集群管理工具。
6 D7 ^: u. [ Y2 r如下ansible剧本均在集群外的任意一台机器上面执行,需要安装下ansible,不明白的可以参照ansible使用方法。$ m j+ s9 F% X4 t+ P& @( y
ansible的hosts配置如下(因为之前这些机器用来搭建k8s,所以名称没有改变):4 J# X5 H) E& p' E& s% T Q
bash 体验AI代码助手 代码解读复制代码% @. a8 _4 a( b _5 L0 t, i. d
master0 ansible_host=12.70.10.161 ansible_port=22 ansible_user=root ansible_password=*** host_name=master08 h0 q% }! z+ o( \$ s f. H
master1 ansible_host=12.70.10.162 ansible_port=22 ansible_user=root ansible_password=*** host_name=master1
( d, N% l V# r& |4 emaster2 ansible_host=12.70.10.163 ansible_port=22 ansible_user=root ansible_password=*** host_name=master2
' `4 U( V1 r2 n; m( X/ h8 J) K$ n8 L6 D( [6 S
[all]
3 L7 a+ W$ r- w- |# W$ omaster0, H# n N7 _3 @8 \
master14 Y& g% q2 c. X
master2- Y f5 W, n# N2 p* t0 q4 V
- t4 y$ A3 |) W9 `! G8 C* E# Z升级系统内核. _5 M2 D- C1 b! j) g
升级系统内核到5.17
3 M+ |/ S8 j" J% `5 Yansible脚本如下(1.kenel.yaml):
9 t) X. W: u8 K9 Vyaml 体验AI代码助手 代码解读复制代码- name: update kernel
5 ?: u$ @. M \! l! R# H' w hosts: all1 F% ]% ~3 o, s# r
gather_facts: True& R7 t- |# U/ ^. P9 c- e
vars:: M" g2 U" ~6 Z( E2 ]; ]; v. c, `. p
tasks:0 E/ W8 I6 ?& m: s
- name: create workspace5 Z* M3 G9 S. X* K
file:
8 {! E8 p8 }, F$ u) A path: /tmp/workspace/
( e% h; t7 I2 M {( p state: directory
7 |) j- D/ j, U, [9 w1 f/ R) o tags: workspace
2 T4 { A; G2 V! t" H) i, `. a - name: yum install elrepo
' j% N* k7 V8 f2 `! e% F m copy:
" [: \- \: Q3 l src: templates/rpm.sh.j2/ O9 Q! b7 ~: i2 J2 _$ Z
dest: /tmp/workspace/rpm.sh, K6 h q- V* O& a0 R0 t
mode: 755' O7 T! M* ]# N* H
tags: F6 c# c6 v2 @9 M+ M. }6 A
- copy-rmp. N& b/ ] d1 `6 Z' _# z& M3 T
- name: sh rpm.sh
3 q* K/ ^- L, i7 E/ s+ n shell: sh /tmp/workspace/rpm.sh1 y/ F. Q; D) Z9 Z
tags:
8 ~1 \4 N# p$ Z5 q - sh-rmp
9 f5 ?7 ~, X0 a& ?; K, S/ J( Q - name: 列出可用的内核相关包
- A( q: Z4 h* R/ v9 ] yum:6 v- z9 C( c, X
list: available; Q4 V- M- }. u9 q% j
disablerepo: "*"
7 v) V0 F) S7 U, o( V2 t* Y9 A enablerepo: "elrepo-kernel"/ b i! M5 i+ A6 T, M, B
- name: 安装内核0 W0 x% |1 r+ z4 M6 y8 I2 Y; Y
yum:
2 I8 e' ]/ z$ g4 s( l& c4 l- ? name:3 i+ O# I, G# c+ o" Q" F* p
- kernel-ml
# T! b7 H. w) `. a- g5 P: ?1 ~- W #- kernel-lt.x86_643 T- u* q% U2 E
#- kernel-lt-devel.x86_64
" A) Z$ Z% ~; |9 h1 ~ enablerepo: elrepo-kernel3 ^4 s2 ?' n% l/ @/ S8 q) y/ X! p
- name: 查看内核版本默认启动顺序
$ `! n w, L6 ^8 l7 r: v: n! k4 X/ _7 L shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg( Y. w8 |8 D. _- s
- name: 修改grub中默认版本启动顺序* @! U, ]- ?) P; j7 F+ L( w
lineinfile:- }- |) W8 H y
path: /etc/default/grub
( {4 W3 X( q2 d9 C" Q$ Y$ r, ^% l" ` regexp: "^GRUB_DEFAULT"
X# o+ T7 c, b( T, d/ y8 J line: "GRUB_0=saved"1 q6 I. l) y6 ]& W8 [6 p) O* v/ F
backrefs: yes
/ z$ `, M: B" Y9 j6 ~$ L state: present
" k# n: ] d+ c! I7 o) \& D tags:5 d: {! K. a, }; @! x* n
- grub+ B( K, V6 [( _( Q( p/ W
- name: 重新创建内核配置3 L: E3 T% `+ [$ K0 F
shell: grub2-mkconfig -o /boot/grub2/grub.cfg
( k6 [0 Y$ O- j; v9 b/ l4 W - name: Reboot the machine
, X# t1 F. U# y reboot:8 R1 w1 w- c( v$ U' ~- a+ ^7 y
reboot_timeout: 300
, |/ M5 P9 x! n' b6 ]3 j - name: uname -r0 l0 }! w3 i5 D0 a ?
shell: uname -r
G8 v3 o0 u' O: A register: version
) t: k# b7 V4 q6 w - name: debug
+ f9 Q, T6 k% l8 ]% V6 u debug:
5 ?+ b! C0 @1 F" j. V6 b( d msg: "{{ version }}"
6 u) n$ w! e5 p& a0 @+ b4 _" }$ i4 A; j4 n( v+ u
升级rpm脚本在ansible剧本同目录下的templates/rpm.sh.j2
# c9 y6 I( I( a' f内容是:6 u2 }- [' F) L2 Y1 f
bash 体验AI代码助手 代码解读复制代码#!/bin/bash: [3 ?6 }9 m( p9 v {4 }
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
5 k# m4 y8 ~8 I1 I9 }#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm1 V" x3 S7 M+ z3 n, ~2 e. W$ F' P% v' I
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm! |- e# R4 x7 \1 b
echo 0
0 G8 o! b8 f' c8 n/ e D( p2 B o$ X/ M* Z: ^. T
执行ansible-playbook -v 1.kenel.yaml完成集群中系统内核升级$ \' X) u; D7 i% O
安装必要工具和关闭相关配置9 Q" z; o2 }$ T) m; O5 c- R
+ i: f" l! [( f/ I3 f
脚本2.config.yaml如下:
9 z) ] k4 U0 X) Yyaml 体验AI代码助手 代码解读复制代码- name: set config1 Q7 x8 \) z& M) U+ c
hosts: all: c/ J8 Z3 Z: X( z: A) l
gather_facts: True0 t& u: P& i* \' Y: c
vars:
' b3 b8 u5 _0 |7 \ handlers:
- ]! L/ q% M) X) L" ~ - name: update_yum
, m( r$ R9 W/ ^" J' o" _* o7 B, H shell: |$ q3 Z" s4 R b2 k5 O
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
" P, D' W1 [6 L# W yum clean all1 @& P2 ]" U5 m9 p
yum makecache -y
! s$ Z% n2 G- T( B* |- ]' Z P: {$ F - name: noswap_service #禁用swap
6 p! a+ _/ A3 c# f( ^" b systemd:; C" A3 w+ D7 h
name: noswap
' t; a: N9 B- b state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
6 B* U& R4 M$ o7 ? enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
0 M- P2 G! a, f) Y) s# T' i+ u daemon_reload: yes #yes 重启systemd服务,让unit文件生效/ u1 [' Q p3 b* B; ?$ B
tasks:
4 w2 y- {) z1 b% I& u; S* _* ? - name: back up repo
& D$ B$ f8 x$ m& r) f7 z2 P shell: |
5 j3 S% n$ F# @4 @5 P4 d! Z mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup7 E4 u' J g/ L0 G n
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup8 M$ `7 U) s" \' ^ C
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
5 {9 ^) K; t. } - name: delete /etc/systemd/system/noswap.service #禁用swap! }3 \8 p4 I: J5 V- d2 Q5 G6 ~/ q
file:
0 d' [8 c. V. N; W path: /etc/systemd/system/noswap.service$ B) @2 T, e6 j7 ?. Q1 g5 ^
state: absent
% {" Q$ x, }. c- z - name: download repo #下载yum源) l: B) N5 ^: D* |9 j+ O4 O
get_url:
0 W) N8 ` Z/ z0 w% w# u3 d9 } url: "{{ item.url }}"
( o. }% @9 k$ ]) c dest: "{{item.dest}}"9 H) q+ [" _( t5 V4 R$ G
force: yes q1 _. X; p! j! [; K% ]/ K: G% J
with_items:( {7 ]0 W3 o" G: L' V
- {url: "https://mirrors.aliyun.com/repo/Centos-7.repo", dest: "/etc/yum.repos.d/CentOS-Base.repo"} j9 @0 @6 H3 ^! e4 o, M1 P; ~
- {url: "http://mirrors.aliyun.com/repo/epel-7.repo", dest: "/etc/yum.repos.d/epel.repo"}
0 q/ Y/ @6 a6 \, o3 t9 \+ V - {url: "http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo", dest: "/etc/yum.repos.d/docker-ce.repo"}
* h6 \, ?0 V/ r1 n1 T notify: update_yum #更新yum(见上面的handlers)
( `7 Y8 F' f" u9 |- x/ k( ]) f( K/ \0 Q - name: install net-tools #安装必要的工具% }9 Y* H0 Y# w: t
yum:
M/ c; D* b2 q3 U4 u. C( l name:' r0 F, A: y) g3 N T$ n- o" r$ c
- net-tools
2 b8 {8 m$ m+ I1 B2 O4 n - vim
% l+ a2 F9 x# H6 v - rsync( S+ `) r" Z$ W+ Y( p8 V) n1 V
- chrony8 {' M; ?8 V: u6 W; g. [, c9 l
state: present
, V |& M, V' g! Y9 ^: j4 d update_cache: true0 G- A+ N, |2 c5 p" Y' }4 p+ A
tags: tools
. T' E) p+ J; \& f# ~6 J" t - name: chrony_service+ A2 y$ c% o2 R: H
systemd:# ^! `! ~" u+ J
name: chronyd" d1 A- [) G* A u% N$ L/ T' u: `
state: started #指定服务状态,其值可以为stopped停止、started启动、reloaded、restarted、running
4 H0 g6 R' o/ o enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动8 z3 {& |$ R+ l4 M
daemon_reload: yes #yes 重启systemd服务,让unit文件生效9 ~' A. j H: z1 d0 G) i; ^9 E
tags: chronyd2 Y. ^( D' v m/ [
- name: config /etc/hosts #关键 生成hosts文件, X" ^ X. f. N7 z$ a; m2 J5 k8 C
template:
7 |# z& O# k% x' D' R5 \ src: hosts.j2% n9 n7 y% a) f! c+ Z: q7 H: q
dest: /etc/hosts
) Y, H3 l! t% K% m: n ?- h. } mode: 0644
# M+ J( k4 r" A; U' S" [; B backup: false; q6 C) J0 J4 T4 s' K
tags:$ f" {- m7 m& G! \; s# f+ H
- hosts
1 i' b/ K2 K6 ?' e2 ]! @ - name: set hostname #设置主机名3 h( b8 K# C$ d. g: b7 C
hostname:
- Z5 U, d- w0 @9 ^" X/ N+ d name={{host_name}}
; H* H" Y. w& }& A! K - name: set timezone to Asia-Shanghai #设置时区
3 p1 w. B5 z% G7 m$ B5 ^, r shell: |0 r; u0 Y! D7 M- H9 x2 b
/usr/bin/timedatectl set-timezone Asia/Shanghai
+ L# p0 r# q9 x( e chronyc -a makestep; ?6 ^3 y5 ^! R, `! p
tags:+ v4 z6 C! @: F3 r/ d
- set_timezone
$ [8 o( Y; K. z0 a' `% ] - name: stop firewalld service #关闭防火墙8 h" g1 N. o7 w0 ^
service :
9 A. Q, T, B' @( t* j/ f( I name: firewalld.service
, w2 a5 ?: m p' y$ i1 {& S state: stopped# B2 [6 {$ B3 @. _, M
enabled: no
& Z9 \& a- \' K( { register: firewalld_service_result- v) c7 r2 n4 c0 t
failed_when: "firewalld_service_result is failed and 'Could not find the requested service' not in firewalld_service_result.msg"
. c1 @/ J8 F1 l* y tags: stop-firewall6 B& ^4 ^7 m! Q! t
- name: Write noswap systemd service config file
0 c) c: _/ S) \: I( o template:0 p# a& M; l" h
src: noswap.service.j2
( [- \+ d. ]. [% Q7 a7 d dest: /etc/systemd/system/noswap.service
9 e4 ^& M& B! i* b owner: root( b2 N- C- i1 X0 q7 `3 A
group: root5 g. `% X% d$ J
mode: 0644
# i8 I- @: u+ |+ T notify: noswap_service
& a9 u# T& p6 _, S* U0 a: S - name: Disabling SELinux state #关闭suse5 ?: d& b1 x( l: V5 P* q
selinux:
/ s4 x8 k( }( W! ^) y state: disabled9 s: a2 ?' k5 n' q$ y1 D! f
- name: Reboot the machine #重启机器; P# L0 n4 H# z% I
reboot:6 Z2 z* M& @- N$ M3 v
reboot_timeout: 300
) I- H+ K% M( L" ], O: T9 ]# Y( d5 k7 N8 C
templates/hosts.j2内容:
9 x- w$ q+ G; \4 j9 Ibash 体验AI代码助手 代码解读复制代码5 }! Q1 O6 ^) l
# I: Z0 d0 M1 x* z8 e127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
1 a, W9 E( @+ {9 A$ i: |. K/ S) O5 B::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
( s- M0 J) |& f4 H2 u/ `
' V5 n0 R+ a' m6 C. F0 o6 S$ j* u2 d6 T" j5 w) l( n
{% for h in play_hosts %}; w3 r; j4 J p5 J( X1 h; C/ M: v
{{hostvars[h]['ansible_default_ipv4']['address']}} {{hostvars[h]['inventory_hostname']}}7 R9 {/ o" d8 U
{% endfor -%}
1 g0 x K# j9 o4 I" T0 S( ]$ V: U3 f0 M3 Z) o0 k: L: Q) T
执行ansible-playbook -v 2.config.yaml完成相关配置工作+ ^6 o2 @ z" f0 i/ u, H, S
安装docker
' B4 n3 N4 t6 G \$ ~9 x按照官网说法,可以使用docker或者podman,本文选用docker。
9 \5 J6 Z$ [8 {2 K2 ]! W剧本3.docker.yaml内容如下:: f: V2 a0 r5 F2 H2 b4 S6 O
yaml 体验AI代码助手 代码解读复制代码- name: install docker! M7 N" K& g0 [5 B
hosts: all. t" A K( S4 E- n( @
gather_facts: True) y7 d! V I9 `8 j, J, G0 @
vars:
9 y6 ]4 z! u. |9 f DOCKERHUB_URL: registry.aliyuncs.com/google_containers
6 ]: {" d* n" m; o handlers:
# t: l& M: n* |$ T2 g tasks:
$ m# o! _8 s+ J" U" H' Z( ]* T - name: mkdir -p /etc/docker/
A+ s6 s5 b3 H+ e! H* d file:
* ~" ~! B9 j/ M$ P+ K path: /etc/docker/
9 o' g1 g: j+ e) P/ ^$ m3 m state: directory
& J' f/ m7 [) d% [ - name: install docker6 ?& _% W8 W" o1 L' ^
yum: name=docker-ce* _5 k0 b3 d& u% l: S1 O
- name: change config of docker% w3 D& R4 \% x: K
shell: |
! B0 Z& w c- m+ \; { cat > /etc/docker/daemon.json <<EOF# E! D, d' @. U: d
{"exec-opts": ["native.cgroupdriver=systemd"],7 I/ Q7 S: H* W9 g( q% d
"registry-mirrors": ["https://registry.aliyuncs.com","https://registry.cn-beijing.aliyuncs.com"]
2 Z* w) Y4 o, _! X }3 E. Z) `! ]( U1 ]7 V
EOF$ i' c4 w: x1 P v" q- _* M7 @
tags:3 t$ U$ R* M% [4 f
- config
* l% u% D9 w) b - name: add systemctl! ]3 M I1 R3 ^7 A
systemd:' d& `, N* k/ ?0 B8 v
name: docker.service! {% S* S' o4 T" h
state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
/ A! z i# d4 q8 {5 O n enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
0 I1 W" l9 ^' d) s daemon_reload: yes #yes 重启systemd服务,让unit文件生效9 ^2 |5 H4 I9 R/ C b
tags:
5 g. Z9 ?" Z! S - docker-daemon
! h# l% b6 Y+ k; r. D - name: docker login #在阿里云镜像仓库开了个账号,用于同步墙外面的镜像(https://cr.console.aliyun.com/cn-beijing/instance/credentials)+ u z8 W# c& F% a7 {, H# G& c
shell: docker login --username cyxinda@163.com --password *** registry.cn-beijing.aliyuncs.com
z/ M3 h2 K# O4 L tags: login' m) C5 r# g. d R
3 z. c+ D3 ^# A: s5 w执行ansible-playbook -v 3.docker.yaml完成安装docker的工作
. M6 E* i, X" m- ^3 I! b$ O开始创建ceph集群
5 W3 [* r; y6 ^. p安装cephadm
- O1 ]/ D$ h7 C继续使用ansible为集群中每台机器安装ceph
p# Q5 w6 [2 P: S; k/ F' Y( {剧本cephadm.yaml内容如下:4 k* w' i- q1 }# O7 v
yaml 体验AI代码助手 代码解读复制代码- name: download ceph
' i* L; @) y) _' U4 \# j: c i% e hosts: 127.0.0.1! G, g# X$ f: q! o
connection: local
7 Q* ? U+ G; T ~% K) J+ S gather_facts: yes |/ i8 Y( x: b5 r7 Y
tasks:5 k2 X+ k( ?! q3 l: \ L
- name: download cephadm, g& X- s/ a# I. j$ b( S
get_url:4 m- ?2 f7 I$ E& d, Y6 O! ?
url: https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
$ z4 C% y# G- M& [- ? dest: /tmp/ceph/cephadm
$ k1 @* F9 z4 M$ q: Q j" d force: yes& n/ c* q% |; C# ~& s1 S
mode: 755
( W3 {! A8 i6 m* B% ?# ^ timeout: 600% {- L" [" q% W" V9 [* E
- name: download cephadm and install
4 n) p) _! D; w5 w0 n hosts: all
8 W- b2 u& i2 e( | ] gather_facts: True
/ M2 w+ [ c# e1 Y tasks:
0 J3 B- N$ Q; a/ Z, X - name: mkdir workdir& R' l# z6 ~7 G/ _- R6 u
file:% z5 B- E4 M/ d5 Y
path: /tmp/ceph
8 S& J; `" e3 p! p* _) e" g! R& W state: directory
$ x' S0 [: V2 d8 s! ~5 `$ j - name: 分发cephadm安装文件
) q5 q0 V, r# T# j8 P/ j4 u9 M copy:
2 f# Y, v+ {0 f- ] src: "{{ item.src }}"6 y: w* }! I; b8 Q
dest: "{{ item.dest }}"
& ^0 e$ P. t) A- ?" G owner: root
# T& C5 p4 Z8 l H) k0 S: s$ s group: root* q' s$ y, d3 S, O
mode: "{{item.mode}}"
5 C% g+ v3 `! f0 n9 N. j with_items:
; y2 I. F/ o1 _; l, E; f) v+ D0 e - {src: "/tmp/ceph/cephadm", dest: "/tmp/ceph/cephadm",mode: "755" }
- p) b% P7 c3 k5 Q) M% `) r tags: cp-cephadm3 z- f J5 t' x4 C0 \
- name: install python3$ N1 g* N9 X3 A8 s& N( a% B+ u* u
yum:
4 S& B7 j& W( V3 Q0 r name:
& ?3 d5 k0 m' j6 [- n - python3
6 a: k# _% W+ ~. M$ [( d - chrony, u. k# j+ Q0 o) H1 x9 X
state: present: c& v/ X; F M
- name: add systemd
) L: Z0 ~( A% t systemd:8 e* X% D( P! X6 F: q+ i
name: chronyd% y4 l/ L+ P% T1 W3 d1 e
state: started #指定服务状态,其值可以为stopped、started、reloaded、restarted、running
% r& O8 B0 U% M+ d3 w ? enabled: yes #指定服务是否为开机启动,yes为启动,no为不启动
( g7 G! b' `# g4 t" m* v2 i% C7 n! }' k daemon_reload: yes #yes 重启systemd服务,让unit文件生效" S9 e; J! p7 @5 z
- name: add ceph release) a5 |: n) ?) [1 c! M
shell: /tmp/ceph/cephadm add-repo --release octopus. w, C* o1 A5 ?/ t- Y J
- name: install cephadm- K* M6 N& W+ Q3 y; |/ }, y
shell: /tmp/ceph/cephadm install
% Y# \9 u0 W$ r# b3 @ - name: which cephadm
# K9 d9 K$ h9 ?2 K shell: which cephadm/ d/ g- |" k; R" a0 I
register: which_cephadm
# `" s" I8 W0 K$ W. f tags: which-ceph6 j! N! T" i m1 ]# x
- name: show' x6 `* b* _1 e h2 o' x
debug: var=which_cephadm verbosity=0 #check.stdout 显示出的信息会看的更清晰点
; d7 @& d$ D& [0 _. u9 _" x; t8 p tags: show-result
7 F8 G* S/ O! i* T& \0 `+ Q0 r& R
* D/ n1 P; @+ r; n+ k; C" m8 s执行ansible-playbook -v cephadm.yaml完成ceph的安装4 w" F2 L" c h) a: M) G! A
; m2 g) p! }. c' Q0 z; u7 R引导集群) M3 J( R. Q9 o) p& p
将master0作为引导主机,在其上面执行如下引导命令:; A' {0 B: Q* A/ `) r7 Z
bash 体验AI代码助手 代码解读复制代码- x7 z5 i/ W$ E. L8 U3 ?8 m# w
, G# w1 y2 _4 R3 L6 t' T
[root@master0 ~]# mkdir -p /etc/ceph" S* v$ f. l; z# U+ j
[root@master0 ~]# cephadm bootstrap --mon-ip 12.70.10.161: P2 m& \4 E4 q. T- ]: _1 @! {/ v
Verifying podman|docker is present...# ]! Q( g+ ^3 ?& F
Verifying lvm2 is present...! c9 a) N# W4 l8 {* B
Verifying time synchronization is in place...8 P, l) y3 k* l6 f# N
Unit chronyd.service is enabled and running, B- S( h7 j( ?: ^$ Z7 J
Repeating the final host check...8 f g' K/ `+ P1 M. U& G3 X- w, l0 e' \3 k
podman|docker (/usr/bin/docker) is present* W# Z$ W0 x0 O E6 M2 f
systemctl is present+ g0 B I0 p, s5 J
lvcreate is present+ C3 N1 ^, _$ T3 ]( Y
Unit chronyd.service is enabled and running
! X. l9 s' W9 M" A' I' _) qHost looks OK
S9 |- a, u: E( UCluster fsid: e3386564-bb02-11ec-af56-525400299ff7" M3 Z3 @1 O3 `
Verifying IP 172.70.10.161 port 3300 ...6 f0 b' R: b2 H# v0 B6 P, F3 v- Q
Verifying IP 172.70.10.161 port 6789 ...
, |) E% f8 r* `3 P/ M9 yMon IP 172.70.10.161 is in CIDR network 172.70.10.0/24
& e2 y X9 }. ]3 c% XPulling container image quay.io/ceph/ceph:v15..." D* P9 x' x ^) l8 h, C! F5 ~
Extracting ceph user uid/gid from container image...
- a) F( Z4 z ?# `* N; wCreating initial keys...
6 h0 B4 z! o/ [ HCreating initial monmap...
* ~' ^' ^; g+ U* l& X$ |8 b: uCreating mon...' A5 F, L( z% _
Waiting for mon to start...( N2 O0 Z5 r1 ]" M! E0 t
Waiting for mon...
% Y" }3 m! j- E: O- @+ Lmon is available
+ q2 K+ ]& d# Y. QAssimilating anything we can from ceph.conf...
# A7 m4 r4 t7 F& R& M \Generating new minimal ceph.conf...
, j& ~; s8 v1 F- ]1 e& p6 gRestarting the monitor...7 B% j/ X( d. ?: n! B+ q
Setting mon public_network...
8 F7 T" D' S( a* p; {. `8 i* @6 _Creating mgr...
3 T7 \- ~- I( e$ x6 b" J; nVerifying port 9283 ...7 {9 ^; c. T' d& T! B% r# c
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
& l% h9 ?" G, y6 q0 @Wrote config to /etc/ceph/ceph.conf" p; {. Q8 v3 |+ ^% ?% H( {; b
Waiting for mgr to start...0 f# P2 w- J( T: w' N- J
Waiting for mgr...
( l X2 E( {5 `: Y9 u9 ?* p* Zmgr not available, waiting (1/10)..." ^3 W9 P% D2 Z Q2 O
mgr not available, waiting (2/10)...
, F: s& S. L, cmgr not available, waiting (3/10)...
* Q3 r, t: r$ ?* v- [- l& K$ o+ g# omgr is available
7 U5 ?: t; N8 }: o/ B( g6 J5 ZEnabling cephadm module...
. a) a4 m3 {7 U% x+ ?- J* zWaiting for the mgr to restart...: N7 d) x B/ n" p# L7 L
Waiting for Mgr epoch 5...
- U! Q. g( q+ Q1 I9 ?Mgr epoch 5 is available
- X4 [* t) U: E7 F: L# P2 @+ X1 WSetting orchestrator backend to cephadm...
0 q! n) u- x5 }' wGenerating ssh key...
" M5 c# u: ~! y0 l( `Wrote public SSH key to to /etc/ceph/ceph.pub& C0 e; S6 {0 ~8 W+ t& p9 f7 [
Adding key to root@localhost's authorized_keys...
+ _* ^5 v; c! ?Adding host master0...
2 j! v/ E4 u9 n/ X8 JDeploying mon service with default placement...
9 r% D7 x; Q! V( zDeploying mgr service with default placement...
: U/ v8 }( R8 J; i- VDeploying crash service with default placement...
9 @) S" k2 e! g' u9 pEnabling mgr prometheus module...
2 C F, F" B2 N0 c+ YDeploying prometheus service with default placement...
, t6 ^( C- q5 X9 O D! hDeploying grafana service with default placement...
* |3 ~' s% t: A) b h' o& W/ xDeploying node-exporter service with default placement...$ K3 b; ?/ L) C5 K; F( t" k0 d/ W
Deploying alertmanager service with default placement...5 _% i' `3 z s& c! ?
Enabling the dashboard module...' e% H ?' R, ]9 H s1 ]. P: j
Waiting for the mgr to restart...
, H6 l$ v- H* s3 ~( @) PWaiting for Mgr epoch 13...
/ s3 d+ W2 i a# h9 A% ZMgr epoch 13 is available
% F) S) E2 n, Y/ ^7 X0 |! a2 LGenerating a dashboard self-signed certificate...
) B( B: m& h. a) Q$ D( W" k4 b$ OCreating initial admin user...8 `0 o9 @" E! L" x, u
Fetching dashboard port number...+ J; E: M4 t4 V1 D8 H9 t
Ceph Dashboard is now available at:, j) U, s c1 N# k# f1 J
; t7 ?* f: f' U' ]! c5 @ URL: https://master0:8443/
( _2 R& }2 B( L% p+ u! c7 n User: admin
( i+ u y% |2 t& j- Z2 r Password: vym1bdeajd
7 K- W4 l5 A7 }, j3 f
2 F, z& X9 b% N3 Q& `( R) t/ cYou can access the Ceph CLI with:6 c" |8 G9 Q* r2 K/ u
4 f$ I4 p1 D% |2 b$ n* ~
sudo /usr/sbin/cephadm shell --fsid e338664-bb02-11ec-af6-525400299ff7 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring' Y9 n- c6 ]2 \
) J$ ?, Q! f% R9 l- APlease consider enabling telemetry to help improve Ceph:
7 w ^# H; q8 a9 R. n* G2 R9 } Y, x& f* e4 \
ceph telemetry on
9 D- N, H( c0 W0 i) h
* J. ?0 i: Q( K9 L4 w7 n& RFor more information see:3 O( h( J9 c$ e7 Y4 A6 b% [
" S' [, D8 n+ p2 u d' ~ https://docs.ceph.com/docs/master/mgr/telemetry/
; X0 d& s1 d4 ?, |3 C$ P6 S* i. f( n% ^' f2 k% [7 z8 u$ Q* a
Bootstrap complete. p: j6 M, L4 t' |& F4 D1 e
; b8 b$ e7 X) y& A# v
) z/ }. `, h; L# N4 I9 h1 p在命令执行过程中,有如下提示:8 S) I- R6 t# s$ y; }* m5 d
bash 体验AI代码助手 代码解读复制代码Ceph Dashboard is now available at :
8 b5 u8 e* d0 X( i2 \6 j! X" y URL: https://master0:8443/
3 x9 O6 t5 r& Q8 V+ k: A User: admin, i6 i8 t! Q7 h+ O- I3 H
Password: vymdeajd1 H$ B9 z2 S: X0 t
m* Q( {1 o# d按照提示,在浏览器上面可以访问:* i% J) m- |$ ]: C
) U1 f; r" C& Q* w7 W: K
进入到管理页面后,如下:
/ E% S$ k& {) Z4 F# X; X+ C, n
2 y9 k& ], ?9 ~3 A% ^$ a2 n1 z参照安装文档,该命令将:$ P; `# u: B/ P1 T
在本地主机上为新集群创建一个监视器和管理器守护程序。
0 v$ S* {: _0 O1 q! \3 b5 B- F- P, m4 k1 U7 P) ?3 T! @2 ^
为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。9 u% {: ~5 Z2 e& F' B
将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.' K" n) p v' L+ _' F
7 H% w/ n7 ~7 C& a3 j+ D
client.admin将管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.
# B/ }8 @. }8 y+ z& l将公钥的副本写入 /etc/ceph/ceph.pub.
1 m# x' y; Y. ?/ {启用 CEPH CLI(必须)
4 S6 w Y' B; a8 q: J: y继续在引导机器上面执行如下命令,即可开启ceph shell client
& f$ D( C n; A" T1 V% |注意:后面的ceph命令,均需在ceph shell环境下执行% w( @: t6 v. ^& T
bash 体验AI代码助手 代码解读复制代码
9 Q- V8 b3 M# ^: {- H3 x1 Q* T# O$ _3 R% ^5 x2 z
[root@master0 ~]# cephadm shell, s, Q6 B$ \ x3 m3 Z5 m* J
Inferring fsid e3386564-bb02-11ec-af56-525400299ff7
5 L9 D# ?, X: x+ @! BInferring config /var/lib/ceph/e3386564-bb02-11ec-af56-525400299ff7/mon.master0/config
* h; u+ J: `- W5 S9 j; W3 VUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
; f: a9 |: {, J6 e: h+ F9 n7 r; G; Q3 a2 o! u9 n; K( \! p2 b
[ceph: root@master0 /]# ceph -v
* a+ x) t" o" Kceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)' u; |5 D1 S' N8 [% f
; G0 m q* R! I2 |. M0 {) e9 h
! ]. t3 a \% Q0 N6 A5 r
[ceph: root@master0 /]# ceph -s D" w4 D$ ^2 ^9 O2 ~9 }8 f% T! q6 |
cluster:
$ C% z+ w) ]5 a0 ]' W5 f id: e3386564-bb02-11ec-af56-525400299ff7" s# [8 d7 J1 r$ \4 s( i
health: HEALTH_WARN
6 V4 P/ E% r" o7 \# v& X( M OSD count 0 < osd_pool_default_size 3" M0 w' Y3 ^% l1 ?+ N: x
& I2 N. |: ?1 a5 |$ M7 Z( L services:3 d- U b! @8 w E$ z3 D
mon: 1 daemons, quorum master0 (age 48m)3 ~; P' N F) _% k
mgr: master0.ojikws(active, since 47m)
3 x' ^$ p4 v1 I1 u) }) x9 O; ] osd: 0 osds: 0 up, 0 in: @, z* f d9 `& q+ {
( N2 f1 L3 ^' ], I8 m% p3 Y, R8 | data:! x0 U) g8 |, O9 e5 u
pools: 0 pools, 0 pgs" z" O( @) G- ~# z, I8 n, \0 O
objects: 0 objects, 0 B
# t- X8 u( P+ h2 H3 Q* Y* G5 B; l usage: 0 B used, 0 B / 0 B avail- T0 b' n& q o, r
pgs:$ }- }$ I0 u; Q7 {" {
0 N2 h$ t5 v0 `* V- Y
将主机添加到集群. O/ e/ S: K; ^, P( O
& F5 P, O- y) b# d3 L' k在新主机的 root 用户 authorized_keys文件中安装集群的公共 SSH 密钥# w2 ?$ Y8 j+ h$ ~3 K# K
8 T: V1 r# [; Q* z
bash 体验AI代码助手 代码解读复制代码
2 s, k* a5 M( _" C% [( z2 b
) i0 Q0 t: m* F[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master1
! t3 E& R+ o; b- I& B1 M/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
; p# y+ s# A/ HThe authenticity of host 'master1 (12.70.10.162)' can't be established.5 i1 t( V4 g7 V; B N
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.- |) _" J! S5 u J3 S; e/ u9 |4 r
ECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.
9 K* Q! ~3 X$ L, _) W7 k( xAre you sure you want to continue connecting (yes/no)? yes
9 K& `& v6 ]7 N2 H3 e; S. xroot@master1's password:; S! d+ H, }6 f8 t* q0 @
3 [7 O# Q7 z9 W$ F( f5 \" h9 g2 rNumber of key(s) added: 11 K$ m" ^0 C5 I3 D* K5 g- H
/ X# C9 m, n5 I; x! p {
Now try logging into the machine, with: "ssh 'root@master1'"6 n$ C! F2 B0 I# |
and check to make sure that only the key(s) you wanted were added.) J& p8 B" T+ d( ]! Z
* i Z: X' `) f8 p
[root@master0 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@master2+ Y! ]: @9 U# A6 O; R2 F& f
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"
+ l1 Y P& k6 X6 `The authenticity of host 'master2 (12.70.10.163)' can't be established.( n$ P! x' n( r' P& F$ ]
ECDSA key fingerprint is SHA256:J40vT3JXLYRku40nj9oOq1XQMbnkTXZ2Qc5IDFAy4xc.
! i( M. ? Z4 u8 r& u% m1 Z' YECDSA key fingerprint is MD5:8d:ef:46:df:ce:06:7d:86:05:e9:04:ad:68:12:40:8c.8 \4 v- A1 A) x' L( `! i
Are you sure you want to continue connecting (yes/no)? yes
]* O4 U# u' x9 droot@master2's password:
6 k7 F8 d1 Q% f# T( `$ t% o9 k! B n& E
Number of key(s) added: 1
* A7 z5 ^% _* b; ~: C1 }" ^: ^0 ?% J: v, [3 V1 ]
Now try logging into the machine, with: "ssh 'root@master2'"! S6 G4 V! w# T! ?; F& S: P
and check to make sure that only the key(s) you wanted were added.
$ R8 g S2 K- T
% X7 ]& \. S8 ^# Y; A这部分本来也可以用ansible做的,但是懒得写脚本了,就两台机器,也就罢了3 G1 f7 @1 ^1 k; Y: P" W; [
添加机器到集群:
9 l% w" u/ |) H: V) g. F9 Wbash 体验AI代码助手 代码解读复制代码* f7 M @, N; ?3 k! U% B# d
) Q+ v8 P4 A& p. `+ k[ceph: root@ceph1 /]# ceph orch host add ceph2 12.70.10.1627 [5 g9 f) u' I9 q+ X
Added host 'ceph2'. n7 g0 C' M" V
[ceph: root@ceph1 /]# ceph orch host add ceph3 12.70.10.1639 O' n9 v! g% P, X
Added host 'ceph3'
8 N/ D' q. }% a) d, F[ceph: root@ceph1 /]# ceph orch host add ceph4 12.70.10.164( p3 w1 r3 e8 ]0 ` Z K
Added host 'ceph4'
; X; P7 {1 R9 ?0 z& P, U4 X( D[ceph: root@ceph1 /]# ceph orch host add ceph5 12.70.10.165
6 B5 \1 D) o2 r, `& |Added host 'ceph5'
% d; K H7 e7 k[ceph: root@ceph1 /]# ceph orch host add ceph6 12.70.10.166; }# v2 }; a/ o! r# r% t
Added host 'ceph6'
- R; o/ G& c, q, v$ w
$ e- D8 X+ e9 n' o" o% H1 i1 x2 B$ D3 X. Q
添加多个监控器6 t5 b' \9 y$ l7 O+ y3 n
配置监视器子网:6 E+ } F5 ]/ F; m4 b
bash 体验AI代码助手 代码解读复制代码
+ `7 |; V# U" I1 P[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
' P0 p+ v8 L% y; e) ?$ K[ceph: root@master0 /]# ceph config set mon public_network 12.70.10.0/24
: N+ n. M/ H. Q$ s
& y# t; T+ e5 x6 [' t5 x) E! v##要启动三台监视器,需要调整监视器数量:
) E) z, T* `/ [1 {8 e) n[ceph: root@master0 /]# ceph orch apply mon 3 % L( U( j5 p/ B! V! s5 Q/ b8 v
Scheduled mon update...
# P7 ^9 ]. s0 |% ]8 ^5 K. i3 E" ^+ Q' C6 ]9 H U/ w8 h: Z( m) T4 p
按照官网的说法:Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监控守护程序
8 L7 \! ]6 X7 u( E% ?3 K2 h; Q在一组特定的主机上部署监视器,请务必在此列表中包含第一个(引导)主机。
' Z$ q0 `4 k8 _. xbash 体验AI代码助手 代码解读复制代码
5 t- @8 ?- k3 F+ v6 m, }0 `, j3 i2 \
9 @4 s7 d: M O2 N. G$ N[ceph: root@master0 /]# ceph orch apply mon master0,master1,master2
# z* y% O7 D# c; u' a% p/ xScheduled mon update...+ L7 P/ m( K0 y$ y7 s
##加标签
9 H9 w* C+ C) @; [- ?6 A[ceph: root@master0 /]# ceph orch host label add master0 mon
; ]" k0 y" e OAdded label mon to host master0" ]( _* L; E1 J; L- [
[ceph: root@master0 /]# ceph orch host label add master1 mon
0 j+ j6 D, m+ M7 |4 RAdded label mon to host master1) r, F! S( I" f/ X% T& O2 R
[ceph: root@master0 /]# ceph orch host label add master2 mon
8 w9 w# Z, g, P3 _ _Added label mon to host master2
b5 {% ^/ V8 k& u; G3 P
- n' J' p* b' E, Q/ r8 h[ceph: root@master0 /]# ceph orch host ls
4 H& ]( Y9 s; b2 m/ Y; AHOST ADDR LABELS STATUS
* o4 O8 ? T; n' B3 F+ {4 Q7 nmaster0 master0 mon
- ^& S7 \( j' m! `" w4 d4 pmaster1 master1 mon
1 O+ f }* M0 U! Y& U+ `master2 master2 mon
( s' j0 u9 Y9 t1 z c8 N' J/ k5 E3 n3 m; W9 p( |) o( t6 X
[ceph: root@master0 /]# ceph -s2 A4 m- D" M. v" t0 P
cluster:
* n! U' }# R; V1 `- t; u, ~ id: e3386564-bb02-11ec-af56-525400299ff7
" `* @. }7 L1 W2 g health: HEALTH_WARN8 u4 J5 M2 M5 W- ]0 y0 Z# \
OSD count 0 < osd_pool_default_size 3
+ I" {! h* K! y2 h% o) u
1 p1 c7 r, M' e$ \1 q services:
' u5 P" m1 Y( }* w mon: 3 daemons, quorum master0,master1,master2 (age 88s)" x- U& B# }6 E. L- y/ K e
mgr: master0.ojikws(active, since 73m), standbys: master1.uxevld. A6 P1 d7 d3 W5 a
osd: 0 osds: 0 up, 0 in
# f4 |" O9 }5 S9 p! O/ M& M l
- j% w9 K( J$ a# N$ C data:
* m( w: X1 h: b/ D pools: 0 pools, 0 pgs
, ?3 I4 W' I% D objects: 0 objects, 0 B" N* C/ \( z. F* b% u$ _
usage: 0 B used, 0 B / 0 B avail0 z) j/ T0 x7 Q- o1 l* t' C0 i
pgs:+ D2 O# \6 {- X4 W$ j% Q* Y$ a
- Y1 E; {! n) @8 E9 B; {7 H
加入ODS# g; \0 a! f5 w, ]9 s# Z8 i. I
可以看到集群三台机器上面,一共挂载了6块磁盘:
' \: x, L. }" b6 r5 U/ Vbash 体验AI代码助手 代码解读复制代码
9 X+ V D0 h0 t/ f
$ Q- H! N, Z5 T0 N6 _0 |0 i[ceph: root@master0 /]# ceph orch device ls
1 T' g5 Y( L9 E7 QHostname Path Type Serial Size Health Ident Fault Available4 k4 g- L" f0 G( @& @3 G& K0 _0 F
master0 /dev/vdb hdd 536G Unknown N/A N/A Yes
, q" h) q7 R7 R5 T1 amaster0 /dev/vdc hdd 536G Unknown N/A N/A Yes
$ J1 X s# t) w V: R! Qmaster1 /dev/vdb hdd 536G Unknown N/A N/A Yes
/ u% k( w* E/ H( f( Gmaster1 /dev/vdc hdd 536G Unknown N/A N/A Yes
( c$ b- z4 G% K J7 smaster2 /dev/vdb hdd 536G Unknown N/A N/A Yes2 S- s! H% }9 l; y" k. K. L
master2 /dev/vdc hdd 536G Unknown N/A N/A Yes$ l' y% R2 V3 D1 i# f, i9 R
5 l6 R9 _. u9 t _ [当然在每台机器上面可以列出块设备(/dev/vdb 和 /dev/vdc):! O* x& f# `% c" H
bash 体验AI代码助手 代码解读复制代码: A x$ A8 u% \, [/ q3 p D
8 @# c& W, C9 C- F" |
[ceph: root@master0 /]# lsblk. ]" C5 G8 I. D( c) v% y6 b1 K
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT8 J( \% M, h1 R {
sr0 11:0 1 1024M 0 rom, N$ g' z4 D! R" p P
vda 252:0 0 500G 0 disk
% i3 Q9 I8 i9 @, @4 c$ ~$ {6 e|-vda1 252:1 0 1G 0 part /rootfs/boot
- Q# R$ `) c% N! V7 w" \! u`-vda2 252:2 0 499G 0 part$ s# g# X+ z& M+ k. L0 h
|-centos-root 253:0 0 50G 0 lvm /rootfs
7 Q' \; I: Z( |% H F* i- q& t. W |-centos-swap 253:1 0 7.9G 0 lvm
" x' {) q( {/ y) f `-centos-home 253:2 0 441.1G 0 lvm /rootfs/home5 f( l$ H3 i! ?, `
vdb 252:16 0 500G 0 disk
8 d8 z7 Q! Z5 _9 I! K7 uvdc 252:32 0 500G 0 disk/ d9 ^: n' c" V x4 e7 f
; a, H+ ]( H9 N& p! A; h按照官网说法:设备满足* i( j* c% U+ Z8 n
如果满足以下所有条件,则认为存储设备可用:
: h5 K4 n6 A" \2 M- G5 G- H; v/ z2 n
设备不能有分区。
4 b X5 ?! J; T; G设备不得具有任何 LVM 状态。2 h' w3 Q) ?4 M5 }) F% l
不得安装该设备。
+ Q. n, Q8 s4 t, f设备不得包含文件系统。
* R4 D# I) f- C设备不得包含 Ceph BlueStore OSD。
* x: Y" n ^: V; }! i设备必须大于 5 GB。
- Z5 P+ i. m6 R; i( U! W
/ `; r O/ M$ x$ `( f- J( tCeph将 拒绝在不可用的设备上配置 OSD1 K! I: L" j! C% V; N% }( k
可以使用如下命令,将所有可用的磁盘添加到ceph集群中:
( H: N v) |1 k" Ebash 体验AI代码助手 代码解读复制代码
+ V) P% m9 D0 Z" `7 F- C' x; U3 {0 `/ N3 ^2 J" T, I! J- Y, L
[ceph: root@master0 /]# ceph orch apply osd --all-available-devices* A7 y1 f% ~0 D, d! d
Scheduled osd.all-available-devices update...
8 X5 S5 f, K# P* Q: n9 O( Y- B9 P[ceph: root@master0 /]# ceph -s; S8 ^! }( H6 o3 B5 l, i5 U
cluster:
8 j q, s5 P4 s% A3 A9 x7 o( C id: e3386564-bb02-11ec-af56-525400299ff7! Y l( [6 X. S# E
health: HEALTH_OK
, l: J6 v. Q( f5 D/ E1 T0 b. U5 K6 p9 u# m' P2 ?6 c
services:; C5 t: y' }0 @4 C/ b
mon: 3 daemons, quorum master0,master1,master2 (age 12m)8 \) S5 R% q- w, g4 B- T8 ^* q9 z: w
mgr: master0.ojikws(active, since 84m), standbys: master1.uxevld
- L( `% [- {' W& h osd: 6 osds: 6 up (since 22s), 6 in (since 22s)# `- W8 o/ }# C5 V: t% g9 j
; L& @6 g, G" o% f* @8 } data:6 P% ~$ N; O) h
pools: 1 pools, 1 pgs7 c( y. H! Q# d8 @% x: c, n
objects: 0 objects, 0 B: K' F" \# H6 ?9 u4 {. y
usage: 6.0 GiB used, 2.9 TiB / 2.9 TiB avail
* s5 P8 j( e+ K! R) `0 ?1 s% g8 k/ Y. c pgs: 1 active+clean# E" O0 c% J. I, g; |( i9 q5 f
- x ?: W+ R7 D3 ?
也可以单独加入:7 n X5 I! }9 X/ t
bash 体验AI代码助手 代码解读复制代码& Y% y, Y; E4 D3 T4 O5 o9 J2 F; z
- W& Z' ]8 ]5 n8 G5 c) C @" I
[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdb
! S' F3 |9 q6 v6 ^1 u5 S[ceph: root@master0 /]# ceph orch daemon add osd master0:/dev/vdc
! ~% Q. t$ d, F( c- t[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdb
. m; e) b# h! f% i/ e# V[ceph: root@master0 /]# ceph orch daemon add osd master1:/dev/vdc
; r7 f1 d5 j% E[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdb
y% B n+ @2 w/ `[ceph: root@master0 /]# ceph orch daemon add osd master2:/dev/vdc
# I# h, L0 r4 [. {6 Y4 x/ }
) E% m9 Y1 x$ c, R5 }在前端看到:
0 F. K: z- Q* F1 R8 f3 u
+ \" n, p5 C7 H2 a
0 Y* E8 G- d2 z0 ^- H2 r/ X- w挂载块设备' {9 V/ }$ W+ \9 u# o
bash 体验AI代码助手 代码解读复制代码" v8 o8 R% {7 p, E; ?
8 T8 l2 `! ?6 e. Y5 j0 x
[root@ceph101 tmp]# ceph osd pool create test_rbd 32
* j0 c8 v0 @) g ]. Zpool 'test_rbd' created
+ K' R/ V1 q2 K, m1 w8 c4 c( L[root@ceph101 tmp]# ceph df5 Y' W; ?- k; x" A- G+ i1 C; C
--- RAW STORAGE ---; |( s- b% e, i% A* u) f; z
CLASS SIZE AVAIL USED RAW USED %RAW USED( {- {5 G |2 ]/ A; c I
hdd 5.9 TiB 5.8 TiB 1.1 GiB 13 GiB 0.22- Y6 e% {7 ?8 L
TOTAL 5.9 TiB 5.8 TiB 1.1 GiB 13 GiB 0.220 O0 U: ?3 O$ ~% @7 o9 ? U+ z: f
1 {) J) I# w. m2 i6 ?0 |--- POOLS ---. u: e3 f- P2 d
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
0 y2 p8 V5 _1 G: {; kdevice_health_metrics 1 1 0 B 0 0 B 0 1.9 TiB
R* N6 h' u6 U5 J' O9 W% A% q.rgw.root 24 32 22 KiB 36 6.6 MiB 0 1.9 TiB# c0 @# j* Q8 T
zone_01.rgw.log 31 32 26 KiB 965 55 MiB 0 1.9 TiB
" s2 h% ^5 w: I( F/ Ozone_01.rgw.control 32 32 0 B 8 0 B 0 1.9 TiB9 y3 E) E% ~$ c9 F6 v# P' s
zone_01.rgw.meta 33 8 5.5 KiB 16 2.6 MiB 0 1.9 TiB$ E/ [* E, |. [$ N7 ]; R
zone_01.rgw.buckets.index 34 8 672 KiB 55 2.0 MiB 0 1.9 TiB9 V. l( z4 p, [( Z5 X! V
zone_01.rgw.buckets.data 35 32 2.2 MiB 12 7.9 MiB 0 1.9 TiB$ a) l# M7 ?8 S4 V/ G/ U" C
zone_01.rgw.otp 36 32 0 B 0 0 B 0 1.9 TiB
0 _1 B. I7 Y. y. c1 ~cp_pool 42 32 1.4 MiB 2 4.4 MiB 0 1.9 TiB
1 |1 n9 F* c& P' F6 o$ l% R7 [test_rbd 43 32 0 B 0 0 B 0 1.9 TiB& k0 P, }# Y) r# ]0 u
##创建镜像
^6 h2 Q* v- z. s- X' B6 N9 ~% {4 ?# s$ o+ g/ J
[root@ceph101 tmp]# rbd create test_rbd_image_1 --size 10240 -p test_rbd) _2 k1 h: R2 V4 ]' M
* e/ X4 R2 U# [6 J' y7 a! o7 y/ E( s[root@ceph101 tmp]# rbd -p test_rbd ls& z# B- T: q( {
test_rbd_image_1
- e9 q o$ y' \% T7 o: ]8 Q0 q) H# d& m& W! H0 N
##检看一个RBD镜像的详细信息
+ @( W" h; X/ p% h! D[root@ceph101 tmp]# rbd --image test_rbd_image_1 info -p test_rbd% E! F) |5 N$ H& j# a, i9 s
rbd image 'test_rbd_image_1':9 Y( c0 y, d8 w, [) s, Z2 {! C
size 10 GiB in 2560 objects3 S* _0 Z6 i% S2 Y" J; A
order 22 (4 MiB objects)" w, \. n8 a3 z: d; a3 h7 g8 A0 b
snapshot_count: 0
: o& t3 X) S& r8 L5 K) t id: 2836b2f53ea86( Y* m; m( C0 D6 D0 N+ g
block_name_prefix: rbd_data.2836b2f53ea86
8 `" q; z- R# B. \5 e n6 \6 v format: 2
1 q0 E. x' p6 Y& ^2 t& S features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling& z% A& @& J/ K& q; O2 h! P. V$ m
op_features:
5 |& k6 W6 `' d7 h1 b flags:( O& ?( _' I, ^8 N- V
create_timestamp: Tue May 10 10:38:16 2022) ^7 e8 Z# @$ z6 f9 }
access_timestamp: Tue May 10 10:38:16 2022( R- _7 L, _9 P$ f/ j
modify_timestamp: Tue May 10 10:38:16 2022
: {9 ^9 ?( k6 }1 ` journal: 2836b2f53ea86$ e; R4 \3 ~; ?' ~/ s3 G
mirroring state: disabled4 k* h! {# Y1 x6 V1 `, f( l
' S' j& J7 U$ G; p6 R. P9 G1 _4 y
$ C: T4 t( |; {& T[root@ceph101 tmp]# rbd pool stats -p test_rbd4 L" ?# |. H8 z; s6 f+ i$ Q
Total Images: 1
3 n a: S7 t4 L* ^, O: mTotal Snapshots: 0
; h. K y& }# e/ ]+ C1 h; s* GProvisioned Size: 10 GiB* ^, M9 s" {" {# k' f
[root@ceph101 tmp]# rbd showmapped
+ T6 F+ V& p: u9 Q" T/ kid pool namespace image snap device4 N7 C6 S: q2 A! X8 e( j
0 cp_pool image2 - /dev/rbd08 V' z4 X2 X) l/ l
; {: J2 X( X, `: T- r( g& I% d! G[root@ceph101 test_rbd]# umount -f /dev/rbd0& j! a' F+ s# Z0 K3 Y7 M1 H- ?/ J
#或者" z4 u2 c5 ^: Z- w! H
- ^) K6 I" {" B& {- Q[root@ceph101 test_rbd]# rbd unmap -f /dev/rbd0
2 F9 l! g! E( G' R/ d6 k##然后将pool关联应用% x* }& {$ {2 _" J% E# `
/ ~7 w _9 Q7 c4 q3 ^" @[root@ceph101 ~]# ceph osd pool application enable test_rbd rbd
' W" r2 ~# z. Zenabled application 'rbd' on pool 'test_rbd'. Q+ C7 a5 r' |. c
[root@ceph101 ~]# rbd map test_rbd/test_rbd_image_1
+ W/ z# k" J5 T# }( ^. [' [ a: rrbd: sysfs write failed* [; G( q! o3 @; {- i
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test_rbd/test_rbd_image_1 journaling".
; |+ b7 t% b0 }" rIn some cases useful info is found in syslog - try "dmesg | tail".. U5 p& b8 g3 e( }
rbd: map failed: (6) No such device or address
1 V9 n, J- C7 c1 t6 f0 M' i: M9 W9 h( O: T3 k4 ~
[root@ceph101 ~]# uname -r
. D* H2 {4 b# \" d& @5.17.6-1.el7.elrepo.x86_642 j& P( x: b2 y% H7 R1 d) u
[root@ceph101 ~]# dmesg | tail
) y4 r* H$ G, f; i2 V F. S/ y[ 9.843030] random: crng init done2 b- b7 q6 x: W* h
[ 9.843034] random: 7 urandom warning(s) missed due to ratelimiting* S0 U. N9 T L
[ 10.669178] Bridge firewalling registered
|8 r! T. i3 @0 M[ 22.239147] process '/bin/ip' started with executable stack7 l3 P, M, ]1 V( J a* v6 p
[ 8185.140070] Key type ceph registered
$ S! o+ r, b2 l/ K' E) K, e[ 8185.140395] libceph: loaded (mon/osd proto 15/24). N/ J. |$ G x8 v: Z) W+ q& \
[ 8185.141923] rbd: loaded (major 251)
" R3 m- I5 x9 c8 c" |[ 8185.158536] libceph: mon3 (1)12.70.10.184:6789 session established8 r& G# h- K3 A# L1 R) y$ v
[ 8185.160696] libceph: client175843 fsid 7a367006-c449-11ec-9566-525400ce981f) N/ j1 A. E9 R
[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40 ) X L2 P E* q7 T4 \$ U
##根据提示`[ 8185.288221] rbd: image test_rbd_image_1: image uses unsupported features: 0x40`,可以确定内核不支持的features是十六进制0x40,转成十进制是4*16+0*1=64,即2的6次方=64,journaling
' d! y" s. J' @2 D6 _#layering: 支持分层**(0次方)**5 }1 G; y) S3 O
#striping: 支持条带化 v2 **(1次方)**+ ]4 H. _: w, S
#exclusive-lock: 支持独占锁 **(2次方)**: \1 j: l6 ], O' o+ i
#object-map: 支持对象映射(依赖 exclusive-lock )**(3次方)**$ p/ N7 P: P9 N) m7 h% h; ]# K
#fast-diff: 快速计算差异(依赖 object-map )**(4次方)**
! {# S& d' W, R& x3 g9 t#deep-flatten: 支持快照扁平化操作**(5次方)**
0 g' A1 p+ j$ _) E2 l! J#journaling: 支持记录 IO 操作(依赖独占锁)**(6次方)**
% ?; N' j9 c& r/ Y: }7 C[root@ceph101 ~]# rbd feature disable test_rbd/test_rbd_image_1 journaling
6 a& H/ g" S. D0 g9 ]0 Q[root@ceph101 ~]# rbd map test_rbd/test_rbd_image_1
& j1 S1 P! ~: o" o U- S/dev/rbd0' E& J! e+ [+ F6 `" Z( v5 n- F
#lsblk 查看磁盘6 M a0 h* a; a1 s+ N
o, v$ j1 v$ M, ~2 e[root@ceph101 test_rbd]# rbd showmapped+ N& I; A2 Y7 y- e- C9 n
id pool namespace image snap device
9 \1 h4 D* i: U a2 L9 y2 c0 test_rbd test_rbd_image_1 - /dev/rbd0* I' }! A7 S: ~
[root@ceph101 ~]# lsblk
. |! X3 {4 L: f- ]' J8 \NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
- U) k1 c |1 A1 Brbd0 251:0 0 10G 0 disk! t! p) v' s* ]$ r2 o9 i
vdb 252:16 0 500G 0 disk
/ V5 x# N2 n4 w$ @0 ]- V% \* A B└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4 0 500G 0 lvm
! [; ], W3 G5 k' W" l) t; jsr0 11:0 1 1024M 0 rom: y# y% Q6 o8 a5 j" y. d- j& L! w1 c
vdc 252:32 0 500G 0 disk
1 E5 ~1 K+ m8 o5 D: h( \+ W- ]└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3 0 500G 0 lvm9 ]8 ?! g& D' k( n8 g+ f% q
vda 252:0 0 500G 0 disk
7 n% A0 X9 W1 `. m├─vda2 252:2 0 499G 0 part
9 i8 ]) [) S- m8 B│ ├─centos-swap 253:1 0 7.9G 0 lvm2 j* s5 [# e1 E! X, J, K
│ ├─centos-home 253:2 0 441.1G 0 lvm /home& z5 a: k. a' c8 k% C
│ └─centos-root 253:0 0 50G 0 lvm /
2 j/ e+ D! o, Y. J└─vda1 252:1 0 1G 0 part /boot
5 U$ w5 a8 p& m! o2 D* a# F% k& @% T6 {. Q) I* X* ~
4 y; _- C8 |( l3 d- J$ Z
# 格式化磁盘
" g9 ^, p- d( k7 p( o- Y3 i8 I. ^0 p& |9 E: V# u/ q
[root@ceph101 ~]# mkfs.ext4 /dev/rbd0: {' N# N, R6 r/ k/ D% Y
mke2fs 1.42.9 (28-Dec-2013)
$ ] u6 D5 V1 SDiscarding device blocks: 完成2 U& f- d% o9 r3 B; y. t1 J5 q0 q
文件系统标签=
/ v& i/ i7 R7 w9 dOS type: Linux
' G6 k' n# R m块大小=4096 (log=2)
* d7 E1 b, m8 [+ z- M* U分块大小=4096 (log=2)
2 l" O% Q" u5 AStride=16 blocks, Stripe width=16 blocks4 n- n) o+ S3 K% g6 n4 J6 r
655360 inodes, 2621440 blocks4 w! P9 }* U, p, b' P, ]: b
131072 blocks (5.00%) reserved for the super user
. C) o& `$ ~% j第一个数据块=05 s- V! q2 Y% T- y" V( @
Maximum filesystem blocks=2151677952
+ _4 I; {* X8 [" u3 U80 block groups7 z$ a, g- _/ L+ l( K l
32768 blocks per group, 32768 fragments per group
2 ]9 ~1 ~9 Y* ^: g' D2 j8192 inodes per group
& W0 y+ H% i2 hSuperblock backups stored on blocks:5 g1 N" j$ ?' k9 [ u# Y% E" A
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
4 Q0 }- i5 h( r! G1 ]
: z/ G$ B3 T7 A4 [, t3 ^4 HAllocating group tables: 完成
$ M* ^# k) E. d5 u# o8 h( Z正在写入inode表: 完成
6 k2 u, t7 S/ f; dCreating journal (32768 blocks): 完成" p, D! ^0 [& Y: W3 q
Writing superblocks and filesystem accounting information:! u5 \) \) k, O8 R0 c& O
完成
9 |5 A$ c! ]( L
3 D1 u+ N4 K; C3 g3 }: {- L##创建挂载目录1 G$ ?* E5 ]7 K) H j
[root@ceph101 ~]# mkdir test_rbd/
$ y' @# e+ H0 ?* H#挂载
e$ {/ }7 d# l4 ?9 Y' C[root@ceph101 ~]# mount /dev/rbd0 /root/test_rbd
/ N' G7 \, K% g% J/ l[root@ceph101 ~]# lsblk
& u3 Q9 z0 F, M5 D0 KNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT' _) D) m0 m4 w; ]
rbd0 251:0 0 10G 0 disk /root/test_rbd
& ^$ q! x4 t# R L0 \2 ^vdb 252:16 0 500G 0 disk
: I8 x' q9 _ p$ }9 B# B% _└─ceph--cbd3517f--a42b--41b9--bdb5--350597fb4873-osd--block--da454e2d--c289--430f--a685--9b437b5a3e00 253:4 0 500G 0 lvm
' P' n4 A5 q+ Z1 P0 x" J) {sr0 11:0 1 1024M 0 rom1 a+ ]- t# ~0 L! r8 K$ u2 y; n% T
vdc 252:32 0 500G 0 disk* z- M% a0 u. r
└─ceph--797b51d7--f835--43d7--a987--1316a2438933-osd--block--40e4dc65--08e9--4971--9187--2d05208bbb0d 253:3 0 500G 0 lvm3 j! [: l4 a; [# M: R
vda 252:0 0 500G 0 disk
- C# s# L: J7 ]; a9 e$ c├─vda2 252:2 0 499G 0 part& W7 r$ q6 ]; Y% J3 D
│ ├─centos-swap 253:1 0 7.9G 0 lvm: \0 \$ A: B$ Q
│ ├─centos-home 253:2 0 441.1G 0 lvm /home* \. N5 C* j4 f$ V' s' U
│ └─centos-root 253:0 0 50G 0 lvm /
4 x$ b# X: E0 P9 I& x. q- ~└─vda1 252:1 0 1G 0 part /boot& k3 s# H% |7 m. Q" }5 V* n
# [2 v) v/ U1 q( t4 g
#写入小说文档到挂载的目录 i- G3 x; a1 o
[root@ceph101 ~]# mv bcsj.txt test_rbd/- j9 L3 u$ D. P/ r- Q
[root@ceph101 ~]# md5sum test_rbd/bcsj.txt
$ Y1 D, o3 I1 e/ H0d615ccd0e1c55f62002134f5cac81cc test_rbd/bcsj.txt
* ] L( x. ]5 V q$ R$ s4 k[root@ceph101 ~]# df -lh0 {% E# |; N5 k' x
文件系统 容量 已用 可用 已用% 挂载点0 M3 s$ v& g' S: x Q+ i
/dev/rbd0 9.7G 15M 9.2G 1% /root/test_rbd* U2 ]( J/ ^. T7 n4 M \' F
4 k# C# u9 x* y k) _3 x
[root@ceph101 ~]# ceph df' O+ }2 [) l. F1 {8 l' m
--- RAW STORAGE ---
6 p+ F) Q* {( _6 R9 j7 r( rCLASS SIZE AVAIL USED RAW USED %RAW USED3 z% {' O5 B% t$ q& v8 x
hdd 5.9 TiB 5.8 TiB 1.5 GiB 14 GiB 0.23
# I5 H, ?6 C( x% HTOTAL 5.9 TiB 5.8 TiB 1.5 GiB 14 GiB 0.23, j2 f# T+ a5 k+ z, ?7 Q3 \" a% h4 V
7 v3 k. u; s- y5 {- O& F--- POOLS ---
1 r9 o$ H4 [/ v+ ZPOOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
. L. G- |2 n$ fdevice_health_metrics 1 1 0 B 0 0 B 0 1.9 TiB/ `) Z8 z. ?: e4 r0 ^
.rgw.root 24 32 22 KiB 36 6.6 MiB 0 1.9 TiB
H. u5 R" v- `1 t+ S1 m& Yzone_01.rgw.log 31 32 26 KiB 965 55 MiB 0 1.9 TiB
2 R+ }: f ~1 U7 w5 jzone_01.rgw.control 32 32 0 B 8 0 B 0 1.9 TiB
! Q/ Z2 w4 t- U% M+ [zone_01.rgw.meta 33 8 5.5 KiB 16 2.6 MiB 0 1.9 TiB! |" }4 v) P0 k. n3 e0 m/ O
zone_01.rgw.buckets.index 34 8 672 KiB 55 2.0 MiB 0 1.9 TiB. s- h. _3 A5 ^, J# |' [
zone_01.rgw.buckets.data 35 32 2.2 MiB 12 7.9 MiB 0 1.9 TiB# t. ~9 V% s$ r6 V5 j7 A
zone_01.rgw.otp 36 32 0 B 0 0 B 0 1.9 TiB
/ H: L9 w0 t% J, a! ~; _2 `# ^cp_pool 42 32 2.2 MiB 2 7.0 MiB 0 1.9 TiB3 V& M$ o7 r" j9 Y6 ?8 b
test_rbd 43 32 148 MiB 57 446 MiB 0 1.9 TiB6 Z$ d; g6 Y& o, Y
1 k; [" Z+ U9 T- ]- N& H- {) X, a' Y, ] V+ c5 ^
对象网关: b" w- U$ U/ a+ E: Q' m' w& ~
bash 体验AI代码助手 代码解读复制代码1 w) l# V; S# H4 M: j
2 T" ` C4 K8 nyum install ceph-radosgw -y
! u% O5 E* b5 i f( Z! C' U* o: C @+ [! I+ s! R2 e
[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'
# n: D- Y# L6 b+ }3 c* o- Y{
+ S6 s: b* G9 `4 P3 h, m! y, S "user_id": "s3_admin",4 v) X* H9 _7 h6 d2 S
"display_name": "s3_rgw_admin",
0 e$ D! h8 T* L' }8 m "email": "",! l& C8 r8 u& k. B
"suspended": 0,, m( @ Z, ~ a! L
"max_buckets": 1000,
8 }2 C9 F, O6 u% c "subusers": [],
, w/ @& v9 F" ]1 a C- t8 o "keys": [9 u1 R' K& b( ?# j4 h5 N3 G
{
% ^2 g D7 t6 u "user": "s3_admin",/ z% ^) w3 ^# j; H/ r
"access_key": "s3_rgw_admin_access_key",
+ e! y9 W) O' U9 y6 g. i "secret_key": "s3_rgw_admin_secret_key"
. i3 |) _6 l8 v }
! P9 e" n X! R! J) c ],- f+ ^; I: u l+ r* T# S' F4 F: C
"swift_keys": [],
" v/ n1 a& `* t# l$ V2 P "caps": [],
0 T2 U% X+ w, h3 B9 R "op_mask": "read, write, delete",- q% N2 X6 A( f5 s( s6 h X1 E
"default_placement": "",8 c- R9 t9 }$ \2 H3 h) E9 V% E, [( @
"default_storage_class": "",
5 N( K& U2 Q1 s "placement_tags": [],
% i: I- i# b2 e( i, Z1 { "bucket_quota": {
; I$ G: O9 Z2 p* G- Q "enabled": false,$ K! S. U! t' `$ z# p+ ~' |2 f
"check_on_raw": false,
n1 C3 G3 w K# u, N "max_size": -1,4 X; F- _2 y# P. }" z) P& X w6 w
"max_size_kb": 0,
$ A' p( {8 K9 r' g! t "max_objects": -15 p1 d4 t2 a, x: q. t* K
},7 v! Q3 O6 ], x) q
"user_quota": {
% U& n; D6 K$ Q v! ` "enabled": false,5 s6 s; \( a6 X2 f% ?
"check_on_raw": false,
! t5 u/ Q( O3 Y "max_size": -1,
0 O5 A/ }/ l2 g0 H" _7 j "max_size_kb": 0,
' K4 V* m1 T# _) r3 Q/ r "max_objects": -1- h' F$ A5 e- t) ]4 a5 _
},
+ |; [; y- R9 H+ n8 W. ?0 O "temp_url_keys": [],' Z/ ~' X4 k; V) C, ?) w
"type": "rgw",
`: v- z9 P" i: \: I! q% { A; z "mfa_ids": []
1 q4 y8 P' a# C9 M( ]1 L- \}
# R! z9 Y( Z' I4 E* A8 R, W; E
" U3 J6 m, w. ]# H5 z[ceph: root@ceph1 ceph]# A; q9 f' m7 @3 l4 P
[ceph: root@ceph1 ceph]# radosgw-admin user info --uid='s3_admin'' L7 C. ^( Y! {* e; }+ } s
{3 [: n; k6 X4 s2 x
"user_id": "s3_admin",
, }- i8 }8 j' c7 B" e1 U/ h "display_name": "s3_rgw_admin",
! d1 y+ y! O! j7 y+ o "email": "",' C. d6 f* _& e! e% w+ Q' n
"suspended": 0,
% G! S0 ~% G$ F, n* p8 X "max_buckets": 1000,
+ y" E# \4 F1 P' B, z "subusers": [],$ V+ f7 ~% l2 a" B! E$ k* |
"keys": [7 J! Y% W2 S: {2 ]( T+ ~8 o
{
2 l C' W1 T, ]. e* _ "user": "s3_admin",
+ [0 d g+ R+ O/ A0 Y' v( V "access_key": "s3_rgw_admin_access_key",6 V' P1 f7 t& W+ [
"secret_key": "s3_rgw_admin_secret_key"
& { y- p# [& T! z4 x0 \ } H+ b- p# B6 @- b( O
],
" o+ s& Z# g# f- a/ D2 B "swift_keys": [],
0 u' S: b4 Q m8 N "caps": [],2 I/ J3 X2 G# j1 m3 ~4 Z* z
"op_mask": "read, write, delete",
+ z" x. P Z2 g5 y "default_placement": "",0 ~; g0 x. \8 d' f- n
"default_storage_class": "",7 H @1 }5 A. Q8 o d) T
"placement_tags": [],
1 }$ m5 T9 c8 O1 ^- m: v "bucket_quota": {$ V; F$ }5 R8 p. M; @/ T
"enabled": false,
! {7 R- k3 `2 I. i: p( N+ |! K1 f* V6 P "check_on_raw": false,% G: D1 p7 S4 b [1 K. S2 f8 _5 O% Z
"max_size": -1,
& Q( Q2 D" s( G "max_size_kb": 0,
" F; h- _; L0 k* v5 v) l "max_objects": -1
$ v2 ^, I* v, i0 c1 ~ },
! i0 d6 u7 V* z "user_quota": {' I( f' A7 {3 M$ M- o
"enabled": false,
. _" T8 F) A! K "check_on_raw": false,
3 ~/ x8 C% S9 j# e% W* E, i+ z0 M "max_size": -1,: R1 {! m. i( z. l2 Q
"max_size_kb": 0,0 g: `4 _+ u( K2 R3 C. I0 T
"max_objects": -19 e1 j9 {5 N3 G r0 \1 e, b( l- ~
},
9 a+ E$ P6 x' D7 p( [% s. r, a( n$ v "temp_url_keys": [],
7 h$ p- z4 o' ^4 @. | "type": "rgw", D! m* q4 ]/ j' q0 z ]
"mfa_ids": [] c) G7 \/ {& R! I
}
6 C( L$ P3 c5 x" ~7 H( o9 K# R6 @( E+ c
ceph tell mon.* injectargs --mon_max_pg_per_osd=100
, w# P2 l3 l) o2 ~# F( L* e) P/ F4 x- s$ ^
#----------------------------------------------------------------------------
( C4 d- Y8 C. s" Z: v5 P) K3 D, ~. A/ ?) Gradosgw-admin user create --uid=rgw_admin --display-name=rgw_admin --system4 J1 J' I2 e1 [+ D7 R
radosgw-admin user info --uid rgw_admin --system- r2 U- E6 |0 Q/ K8 V0 |
% J- F* E2 V3 k5 B: f. l8 w2 F' X; }& x4 u' ^4 z5 [/ a a3 B
radosgw-admin realm create --rgw-realm=realm_1 --default
0 x0 Z: a1 U2 p% Yradosgw-admin zonegroup create \/ @4 h/ @* g4 \4 b) z
--rgw-realm=realm_1 \/ v% A' c% L- i
--rgw-zonegroup=zone_group_1 \
- g+ I/ x1 G7 ]7 ~9 L --endpoints http://ceph101:80 \* g. G+ Y/ W' }' v8 `9 b
--master --default
: t/ O& W ?) K, J( I) L- ]( ?) N/ ?6 {6 T" K
. w$ q! A. o# s8 [" C- R radosgw-admin zone modify \
; Z# P3 E& N, F' V --rgw-realm=realm_1 \0 ^+ |5 ^2 k/ _. z/ V; I! d
--rgw-zonegroup=zone_group_1 \
4 }! _+ V8 `3 W6 [' Q7 V --rgw-zone=zone_01 \
( q# R5 Y* l: C --endpoints http://ceph101:80 \
% l% J4 C+ N! O% }+ \3 V* _, U --access-key=IAWL6PLNFMNM0SLQNWQ0 \
. ^6 H0 {& v7 s5 A8 S) R& T --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \ \, D3 C" R7 R \9 l# f) e( K* }- Z# G
--master --default / @5 X5 W! @9 E9 |0 f9 H
! R- e' M% f1 U- j% V radosgw-admin period update --commit' W, h2 E- a& X' s; O
radosgw-admin period update --rgw-realm=realm_1
! i' f0 b! F( I$ k3 w) \6 x* `6 N+ ` ceph orch apply rgw realm_1 zone_01 --placement="1 ceph101"
% v; S8 n( Z. x& r; y6 V( `! s7 S" I1 b0 c: L. x9 W
上述命令,一定要在集群健康的情况下运行,否则会出现rgw 的docker进程启动不了的情况,正常情况下,可以看到如下进程:
3 j3 K+ U/ R$ K Fbash 体验AI代码助手 代码解读复制代码
; Q; A. h* {" t" i/ ^8 Y! ~$ @& Z[root@ceph101 ~]# ceph orch ls
7 T* f5 G3 \2 ^+ F5 MNAME RUNNING REFRESHED AGE PLACEMENT IMAGE NAME IMAGE ID
6 Q- [+ O0 c& x# W; jalertmanager 1/1 4m ago 2d count:1 quay.io/prometheus/alertmanager:v0.20.0 0881eb8f169f8 Z1 G/ n6 G/ t4 r4 F' M
crash 6/6 4m ago 2d * quay.io/ceph/ceph:v15 3edede73a7c4
6 r! I- @2 J' ]/ y! rgrafana 1/1 4m ago 2d count:1 quay.io/ceph/ceph-grafana:6.7.4 557c83e11646
/ z, ?0 S) A7 Y- Bmgr 2/2 4m ago 2d count:2 quay.io/ceph/ceph:v15 3edede73a7c4
: x+ ]) f: C4 |mon 5/5 4m ago 2d ceph101;ceph102;ceph103;ceph104;ceph105 quay.io/ceph/ceph:v15 3edede73a7c4
4 b4 Z" j4 u. b' w( W& L3 [, ^" Lnode-exporter 6/6 4m ago 2d * quay.io/prometheus/node-exporter:v0.18.1 e5a616e4b9cf. N( ^/ g6 A1 K9 ]/ Q* `4 B
osd.None 12/0 4m ago - <unmanaged> quay.io/ceph/ceph:v15 3edede73a7c48 K+ j1 r8 D$ y+ a# c& d
prometheus 1/1 4m ago 2d count:1 quay.io/prometheus/prometheus:v2.18.1 de242295e225: P' p% J, b1 z! p1 o( G
rgw.realm_1.zone_01 1/1 4m ago 75m ceph101;count:1 quay.io/ceph/ceph:v15 3edede73a7c4- b; ?8 f( u8 X$ L" E) J
/ h8 o. q0 h. V: Q) d" o
0 l- H5 j1 W: I7 z v |$ @如果rgw进程无法启动的情况,可能是集群不健康,查看log:
' r6 f. I( A! Q) @ceph log last cephadm/ N. `" L( c. G# p( y" ^5 y. V
/var/log/ceph/cephadm.log, ^# c$ ~# P! i6 W7 H! k
bash 体验AI代码助手 代码解读复制代码[root@ceph101 system]# ceph log last cephadm
4 _ Z. b' c3 S6 p2022-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
6 u' a7 c6 ?; g' z5 H3 ETraceback (most recent call last):! I+ }' R6 r6 @) N7 L, R6 Y$ _
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services4 ^! D$ z! K, M9 B0 e
if self._apply_service(spec):
% J" \5 i7 G5 w+ [$ v File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service8 E+ R- `# H$ ? s1 X! i
rgw_config_func(cast(RGWSpec, spec), daemon_id)6 A) r" o! G% x/ Z9 V& R. _
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config, O5 z, V! k: v8 |$ r0 M3 I; v% H" C
self.create_realm_zonegroup_zone(spec, rgw_id)2 ]) i& d5 {# M# _. e$ ?) k
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone" Y9 P" s6 @: D+ x
raise OrchestratorError('Health not ok, will try again when health ok')+ F% |( B8 f' m) B2 ~! R- f* ^
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
$ n2 u/ S6 |/ r6 v0 S5 }9 {2 G2022-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 ok5 P: K: z/ x& Q& o2 v* H: X+ U m
Traceback (most recent call last):
1 h7 r2 H( v9 b% Z& y File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services/ _% t W0 _ ?- F# a% d
if self._apply_service(spec):3 T V# e: g9 x( p. @& n
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
) Q: |5 O2 Y! a) e8 X rgw_config_func(cast(RGWSpec, spec), daemon_id)" w. r8 B0 c6 L; x
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
0 r2 M4 Y$ [- O8 d self.create_realm_zonegroup_zone(spec, rgw_id); u$ F- R, I* w4 N1 ^+ B5 k1 d( I
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
l) P8 g1 E" y" t) D raise OrchestratorError('Health not ok, will try again when health ok')2 O: c: K/ ^5 d. P H2 ]& W s
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
) }" G% l7 W: F& L y& C* L2022-04-27T08:07:22.102133+0000 mgr.ceph101.qhgzmi (mgr.14164) 96175 : cephadm [INF] refreshing ceph104 facts
: F( R: O: {6 ^% j- _: M2022-04-27T08:07:22.103197+0000 mgr.ceph101.qhgzmi (mgr.14164) 96176 : cephadm [INF] refreshing ceph103 facts
( D' h* [. I. w: ?! t7 k2022-04-27T08:07:22.105047+0000 mgr.ceph101.qhgzmi (mgr.14164) 96177 : cephadm [INF] refreshing ceph106 facts+ Z2 U7 G3 i# A) ]& W, b
2022-04-27T08:07:22.105643+0000 mgr.ceph101.qhgzmi (mgr.14164) 96178 : cephadm [INF] refreshing ceph105 facts
. D; D/ M/ l" T; n2022-04-27T08:07:22.106985+0000 mgr.ceph101.qhgzmi (mgr.14164) 96179 : cephadm [INF] refreshing ceph102 facts* V- x! I. \; U2 y* B0 m
2022-04-27T08:07:22.910395+0000 mgr.ceph101.qhgzmi (mgr.14164) 96181 : cephadm [INF] refreshing ceph101 facts
6 t; S. Z# G# K" {# o. G$ w0 _; |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
: k# d, g. S5 v w( V4 STraceback (most recent call last):5 j; Y. n5 i$ d' l
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services, g0 a p- l# i0 w
if self._apply_service(spec):# S5 g2 k, d, Z0 d
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
1 D& \" X) g0 [0 o) H' F rgw_config_func(cast(RGWSpec, spec), daemon_id)
6 i5 n6 H& g# t( i: R5 U! r File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config) H% V/ P8 W0 L l2 {$ `2 V5 M
self.create_realm_zonegroup_zone(spec, rgw_id)
% z) X9 G2 Y6 {5 T File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
! L8 A! @ T' D0 t raise OrchestratorError('Health not ok, will try again when health ok')& e+ l D/ H3 i& S8 W9 E W
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok: X3 @ X4 }% q% Q
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 ok5 l2 h2 N* f" k) Y
Traceback (most recent call last):
2 `' }6 G4 s! ?" y$ D# w7 M% O File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services. z2 h' y' B3 x
if self._apply_service(spec):' |" B2 |# ?: h! H) ^; {9 t7 X6 D
File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service! i- W0 s; n5 G- b7 V. C
rgw_config_func(cast(RGWSpec, spec), daemon_id)0 l+ m1 s. W( x T: {7 o; v
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
2 V( r4 O1 R- Q+ E' b) \ self.create_realm_zonegroup_zone(spec, rgw_id); C/ B6 Y- p1 L9 u! i/ \
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone% U4 Z6 `% _! r4 d5 A Q
raise OrchestratorError('Health not ok, will try again when health ok')
) ?) a0 r& Z3 c' b' `orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
$ X+ K9 x: I7 h& w- N# I1 @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
) }% o1 j: q$ K' d# r/ W5 ~Traceback (most recent call last):
! z" w) L( ]# j+ ^/ { File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services8 @7 k: h7 C' W
if self._apply_service(spec):
( V0 W# d9 _0 W0 C- d File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
- ^8 J/ Z& N! i" g+ k) \) c rgw_config_func(cast(RGWSpec, spec), daemon_id)7 n/ p' G5 ?6 d8 ?
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config: ]: {4 q+ B' B f+ ?& `
self.create_realm_zonegroup_zone(spec, rgw_id)+ v) s+ h6 T1 e+ C. e9 I
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone6 t, O; [6 B" u- G
raise OrchestratorError('Health not ok, will try again when health ok')
4 G$ d- }1 \3 G# s5 i' @; ]orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok. h4 x5 B$ m$ g, L2 c4 M3 L
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 ok9 I2 H1 H3 Y; [) T7 ?0 V' i5 N
Traceback (most recent call last):* t% Z( U0 U/ k
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services+ w1 y& D- i7 J$ Z& Y
if self._apply_service(spec):
' c; L1 m( g3 d/ K$ z3 e# d File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service. @' L+ U# \8 y7 b
rgw_config_func(cast(RGWSpec, spec), daemon_id)
, B1 j) m" e9 F' z4 d File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
5 A+ B; p5 F3 ?# x self.create_realm_zonegroup_zone(spec, rgw_id)
/ y# r, h: K+ Y+ ~2 e2 f+ V" c1 h File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
( {, Q7 c Z1 H% w7 u raise OrchestratorError('Health not ok, will try again when health ok')
+ U& W- m2 H( b) @/ U. Qorchestrator._interface.OrchestratorError: Health not ok, will try again when health ok+ N. C, g# L' c& I! p
2022-04-27T08:16:33.025623+0000 mgr.ceph101.qhgzmi (mgr.14164) 96463 : cephadm [INF] Saving service rgw.realm_1.zone_01 spec
4 o- D- l) P0 c% A5 n2022-04-27T08:16:33.240231+0000 mgr.ceph101.qhgzmi (mgr.14164) 96464 : cephadm [INF] refreshing ceph101 facts
2 f2 a- o: u7 N/ E" c D7 u6 W2022-04-27T08:16:33.248641+0000 mgr.ceph101.qhgzmi (mgr.14164) 96465 : cephadm [INF] refreshing ceph102 facts
+ M$ ] J4 K. n" V6 O! `2022-04-27T08:16:33.250945+0000 mgr.ceph101.qhgzmi (mgr.14164) 96466 : cephadm [INF] refreshing ceph103 facts' s8 v) W$ V* u$ D4 n- E3 t1 c! h& y
2022-04-27T08:16:33.252787+0000 mgr.ceph101.qhgzmi (mgr.14164) 96467 : cephadm [INF] refreshing ceph104 facts
2 `+ o& w3 I" r! _# [- e0 W" r- T2022-04-27T08:16:33.254250+0000 mgr.ceph101.qhgzmi (mgr.14164) 96468 : cephadm [INF] refreshing ceph105 facts( c) h, r0 ?2 U: R. S
2022-04-27T08:16:33.256573+0000 mgr.ceph101.qhgzmi (mgr.14164) 96469 : cephadm [INF] refreshing ceph106 facts8 X- k& J' N5 Q4 }
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$ B: C, ^ q- ~, V
Traceback (most recent call last):# F4 n" d% ~: F3 _8 [( k
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services
* S3 R; s( O7 j if self._apply_service(spec):
6 K) y1 }6 W( m4 {: V: w5 o File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
0 @% \2 F2 @6 ^$ a: P0 A7 \7 D$ p rgw_config_func(cast(RGWSpec, spec), daemon_id)
, T7 D/ ?2 o% q+ }: Z File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
8 k# l4 w9 `: [' K7 ] self.create_realm_zonegroup_zone(spec, rgw_id)5 P6 ?+ v- M( F9 B& r4 Q# c- ?
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
9 b9 q# k6 R$ Q: k% C7 V raise OrchestratorError('Health not ok, will try again when health ok'): \) c- x0 N6 u; ]: q4 R/ }
orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
" A9 O2 }, Y; s; Y8 Z2022-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( U' Z7 q+ b# L7 u/ l' Q
Traceback (most recent call last):- V: \( k: E9 w, i4 D* { r
File "/usr/share/ceph/mgr/cephadm/serve.py", line 412, in _apply_all_services& X0 _9 p; n/ C* F* B& I6 Z3 f$ i- z
if self._apply_service(spec):
0 g* y/ s! h' ]" n5 ^2 W- M2 Q File "/usr/share/ceph/mgr/cephadm/serve.py", line 511, in _apply_service
% x0 M0 X5 ~/ Q& `' z0 K( j) B rgw_config_func(cast(RGWSpec, spec), daemon_id)/ x2 f. Y4 i5 `9 n- V
File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 539, in config
( X& G* N3 X$ q! ?6 q' Y" b self.create_realm_zonegroup_zone(spec, rgw_id)
, u2 t9 Y6 C) k r: d. D' R# d File "/usr/share/ceph/mgr/cephadm/services/cephadmservice.py", line 617, in create_realm_zonegroup_zone
, H: y% i* C9 }# w6 Z# Z# u raise OrchestratorError('Health not ok, will try again when health ok')
7 }% e/ q; n, N$ i! I& _$ l. z: ]orchestrator._interface.OrchestratorError: Health not ok, will try again when health ok
, n3 H& N; q6 g# R Y u1 I# }* `2 I; J: N
! B. B9 M. Z7 f8 V+ z
0 p8 E! T6 t5 i5 K% \; E5 r进入到docker中; v7 H4 }0 l! i7 `' m' Z% c2 g
bash 体验AI代码助手 代码解读复制代码docker exec -it 736e1816f245 /bin/sh8 ~* t* I) t/ P6 ]
sh-4.4# cd /usr/share/ceph/mgr/cephadm/services/
( A* @1 @* Z8 h% H% c4 M; W5 ]sh-4.4# ls" R5 K+ a% T/ V- _" a4 W
__init__.py cephadmservice.py container.py iscsi.py monitoring.py nfs.py osd.py
! s& W. [2 Q% w" q" g1 D: ?sh-4.4# vim cephadmservice.py
7 R8 x$ g* J4 l, X/ msh: vim: command not found2 s& E) t4 i; W5 T" ^, D
sh-4.4# vi cephadmservice.py, |$ {! L0 K: w- E/ j2 u
##可以看到是因为python代码查看集群的状态为 Health not ok,所以不能向下进行了。
& F$ i) I* d3 Y8 t0 I% h2 G#进一步,将集群调整为健康状态,再次尝试,可以正常
, Y# ^, z5 }! N9 N- |5 p: Z' m( G' B
访问s3对象服务,windows下安装S3 Browser
6 K5 o7 q! V3 @! G+ X
3 h+ ]* |' s- [2 l, p$ r( b) B创建用户后,不知道为什么用户被自动删除掉了,重新建立了一下用户,再次绑定zone之后,就可以使用s3 Broswer正常访问了。- e" r$ P0 J' n; @1 K. z
其他常用命令:
" m' b1 f4 B. {; b) B# M3 Ubash 体验AI代码助手 代码解读复制代码 radosgw-admin realm delete --rgw-realm=realm_1% U( ^+ M: @: I& p/ l$ |$ N
radosgw-admin zonegroup delete --rgw-zonegroup=zone_group_14 M. j2 M3 R. P4 w% o# u/ D% f4 w# u
radosgw-admin zone delete --rgw-zone=zone_1
! [/ y9 k1 o5 t
- r$ U) C) C8 k8 s9 I$ e3 v6 e0 Fradosgw-admin realm list
6 Y2 U; C( |9 }) A% H5 C9 sradosgw-admin zonegroup list! N0 I. P6 U* f$ J& V% {; s9 z; G8 ^
radosgw-admin zone list
' ]& a+ r7 ^, e: W9 @- iradosgw-admin zone list --rgw-zonegroup default3 @% s) M1 l, E2 `
radosgw-admin user info --uid rgw_admin --system
/ j6 g0 W9 e, `6 a% R9 g3 }; A# l& p M% }7 F' z$ x1 i
s3cmd mb s3://sec --region=zone_group_1% h# U) d: f% D) d; Q
( o, S8 u) Y, p
! s( y8 M/ P& g9 }' X% P
配置dashboard:
. c( r# y6 s* ]bash 体验AI代码助手 代码解读复制代码 1752 2022-05-09 11:21:28 radosgw-admin user list: W- I v& n, L6 N
1755 2022-05-09 11:22:06 radosgw-admin user info --uid rgw_admin
' o, k- @0 J5 z/ G: B( D, j2 g2 J 1757 2022-05-09 11:34:44 vim access.key2 r m& \* G: a+ w! }. l* x3 F/ q
1758 2022-05-09 11:35:00 vim secret.key
4 z( w3 }3 @& X 1759 2022-05-09 11:35:21 ceph dashboard set-rgw-api-access-key -i access.key2 H! Y; K; F9 n4 _( l; Z
1760 2022-05-09 11:35:34 ceph dashboard set-rgw-api-secret-key -i secret.key
: Q. z' E: C" ~7 z r! { 1761 2022-05-09 11:36:49 history
9 s. [5 j; M8 v; c8 S4 K$ h2 v, h9 f. u" D2 t5 |/ y
在前端可以看到
; |4 t- U; \' S9 D3 |" O( Y( B2 O. |+ B) Y$ D: `# r0 [
搭建主-主备份/ _- f8 C8 l) w |
bash 体验AI代码助手 代码解读复制代码0 Q; q% f$ N3 d
' j3 D+ s K2 k; w- _: _' `' R% L
radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo7 d# ?5 P" [ \" ?
A# E7 ?5 d/ Z; lradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \6 P6 y* e* ~3 a5 ?$ \0 v
--rgw-zone=zone_02 --url=http://ceph101:80 \" J. V, n3 p" }% |
--access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \/ \9 I/ g0 R G' z4 f7 @
--endpoints=http://ceph1:80 . _! z7 G+ O- M7 A$ ~7 p
radosgw-admin period update --commit
: F% N' i" E/ R, d, b/ \. g2 l0 Wceph orch apply rgw realm_1 zone_02 --placement="1 ceph1"
+ g) g1 w" G/ C8 I) X9 A( }& H& E4 ` y* S
查看应用的配置
5 t4 ]* b2 X5 B' h, K% d7 E# R: Ebash 体验AI代码助手 代码解读复制代码[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config dump
; b$ B4 b8 ]0 a0 s7 J# {* U& L+ Z4 }5 O2 e( ?
4 \* x8 H0 _ |+ m& z[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# pwd
6 b( B! v9 A: ?2 d$ G. F9 D8 O, q8 g/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7% c! T6 f9 R7 \2 w J7 \* ^
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ll ^* n' }; H; U- I0 v" p6 H
总用量 0
) r$ Z0 T2 m" g( _! Edrwx------ 4 ceph ceph 92 4月 27 18:52 crash. ]0 |- U ?/ H; P
drwx------ 2 ceph ceph 133 4月 25 16:07 crash.ceph5* f1 H/ N( W* N: t% X' z( R: q% L
drwx------ 3 ceph ceph 190 4月 27 17:04 mon.ceph5
, f5 w# |5 B9 ~. \& z7 }drwx------ 2 65534 65534 104 4月 25 16:07 node-exporter.ceph5
2 g. y# V8 p* _" {& X G+ Kdrwx------ 2 ceph ceph 241 4月 28 19:42 osd.4
7 {) ~. `1 |( j9 F# J/ Idrwx------ 4 root root 88 4月 28 10:59 removed& D* {6 n) b" u0 H" n3 t7 [
drwx------ 2 ceph ceph 133 4月 28 19:57 rgw.realm_1.zone_03.ceph5.tapydb1 G |( i% x' s/ Q6 S* `9 }
# |7 w3 _8 ?3 Q; ~& N% _4 Z2 D# X# r" y/ ?( n
[root@ceph5 f88b0b1a-c467-11ec-a2b8-525400299ff7]# ceph config show rgw.realm_1.zone_03.ceph5.tapydb
* Q8 g* P, F8 f2 e% d) _( h* WNAME VALUE SOURCE OVERRIDES IGNORES4 ^0 A4 d/ f# N
admin_socket $run_dir/$cluster-$name.$pid.$cctid.asok default
2 ]. |# @5 N, x, V/ K; y2 ?: m6 fcontainer_image quay.io/ceph/ceph:v15 mon; ]5 _3 o3 L3 _, G% @0 S3 d/ U
daemonize false override
; G7 A8 M8 ~0 \% G0 V/ }debug_rgw 1/5 default: w5 C! O4 B: g8 l9 C2 M5 z
keyring $rgw_data/keyring default
6 N( B3 Z3 h- D/ Ilog_stderr_prefix debug default S& j$ U+ l: k7 T, F; l% |
log_to_file false default
3 k6 o3 J* m$ X0 Jlog_to_stderr true default
" s' D' P) |7 K; q# u5 B Vmon_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 m6 I' H; L2 q% ^no_config_file false override: g2 Z/ \- X) C% h9 ~
objecter_inflight_ops 24576 default$ T- u. V# I8 `# ?9 v5 S# _) ~
rbd_default_features 61 default: [! t, e) z4 ]- N1 e) M& m0 o q9 q
rgw_frontends beast port=80 mon
: b: y% `7 Y7 e6 C8 I, t2 V% Ergw_realm realm_1 mon% x3 `6 S7 |8 l4 N1 O8 ]
rgw_zone zone_03 mon( S* o$ Z A! ?$ K8 e% @) L' L
setgroup ceph cmdline
( e- o3 A6 y( x# ^$ ?setuser ceph cmdline
5 b! p, Y7 K$ K# j, Q( N! I# E( j$ H9 E6 `2 d8 A
对于想修改rgw启动端口的,可以修改配置文件5 ~) R* `6 J! o. D
bash 体验AI代码助手 代码解读复制代码##在一个域realm和一个zonegroup下面,可以创建多个zone,每个zone上面可以创建一个rgw,所以再次创建一个rgw网关
. }5 ^4 s- c& v3 a; Y% ]radosgw-admin realm pull --url=http://12.70.10.181:80 --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo! P* [7 b) c( \0 H" }
8 z J- g$ r/ _. j! o/ ^+ Xradosgw-admin zone modify --rgw-zonegroup=zone_group_1 \
& s; k; Q' ^9 T7 } --rgw-zone=zone_03 --url=http://ceph101:80 \
- x2 H( ]# ^- } l& z: w _ --access-key=IAWL6PLNFMNM0SLQNWQ0 --secret=pZTNQ8HThJVXOHBnx5VCP1qJgPGfT9LTMpmwjhAo \3 Z: L+ Y2 O! D+ ~' t4 o5 _. q7 Z6 {
--endpoints=http://ceph5:8088
+ b& ^+ [% h, w5 |5 b3 N/ Cradosgw-admin period update --commit
9 [6 K" _: C) mceph orch apply rgw realm_1 zone_03 --placement="1 ceph1"0 C) y- p5 J, ^
3 a3 n# `2 @5 V% G; `& v( b' b& i( w" K) D
[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# pwd
& R% Z- }* ^" C$ `% S/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/rgw.realm_1.zone_03.ceph5.crocaj
5 Q) z% V0 v' ]( b2 E, t5 \[root@ceph5 rgw.realm_1.zone_03.ceph5.crocaj]# vim9 U+ k# g( l6 M' N
9 A9 o! Z& v* x`# minimal ceph.conf for f88b0b1a-c467-11ec-a2b8-525400299ff7% Z4 X' `2 j5 t9 j
[global]; v2 X! o3 p4 t/ `! W: ~* k! Y
fsid = f88b0b1a-c467-11ec-a2b8-525400299ff7. C5 c$ o& i. R0 _3 [2 k$ [# |
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]( l9 _) Q! a- Q( s2 H
[client]
B9 C' i9 k* _3 _7 P: Y- lrgw_frontends = "beast port=8088"
3 g/ H* d$ l D1 H3 p`
7 {- `4 f- c2 C% V8 e( N+ t#然后重启rgw服务
% b q0 }* }2 l5 @0 w#还可以通过执行ceph config set client.rgw.realm_1.zone_03 rgw_frontends "beast port=18888") k! Q) \+ T8 t O4 Q2 T
#去掉config中的配置项,重启服务,也可以生效
+ b: W, T: Z9 p! G$ ?#至于精确的配置如:" M& Y$ f6 I8 o# g0 O1 c
`
" w4 z. r( H5 z4 n; v% K[client.rgw.realm_1.zone_03]- \( n( y. ?* |2 C+ p& w9 V, T# Q% D
rgw_frontends = "beast port=8888"
. g% l0 v9 u& u. S) Y) ``
! ^1 p2 j% i' C& ^; H#试了很多次,都不好用,官网说的不明白; s- |7 j: _, N, }5 P8 F
0 V7 E7 ` X' z; I7 A4 i参见:
1 T( q2 E6 f0 ~/ l3 Z; n$ S* i+ {, [
指定rgw的数据池
: J( h2 |2 }4 x# m% l
1 o0 E. K2 w$ ~, r' @+ n移除osd7 X4 r9 l( k+ d; ~ F$ Z
bash 体验AI代码助手 代码解读复制代码如果是用命令行,操作如下:0 ], B0 V' B8 \& l. A
将节点状态标记为out (节点已经不再提供服务)
" U' Q. |* t- E* x" E[root@ceph1 ~]# ceph osd out osd.5 w+ U0 D6 y, X( W- h: W
从crush中移除节点(不删除会影响到当前主机的host crush weight)
- o" ]& r2 V; }2 G/ a0 r[root@ceph1 ~]# ceph osd crush remove osd.5
) T" R3 |" E1 q& Y$ F" [删除节点6 s+ S2 ?0 `! c r
[root@ceph1 ~]# ceph osd rm osd.5
q0 W! y$ c6 h" ]5 C2 t) H删除节点认证(不删除编号会占住), b! ^+ U0 Q2 r$ O9 a
[root@ceph1 ~]# ceph auth ls
) m v$ C1 h. d. T, }' q[root@ceph1 ~]# ceph auth del osd.5
, F7 R- k/ g( i. j) z; c c' N, v[root@ceph1 ~]# ceph orch daemon stop osd.57 {6 a. ], m" [& _0 U8 y1 s9 m1 |
Scheduled to stop osd.5 on host 'ceph6'
+ G+ u4 |5 G. j5 C) y( W* C[root@ceph1 ~]# ceph health detail/ M! V+ E. g% y4 F! ?7 u7 ?* H1 t5 M
HEALTH_WARN 1 failed cephadm daemon(s), W) p; n! O- g) {1 \0 q5 y
[WRN] CEPHADM_FAILED_DAEMON: 1 failed cephadm daemon(s)
) i( n t& d H& J! e daemon osd.5 on ceph6 is in error state
( ~. c6 v+ `. _9 R5 j1 z% A0 V. i[root@ceph1 ~]# ceph orch daemon rm osd.5 --force
0 O) [9 d* X3 s+ j; Y+ h5 qRemoved osd.5 from host 'ceph6') N& c9 ~" f4 C; t
. O4 O0 D+ z) v( x9 {" U
恢复磁盘:
/ I. e4 g- {# H& f- e3 j, C找到某个未加载的盘,有两种方式:
2 y m- q) U( P$ d. r1 fbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ceph osd metadata
6 k: X4 |* I6 J6 F) X* g' B
1 x2 y! y* S" U0 F7 Z+ C: W和
/ C9 M. O. \0 L8 y% e; d, xbash 体验AI代码助手 代码解读复制代码[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# pwd+ l! o$ u6 n! ]8 S# _
/var/lib/ceph/f88b0b1a-c467-11ec-a2b8-525400299ff7/removed/osd.5_2022-05-11T02:14:55.313464Z/ \& P) W7 _0 I" U, ~* @% _9 s8 _
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# ll
& M* ^9 { ?8 b总用量 52) b) m8 C1 T) u+ \3 {! ]
lrwxrwxrwx 1 ceph ceph 93 5月 10 12:47 block -> /dev/ceph-2e1cc736-34d6-4dac-8d7c-f78db028a9eb/osd-block-c831faa6-7cc6-4c04-9709-c33fb29a45f3
3 i w% j/ g. ^3 H! v1 w-rw------- 1 ceph ceph 37 5月 10 12:47 ceph_fsid
* B& T% r/ P% |2 w. g3 y" L-rw------- 1 ceph ceph 377 4月 28 19:43 config
9 x3 b5 ?; y' v, `-rw------- 1 ceph ceph 37 5月 10 12:47 fsid
# _# i" d3 O4 \' }* q- N-rw------- 1 ceph ceph 55 5月 10 12:47 keyring" \: D7 \+ Y0 U' i
-rw------- 1 ceph ceph 6 5月 10 12:47 ready
! f1 x+ i0 [6 r& E) d- Q) [. W-rw------- 1 ceph ceph 3 4月 25 17:04 require_osd_release
- o8 s1 `3 F# e/ [-rw------- 1 ceph ceph 10 5月 10 12:47 type$ a4 s" ]/ C9 B" `
-rw------- 1 ceph ceph 38 4月 28 19:43 unit.configured2 T, }% T( U$ w3 K r% M( }; j
-rw------- 1 ceph ceph 48 4月 25 17:04 unit.created, a4 d0 Y8 i8 ]* M' b& q
-rw------- 1 ceph ceph 22 4月 28 19:43 unit.image8 y0 i b4 }* ]& x( J
-rw------- 1 ceph ceph 931 4月 28 19:43 unit.poststop
, X% g7 r7 r/ J; Y! y7 M* c9 |-rw------- 1 ceph ceph 2035 4月 28 19:43 unit.run: p# c/ J# E6 u6 @3 {
-rw------- 1 ceph ceph 2 5月 10 12:47 whoami
O) _( W& J& {! A
/ y8 n- k0 e9 [5 z* Z0 c0 B" E* N# c+ K1 d- M6 }4 }, q3 ]: ]
[root@ceph6 osd.5_2022-05-11T02:14:55.313464Z]# lsblk
/ f+ T3 H5 H0 W2 b9 J+ y: KNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT a) ^1 R- v: C+ W" n
vdb 252:16 0 500G 0 disk* E: l' J# q& E3 h- F
└─ceph--2e1cc736--34d6--4dac--8d7c--f78db028a9eb-osd--block--c831faa6--7cc6--4c04--9709--c33fb29a45f3 253:4 0 500G 0 lvm) R- ?% `$ E& }8 c2 }3 B
sr0 11:0 1 1024M 0 rom
9 K1 l3 a" W1 t% yvdc 252:32 0 500G 0 disk' ^( H, Z: i% B x/ g! D6 }
└─ceph--beabac1e--6d55--481b--99e4--db03786e8f78-osd--block--7f9316bd--d011--426f--be86--52b8bfad4c0b 253:3 0 500G 0 lvm
& J0 P8 w/ h8 ]# T Y9 }! m, Nvda 252:0 0 500G 0 disk* d0 c5 X3 F: f* k. s1 N4 ?2 N
├─vda2 252:2 0 499G 0 part
1 H. Q8 i9 V3 P# }- K│ ├─centos-swap 253:1 0 7.9G 0 lvm! k% h& }9 o$ \! P. h3 R/ d6 M
│ ├─centos-home 253:2 0 441.1G 0 lvm /home$ J: E# ?; B3 j( H, C; d
│ └─centos-root 253:0 0 50G 0 lvm /
5 L) h3 G4 e6 m% O4 B- ^7 X└─vda1 252:1 0 1G 0 part /boot5 q2 E' A, M# c, v
' m3 s' S8 l+ _3 f
可用确定是ceph6上面的/dev/vdb块设备
8 i, L" \$ N0 X' h% q1 Z8 O5 @/ Ebash 体验AI代码助手 代码解读复制代码#zap该磁盘,使其可重新被使用
" f4 s8 R/ Q4 w: x# x4 @& |; U
[root@ceph1 ~]# ceph orch device zap ceph6 /dev/vdb --force
" _+ Y `1 ~' i* Q1 m$ r x/bin/docker: stderr --> Zapping: /dev/vdb8 n5 P$ l) g# I" |2 s$ C& x- C
/bin/docker: stderr Running command: /usr/bin/dd if=/dev/zero of=/dev/vdb bs=1M count=10 conv=fsync. j$ U( U8 R' {- |. M) R5 I
/bin/docker: stderr stderr: 10+0 records in% S q3 P- w9 d( s) h5 ^
/bin/docker: stderr 10+0 records out: a9 H: B, e, u+ _8 v6 W
/bin/docker: stderr stderr: 10485760 bytes (10 MB, 10 MiB) copied, 1.1166 s, 9.4 MB/s
( Q' F4 A! s1 Q# Q. l/ R5 v) Y/bin/docker: stderr --> Zapping successful for: <Raw Device: /dev/vdb>; L. }( p, W) D' g7 x1 K" |
[root@ceph1 ~]# ceph orch daemon add osd ceph106:/dev/vdc
5 t9 {5 L( l M) _& R. f r% Uceph orch daemon rm osd.5 --force G7 G- K2 _ A6 F
ceph osd out osd.5' z! s5 ]; [9 O7 {; l' |7 d2 c
ceph osd rm osd.5
# J% C( K1 s8 D4 \. j/ {+ iceph osd crush rm osd.5& P5 z! J- L# a7 Y4 Y
, I# `7 X s7 d7 s( ]) `pg故障处理7 X6 O& j1 C3 G. R& V' X
bash 体验AI代码助手 代码解读复制代码( `9 F1 w0 S' f; R) D
2 v+ z8 z/ F3 Z: @+ I
[root@k8snode001 ~]# ceph health detail
3 m- j5 S5 U) E! J N. lHEALTH_ERR
3 S2 N7 v! X+ n 1/973013 objects unfound (0.000%); + R4 ]+ i0 U2 p5 g* e
17 scrub errors; Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair; Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded* O* F! `& ~ `& O' x. n
OBJECT_UNFOUND 1/973013 objects unfound (0.000%)
v' w3 u- W( n* l, P) K pg 2.2b has 1 unfound objects- r7 z* s. H* z/ W6 S
OSD_SCRUB_ERRORS 17 scrub errors4 f6 q: t/ F, Z. R
PG_DAMAGED Possible data damage: 1 pg recovery_unfound, 8 pgs inconsistent, 1 pg repair
5 n, J: M' Q% g# v' Z4 J. W8 [ pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound
2 j3 E' e6 O, m% `" v8 r3 t/ Q pg 2.44 is active+clean+inconsistent, acting [14,8,21]
. {( Q9 n: M/ K% n7 n pg 2.73 is active+clean+inconsistent, acting [25,14,8]
" s, H+ w# g4 G# v* ?7 J pg 2.80 is active+clean+scrubbing+deep+inconsistent+repair, acting [4,8,14]
. Z1 r; X% V( Q: v7 ~% F: h pg 2.83 is active+clean+inconsistent, acting [14,13,6]
$ N* W0 u: N! g4 p8 u pg 2.ae is active+clean+inconsistent, acting [14,3,2]; C8 Z7 d# x$ L! e7 @3 ^5 M' x
pg 2.c4 is active+clean+inconsistent, acting [8,21,14]
9 p4 m. R4 B0 }% m/ Z3 F pg 2.da is active+clean+inconsistent, acting [23,14,15]( v4 x$ y$ Y f& f4 n. j7 D4 N
pg 2.fa is active+clean+inconsistent, acting [14,23,25]
% K D8 h8 n4 aPG_DEGRADED Degraded data redundancy: 1/2919039 objects degraded (0.000%), 1 pg degraded
& u# @; \% k9 U6 J3 i7 x pg 2.2b is active+recovery_unfound+degraded, acting [14,22,4], 1 unfound' J6 `& H4 I: C# V
0 }( l) }) {& O; {; |$ V2.查看pg map. i/ O# G/ n2 z: M6 z
[root@k8snode001 ~]# ceph pg map 2.2b
4 w5 M. ]- g# N3 U! L) k( }osdmap e10373 pg 2.2b (2.2b) -> up [14,22,4] acting [14,22,4]
( c+ I; B3 V# A/ e7 G从pg map可以看出,pg 2.2b分布到osd [14,22,4]上
$ w, u4 ?4 d& u3 z9 y# s$ g- f) _0 k2 Q! F& ?
3.查看存储池状态$ D# B$ c {% x, l; v* g
[root@k8snode001 ~]# ceph osd pool stats k8s-1& C2 u3 t6 _2 I' t" F% D( |$ O
pool k8s-1 id 2
) _' ^7 J+ z; F- {! o) ?4 R# R3 w, l 1/1955664 objects degraded (0.000%)
" v- J/ g4 J" C9 S) J 1/651888 objects unfound (0.000%)
; h% q1 L" I% O# u" @ client io 271 KiB/s wr, 0 op/s rd, 52 op/s wr5 `9 i! X8 u+ c7 C; x
- t8 p: R8 o. ?% L0 D) V
[root@k8snode001 ~]# ceph osd pool ls detail|grep k8s-1
z% m6 j3 f% kpool 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 rbd3 B) k l* j( w3 a
4.尝试恢复pg 2.2b丢失的块
* ?( `& c7 y2 b& \; i+ K3 w5 A* f[root@k8snode001 ~]# ceph pg repair 2.2b1 V0 M( S! C3 I- ? p+ |$ Q( p J6 E
如果一直修复不成功,可以查看卡住PG的具体信息,主要关注recovery_state,命令如下
5 q4 C F8 s! y: K& ^[root@k8snode001 ~]# ceph pg 2.2b query6 N, M# P! d2 R l+ _
如果repair修复不了;
1 A" m$ K3 L* m* R4 s' p$ l* e两种解决方案,回退旧版或者直接删除
4 G+ V2 h- M; A u8 s N回退旧版
6 s5 F6 H- z" U5 m[root@k8snode001 ~]# ceph pg 2.2b mark_unfound_lost revert5 T# G: r9 c/ R5 Z1 ~7 A/ f
直接删除/ t7 h9 ?0 G$ F& I Q
[root@k8snode001 ~]# ceph pg 2.2b mark_unfound_lost delete
% w, v( Q O6 P2 ]8 x" b. J4 B. T$ ]( l& E) _+ G9 b% m& o3 m
参考:记一次ceph pg unfound处理过程
1 T6 A" R8 h6 l; @- c. x9 B卸载9 q, n2 d# n5 X6 e
卸载过程:
3 s! A* f; H1 U0 Ubash 体验AI代码助手 代码解读复制代码重命名命令alias ceph='cephadm shell -- ceph'' L+ E1 j/ x& x Q
#找到fsid+ {1 f1 q0 p( z7 T1 c
[root@master1 ~]# ceph -s
; c2 u a7 U3 {- \ m5 r, qInferring fsid 008a0d2e-b163-11ec-ba7a-5254004c51c68 D8 T; J0 `/ ~' M9 n6 ]& J
Inferring config /var/lib/ceph/008a0d2e-b163-11ec-ba7a-5254004c51c6/mon.master1/config
* M# X- P& S: a/ e* P- GUsing recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
! q8 \" H2 l) Z* J+ j+ g2022-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
2 Q f/ d6 J/ n; _4 m0 Z. T2022-04-01T03:20:37.240+0000 7f27a2b6b700 -1 AuthRegistry(0x7f279c05ec00) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
6 Q# U8 h( q* n2022-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& G# F, B0 Q! `5 r% `6 M9 s
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
% a7 }2 ~3 V& ~3 f- y2022-04-01T03:20:37.243+0000 7f27a0907700 -1 monclient(hunting): handle_auth_bad_method server allowed_methods [2] but i only support [1]
0 w1 a0 b# O) n, ?# s2022-04-01T03:20:37.243+0000 7f27a2b6b700 -1 monclient: authenticate NOTE: no keyring found; disabled cephx authentication4 G. x( E1 D* c" E( s
[errno 13] RADOS permission denied (error connecting to the cluster)% a; O: i, ~* ~
! s1 @0 y+ R1 O+ P* _& n
#使用fsid删除集群! V) @2 E: v! V7 i: ~1 X+ f
[root@master1 ~]# cephadm rm-cluster --fsid 008a0d2e-b163-11ec-ba7a-5254004c51c6 --force
\4 t2 g" k( o- d: N. y% {
+ z7 ~& `& i+ W! `& C. J" Q* z5 F) I& V6 F( e
分发ceph.pub
, R/ Y ^* X5 c/ f) C, Z( lplaybook -v 2.mon1.yaml -t "find_pub,show_pub,push_pub" --extra-vars "ceph_pub_path=/tmp/ceph/master1/etc/ceph/ceph.pub" 1 R g2 g7 |( w6 h
或9 I7 [6 O% B3 v6 H+ H" w% ~4 t
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 a/ e ?( [- D& |; ?6 ^
2 J% R* s1 g H使用 ansible master0 -m setup 可以看所有的变量
0 \* Q" i2 ?* S/ Q5 V参考:ansible.com.cn/docs/playbo…
7 p# t K6 z9 X* s: A {jinja2参考:
$ i) O7 \2 P% Y2 Y/ {' T6 Ostackoverflow.com/questions/3…( s1 U( v. M6 z2 u
bash 体验AI代码助手 代码解读复制代码 playbook -v 2.mon1.yaml4 I! o. ^6 p: v0 _; w
playbook -v 3.push.pub.key.yaml -e "pub_key=/tmp/ceph/master1/etc/ceph/ceph.pub"
) g' y' W$ E) O- \ g2 f+ R4 U9 X playbook -v 4.add.host.yaml -t "weave-script" -e "mon1=master1"' i2 v2 K$ j, k3 X7 }7 F
, y) ~- _2 G Z F7 v
本篇介绍Ceph Monitor的子命令,通过子命令的配合实现对MON的管理和配置。* O7 e8 H9 ]2 B, @3 X
3 C3 o& F) H3 X+ n
添加(add) 在某个地址上新增一个名字为的MON服务。2 {3 D$ f e. e) q c, W
示例:+ M1 d* l3 P3 Y( T7 F2 z
ceph mon add <IPaddr[:port]>9 f. u3 v# E/ K9 r
导出(dump) 显示特定版本的MON map的格式化的信息,该命令可以指定MON map的版本信息,具体示例如下,参数为epoch:7 L3 `' I2 t# g8 C0 {/ N
ceph mon dump {<int[0-]>}+ I% l0 U }! A! m- R. D2 @
ceph mon dump 1
5 f8 m0 d& S( A& K# {获取映射(getmap) 获取特定版本的MON map信息,该命令获取的是二进制的信息,可以保持在某个文件中,具体格式如下:
, v' M& m/ [1 W. B, h" ]7 S1 z2 J3 @ceph mon getmap {<int[0-]>}# T7 _8 x& X# D" I0 O4 s
示例:
9 [+ u" ~3 ]+ }* V1 O9 _0 Tceph mon getmap 2 –o filename
6 }, y2 [& s# x6 G2 Q7 \移除(remove) 移除特定名称的MON服务节点。具体格式如下:9 R& a+ y% r. q. t( K. h. _' c
ceph mon remove 5 ~. \. W# R; ~. ^4 O4 g* W+ C4 B
示例:
5 Z+ c# U7 t% J) R* S. K4 |: b Dceph mon remove osd3
0 _; N6 m, L. m* c3 K5 o U$ Q获取状态( stat) 显示MON的摘要状态信息,具体格式如下:+ R2 b/ v3 t( s- s) m9 T2 F
ceph mon stat. G; o' t( f/ I1 A- J) \
报告状态(mon_status) 报告MON的状态,相对详细,具体格式如下:
! a. [% i, Q$ y6 u& H* V3 Wceph mon_status; D) ?" r: L8 ~0 l3 e& T
Ceph命令之ceph mon(Monitor管理)
3 ?) r/ W+ {, Q- o" U" Y! l7 ~/ D' C/ |
+ c; o6 `2 @( `( G
|
|