|
|
楼主 |
发表于 2025-12-22 23:44:32
|
显示全部楼层
一:Ansible Playbook示例% ]0 B% ^7 E4 U: `1 G8 r; k* C. A
---2 k. l- M i8 o1 G3 w
# ansible-playbook -i inventory ceph-deploy.yml
$ R5 b- b, I z. M/ _ / S8 \0 @: x |( M
- name: 部署 Ceph 集群基础组件: C) y0 l, t6 b; J! }
hosts: mons,mgrs,osds # 目标主机分组: L. ?2 n" O9 x! U. J* T
become: yes # 使用 root 权限
7 T% F8 |- @( W$ L3 J. U; b* _$ r vars:
8 `) W* N- J, A; {9 T W ceph_cluster_name: my-cluster # 集群名称
8 q" z9 H- N/ C! g ceph_fsid: "{{ lookup('password', '/dev/null chars=hex,ascii_letters length=32') }}" # 自动生成唯一集群ID
+ u# t1 R; J4 C' `( [ ceph_mon_group_name: mons # Monitor 主机组名称
4 _, O$ Z& t H Y0 v3 w6 F- ` ceph_mgr_group_name: mgrs # Manager 主机组名称
) l9 R5 [2 Z5 W$ x/ w$ D ceph_public_network: 192.168.1.0/24 # 公共网络3 e/ R7 l x& ` l
ceph_cluster_network: 10.0.0.0/24 # 集群内部网络! k; _* S( b L& B- x8 d
: N/ ^ Y, t! v
tasks:4 x. M% k; {# R2 w, \0 `# e+ E5 W/ G
- name: 安装 Ceph 基础软件包
6 `& e1 L2 j6 {! G4 }3 o package:% T4 D0 t* f4 `0 _, P2 J% j
name:
2 } n/ U7 X$ Q/ [% p - ceph-mon
) k, P0 Y" ]) s! e' h0 X - ceph-mgr) r" W! ^2 J* E
- ceph-osd
4 H) p2 Y# P0 v K. l$ G5 e" s state: present7 J4 D6 u$ h. Q k [' U
2 z# N) ?! m$ W: A; \
- name: 初始化 Monitor 节点
& g: i `$ A2 N" E" y command: ceph-mon --cluster {{ ceph_cluster_name }} --mkfs -i {{ inventory_hostname_short }}
$ u8 d; J& U" N8 {8 J when: inventory_hostname in groups[ceph_mon_group_name]
# m6 t3 z- r6 B' }% |) x
; k# Q' o- {3 h! m5 m- name: 部署 OSD 节点
# x) t |, Y8 D, X2 g9 Q hosts: osds5 B: P: O: F7 P9 s M5 R
vars:
( m7 A3 s, ~2 s osd_devices: # OSD 磁盘配置
# n4 M v& L2 _+ b5 C - /dev/sdb* J; J( b& S$ q3 f
- /dev/sdc
* V5 k$ p/ r( ]9 S5 l( [ osd_journal_size: 5120 # 日志分区大小(MB)
; H3 W9 ]+ \1 {3 V: r2 G; ]: R- c tasks:3 V+ V- [2 \4 u% l, {/ ?/ q
- name: 创建 OSD
' G9 l1 k# X+ P6 p. ]+ C' [* \ command: ceph-volume lvm create --data {{ item }} --journal-size {{ osd_journal_size }}7 b, R8 }7 T5 M! K7 |. H
loop: "{{ osd_devices }}". P) K7 @& G& B% R) P6 i( e, `: W
1 F+ U$ |+ t# V/ I* J5 x/ q5 q
- name: 部署 CephFS
+ g( C; [1 `0 B% h( H5 k3 ] hosts: mdss # MDS 节点组0 q, ^* }- o' O- Q" i
vars:
. \" ^7 f) H) z! P7 f+ U# h cephfs_name: myfs # 文件系统名称
9 @3 e' \0 C7 q2 M+ Y7 b cephfs_data_pool: cephfs_data # 数据池名称' d! X O, I% q
cephfs_metadata_pool: cephfs_meta # 元数据池名称
( o) {# \; v3 ^ cephfs_pg_num: 128 # 放置组数量
; v& j& W! j f2 v0 u2 r tasks:. J. u c9 d- G; `/ S Q
- name: 创建文件系统
# T' `6 _) ^; g* N! u1 g4 {7 o command: |
' Z, }8 O5 o4 |7 k$ H ceph osd pool create {{ cephfs_data_pool }} {{ cephfs_pg_num }}
7 @$ W$ v6 s& M2 Z) d- w ceph osd pool create {{ cephfs_metadata_pool }} {{ cephfs_pg_num }}
$ O# O4 ?2 e f) J4 { ceph fs new {{ cephfs_name }} {{ cephfs_metadata_pool }} {{ cephfs_data_pool }}
5 D% N3 U1 O- O) e6 u
3 W2 Y4 v- Q2 v @- name: 部署 RGW 对象存储+ h3 K8 Q: }% v" y5 f
hosts: rgws9 t) ^: g, r& g0 h: `) `0 M" t+ d9 T
vars:* l$ a; t4 B& \3 C$ T
rgw_zone: myzone # 存储区域名称
* k8 T7 ]1 a* h( b rgw_zonegroup: myzg # 区域组名称
8 p6 z/ o/ m% z& \, J3 U0 b rgw_frontend_port: 7480 # 服务端口
8 G; L& T% L6 Q0 Y' X% q rgw_ssl_enabled: false # 是否启用SSL
/ }& ~, j! k4 A' B+ K% O tasks:8 t7 P" Z2 b" v
- name: 创建 RGW 实例
5 w/ H* y! i8 H9 J% C command: |
6 K. ]8 t1 I. m0 _ ceph-deploy rgw create {{ inventory_hostname }} \
- z2 Z4 m* G) H( X --rgw-zone {{ rgw_zone }} \
/ a" B4 v" I: V/ n --rgw-zonegroup {{ rgw_zonegroup }} \
: a' o7 E5 w) U% z --rgw-frontends "client.port={{ rgw_frontend_port }}"4 m* M( Y5 l% W! X+ z/ J# M
" T' e* X7 M! I, m
- name: 验证集群状态+ |) |0 ~, a7 {
hosts: localhost. N+ V, p! Z$ e! q$ L; p) s
tasks:
# A) _; l2 V0 _6 L2 i n0 A - name: 检查集群健康状态
( n+ \, G; x! o- s' ? command: ceph -s
) s- W1 X1 q) M _, r# a register: ceph_status
* j/ G: g9 M! U" I* I m changed_when: false
" T& l, Z$ g- A% z, v ; @! r5 |) F1 J0 Z: R7 S
- debug:5 v! X! F4 Z/ h2 i
msg: "{{ ceph_status.stdout_lines }}"
" l; B3 E4 A* s8 U; w- vAI构建项目
# r) K0 v& v; y
* `6 B2 Q0 N$ [& P6 ]二:参数详细说明9 i# T, z4 f# S: ]) d& y
主机组定义
. R0 R' X) N: t: U$ dmons: Monitor 节点组,负责集群状态维护
& X3 B% m% @% c% q" c! Z* d1 ?( i3 f, k0 {
mgrs: Manager 节点组,负责指标收集和监控$ F4 T6 S2 i! j* i& e
; \6 J4 l9 ]5 F! |
osds: OSD 节点组,负责数据存储
1 m2 X0 `0 `9 H3 r8 z/ x# I& q% L# ]: w2 ^( q3 C
mdss: MDS 节点组(CephFS 元数据服务)
+ ]- O6 S6 G. _/ M0 U4 o' ?6 N6 j3 e" Z
rgws: RGW 节点组(对象存储网关)+ x' j1 R% n: H0 i* y
. I' ^# h' i& `1 @2 Y/ b1 d/ F( t核心参数
8 B6 `( J8 y6 G8 `4 Y+ v' d K#yaml文件6 ?9 k; l& \- r. l. t
. s5 M4 o3 T* b3 e& z8 e4 f
ceph_cluster_name: my-cluster # 集群标识符
A! s3 M/ ?& I$ z) U5 K) A% o& M2 A5 d# W& r2 y, n; o V" C$ t d
ceph_fsid: # 集群唯一ID,建议自动生成 7 _: a7 r+ Q: p* W, x; e
. [9 D* d7 A7 K: k9 ~ceph_public_network: # 客户端访问网络
( U0 h" R5 c4 ]) M1 L3 l& }3 Y' B7 T+ C
- W8 g3 \/ k# c- ?ceph_cluster_network: # 数据同步内部网络
6 \% ]% R z8 F! a4 f( J) }' q2 R' e$ K, D% ?; ~
OSD 配置9 ~4 F: d' d3 I" B, M/ b+ f- ^& m
#yaml
! c; |1 G: K# Q5 K9 R" s$ v2 _3 d. _/ I) c4 O* v
osd_devices: # 磁盘设备列表(根据实际修改)
. n. M2 a* p {1 P; N - /dev/sdb
9 e) u6 w1 T' Q9 d+ o* M& u; b - /dev/sdc
6 h3 Z/ e0 p! Vosd_journal_size: 5120 # 日志分区大小(MB)
9 h s/ P" S5 _+ l/ ^' F
2 Q" p. Y! l- ^' T( ]7 qCephFS 参数( v/ ]* H$ C0 \. L7 p! q( |
#yaml文件
8 A! s. Z, C7 C
9 `: r) Z5 r6 t) J% W9 ncephfs_name: myfs # 文件系统名称
) q! e2 m2 A+ w5 v$ F7 r& N2 u4 a% [
cephfs_data_pool: # 数据存储池
. N3 _5 n) E* z9 Q& i' Q( L2 ]) f4 h! L9 l
cephfs_metadata_pool: # 元数据存储池
9 q& ^: o Y; W% J, g* u" B" f0 o7 r
cephfs_pg_num: # 每个池的PG数量(根据集群规模调整)
, O! g3 P4 F" O' Q$ B6 I ]: @! A h' F4 ~( `- S/ ^6 ^
RGW 参数5 k1 Y1 c7 `) ~' q5 K
#yaml文件3 j4 m/ U) e: `( Q. S6 C
8 {) s# y, h$ j, Argw_zone: # 存储区域名称(需全局唯一)
0 {/ L1 u5 t( S. c. F& y* R3 N! b5 R$ U6 R- s) s( G1 r/ v7 y& S- c$ a, r1 H
rgw_zonegroup: # 区域组名称(逻辑分组) 5 P+ }, N% g6 B9 n: j. f
6 i0 D; T& N1 q; O- s9 ]' m6 v
rgw_frontend_port: # 服务监听端口+ X0 t" `1 S6 A+ q) N' _6 F" n* w
) k: w' W* C+ k; brgw_ssl_enabled: # 是否启用HTTPS3 T6 a- Q+ m& e' d% ^* T( p8 n
7 s$ B o: R8 j6 C! ~( Q2 S$ ?
三:补充配置建议1 A! K6 V/ F: c+ s$ e4 D
认证配置(建议添加)" V6 ^6 q9 S8 I, W; M, y; x
#yaml3 r, P, i3 W+ \3 O, S! M* V0 X
* Z9 V8 T( e. a {cephx: true # 启用认证
2 r0 C2 M9 _! a2 v, j5 u7 t8 c# J
client_admin_key: "AQD...==" # 管理员密钥(自己定义)
! m. x/ x+ _! {0 }% U- o3 ?5 X' r# v# D$ A
存储池配置 c+ e, } i4 b( _
#yaml. [$ b& T/ A6 f4 A1 O+ J0 t
! M$ E7 {0 K% R; Sdefault_pool_replica: 3 # 默认副本数
5 ?) U- y% z g! V. m. n. v" K: @! D( H/ ?7 P4 H' C C+ f! X1 C
pgp_num: 128 # 放置组组合数
' I! Y' F$ \- h, ^7 {/ Q) V& M/ l# ]& S6 s0 A f0 A+ H% M2 X
监控集成
# ~! j. }+ ~/ j) E; ]8 `/ r q#yaml
z1 F( P; N# k, @0 |7 N
( Q& j2 ?5 e3 {# N; P( Oceph_dashboard_enabled: true
" a( P6 H0 z' t& ^grafana_integration: true' R& U" i8 L& `: G. q/ |7 n
prometheus_targets: # 监控服务器地址
: \+ b; s6 p7 Y3 g/ o - 192.168.1.100:90900 X. @7 V- U. z
8 M L: _. \* V# U2 w( ?' s
硬件优化 U+ J, t" C1 b: g( S
#yaml
' F, ~1 A0 Q9 r( Q- [9 T4 }
1 U# g2 }7 c9 O! Bosd_memory_target: 4294967296 # OSD内存限制(4GB)
* }& ?9 O, r5 A: {; T x& J+ _! p5 y' H6 Y5 W
filestore_max_sync_interval: 5 # 文件存储同步间隔9 ?# Z9 u+ O' P0 W5 K, L
$ v! u6 y/ P, w
四:ansible执行注意事项) o0 C( ^: p2 Z% T1 o2 @8 u
准备 inventory 文件:) [- S! R, F7 F# ]/ I
#ini文件3 B' N2 W$ f5 T& j
8 d. F$ [3 A% N[mons]6 r; b5 J' s/ s
ceph-mon1 ansible_host=192.168.1.101
7 U, }; A6 L& y/ r4 x1 j: v$ T6 K6 r; Nceph-mon2 ansible_host=192.168.1.102
- q! d( h' l) P8 e" D4 ^
. E( p/ @* L6 i6 R1 y# E[osds]
: N! S' m7 C6 f' S- e( a; [# g- Cceph-osd1 ansible_host=192.168.1.201
* o# b; d5 f* M- E. S2 jceph-osd2 ansible_host=192.168.1.202
. l8 [$ T& {4 Z5 j* ?. g8 B" ~- F0 i( x2 k U- B5 y
[mdss]5 t4 `* j2 \* e S
ceph-mds1 ansible_host=192.168.1.301* q! F( M% V n8 Z8 F
" K$ `6 e% y+ M, W! H( o3 X& l7 O
[rgws]
$ x4 A* X! C: @; rceph-rgw1 ansible_host=192.168.1.4011 \8 F( z6 K8 \' x% U, n, V) v/ Q# }
推荐使用官方 ceph-ansible 角色:/ I: [# q. N$ j
yaml! o+ v; t& f6 i k0 y
5 d0 T0 G) P, V$ O* u
roles:
. B# X! {1 _! @% x - role: ceph-ansible4 J& s- w$ X3 t
vars:
$ I$ e; b/ K4 _8 H( S) J ceph_origin: repository7 y" |: q+ _% L/ I: d; N
ceph_repository: community
9 T h; ?1 j0 w) ~. Y$ b4 _- W% k/ Q, B) E" B) `
网络建议:. [( z4 C3 k- C) V8 Y/ ~2 [5 q
公共网络和生产网络分离5 Y( B! a; a8 `( h% W" b7 w8 s
w6 x3 M' _- n# k+ J: ~( ]1 ?% n1 F8 v
每个OSD建议10GbE以上带宽
: b" W' u0 ]- A- f* B: X
H4 l' S. O6 l) j7 t# n+ J# P& z$ U: @监控节点使用SSD磁盘
: A. [" V6 t) Q/ `4 q- v. D' ~2 \3 v& N' n5 i5 }2 y( u. N
验证步骤:
) Q- V+ s* |5 x: U t- p; V
" F+ X, |- R9 S7 J8 B# 检查集群状态4 w. s( L3 ]/ g+ L8 B
ceph -s; p$ M' L& \0 W; }- ^! e
" `7 Q5 J( c% \0 l$ E2 E
# 测试CephFS挂载
- V. P& i% M1 ]mount -t ceph mon1:6789:/ /mnt -o name=admin,secret=xxx0 `. q4 @4 B% I! B; X2 k$ n
# q }' g1 [' W
# 测试RGW访问& y" _) m3 h" W& h1 o
s3cmd --no-ssl --host=rgw1:7480 ls5 x2 F3 I J; }: h, n; M
|
|