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

楼主 |
发表于 2025-12-22 23:44:32
|
显示全部楼层
一:Ansible Playbook示例; r, P& {/ D0 M, L. Z
---
+ N1 j6 h9 T2 H) m# ansible-playbook -i inventory ceph-deploy.yml: [, y- B) r$ s% v' i; z
- ?- N( D/ Z K! \/ H2 [+ u# ]- name: 部署 Ceph 集群基础组件& F; t; K- O T q: N
hosts: mons,mgrs,osds # 目标主机分组
4 t: C3 s9 w6 N0 T- O4 g0 K, e" j become: yes # 使用 root 权限
' J' w' g; R0 i2 c/ [% G vars:- x% G4 D$ Z; j
ceph_cluster_name: my-cluster # 集群名称4 O% Q9 L3 q0 C7 P% p3 r o% X$ {7 U
ceph_fsid: "{{ lookup('password', '/dev/null chars=hex,ascii_letters length=32') }}" # 自动生成唯一集群ID
6 E" l* l0 H6 X/ t4 q3 e) l" t8 v ceph_mon_group_name: mons # Monitor 主机组名称& I: f6 G+ @7 j% X* w
ceph_mgr_group_name: mgrs # Manager 主机组名称' h; |7 E: B( y" m" u9 v6 W6 T3 E
ceph_public_network: 192.168.1.0/24 # 公共网络* J% a3 @2 }% k9 f3 J6 u9 O' p
ceph_cluster_network: 10.0.0.0/24 # 集群内部网络
# m0 ~& z% ~4 ]' c
& `/ R8 Y6 A1 Q2 a% P2 L tasks:
3 V+ m" G& ~' V. a' ]8 X - name: 安装 Ceph 基础软件包
# m& [5 m3 S; z8 | package:
* v6 D3 j+ T) e) ^! U name: # D9 W/ ?8 |+ P* h2 F7 G! ?
- ceph-mon
+ e/ x; Q- C N E5 f; w - ceph-mgr4 r3 d }* C/ M# O
- ceph-osd
/ n1 d6 x! s. ]2 s- n; Y state: present0 ^ i* a8 z8 A* A3 D% l; H+ \
/ |. g8 D o) o X$ n5 o - name: 初始化 Monitor 节点- r8 s4 b0 I9 t( R0 q- t" F1 v
command: ceph-mon --cluster {{ ceph_cluster_name }} --mkfs -i {{ inventory_hostname_short }}1 f0 L: s: K! y6 H2 h6 k8 Z* B& F a
when: inventory_hostname in groups[ceph_mon_group_name]
6 N! w- y; J2 z4 G- l! O+ g2 g- @
0 H) h7 ]7 k8 J9 [! F- name: 部署 OSD 节点
# N9 Z8 v; _8 b' V hosts: osds
3 F" |9 w* r. P7 }- c8 y1 k vars:1 f2 K1 E/ R) ~; `% v
osd_devices: # OSD 磁盘配置! J4 T& P$ b# {' Q7 f
- /dev/sdb+ E1 j% A' M$ m( @1 ]5 C; U
- /dev/sdc# V2 `! i, l6 r/ r3 C9 i6 T
osd_journal_size: 5120 # 日志分区大小(MB)
; A: P b* C- B tasks:
}4 X1 ]; Q+ U. ?" m/ v& t - name: 创建 OSD
9 W; n% h: X' N+ | command: ceph-volume lvm create --data {{ item }} --journal-size {{ osd_journal_size }}
0 p9 `! e% T9 Q0 I: j% s5 e loop: "{{ osd_devices }}"
% l2 x9 j' Y; k: u4 S1 I8 l
/ O6 _+ w' J% F S9 ]- name: 部署 CephFS
1 ?+ E- e! e" G: v hosts: mdss # MDS 节点组* m9 p( Z* ~- B2 d, V2 b
vars:' ?& p% j' Z4 d9 n! {# F
cephfs_name: myfs # 文件系统名称
( c5 |; `6 D# T; D9 ^" Y cephfs_data_pool: cephfs_data # 数据池名称3 k" f7 c% K' q( ]
cephfs_metadata_pool: cephfs_meta # 元数据池名称) A1 O& _7 ^. j( y7 ?, A
cephfs_pg_num: 128 # 放置组数量
$ d( Y) w% q' _9 b tasks:
! F( H+ Q2 X: e: I - name: 创建文件系统
( w4 S/ I7 I. \; y5 V, @. L1 V5 C command: |
; q2 c5 p( K+ R- G6 ` ceph osd pool create {{ cephfs_data_pool }} {{ cephfs_pg_num }}
4 G1 h* P" _) o3 D5 ^ ceph osd pool create {{ cephfs_metadata_pool }} {{ cephfs_pg_num }}* @7 e, b& Y& P* k. {
ceph fs new {{ cephfs_name }} {{ cephfs_metadata_pool }} {{ cephfs_data_pool }}8 ^2 v6 n3 O" O2 \3 F
0 e5 ^6 S; e( ?
- name: 部署 RGW 对象存储
+ y6 F0 [* r0 v6 c, ^- z! U hosts: rgws
9 z- q7 L* l& c0 C' g% z0 ] vars:( J! H1 t. }8 C7 y: f( \
rgw_zone: myzone # 存储区域名称) s1 a- h/ m/ [
rgw_zonegroup: myzg # 区域组名称
% ]3 Y1 x& N0 X% h- k$ ~ rgw_frontend_port: 7480 # 服务端口1 x8 b T% P7 g9 t* B9 N; z4 o
rgw_ssl_enabled: false # 是否启用SSL2 B! P5 w$ S; G2 l4 T
tasks:% \- L. M/ i3 L
- name: 创建 RGW 实例
5 K1 Q6 ?) p& x5 ] command: |
x* a3 ~" p3 k+ H ceph-deploy rgw create {{ inventory_hostname }} \
2 T/ _8 o; E; b0 e2 b --rgw-zone {{ rgw_zone }} \5 U1 v: O4 b2 }/ l+ q6 S. A
--rgw-zonegroup {{ rgw_zonegroup }} \
5 D$ h5 q6 T7 q% ?5 E$ t$ M( g( k7 V1 e --rgw-frontends "client.port={{ rgw_frontend_port }}"7 ] i2 Z! S Z& I" `
" d5 x$ W7 F. o7 M& i" k' P- name: 验证集群状态# e, K$ H4 {5 I# g7 [, s i; h# l2 P
hosts: localhost
3 Z( M( Z4 x) _' W/ u$ L" {: F$ n% ^ tasks:7 q2 W5 r# |5 Y3 d4 O+ V
- name: 检查集群健康状态: S* [, [' p% j. x) m/ h1 \
command: ceph -s
/ F- @" D% ~# x" X/ W- |7 z; H# r register: ceph_status
4 K- o' G. p, k& b1 \7 r- q0 I4 \ changed_when: false5 v, @! w" ?$ D" R) `$ P/ P3 @
_6 Z D, E& g5 { - debug:; b4 l1 F+ Q& M; r4 p4 n: H0 x
msg: "{{ ceph_status.stdout_lines }}"2 _/ N8 S8 P6 c1 v
AI构建项目
( T! t1 E) V0 \, r) r
* Z- k( R" O& J- T. c- y二:参数详细说明
* i4 u1 q$ T* i P0 |主机组定义1 j$ r% i7 ]5 o- J: ]8 Q
mons: Monitor 节点组,负责集群状态维护
0 s* c+ T' o8 s# Z; j$ h9 _. l; h! ]- ~) s9 G) h5 k4 n
mgrs: Manager 节点组,负责指标收集和监控
# G; Z: y6 i( w2 F
2 l9 Z+ t: t, h" k3 a. Hosds: OSD 节点组,负责数据存储
1 W9 \4 W. ~) \* j s9 \
2 ~; w5 E9 \' D. b# |mdss: MDS 节点组(CephFS 元数据服务)
6 Y0 k1 R8 ]0 T$ W K& W$ e7 J3 l$ E4 q, g6 d% T
rgws: RGW 节点组(对象存储网关): L8 c: E$ [* n2 @! P2 g
Y+ K0 H) R: \
核心参数" s4 I" V# V. L! n: C7 s) r
#yaml文件6 A+ b& L/ h8 e; `
{4 j2 n) C' b6 o# M
ceph_cluster_name: my-cluster # 集群标识符
- U' f9 H9 \. y$ P8 @. P$ m3 X) y* `; Y
ceph_fsid: # 集群唯一ID,建议自动生成
" a5 @3 j# I0 H# Y0 W# _- x
1 y* \9 Y5 L# l+ a/ N) iceph_public_network: # 客户端访问网络
& u# U; T- B; k6 |( }* ?$ o+ X# l1 G2 k& p0 {+ B) k
ceph_cluster_network: # 数据同步内部网络
9 h! X3 a) ^1 N2 Y' j
' h+ A, z7 F% a' BOSD 配置
. F: _& t1 \6 G6 r#yaml8 b- ]; X F7 [% U
& ^' H1 k; \! D
osd_devices: # 磁盘设备列表(根据实际修改)
9 c. K" A8 w4 e" Q* D - /dev/sdb
# f, f0 J1 p) u# C# B0 x - /dev/sdc
4 m6 H0 V8 Z+ kosd_journal_size: 5120 # 日志分区大小(MB); Z: |( ~* R+ W, Q
$ A/ a1 M' \: b* R4 o1 {6 TCephFS 参数
" w8 p; e* S* ~, U" L4 C#yaml文件
v- e# \. A* C6 f4 H( x: @
* i2 o/ b+ t C; [cephfs_name: myfs # 文件系统名称 ! T) {; x5 `2 J; Y/ `: t6 [
! D, v5 L, K, k) zcephfs_data_pool: # 数据存储池
1 I5 L1 O4 s) c2 I7 z* h4 f/ l; D
& U0 ~: z$ @/ x( P( F N7 Zcephfs_metadata_pool: # 元数据存储池 0 _$ R3 _9 r$ s E) L z' }' `4 V
( N6 ~/ l/ ^3 M' A; o O9 mcephfs_pg_num: # 每个池的PG数量(根据集群规模调整)+ _) d! y. I+ W' Y0 }: d
5 Z d9 T: P9 T
RGW 参数
, K: @9 _ {1 {* k#yaml文件( K' `) ~6 |5 q. s4 ^
3 N' ?: m1 E' v& q( t$ m% Wrgw_zone: # 存储区域名称(需全局唯一)
7 r& r/ I1 m5 t5 x( c1 W& @5 I8 ?' |0 g( `# I6 O
rgw_zonegroup: # 区域组名称(逻辑分组) ) V# D. i1 w$ g a: L- `, s! {8 d
, O) c; q0 {4 j% [, C+ m7 X1 f
rgw_frontend_port: # 服务监听端口9 a4 D7 `# l) p/ ^+ ~5 D: D
/ N( ]; D; i/ W3 F+ u' f0 b W1 c
rgw_ssl_enabled: # 是否启用HTTPS' l5 K7 j9 l/ O/ P) e( @
8 D0 ]5 v; |1 A; x* T* |2 h$ \
三:补充配置建议
% }$ ~; M5 U; l( d- x* f+ e( g认证配置(建议添加)
. @1 ^3 B- V0 V% ~/ B#yaml
+ O6 N/ B% `" n( Y0 I# P( b" ?; S& y. E0 w; z$ R
cephx: true # 启用认证 $ J9 V- c* ?2 v7 G& p
9 R7 p H7 l" Z {+ k2 rclient_admin_key: "AQD...==" # 管理员密钥(自己定义)( k; }+ e; f9 u) s- w
5 W6 f- M9 p) ^$ T- I0 p, w存储池配置 V+ s) n: J5 T* ^) J2 R Z
#yaml
0 y; @" w5 ]0 C0 v3 `9 @2 |1 v4 L6 s0 o
default_pool_replica: 3 # 默认副本数 . P- U; Q+ |! [" {5 }, k
; e' K; z6 c& e" u$ S* qpgp_num: 128 # 放置组组合数
j9 k# s' N; s4 y: R
( c, {+ V' S2 O8 T E监控集成7 Z0 S% D1 n( Y- ~3 W
#yaml
# f3 Y- Z- t$ N& L8 y3 c
# G2 Q2 c0 {3 X& U2 Bceph_dashboard_enabled: true: D9 v( |- { W* p: X u
grafana_integration: true! S4 q( n8 O* P- `9 h \
prometheus_targets: # 监控服务器地址
8 O: Q1 A2 z% u8 P$ _+ P$ y - 192.168.1.100:9090! ^9 A8 }7 e9 E1 C3 D7 V
2 B( K- t* A2 E, w) }/ u0 ?; l
硬件优化
+ v, i3 x7 E2 a" }% T+ E' m#yaml
. N; c( |4 ~+ U7 m7 H1 e9 U% O R0 G) _6 | `2 F
osd_memory_target: 4294967296 # OSD内存限制(4GB)
: N, f4 p( e. _4 O& H' z6 @+ a
filestore_max_sync_interval: 5 # 文件存储同步间隔
# `/ J E: _& \: k
# X. N7 L4 t7 j( ^* D四:ansible执行注意事项2 t; H! S4 J* p! J8 r4 A3 P. W! U* b
准备 inventory 文件:
$ B5 N3 g: s: Q3 w% h#ini文件% o& D% t3 I& M6 K- y% _; M4 e
# K6 w0 d3 r# k, Z" i; g[mons]
& Z) y5 M2 L% V# _. `& S% hceph-mon1 ansible_host=192.168.1.101
# G9 k5 m) c+ G1 B$ W* \ceph-mon2 ansible_host=192.168.1.102
. |$ d# s5 J7 `; u8 l9 z2 d7 ?
5 s8 x9 [' Q; |: |' I3 R[osds]
" O% ~5 k/ p& n+ p$ s* iceph-osd1 ansible_host=192.168.1.201) A% {' U7 F% ~, ?$ U8 z
ceph-osd2 ansible_host=192.168.1.202. d3 a; I! @" w/ h+ I# h5 W5 v
5 |- v8 @: [# G. e[mdss]
( s G' r$ w3 A+ |) H' x) Q( `ceph-mds1 ansible_host=192.168.1.301: k0 n% e8 L: L% A1 n" r
! R0 {0 J$ E- u[rgws]
" r1 t0 _: z1 s8 } u& eceph-rgw1 ansible_host=192.168.1.401
" T3 G( N' I( E S+ X$ h) b推荐使用官方 ceph-ansible 角色:+ l o% I" g- A: R9 n8 ~' X
yaml( D6 N- O) Z7 Q- ?9 ?! ^9 l9 R
) Q5 D8 O) X* k: ]: d" A7 ^
roles:- A9 P1 Q1 v- j0 a Y
- role: ceph-ansible
. B' U7 o2 C/ \7 h0 b+ a vars:* C. F4 X5 Y4 w- C
ceph_origin: repository4 q J4 U2 L4 a
ceph_repository: community0 @+ C* n; [" z" \
: J, y0 F- K! i c- n8 U& V
网络建议:8 x. z, H) L3 A1 }: ~! f* H
公共网络和生产网络分离0 ]$ s$ T* n* T- P
6 W. b; p% @1 J
每个OSD建议10GbE以上带宽" [, V* E3 k6 r1 j, K
# ?$ U( F" J, I& W0 G$ _! W
监控节点使用SSD磁盘
- h0 t. C& ]) d
! P1 d0 z3 t, z# P7 M2 `# w* d验证步骤:
' i4 B/ x6 K7 d" J
( Q" f7 {3 n, M# 检查集群状态) y( B/ _7 D0 B# E7 w0 p5 \; b l9 K
ceph -s# w* l9 t4 |7 ^; b9 q5 w
" M* e) S, z- o( s4 X E U# 测试CephFS挂载# ~. I& ~1 D9 J. f
mount -t ceph mon1:6789:/ /mnt -o name=admin,secret=xxx* T+ F& u: w9 S" z% n* x
/ g% U& M, A A+ p! n& E$ {# 测试RGW访问
S, ~0 y1 T( U, cs3cmd --no-ssl --host=rgw1:7480 ls, j* B# S0 \8 j
|
|