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

怎样安装使用ceph ansible

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-12-20 22:38:29 | 显示全部楼层 |阅读模式
Prerequisites
& v3 b* R: D$ U2 d8 ~Root Access to OpenStack Control Plane# y* n* x3 C( k
Root access to your cloud's control plane nodes is required.$ C* |: R1 b& d- U+ {

0 a6 q1 a- E4 D8 C# ?Path to the Ceph Configuration Files  V# k. s1 ?/ o. X6 N
Ceph Ansible Inventory3 J* s/ }) f7 c$ D  G$ l% j
/etc/fm-deploy/ceph-inventory.yml: S2 R( E' [" Z; P) s
Ceph Ansible Config
( N" j# [1 B% K7 k/opt/ceph-ansible/group_vars/all.yml
( m7 p0 X& O. z- S3 B5 XPreparation* }2 Q* ~% i! i. L1 Y+ i
To prepare Ceph Ansible:: ?3 p) ?8 y: {; M3 o

+ S1 k! O1 {( u: b# g7 p- W7 wdocker cp fm-deploy:/opt/ceph-ansible /opt/ceph-ansible; v7 _3 r& P. J
chmod 700 /opt/ceph-ansible- s) F! ]% j* T/ P1 r4 Y' v
cd /opt/ceph-ansible+ S, ?* I# r7 q" b0 X- ^4 M
virtualenv .venv5 A  m+ r' F0 G3 u% {% k/ T
source .venv/bin/activate
6 A4 x+ c2 c' W& C( m7 wpip install -r requirements.txt
2 a6 `- }$ A4 R% I8 }- bpip install six7 Q! H# C: y# F2 j% `

+ d1 W" m2 O1 x/ R# Z  L5 A2 SDeploy a Ceph Cluster:8 A# q2 Z  d3 }2 `
3 d5 j' N: q# b
ansible-playbook \
, k& I# q3 S, p9 C3 J    -i /etc/fm-deploy/ceph-inventory.yml \
9 t( Z0 O9 K6 U7 c6 Q    --private-key /root/.ssh/fm-deploy \( H6 `/ B$ T6 `
    /opt/ceph-ansible/site.yml
' A9 E0 U0 K0 O7 g# u3 A
3 U$ X' s6 h) b" RAttempt to repair a broken Ceph cluster:
4 E4 e, I/ A7 Q7 u
! B4 m) u1 k. A/ tansible-playbook \
; ]+ `% P; C/ ]' h5 f% r8 U    -i /etc/fm-deploy/ceph-inventory.yml \
4 |# `) W8 n' r4 e/ \, _  h" ]1 ^    --private-key /root/.ssh/fm-deploy \
+ f1 b3 c: J! n1 {3 F3 g7 T% `- a/ N9 E

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-12-22 23:44:32 | 显示全部楼层
一:Ansible Playbook示例6 q. R- }2 I- P6 F+ y3 F/ s
---: H. [1 @! d( @# X8 h
# ansible-playbook -i inventory ceph-deploy.yml5 ~: b) E8 t6 k$ [  Q

* V; {  ?2 n: {; h, k# z# a7 g- name: 部署 Ceph 集群基础组件8 J4 Z: y; u2 I. F7 A) _- L
  hosts: mons,mgrs,osds  # 目标主机分组% @6 D# q, I  }3 ^9 h1 A
  become: yes  # 使用 root 权限
7 _6 i# C# `/ v& R& m. G; z. l  vars:
/ @7 ?4 R1 D4 n    ceph_cluster_name: my-cluster  # 集群名称
: z) O0 R0 h- t) g5 D    ceph_fsid: "{{ lookup('password', '/dev/null chars=hex,ascii_letters length=32') }}"  # 自动生成唯一集群ID
: q9 F( }$ i8 ?4 z    ceph_mon_group_name: mons  # Monitor 主机组名称
: ]% T: e2 }  l$ Z& O. O1 _    ceph_mgr_group_name: mgrs  # Manager 主机组名称
- o( z" [5 l3 v5 m    ceph_public_network: 192.168.1.0/24  # 公共网络: l7 W0 A/ M& u! q7 M% B
    ceph_cluster_network: 10.0.0.0/24  # 集群内部网络5 S1 T* ~: h! m4 L, e+ p- J

- D' [$ A8 S7 _& X- ]  tasks:& ^) W, T; s; r( B9 A" L' {6 \
    - name: 安装 Ceph 基础软件包
7 U' _, ]7 V/ j      package:* }: q# G1 H2 K6 U# D7 }) O2 a
        name:
7 R; [. o" ?8 Z9 a# P( W, R9 Q          - ceph-mon% Y* I, z! \8 `: M( r4 `
          - ceph-mgr) N4 w% U" V* A5 j& s% f
          - ceph-osd
/ ]6 M+ E2 D7 y# e' W/ ~        state: present
. P% y7 y  f/ N% r; z
8 }) ~# h9 E. Y3 z# M  g    - name: 初始化 Monitor 节点: E& D, @  P, X( W
      command: ceph-mon --cluster {{ ceph_cluster_name }} --mkfs -i {{ inventory_hostname_short }}
