找回密码
 注册
查看: 320|回复: 1

怎样安装使用ceph ansible

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2025-12-20 22:38:29 | 显示全部楼层 |阅读模式
Prerequisites* c9 _1 O0 t  e' t- m$ g
Root Access to OpenStack Control Plane! h) B8 U9 g) K! G* n
Root access to your cloud's control plane nodes is required.
7 J, o$ f& w4 Q
; z3 ?0 H/ h. Q4 J& VPath to the Ceph Configuration Files
/ U$ M, k3 P! zCeph Ansible Inventory
7 E" ?5 X3 m7 G* m3 R/etc/fm-deploy/ceph-inventory.yml
9 C3 O: g. W5 a, n: X) G7 cCeph Ansible Config
+ v. z& V1 ^+ y/ v) \# @' {# D/opt/ceph-ansible/group_vars/all.yml: G6 l$ L2 X8 F2 _
Preparation6 c9 H0 d7 _' Y( {5 q9 B3 `0 S; ?
To prepare Ceph Ansible:
! `: e( ]( i& |. Z1 O$ _
0 o1 s( ~3 D! _+ a6 W( Udocker cp fm-deploy:/opt/ceph-ansible /opt/ceph-ansible: v' X' Q3 O+ G9 B9 O
chmod 700 /opt/ceph-ansible* L" f0 b. J6 C4 o. R6 G( [
cd /opt/ceph-ansible
' E% p! Z0 D( B6 t% ~" q5 @virtualenv .venv
$ u8 w- s& ]5 f: B  b& Z2 M6 Psource .venv/bin/activate1 g! ]# l4 `- Q' h- m: ]
pip install -r requirements.txt8 Q3 Z) |0 B; C$ D/ q( o! Q( E
pip install six
/ Q9 I% {# E/ H1 W/ e: r0 m( i( E. B+ Z- C3 D+ h4 K! b
Deploy a Ceph Cluster:0 d+ I/ g. B* X8 y  T$ X

( w+ r: l9 d. v, c. u+ @+ Nansible-playbook \$ i1 e0 s! H* ^7 G6 K5 J9 u
    -i /etc/fm-deploy/ceph-inventory.yml \
- l$ Z7 e: b+ l: Y/ \    --private-key /root/.ssh/fm-deploy \
1 u$ [/ v- I0 s    /opt/ceph-ansible/site.yml
# g+ F, A" R1 P( d/ W/ A$ n( O: o6 [! ]5 W2 T
Attempt to repair a broken Ceph cluster:
, M, a4 c0 M( U1 t% ^0 S  K. i3 T. v0 t- `
ansible-playbook \8 h9 N) ~4 @9 X
    -i /etc/fm-deploy/ceph-inventory.yml \% J: E" H- ^9 C$ M
    --private-key /root/.ssh/fm-deploy \
2 y4 C  k$ A  m. H3 N- E8 T" F' @2 K7 [; a6 ]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
 楼主| 发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-11 22:56 , Processed in 0.017403 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表