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

怎样安装使用ceph ansible

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2025-12-20 22:38:29 | 显示全部楼层 |阅读模式
Prerequisites
5 P* i+ V- v* K8 n6 Q- |: I0 uRoot Access to OpenStack Control Plane
4 {7 ]- ~  q+ F$ \' lRoot access to your cloud's control plane nodes is required.
/ _- S: i  h. X' X  b4 F2 v7 @% a: H2 ^* n" H( e0 D
Path to the Ceph Configuration Files+ U8 w( j5 _% l. h. i
Ceph Ansible Inventory4 l2 b2 k* p8 Q/ N# Y
/etc/fm-deploy/ceph-inventory.yml/ n4 T( w0 ^- R; V! d1 {: H
Ceph Ansible Config% l/ ?) r( @; z7 I. [1 F+ g9 c) h
/opt/ceph-ansible/group_vars/all.yml& V+ C4 _6 O+ F" {! B
Preparation; a/ H( k3 W$ a/ O5 e. ?
To prepare Ceph Ansible:3 Q. J7 w# ?$ ?5 ^: A
* T8 }7 d& ~0 j
docker cp fm-deploy:/opt/ceph-ansible /opt/ceph-ansible- s6 d. j+ N3 `2 f
chmod 700 /opt/ceph-ansible
+ F1 M- R5 j) \6 q+ a- hcd /opt/ceph-ansible
5 f+ \, O* e8 Ovirtualenv .venv0 [1 g5 F5 {6 b; A  l  h/ Z
source .venv/bin/activate
0 v5 R1 l9 ]9 k1 V5 k* Q* Dpip install -r requirements.txt
& a. v1 b7 c; w4 k2 S: h& Epip install six. N4 U3 w7 Q/ Y" f! c8 g
) w( X4 g: A. H- G
Deploy a Ceph Cluster:
6 H5 j$ |" b0 {) F/ L# I0 R* `$ @: q( \$ E5 `1 B8 w9 s6 Y
ansible-playbook \
: z1 t! _: N( Z' Z' b: a$ R    -i /etc/fm-deploy/ceph-inventory.yml \
0 K* `" Y3 L( h# }5 \1 a0 X; A# G    --private-key /root/.ssh/fm-deploy \: @+ M9 q; j% p( a
    /opt/ceph-ansible/site.yml
" z+ D3 H0 w" R
, Q: d6 ]( d& G( N' C# NAttempt to repair a broken Ceph cluster:
' c2 b( G- B4 |( m8 g- B0 C) \; f; J$ k5 M7 I2 \( \3 f4 W* I
ansible-playbook \
- I  _" j: [, n  }' ~  y8 R- v    -i /etc/fm-deploy/ceph-inventory.yml \6 H: H! i2 O4 n: d; c( W2 V8 v
    --private-key /root/.ssh/fm-deploy \
* G# p( @, e( R6 q  _3 O1 @
) |  Z3 \7 t, z

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
 楼主| 发表于 2025-12-22 23:44:32 | 显示全部楼层
一:Ansible Playbook示例+ O' b5 p( U9 l) |3 n
---
' M' A6 [( w: j7 I3 Z, n7 m. u# ansible-playbook -i inventory ceph-deploy.yml3 A% h7 Z* s- h# O% i" U3 G- v
7 b. P* z0 E& O5 R- v7 G2 x
- name: 部署 Ceph 集群基础组件7 ?2 b4 k- @) B% c9 [" \
  hosts: mons,mgrs,osds  # 目标主机分组( R- |( b8 k/ V; k, b- [$ B
  become: yes  # 使用 root 权限
. A2 V3 p/ V& T! v8 V, b# a  vars:- ^( K( _  t. J% I
    ceph_cluster_name: my-cluster  # 集群名称+ y0 u* N3 ]  y2 f; w
    ceph_fsid: "{{ lookup('password', '/dev/null chars=hex,ascii_letters length=32') }}"  # 自动生成唯一集群ID
( U. K5 ^/ j- g2 m$ k    ceph_mon_group_name: mons  # Monitor 主机组名称0 R1 J- ]# L' h
    ceph_mgr_group_name: mgrs  # Manager 主机组名称
. F9 C6 k8 f8 S+ r7 W& z    ceph_public_network: 192.168.1.0/24  # 公共网络
0 x( t& {+ }# I    ceph_cluster_network: 10.0.0.0/24  # 集群内部网络
9 l- T* J" W  b$ `) a* E
" n- F3 z1 f8 E# z0 q  tasks:
3 P. o9 ]8 u& n/ o1 J2 d2 x* ]+ E    - name: 安装 Ceph 基础软件包: P* ?$ h+ b, y; P# q% |
      package:' z; I+ S) [; J
        name:
/ P- `& E" L$ I7 Y1 u2 Y. n          - ceph-mon
( D3 A: W2 D+ b          - ceph-mgr) I& D/ C7 g: y- y% z8 y  W
          - ceph-osd0 d/ b  [, z% f9 t" l
        state: present( T, P! o: h" a! e6 O
0 a/ f" T& P# _* \
    - name: 初始化 Monitor 节点0 D! i* p; R* m+ k. K( Q3 X
      command: ceph-mon --cluster {{ ceph_cluster_name }} --mkfs -i {{ inventory_hostname_short }}& F* {' {0 ]0 G7 m
      when: inventory_hostname in groups[ceph_mon_group_name]0 I$ |0 e" A% s4 M' s

# Q* x9 X, k; X* e- g- K- name: 部署 OSD 节点5 i! \4 A  y. e; E
  hosts: osds  }- B( u4 q1 A: r9 K  R/ [0 f
  vars:* I- _0 o: K: v/ I
    osd_devices:  # OSD 磁盘配置
. b+ `7 b# }' r. o' u      - /dev/sdb
) Z1 g* P# H( W; s* E      - /dev/sdc5 R) l" S8 t; Q
    osd_journal_size: 5120  # 日志分区大小(MB)
$ E, k) a" F6 X% ?! A  tasks:
- E) Y8 q) a& f& A    - name: 创建 OSD% n3 U- U2 W) Q5 q
      command: ceph-volume lvm create --data {{ item }} --journal-size {{ osd_journal_size }}
$ o$ K8 D5 t. ]9 b4 l( _      loop: "{{ osd_devices }}"
0 r3 i6 v; }6 ^" M0 N6 g+ X7 W * a( b- y) p" r# M1 ]% M
- name: 部署 CephFS
! H3 E9 E0 J7 k: ?  hosts: mdss  # MDS 节点组2 e" j- J1 m1 o, c
  vars:. E9 V6 ^! J  a
    cephfs_name: myfs  # 文件系统名称