9 Q; Y0 b4 D1 x( d) a* c) z      when: inventory_hostname in groups[ceph_mon_group_name]' n& }" E8 g! G6 F

$ e  X7 N" ~  y5 Y+ A( H3 u- name: 部署 OSD 节点* {$ c8 |9 a2 M: x3 y8 F
  hosts: osds
: @0 h# ^; h* l, ~  vars:3 Q' `6 t. Q3 I1 l: U6 [
    osd_devices:  # OSD 磁盘配置+ I# Q2 o3 A1 _' O; n
      - /dev/sdb
8 [& K) \) y. M  J# z      - /dev/sdc$ m  K* k/ ^% n1 X/ J
    osd_journal_size: 5120  # 日志分区大小(MB)
; ?6 U4 k! `7 K7 _% ~  tasks:9 s/ Y9 P+ I9 Q: z  l
    - name: 创建 OSD
- |2 R9 a" N" K8 u; a      command: ceph-volume lvm create --data {{ item }} --journal-size {{ osd_journal_size }}: m% q) }- C: [: d4 r, S
      loop: "{{ osd_devices }}"
' w4 x4 W( t2 o1 |5 v: w& ^ / U8 I$ x, p- r
- name: 部署 CephFS
" A# H+ l, m6 B( D( k% h  hosts: mdss  # MDS 节点组% `4 o* W: D* i* H7 L% A7 Y7 l# L
  vars:
' M; ~3 o- W( }% X    cephfs_name: myfs  # 文件系统名称
8 G3 l! O- e; g+ a5 |* n    cephfs_data_pool: cephfs_data  # 数据池名称% ^# }% ^9 O1 b6 g, S6 m4 ^
    cephfs_metadata_pool: cephfs_meta  # 元数据池名称
& U& v. o6 f3 w    cephfs_pg_num: 128  # 放置组数量. D3 H! J0 p  C% v9 U5 f: v, n# t; L
  tasks:" u9 W. j$ M; o: r
    - name: 创建文件系统
& v+ o% J1 e6 R, U" E  @" M5 h      command: |0 r/ Y( j- D6 m6 g2 ^
        ceph osd pool create {{ cephfs_data_pool }} {{ cephfs_pg_num }}
: y; _* e. z( Q2 `. i        ceph osd pool create {{ cephfs_metadata_pool }} {{ cephfs_pg_num }}
9 u' `" e1 D2 J; E" ?        ceph fs new {{ cephfs_name }} {{ cephfs_metadata_pool }} {{ cephfs_data_pool }}
) S" y6 _# i1 f3 n9 `; m3 e3 z" v ! m" i: C$ Q$ k! V5 `
- name: 部署 RGW 对象存储+ O$ ?0 q' y5 p: E
  hosts: rgws# f/ @% S2 t) P2 y
  vars:
# P, F3 `% D9 `1 E    rgw_zone: myzone  # 存储区域名称
  k  E; u* c7 k- m    rgw_zonegroup: myzg  # 区域组名称% J, w5 w# K2 v) d- r" H$ |
    rgw_frontend_port: 7480  # 服务端口
4 U% I" J* [- A; U    rgw_ssl_enabled: false  # 是否启用SSL5 f' X) y7 _. b: l
  tasks:/ A% g; H0 V" U1 o# V
    - name: 创建 RGW 实例# R/ i' V  e& F7 `1 l
      command: |
) q1 H3 B6 ^3 x, h- ~2 a! c        ceph-deploy rgw create {{ inventory_hostname }} \
4 g7 I* L2 ]7 A9 C/ z; H' M          --rgw-zone {{ rgw_zone }} \* ~: o2 i2 g4 F8 T% N
          --rgw-zonegroup {{ rgw_zonegroup }} \
