- 积分
- 16841
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2025-12-22 23:44:32
|
显示全部楼层
一:Ansible Playbook示例9 X) Z) C. w2 R
---3 C: _, {9 i) c* y' o
# ansible-playbook -i inventory ceph-deploy.yml
; j" R0 a+ Y" B& A
. p' d! o5 A& ]& M3 B) ^2 B' O- name: 部署 Ceph 集群基础组件- l0 P4 Q. E$ v
hosts: mons,mgrs,osds # 目标主机分组( c; R$ j' q2 Z% l* V
become: yes # 使用 root 权限$ m0 B5 T1 f/ U% U# ?# w, z
vars:0 k& i: W( d" u6 Y t
ceph_cluster_name: my-cluster # 集群名称 @9 j& K( E9 [+ _3 {
ceph_fsid: "{{ lookup('password', '/dev/null chars=hex,ascii_letters length=32') }}" # 自动生成唯一集群ID
+ n/ B( R& r5 \+ P2 c/ J5 F ceph_mon_group_name: mons # Monitor 主机组名称
4 {) }+ a8 m m `3 U g( s& y9 i ceph_mgr_group_name: mgrs # Manager 主机组名称& s3 ]# K3 `8 I6 [$ Q p4 C {
ceph_public_network: 192.168.1.0/24 # 公共网络
; D3 w; Z! V$ I# h ceph_cluster_network: 10.0.0.0/24 # 集群内部网络
8 t# ?- z" X4 K+ V g
$ ?+ Z4 C! r8 Z tasks:4 P4 X; v; E Y! S! `2 E3 |
- name: 安装 Ceph 基础软件包3 w; @6 }" B4 d$ K7 `. h, H0 J
package:- _: @4 i6 O0 P$ t" j5 ~# W$ B. c0 S
name:
( E* j% v$ x$ M" }# ^! W0 z; M# M - ceph-mon
- _2 U4 H# i' h - ceph-mgr
; I9 d2 l: O! J/ V4 c - ceph-osd
! o& s; X- i3 f) t state: present
) w9 r, E3 ], I- a
6 s% g; x$ ~& O3 o - name: 初始化 Monitor 节点4 U0 i9 w% ~) y1 D# g
command: ceph-mon --cluster {{ ceph_cluster_name }} --mkfs -i {{ inventory_hostname_short }}! ]$ O" p! Q1 Q9 j4 A* l9 h
when: inventory_hostname in groups[ceph_mon_group_name]
/ J, u: R1 p: d# N( P9 L # ~8 g4 w. w: S
- name: 部署 OSD 节点4 O) W+ j4 g) O' w
hosts: osds
! C3 m/ v) w! K- S# K3 Y8 M w) C vars:
5 @/ a# `* a* ?3 j/ x9 [ osd_devices: # OSD 磁盘配置. p& [2 H/ n' R
- /dev/sdb1 t+ n/ S3 Y& O l+ d4 b# e7 V0 X
- /dev/sdc
" w9 J4 Y% [3 d, Z7 @, P osd_journal_size: 5120 # 日志分区大小(MB)
G( j* |! Y4 m; I' ` tasks:
7 |7 F- j3 A j" g1 M W; t. n) \ - name: 创建 OSD; {/ E" u5 e* J7 k* j
command: ceph-volume lvm create --data {{ item }} --journal-size {{ osd_journal_size }}
" Z) D* D) ^- ]: V/ x- S loop: "{{ osd_devices }}"
8 [* {* O9 `5 W: }: W( I0 M
, R5 g3 C0 m) c5 P E" G9 _+ Y8 e- name: 部署 CephFS6 H0 Z' c7 ?- ^: e; d
hosts: mdss # MDS 节点组
; m# Y- B" w; C& E! o# G vars:
# f+ R3 h" v2 d9 W4 u |" \" a cephfs_name: myfs # 文件系统名称* q, z! ?0 N9 W4 O* T
cephfs_data_pool: cephfs_data # 数据池名称
% k2 z, ~; f5 f0 N0 I2 y+ m; D cephfs_metadata_pool: cephfs_meta # 元数据池名称) h$ q, t# Y) c
cephfs_pg_num: 128 # 放置组数量 m5 d' b+ g8 U) C; y
tasks:
& V( c$ B( H. u! ? - name: 创建文件系统& a' T% ^8 Y. N3 Y
command: |
! P/ L4 W4 A6 @/ q4 [: q9 E1 f" n0 Z ceph osd pool create {{ cephfs_data_pool }} {{ cephfs_pg_num }}
" n7 h8 b; a/ P" r1 Q ceph osd pool create {{ cephfs_metadata_pool }} {{ cephfs_pg_num }}* x0 Q. L: M( ~9 K6 c
ceph fs new {{ cephfs_name }} {{ cephfs_metadata_pool }} {{ cephfs_data_pool }}; `, s, P! k0 Q0 S
* r4 z6 ~7 j( G) r) L( M- name: 部署 RGW 对象存储0 ^: {* \" z+ S$ I6 h% E w
hosts: rgws1 }( j+ I6 x9 J6 \8 S
vars:
( u/ C6 l+ |4 ~ j rgw_zone: myzone # 存储区域名称8 U2 |" J' D- R. L4 V
rgw_zonegroup: myzg # 区域组名称
; v+ @; L$ o. o9 t! i- d rgw_frontend_port: 7480 # 服务端口/ A$ B2 U+ W6 D0 {. P
rgw_ssl_enabled: false # 是否启用SSL
$ s; L9 o1 |5 i, s. C tasks:
, f( o) z0 ], c$ K K$ E - name: 创建 RGW 实例
* c3 w. A% r. X6 @- f command: |
! ~* N. Q$ h* K ceph-deploy rgw create {{ inventory_hostname }} \
9 s! s* S& W6 s --rgw-zone {{ rgw_zone }} \
3 B$ Q9 e; B4 s. n. v* ? --rgw-zonegroup {{ rgw_zonegroup }} \! f# T: i4 c! R- C! J/ y9 [0 j4 }
--rgw-frontends "client.port={{ rgw_frontend_port }}"% z5 H# t9 Y$ S- c
5 A* G) T2 g& z) |, ]* l" m- S- s5 R
- name: 验证集群状态
% {7 f* s x8 f8 P hosts: localhost
$ a8 ]+ R; F: K9 l tasks:; p( S0 Q3 ~4 v/ T8 x0 h
- name: 检查集群健康状态# A- r% F% y% A# U. |
command: ceph -s
) L! T5 V$ s1 Q$ @' `9 g register: ceph_status* ?' `( E) k D8 {. ]2 d
changed_when: false
2 u- Q, U. s- @* Z a# m7 Y : X. w+ A8 R2 T' D1 o1 E8 d
- debug:
1 z' \! U! c# q2 q msg: "{{ ceph_status.stdout_lines }}"
1 W Z1 i# d$ P% ]9 jAI构建项目
' n$ ?8 d- p1 K9 S' i2 ~+ P% y3 s- j* g5 E9 J5 Y% F7 Z
二:参数详细说明& Q B, ?' Q( i+ U, F6 X
主机组定义/ l. ?5 E( }% o& }5 S
mons: Monitor 节点组,负责集群状态维护
1 K1 L8 d K8 a, |+ Y) H) i+ y& M2 f6 ]9 }
mgrs: Manager 节点组,负责指标收集和监控: f3 G9 a! a3 q- {& j" ^' s
# R6 O( B% d+ K; r, ~/ t; m9 B
osds: OSD 节点组,负责数据存储/ u+ [+ ^5 v% {+ c8 J V% X0 u' _
5 N6 k; q8 C5 E8 d8 A4 q
mdss: MDS 节点组(CephFS 元数据服务); S2 l$ m6 l# T
$ ?8 w2 T- H! F8 q# E5 m8 g9 H
rgws: RGW 节点组(对象存储网关)
9 B$ T* C9 t$ h+ m2 K
) C' Z, y+ v, `核心参数
; F2 k4 E2 C7 K5 p* n6 l7 U4 l#yaml文件, Y' a. f: y& q/ V4 ~) z
. W/ I# G. D/ d3 Gceph_cluster_name: my-cluster # 集群标识符
& ^/ R$ ~6 z2 a5 F: t8 x% v
& u, q# s. j+ x4 Kceph_fsid: # 集群唯一ID,建议自动生成 % q* M, Z# y3 U/ }
( l% c4 j( M. _$ I" nceph_public_network: # 客户端访问网络
$ [7 p1 z$ i& y1 { C1 o; ?# Z4 W% p% Z! W$ M; q" W
ceph_cluster_network: # 数据同步内部网络
! r6 P0 [9 a2 b, d. l9 c+ M/ V R3 U8 R2 X( M0 [" o
OSD 配置
I: H( [4 R, y& B& D9 H' F#yaml+ ~9 I! L7 p3 b2 \/ Q( K7 U- _! X
5 m' ^- N+ d. q. z& N8 kosd_devices: # 磁盘设备列表(根据实际修改)* C$ s' Z: ^# x& X7 m
- /dev/sdb
; z! |: f- b% n5 ]7 i - /dev/sdc
0 N( @1 v- K1 G+ z2 `osd_journal_size: 5120 # 日志分区大小(MB): @1 ?# t, @ D* D+ f0 t2 @
4 m6 k1 M3 {+ g. `# `+ a- oCephFS 参数3 E5 _: {! {* t5 F i
#yaml文件" Z; V" w n3 a2 _# H5 K1 Z7 e$ W1 |' a
" e; [: Q9 @2 scephfs_name: myfs # 文件系统名称 : }6 E9 G4 U$ v5 d4 I
0 [- I( ]6 G4 v, G* q& ?& h& E, ecephfs_data_pool: # 数据存储池
$ |3 V8 r9 |, D. y0 P2 n) `
% C$ R) E7 e. Q/ h7 U2 G3 ncephfs_metadata_pool: # 元数据存储池
- G- x; r1 P6 e& w7 Z2 k4 n( H" i1 T4 u; G7 t; D6 D4 C
cephfs_pg_num: # 每个池的PG数量(根据集群规模调整)% b1 ^- ?+ `9 X; Y: t
$ x( s4 P8 R$ hRGW 参数! f0 g: _& q" p6 [3 |
#yaml文件& @' W" i6 h& f. x
6 ?& S' m5 a, | q- @
rgw_zone: # 存储区域名称(需全局唯一)* Q0 C4 @, Q/ T' Y6 _
' C3 s( c8 c. T& V: }# n6 ~4 F
rgw_zonegroup: # 区域组名称(逻辑分组) 3 {- s8 @- w0 `1 S: @8 E
6 \6 A! }0 e6 \rgw_frontend_port: # 服务监听端口* D; a5 x# c* F- P; o2 w! I
; K8 y( y; Q y7 Jrgw_ssl_enabled: # 是否启用HTTPS
8 Q0 n/ K) `3 V: g V
- P, t9 d) Y2 T- e4 n 三:补充配置建议& H" G: \+ x. F
认证配置(建议添加)
! {7 l+ Z3 \$ X4 x#yaml
1 J: `" k8 K) ~, K( |5 R6 f( p! m2 e
cephx: true # 启用认证
- U: C7 ~2 s' d# C1 n# c# g8 ^! J! u5 m+ w* b* R8 q# l3 u- `
client_admin_key: "AQD...==" # 管理员密钥(自己定义)' S) w. F/ {; c2 X% X4 ^
4 o# g% @! _& D# W& U
存储池配置
4 Z9 K$ l7 w, Q" I#yaml
! h9 U# T4 R% f+ T4 @, Y" x5 r- |$ y# ^: [
default_pool_replica: 3 # 默认副本数
# V( p8 F' D/ _( t' F2 ?8 f! P- S \7 h
pgp_num: 128 # 放置组组合数/ j" G1 ^( @; d) \" e
4 D9 Q3 n' ~2 y+ p+ i监控集成9 a9 R1 \( i/ c3 I
#yaml8 p8 w0 z2 i1 N. F/ I5 r: e
B5 m9 |8 E* V2 H: W* S2 ]$ yceph_dashboard_enabled: true
& d. k6 R' \2 s8 T3 _6 U- Z9 L& ]grafana_integration: true5 g. s5 p. J! P9 E" C$ q
prometheus_targets: # 监控服务器地址+ A0 V, `& L4 V% S! J% t
- 192.168.1.100:9090
. J$ I) W: @% F4 V4 r; F* |9 E- G! v' E" ]* v# x
硬件优化
' u; Y8 D4 m8 `3 k5 x* }; T#yaml
; H c6 `* N. `& ?3 u2 D" v n/ k% c* S) w7 X `
osd_memory_target: 4294967296 # OSD内存限制(4GB) , w# N2 s9 _) R7 l
# p; L8 w6 |" K, c
filestore_max_sync_interval: 5 # 文件存储同步间隔+ b' t: R/ L' D6 Q* V
# h' T$ C; }# I% k/ g/ N1 V
四:ansible执行注意事项# t6 [# C9 R# T1 x# w# b5 [& x4 C" h
准备 inventory 文件:4 ]3 [- x: {% _: Z/ D
#ini文件
) K1 T. o6 ]- v' F
$ x+ U! {& |) Z- I. X4 A) t3 `[mons]
. h& d, r( N7 kceph-mon1 ansible_host=192.168.1.101, J, U( Q% ~; W) c2 v: V4 K4 y8 m9 b
ceph-mon2 ansible_host=192.168.1.102, R& M+ F( W# L; H+ c+ J. r1 R
9 G' D0 N/ I6 B& \8 a! M
[osds]
* W, z3 o4 C6 `( _: [" Zceph-osd1 ansible_host=192.168.1.201
- p' m$ D! \1 o: Y/ X, Hceph-osd2 ansible_host=192.168.1.2021 E& A! U8 M, Q* _' \
! ?6 p. R6 S# p[mdss]
! X" D' H1 k) D3 g4 ?, }ceph-mds1 ansible_host=192.168.1.301 N: c" I. Y% E$ Q
6 ?2 h' _0 D; O) @, ^/ v2 }% `% \[rgws], l: q# Q& \ c' O& x6 M
ceph-rgw1 ansible_host=192.168.1.401
6 _9 ?* ?8 G# E9 g, b! M' t推荐使用官方 ceph-ansible 角色:# Z' m4 H F# n; m0 H
yaml
2 {" ?7 |& i. C4 o. g
* u9 P! g& j$ Z. g' T0 t' H0 Hroles:/ i! ?0 n! P8 @
- role: ceph-ansible
* c2 |0 t: R$ ~- D: a# N vars:% s. ]0 o8 C- n/ I% E
ceph_origin: repository% D S m( U' T
ceph_repository: community' x" C% K+ b" d% ], l b
' l6 \2 l6 M, m$ {# g+ H网络建议:
% X' H5 v. d' ?; v9 ~3 a% y9 w公共网络和生产网络分离
4 q* }& w" k) E7 { E. ]* C- m& B! A7 C- }0 j# A4 ~5 O
每个OSD建议10GbE以上带宽
! ?! c9 v: n8 m7 C& ^: D' N8 Q) I
. v6 Z: z2 ]- h$ q; B6 |' {3 c! B监控节点使用SSD磁盘( c1 q8 I& E4 K
( L5 }" T5 y2 a5 C4 t. h5 ]
验证步骤:
( ?2 t, a, T J* n/ u
8 Q9 F0 U7 Q9 G+ C7 m" F7 |) V# 检查集群状态/ F/ I" X+ V5 u' I
ceph -s
8 o9 m- f; k' o- s3 C1 s% ?7 G# L9 G8 `/ X* i+ ~" J
# 测试CephFS挂载
* V9 @9 K! ]3 p" Y% P8 `mount -t ceph mon1:6789:/ /mnt -o name=admin,secret=xxx( a8 C% E/ o6 \7 D: A2 u9 V( F
" \8 G/ I! \( r! `. J) ]% |
# 测试RGW访问5 a* M9 p; w* t# k) u9 u
s3cmd --no-ssl --host=rgw1:7480 ls% x) T, L8 b/ x" O' B4 a
|
|