' T% I. _( @% F4 N, @3 r    cephfs_data_pool: cephfs_data  # 数据池名称+ F6 Q/ g/ @; V% k; c
    cephfs_metadata_pool: cephfs_meta  # 元数据池名称* d2 C* G$ Z4 h
    cephfs_pg_num: 128  # 放置组数量
1 H- B# t. Z* |/ T( s" U: L$ |  tasks:
2 w4 w$ Y, Q0 u% }! t" d8 \/ x! U0 F    - name: 创建文件系统! q  Q7 r/ s3 q& S+ c$ n
      command: |+ E9 W# S; t# g8 h
        ceph osd pool create {{ cephfs_data_pool }} {{ cephfs_pg_num }}' C0 p3 |- P, r4 S/ F/ S
        ceph osd pool create {{ cephfs_metadata_pool }} {{ cephfs_pg_num }}
1 G7 f5 J! l. [. Z! a2 l        ceph fs new {{ cephfs_name }} {{ cephfs_metadata_pool }} {{ cephfs_data_pool }}
/ ~1 V# y* J# Q& p% Y1 Z6 Z, E" N
" [& O$ x& |3 @8 W' `5 a# e- name: 部署 RGW 对象存储- s# H7 \7 }) l, L, U, r
  hosts: rgws8 v8 S3 C* ]# A" [6 S  N; X
  vars:
5 x( H  j0 F+ G8 I/ D& _    rgw_zone: myzone  # 存储区域名称, g# ^. h* y7 K1 N- S: K4 N
    rgw_zonegroup: myzg  # 区域组名称
+ i3 \& w8 p" F. W    rgw_frontend_port: 7480  # 服务端口
6 i( E4 a! G  B% @    rgw_ssl_enabled: false  # 是否启用SSL+ N  [: b2 Z% g
  tasks:% ?* a& K. S  V/ L# g; V
    - name: 创建 RGW 实例2 i+ x! ~3 y5 c) @% A: S
      command: |9 o4 `: B$ F0 h1 l
        ceph-deploy rgw create {{ inventory_hostname }} \% q3 y8 ], y) _" `+ I" @
          --rgw-zone {{ rgw_zone }} \
" M. R! h! W+ m$ i; l5 T* U3 w6 `  T          --rgw-zonegroup {{ rgw_zonegroup }} \6 T: u$ A" J, d; F# |
          --rgw-frontends "client.port={{ rgw_frontend_port }}"
! M, @2 T1 G3 ~  J+ L* } 6 Z2 l7 k$ ]8 a1 _# E4 X2 K* i
- name: 验证集群状态
4 {* V: ~- d, P$ T2 \4 u: {; m  hosts: localhost
" F; D4 w0 z, V. W+ R7 ~; V  tasks:
( M' u' I1 b/ }5 S2 m    - name: 检查集群健康状态3 J  o, p; O9 E1 @4 Y
      command: ceph -s
" n$ z# U; ?% t5 o      register: ceph_status6 M! M/ s0 i( b0 C
      changed_when: false
% {6 l9 g! n+ O+ u4 b9 I! ]7 O
# L6 G, M% g( O+ I  u" X    - debug:
4 u! W" v# n' l: w        msg: "{{ ceph_status.stdout_lines }}"  C: D/ @: {) O3 J% e* \4 ~: ?1 |1 M$ R
AI构建项目4 x7 N' h8 s4 @6 q4 o+ L5 v2 ^  _
% a7 O0 D/ X0 W; G$ G. F
二:参数详细说明$ K, b6 g0 |3 A: D
主机组定义
9 t; x9 P3 h' H# b. Nmons: Monitor 节点组,负责集群状态维护5 h3 _! ~9 o& m( S
# m$ {% F9 E5 S4 Y: c! y5 B
mgrs: Manager 节点组,负责指标收集和监控
8 K/ X: v6 W& q5 o- b, K
) I- k4 o" P' w" l0 Cosds: OSD 节点组,负责数据存储  a1 Z$ Q5 G6 }; N3 ]! K7 y8 J: ]) E

+ j3 z# E6 {( e+ wmdss: MDS 节点组(CephFS 元数据服务)& Y0 f  C( a& ~6 N$ p( s' V+ A  u
, a# Q( V+ h3 l7 e5 N
rgws: RGW 节点组(对象存储网关)' q! S4 c/ y+ f$ d; }4 ^