& R. |5 q" R1 H* ^  ]          --rgw-frontends "client.port={{ rgw_frontend_port }}"
9 ^- z4 }. y! ?/ R2 }7 M 7 O( I& M. @# y( F4 V
- name: 验证集群状态& e8 c# t$ k3 d" k: e; y) ^
  hosts: localhost
3 Z! _8 S+ G( c. o2 j0 _  tasks:
, ?# A* Y8 h$ d" Z4 u: o    - name: 检查集群健康状态& z) n+ l/ n. Z7 P& D0 T" |7 A6 [
      command: ceph -s
, B# r( ^. _6 u* x      register: ceph_status
0 F/ A- {; I) F; K5 y( R      changed_when: false) ~* y% V2 _  E9 |, M4 z
) C7 V$ Z3 I' W
    - debug:" {5 R4 h+ V- }4 n
        msg: "{{ ceph_status.stdout_lines }}"; o" l, }$ M3 ~* ?1 w
AI构建项目6 X# z& t0 E" X
4 _! Z# m- k1 M0 S9 P" D+ w( W- `
二:参数详细说明/ w1 _( e- K5 w# v; z+ k  m
主机组定义
+ `9 w. W# v) @5 ^" U) Bmons: Monitor 节点组,负责集群状态维护
) ^2 y% Q& M0 R2 f0 E- n4 x) V
3 o; ?  A( `* p, x, B  Emgrs: Manager 节点组,负责指标收集和监控
9 S, V( O7 F, z
6 w0 m, R3 h) Vosds: OSD 节点组,负责数据存储3 G1 `# Z# F8 Y% o& h2 y( I
# S4 w4 x  |( Y
mdss: MDS 节点组(CephFS 元数据服务)
+ n! o( S  e, v: L  S
. P7 R- a- u8 h- F) g4 g3 ^rgws: RGW 节点组(对象存储网关)6 A* l" H/ T0 W) H  x
- C8 G5 P) U+ y
核心参数
0 |# W; g% ~! L0 K+ ]/ E  @, k#yaml文件
, S7 A: [( E8 t& u! A5 m1 A% c/ z( R7 S
ceph_cluster_name: my-cluster # 集群标识符
( V: r1 `3 U. u0 y1 W
/ h' l: |! F3 I) R& D( Xceph_fsid: # 集群唯一ID,建议自动生成
- U# E9 w9 n' C$ e0 k  U" F% U+ f
3 {; N. |- Q/ m4 _* f4 t  v1 m/ _ceph_public_network: # 客户端访问网络
! ]7 [, M0 j4 ?6 t$ Q) x% G0 \: Z# ~; v1 u+ j. H1 M; o
ceph_cluster_network: # 数据同步内部网络
4 ~2 V: U  Q$ s, h8 x4 \/ n" E  P9 b, m
OSD 配置' Q/ q% u0 Z* a! m. K/ o
#yaml5 K8 U$ H5 k" l  j: i

0 N& ?  j2 L) i5 vosd_devices: # 磁盘设备列表(根据实际修改)) T! l) [- _7 H2 \8 C5 e; \8 ~
  - /dev/sdb
8 K) T% b9 J: Z% F" m2 l  - /dev/sdc9 f4 C0 G1 K  o# D( v
osd_journal_size: 5120 # 日志分区大小(MB)5 g$ r! o4 x  l; n& g! W

8 x  S& E# [/ h/ _$ i2 F! Z$ [CephFS 参数
, a! H3 `# x) H#yaml文件
: |4 v/ W& ~3 F: a$ J- j5 e* J# P
cephfs_name: myfs # 文件系统名称 6 r& k6 U5 h7 D8 Q  w
' G$ x' Y# O' y0 D, A4 g0 Z/ I( F, _
cephfs_data_pool: # 数据存储池
; a5 e( d  k6 `6 ]( o9 L. {9 w6 h9 |2 K9 H# q) Z
cephfs_metadata_pool: # 元数据存储池 0 S$ ?2 P; Y2 V0 @5 H

3 i4 z1 g+ K) S/ jcephfs_pg_num: # 每个池的PG数量(根据集群规模调整)
) z2 T6 Z: c2 h: M
$ O2 r3 Z" q& O! T8 \/ B* B! d, bRGW 参数) @7 E# |6 u3 j- f9 [% `- X3 R
#yaml文件
$ d: H3 ]" i# Q. P- [+ r% Q' O  G3 V$ q1 ?% `9 D" _) |
rgw_zone: # 存储区域名称(需全局唯一)( x% j/ t+ u# l( Q6 x

& j1 W. _  R; e$ Orgw_zonegroup: # 区域组名称(逻辑分组) ( f( i, G; O2 \2 [( a

% F% O, w) R8 zrgw_frontend_port: # 服务监听端口
8 K  k1 M0 Y& ?) P
, o* k1 F1 M: ?6 g. S, Y2 trgw_ssl_enabled: # 是否启用HTTPS" R1 S3 V: s2 U

! z% Y* t2 R$ J5 {" o" R2 \ 三:补充配置建议, i: c: p+ _% s* ^
认证配置(建议添加)* S6 G" @  T0 W. ^' S- l* I
#yaml
$ I; u. Z3 U' M
4 h' ?, {' ]6 pcephx: true # 启用认证
! n# o* d& u. ?- l0 ]) S& d; [( x9 Z6 C0 Y0 ?* G8 [- [* w1 o# v5 R
client_admin_key: "AQD...==" # 管理员密钥(自己定义)" i8 w2 h' J$ T
$ C/ {+ y' q0 u* @- R
存储池配置
; l( t& `8 G- `  O6 C#yaml+ g7 J2 P  Y' \: F' q

, f5 ]* t! }. ?& L& `default_pool_replica: 3 # 默认副本数
! L. m' ?: a3 I; q3 M9 `% d; G9 L# o: o2 u
pgp_num: 128 # 放置组组合数
) N7 T  H' p. s9 o
* a  `( y1 t/ [+ u监控集成
* _8 H; I+ T0 R, z  \2 _5 B#yaml& v% A! M8 a% V. ?) h; R
" t8 c. o7 w9 x9 e& O' K) Y, H
ceph_dashboard_enabled: true8 L6 j8 Y6 o) @* T. u' c
grafana_integration: true5 I( @( S- Z7 N. y
prometheus_targets: # 监控服务器地址( a/ J9 g1 k. O
  - 192.168.1.100:9090+ s6 r9 J/ B$ C7 e2 }

: O! U* {( j" y) o硬件优化
7 z0 `; a+ j% H7 i#yaml
/ s) U6 N+ u. L0 ?
/ P: K5 e, q/ W1 @' F$ V& t* Sosd_memory_target: 4294967296    # OSD内存限制(4GB)
1 s  E) q2 a# D7 j1 D$ x; F3 S* c
filestore_max_sync_interval: 5         # 文件存储同步间隔4 z1 ?8 o# t: K- Y
- z- L, m7 i7 m2 G0 z
四:ansible执行注意事项
* x( a3 X7 A) E$ R5 V准备 inventory 文件:1 E) z: |; ^: a9 k3 m* Y
#ini文件; [, F; E& u) i! p, p% @

2 F* f) D( s0 _- q5 L2 v3 i[mons]
. A" A/ |9 X& T% ?: J9 gceph-mon1 ansible_host=192.168.1.101
, e) q: j1 m1 I6 k0 D1 e1 vceph-mon2 ansible_host=192.168.1.1020 x3 T- H# c2 t8 X1 [* q! t, c

, f" y/ i/ u3 m6 U[osds]' ^6 z' V; L5 T: f/ V0 C
ceph-osd1 ansible_host=192.168.1.201
; n0 L# Q! i9 R" e0 Wceph-osd2 ansible_host=192.168.1.202- j6 Q) E: C. J! o
4 @3 L/ E2 n% [) k: H. e
[mdss]) I8 M& C4 I, e1 F% ^% T" _* d
ceph-mds1 ansible_host=192.168.1.301
6 `* ?8 t! h% R, A" |/ [# g
7 J5 y& _4 ?( j5 p( f* D/ t[rgws]% J6 K# o* E$ Z! s' B
ceph-rgw1 ansible_host=192.168.1.401
, D5 S: ^2 p+ Z# ^推荐使用官方 ceph-ansible 角色:
' J0 P# e& U# a5 l1 W0 k  qyaml& y( Q" j" l& {6 l" n5 Z- L: a

9 c/ Y5 ]: U+ iroles:
  }7 r2 y% q  E0 L* Q; i  - role: ceph-ansible4 z  A9 o# i) b$ q) m3 q4 K5 R" F$ z( d
    vars:
* d5 |: l6 l0 y& c      ceph_origin: repository; G, v  n# h, F0 @) i( b% B
      ceph_repository: community
4 V/ G! D: C4 X# q# Y0 u7 P  G0 G# b# g% {% g
网络建议:8 W9 Y4 s2 |$ c4 U, o
公共网络和生产网络分离
" r) g, d7 @3 V) n0 a0 R( |
- d4 r( _2 v4 L6 d每个OSD建议10GbE以上带宽
" _4 M  G7 N8 E8 ?
& g, W1 O$ _, J" ]8 R监控节点使用SSD磁盘& \2 B# a: B+ @% e" o) B

3 o5 b: J9 \0 k/ E验证步骤:
4 O# N, V$ S7 o. r8 t5 `
4 L% [, y( T+ {& A9 Q3 _* J# 检查集群状态
/ T, A* V: H, W/ jceph -s, v+ Z) I4 M, g; w8 a

/ U# a! |! y3 _# 测试CephFS挂载/ o: Y" `' w7 {2 z* e
mount -t ceph mon1:6789:/ /mnt -o name=admin,secret=xxx/ q' C  {2 m% l, @) O) K0 w: X
, W: ^3 |- f& n- r% M0 |
# 测试RGW访问
: ?: l, X+ E! C3 Y* vs3cmd --no-ssl --host=rgw1:7480 ls
2 x4 Z% H% m5 l9 U+ k, L& g
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-11 23:04 , Processed in 0.022278 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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