6 |  [+ g6 H7 z4 N! j+ c! B核心参数
+ {3 l! V5 T1 w#yaml文件1 l! W1 e# ~1 y, t
4 K  b( m. E8 T% [, I" z  A9 u' a
ceph_cluster_name: my-cluster # 集群标识符
: j5 o* y% J# L$ i* Y6 u% }* I9 L0 J  E$ @, B- L6 t
ceph_fsid: # 集群唯一ID,建议自动生成 - j$ @# S0 g9 m! P
- v) ^' Y5 z  t9 Q% J
ceph_public_network: # 客户端访问网络 ( g- {# S, T2 }$ |- S9 z# D6 P: [

9 I' B# b# O$ ]! N# b' w! gceph_cluster_network: # 数据同步内部网络
& m/ }* Y( K! Z
6 q) f8 l: \- Y3 P. [. ZOSD 配置" |5 n" F" Y" }" ]0 b$ z+ f( T
#yaml
0 h  b& Y: B# Z* B7 a1 f# P6 y
9 Q/ p8 e4 ]! h8 [osd_devices: # 磁盘设备列表(根据实际修改)3 m7 o. _9 q' D, }* Q
  - /dev/sdb
+ z  e% T3 |4 D4 d7 r/ |& m  - /dev/sdc8 ?  y1 a, D, x. ?% V: o" Z
osd_journal_size: 5120 # 日志分区大小(MB)
+ I7 v) J4 B5 B! `6 {9 O+ s
2 p$ R1 B, d) _$ C) d# `1 K, [CephFS 参数
# P- f+ a- z2 E# u  e#yaml文件/ H( b0 J4 J* p8 s. `

8 J3 j0 \2 t' r- h& Ncephfs_name: myfs # 文件系统名称 $ W- N5 w2 o1 {3 e8 `1 l

! c6 K- X; r' z7 @cephfs_data_pool: # 数据存储池 : r: j4 d. Q5 l
' M. }) L* [; f, ~7 ~+ U  g6 w4 b( A
cephfs_metadata_pool: # 元数据存储池 ; b6 [0 t3 t# o5 g# c/ ~$ e# {& x

" N5 R4 z" [' o( O- pcephfs_pg_num: # 每个池的PG数量(根据集群规模调整), j- o& k& p: Q# e3 H3 W7 I# g
8 k9 C$ J" u3 U0 S
RGW 参数% w* r. _+ B7 k+ k/ c) z
#yaml文件# G  Y) Q# D8 [. ^7 ~6 c& `

8 e8 U0 F2 Z3 Z  Y9 rrgw_zone: # 存储区域名称(需全局唯一)" A9 \8 [( }6 \: W' W

6 H5 w$ K+ n5 Zrgw_zonegroup: # 区域组名称(逻辑分组)
7 w0 G* c2 I  Y- Y5 u
& F& Z3 w5 c8 O8 b+ Qrgw_frontend_port: # 服务监听端口
; H/ ]' r$ B, v  O8 @1 \# s5 v0 Y+ }# ]* _; o2 o3 P
rgw_ssl_enabled: # 是否启用HTTPS
; z& d. q7 }: x! g$ f
" v' y5 s" ^7 d3 S7 f! E2 T- M 三:补充配置建议* ]4 e6 U  B* Z6 S+ @/ V% ]2 a! H. Z& N
认证配置(建议添加)( V- G# p1 z, e, s
#yaml
8 m) e) v# X1 G8 f2 B8 ]; p
" w& p/ Z9 y) J% {cephx: true # 启用认证
% W* y; y2 U. u/ _3 `6 e. a  Q& j
$ h  q. x$ B6 W% p; A6 K1 i5 Aclient_admin_key: "AQD...==" # 管理员密钥(自己定义)* A" Q2 t$ C7 b" o

, t7 R  [; v, {. l; w) A/ D  {+ S存储池配置5 J: T# x, w7 u% s" x
#yaml
" e/ Q; r9 w0 Y/ `* s5 v, c/ b2 a5 I1 e: t' I
default_pool_replica: 3 # 默认副本数 1 G0 E$ ?2 U# N9 p% }
& B* X' m2 r6 {7 j& m* B
pgp_num: 128 # 放置组组合数
7 z8 R2 E/ T2 t* f' L* P
0 d) b+ x* |) L& }( c监控集成2 R' T1 ]2 @! N, D% b& {
#yaml
8 w& K8 X: S( f' w/ |8 |1 t
2 _8 Q( g$ q3 }ceph_dashboard_enabled: true
' Z0 w- z/ \" |9 F8 Sgrafana_integration: true
5 }, I+ t9 `1 N; H1 cprometheus_targets: # 监控服务器地址( o, r/ Q* l& G' K- |+ J
  - 192.168.1.100:90901 ]) N, Y& ?: Z$ j7 q0 K
# {+ B7 a' e8 s& _6 j
硬件优化" s. R  q( W/ L5 U4 z
#yaml
/ j4 U4 d/ ]/ r# ^" ^/ H
% T& J5 v& b0 X" c4 w4 o& hosd_memory_target: 4294967296    # OSD内存限制(4GB) , x8 }' G- n( v2 j, v" Q* W3 M" y6 Z
2 }6 ?' U1 l4 l7 H
filestore_max_sync_interval: 5         # 文件存储同步间隔5 m9 [' v4 w; d( V
2 N: l2 M0 m' k6 Z, D; B' Y
四:ansible执行注意事项. j/ ^) k: m8 l, _! a0 @
准备 inventory 文件:! c5 e# c7 S7 ^9 p1 N1 K
#ini文件
: L, b" A/ |5 i% W1 Q
; A6 A) t% J% }5 I$ s9 T0 P  ~[mons]! a& c1 A  w" O0 ^0 Q
ceph-mon1 ansible_host=192.168.1.101
. B( G/ T5 L. B2 C' s3 Rceph-mon2 ansible_host=192.168.1.1026 {/ J. H' Z! \  C# ]( E

2 p9 \2 C) h- j% I2 c* |[osds]5 V1 b* D( j) ^! f8 Y
ceph-osd1 ansible_host=192.168.1.201
! s/ ^, x1 p( a( k3 nceph-osd2 ansible_host=192.168.1.202- `8 c3 I5 H2 V1 w/ i1 T) A
: [. s1 B" f4 u  C: }: ~
[mdss]" e6 R& ]- f( o2 r# E$ D
ceph-mds1 ansible_host=192.168.1.301; `0 N# d$ S/ ]6 {

$ z( l+ q% }9 u! i; g0 s7 K[rgws]  M* n: v$ s" s0 _
ceph-rgw1 ansible_host=192.168.1.4013 C* V4 T: C) P9 X+ E" q
推荐使用官方 ceph-ansible 角色:
5 u& x/ W+ @$ l* b7 H5 _yaml
, j: q7 \, a& ~! F* ^
" Y) S0 d9 F( o- T# `roles:
5 M% G0 b4 A2 M" j" {7 {  - role: ceph-ansible
/ \1 z) q/ f. s5 {! f    vars:+ Y7 \- E& J/ ?0 b/ f0 g
      ceph_origin: repository% O* [. x4 c# C) a! S+ }
      ceph_repository: community% \* @8 I0 M: \0 U8 r/ J; k( c

0 p; J& C& P) C! S: x网络建议:- e" d8 L1 N- B; e* p% P
公共网络和生产网络分离& Z6 s' S+ g' R: l- u, v* O. H: `

0 j6 m) Y3 V- H8 S1 X/ v- J0 |$ t每个OSD建议10GbE以上带宽  J( Z5 Y8 j* h3 F
$ f' c2 V1 o/ N; }2 Y
监控节点使用SSD磁盘
: [( p3 H' R/ z& n
! u; O' H( p( J+ P2 v验证步骤:
5 w+ Q0 _7 A, T, G( u
# u( ]% w- w: W% W& X3 [# 检查集群状态
" _" S2 k" R3 n4 P/ I- J. Sceph -s- {2 ^9 D0 a5 X8 D4 q5 ?

5 n# h) B( H4 s& W% C# 测试CephFS挂载
% R" p- Q- A+ l4 M9 V8 }mount -t ceph mon1:6789:/ /mnt -o name=admin,secret=xxx
+ f' k3 h! s- L1 S- C0 ~4 w+ D; G. E: d6 m* p' W% j) _6 P8 _
# 测试RGW访问& U: Y2 i- y& t
s3cmd --no-ssl --host=rgw1:7480 ls* S6 S- l# s) v% Y. W
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-11 21:58 , Processed in 0.029364 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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