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

怎样安装使用ceph ansible

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2025-12-20 22:38:29 | 显示全部楼层 |阅读模式
Prerequisites
2 B6 H  r% O2 a. r7 S8 qRoot Access to OpenStack Control Plane
0 t0 z! ?, X* dRoot access to your cloud's control plane nodes is required.% ~5 _& @5 a4 A7 s
2 }3 i$ s1 n- c; t2 A% `* K
Path to the Ceph Configuration Files2 O7 D0 H! [' J3 t
Ceph Ansible Inventory, J. e7 [3 E+ e+ j9 [) {% j2 w, p
/etc/fm-deploy/ceph-inventory.yml
. t& t- U/ p( V: C& J8 ^4 CCeph Ansible Config
6 @1 W- s2 L0 ]; V/opt/ceph-ansible/group_vars/all.yml- S0 e1 F* u, d/ a
Preparation7 u$ I; E9 u$ l3 c3 S# V
To prepare Ceph Ansible:5 y' r2 b$ [6 z3 l

6 u% x2 f3 i& m# z( S+ L& i3 vdocker cp fm-deploy:/opt/ceph-ansible /opt/ceph-ansible
; m( I+ l9 q+ r- q# gchmod 700 /opt/ceph-ansible
) |# x' }0 G. l6 X, ]5 _+ }, lcd /opt/ceph-ansible6 g& \1 u% F. e$ X2 ~2 ^
virtualenv .venv. M1 T$ a# S( P5 Y, b, O) n* g- R
source .venv/bin/activate8 \5 l( S; K1 m
pip install -r requirements.txt
! b6 }! d9 c2 N9 dpip install six
$ u+ N1 ^! @1 Q# X5 F8 V1 G+ o0 Y8 a6 e5 t, ^! J
Deploy a Ceph Cluster:
! u4 t7 y6 v1 |3 r3 d
, L' ^1 s% k) l  p2 s5 s; jansible-playbook \
# ?0 z; H& Q3 C6 V% v5 `; ]  f    -i /etc/fm-deploy/ceph-inventory.yml \) o$ k: _: H( Z1 `) G* P/ W. d8 w  g
    --private-key /root/.ssh/fm-deploy \0 t' x. g1 p) O6 N8 [3 |
    /opt/ceph-ansible/site.yml6 I2 b& [' u& X$ Z
" \* j2 E" T  z
Attempt to repair a broken Ceph cluster:, A4 ^9 r& i4 L9 v4 \! r3 g
& s) T- r" w+ y9 [
ansible-playbook \" V9 n  \8 H* H9 x+ b- N
    -i /etc/fm-deploy/ceph-inventory.yml \
! S- w, j4 |8 w7 q# a    --private-key /root/.ssh/fm-deploy \# F. K/ u, g! X. Q$ R; E4 ?
1 Q  j' o) E( i7 @+ |" i. f0 Q5 G* ~

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
 楼主| 发表于 2025-12-22 23:44:32 | 显示全部楼层
一:Ansible Playbook示例
: P3 v, c! G# F3 |2 a; B---( W: l9 x: Q3 K8 s% B
# ansible-playbook -i inventory ceph-deploy.yml
* t* g/ P4 `) v6 j
# D. F. G" Y1 H; A- T5 @- name: 部署 Ceph 集群基础组件
6 @0 }2 b2 t3 G4 c/ F8 A1 b  hosts: mons,mgrs,osds  # 目标主机分组
/ {/ o/ j; P4 R2 C4 K4 I; U: a  become: yes  # 使用 root 权限
" K0 L) w% @1 k1 \  t  vars:; n6 t" ~5 [" Z, ^& n# [
    ceph_cluster_name: my-cluster  # 集群名称
$ e3 W5 f9 Y$ T% z) M) O% x4 O    ceph_fsid: "{{ lookup('password', '/dev/null chars=hex,ascii_letters length=32') }}"  # 自动生成唯一集群ID% {; r) u" O+ Y/ G
    ceph_mon_group_name: mons  # Monitor 主机组名称; s$ m& N3 S. S3 |/ B3 g7 Y8 J; `
    ceph_mgr_group_name: mgrs  # Manager 主机组名称
7 E  D5 O/ v8 Z5 a    ceph_public_network: 192.168.1.0/24  # 公共网络- M4 c! n- o( J/ q* h0 F0 ?
    ceph_cluster_network: 10.0.0.0/24  # 集群内部网络  C' ~% k8 s& @3 D
) m. ?" N7 I) n; b
  tasks:
) O: E- r/ P1 D/ j: g    - name: 安装 Ceph 基础软件包, w. m0 f. R" h& Q4 e- ^
      package:
) D: B& Q( k- D, P: ?' [  T        name: 9 [  w& s) a% ]+ \! n
          - ceph-mon
8 p6 |+ j& ~- G9 B  k- T' v          - ceph-mgr
! f5 J/ l+ y  S; d% Q          - ceph-osd8 u* o: w7 _  x5 p
        state: present# h9 T9 V) t/ f8 B' i# B. ^

9 H, Z' j# r" X4 i% K    - name: 初始化 Monitor 节点
2 \/ j$ y! Z- N3 h2 g      command: ceph-mon --cluster {{ ceph_cluster_name }} --mkfs -i {{ inventory_hostname_short }}+ X/ k5 h% _- T  ]  z
      when: inventory_hostname in groups[ceph_mon_group_name]
1 R+ m, d* W" v/ Q% c
* F8 F7 x" `9 n6 S# [9 D/ D- name: 部署 OSD 节点
  A+ ~8 m& y9 h, j7 E" y, k. t  hosts: osds
4 k8 {. }$ w- Y. K  vars:
" |( S- f5 D# @7 e( b- C, n2 W' |    osd_devices:  # OSD 磁盘配置
! J; c* W8 ~8 l      - /dev/sdb* X- }  f+ f& J* u( R, `
      - /dev/sdc
5 Z  Z& \8 ?, ]6 g  y) f% e- a' M    osd_journal_size: 5120  # 日志分区大小(MB)2 e+ K6 Q5 e9 E! G5 Q) }; g
  tasks:
9 w" r( d2 B# |9 t    - name: 创建 OSD
) j; e) S: R) W5 ~6 T6 s      command: ceph-volume lvm create --data {{ item }} --journal-size {{ osd_journal_size }}
7 |2 t/ U3 {1 `      loop: "{{ osd_devices }}"; o, j, ^# Z& I* w+ y. S
# R- P) w9 ^6 C1 F! }& @8 l+ x, }/ {7 D
- name: 部署 CephFS0 e' ~/ N* X6 ~  n
  hosts: mdss  # MDS 节点组/ d2 ^& p6 D. z" C; {4 ^& |
  vars:
4 O! Y# }8 N7 G6 S; @, `5 I2 z    cephfs_name: myfs  # 文件系统名称' S9 k; M1 C" _2 f$ g$ M
    cephfs_data_pool: cephfs_data  # 数据池名称
7 Y5 ]1 W9 R1 ~% _    cephfs_metadata_pool: cephfs_meta  # 元数据池名称
8 K. @/ u8 e0 z/ O  V, {+ _/ t6 Z    cephfs_pg_num: 128  # 放置组数量
: x" K# N& |& R$ G! v0 V  tasks:
* t& z( w; S5 {* t' g. Y* H6 J4 P* ~% O    - name: 创建文件系统! C7 ^0 H; I' B6 [' k$ }8 s
      command: |2 I% y) {& P# O) J) P
        ceph osd pool create {{ cephfs_data_pool }} {{ cephfs_pg_num }}
6 ?) v, x( `  H( M& O! q        ceph osd pool create {{ cephfs_metadata_pool }} {{ cephfs_pg_num }}( W5 M: ?% s6 r$ g* X" W- ]! G
        ceph fs new {{ cephfs_name }} {{ cephfs_metadata_pool }} {{ cephfs_data_pool }}
5 V5 w& D; J* t: f
8 w) I% z, Q9 B+ T/ I: ]) Y- name: 部署 RGW 对象存储" A- ?: ~9 v. B! [/ m
  hosts: rgws
. V4 M& ^" A! A4 s( W+ ]& i  vars:
: k9 E* U: y9 ~& }+ p    rgw_zone: myzone  # 存储区域名称( Y5 O1 Y$ Z) ]# s/ ~1 H
    rgw_zonegroup: myzg  # 区域组名称2 i! P  Y- d9 t! w2 t2 b2 y
    rgw_frontend_port: 7480  # 服务端口. C* U9 d' N# O; h/ v
    rgw_ssl_enabled: false  # 是否启用SSL
& A0 h% Y; t! Y& y7 I" `  tasks:2 g- j' m" r+ V: W( v) e3 {, J; W
    - name: 创建 RGW 实例
& [8 J/ C# _5 f& d      command: |, n4 ^9 a* W7 M
        ceph-deploy rgw create {{ inventory_hostname }} \4 p4 u8 w, _  m3 f& I" k1 f
          --rgw-zone {{ rgw_zone }} \
" ]* @$ w% |  E5 b& K0 A          --rgw-zonegroup {{ rgw_zonegroup }} \% M8 f8 E/ z, A( E. S6 x3 u+ s
          --rgw-frontends "client.port={{ rgw_frontend_port }}"
0 E( t3 t1 i2 A$ _! l3 L . x/ Y1 T. s0 p( U  J2 i
- name: 验证集群状态
' ?2 g8 Y3 ^1 t9 ~  hosts: localhost+ z: ~, f# w9 y1 E: a
  tasks:6 }. t2 C3 W8 Z7 d  Z; D) \% i
    - name: 检查集群健康状态
, K  |8 ^% n( C  N) E% C      command: ceph -s
+ C2 ]2 [$ D( [$ F& |; A* B      register: ceph_status
( i* E8 x0 h9 h      changed_when: false7 l* Y, r, i$ q# A" D

" b! L5 u+ @% Z. o# z. a9 d    - debug:8 V% G& K7 l4 q8 T( O1 Q% o
        msg: "{{ ceph_status.stdout_lines }}"% u+ D7 I$ I$ b3 `; x; }% A
AI构建项目
! I# V0 P+ M4 n" I( ^% V$ F$ S0 E1 ]* k" C  _" K1 A( [1 [- P0 y
二:参数详细说明+ t$ L& s$ K9 n* e
主机组定义. v) O$ `1 y6 _5 `2 k. d( q
mons: Monitor 节点组,负责集群状态维护# n+ m! U' U; u1 i! q
- F& v( P4 j4 X( v4 \2 M
mgrs: Manager 节点组,负责指标收集和监控  Z4 p; C7 B4 E6 g- j7 |
; K. r( W- Q) r- J, D
osds: OSD 节点组,负责数据存储
8 ]& i4 Z( |2 B1 C: O: \8 f6 S- ]- L* x( m3 j
mdss: MDS 节点组(CephFS 元数据服务)! @1 }8 B0 h, b. F# ^: U$ ]. R
5 t" G! n1 J: I! Y/ a3 Q
rgws: RGW 节点组(对象存储网关)
( K& h2 {* t6 b6 N; z' \2 L2 {+ b( w
核心参数6 d$ V/ M$ ]' ^7 W* J' ?" N+ @$ H
#yaml文件
. Y6 ?; v, z& V5 p$ u, i$ B0 t, n) T! e0 D" x- _
ceph_cluster_name: my-cluster # 集群标识符
3 {9 H3 }6 G  b! b- }# z
  o! O+ B/ x- o# w0 ~+ Aceph_fsid: # 集群唯一ID,建议自动生成 & {) J7 j) @2 q# j# M

; V  v" }$ V( \# Q1 u4 |3 \ceph_public_network: # 客户端访问网络 / I& R  s- h8 g/ d# u2 `
2 J# f5 D2 s5 z) m
ceph_cluster_network: # 数据同步内部网络7 s* z* k! K8 N5 X( O

7 r" D+ p$ B5 }& Q7 E& @OSD 配置
/ }& ?4 U8 P* |#yaml- H/ A% a8 H% k2 D2 J0 _

: s3 m, l4 `  h3 T) M7 F* Zosd_devices: # 磁盘设备列表(根据实际修改)
7 F$ Q2 A; G, l2 I$ r1 ^, p  - /dev/sdb
) @( C1 {! G& H7 o- ?  - /dev/sdc0 i0 N& S4 }2 C; x, ~- S" {  l
osd_journal_size: 5120 # 日志分区大小(MB)
- w- F  N7 r! c, z2 d# n: R& e( k- u' S" y2 n. M
CephFS 参数
0 I- J/ b- L6 @% P7 ^1 {8 w#yaml文件
9 p9 A  @1 d0 a: \( y; x! p4 m. u9 f
cephfs_name: myfs # 文件系统名称
6 s2 S# a9 y$ C0 v
4 H" O7 W+ a6 @3 H! U# }$ {$ _" Ucephfs_data_pool: # 数据存储池
8 f: G7 w! e& x/ C2 c1 U4 t% \1 n% ]3 N: N
cephfs_metadata_pool: # 元数据存储池
* @6 t$ O: S' o2 z8 B3 k: D* E# w5 Q5 m4 Q
cephfs_pg_num: # 每个池的PG数量(根据集群规模调整)
0 A) _* [2 @/ F  Q( |: J( |5 g2 }& i; i+ O
RGW 参数( S2 ?* }: m) }, [! O
#yaml文件# U& Z: W. \6 r: G9 A+ m
: ^' o% l  }6 \$ j9 l, Q
rgw_zone: # 存储区域名称(需全局唯一)$ \6 a' w: ]& k0 C. I# Q" {

! ^+ d; q, Q5 _; C+ W4 F- Vrgw_zonegroup: # 区域组名称(逻辑分组) - [  r+ H' q9 W2 A( d

# ?) n7 j0 _) Q4 H# j4 [; m' Z# vrgw_frontend_port: # 服务监听端口4 _0 V% j' Y1 b( D. ~5 d
: C! v# J: ?- r4 m
rgw_ssl_enabled: # 是否启用HTTPS; i5 J' W  c# X* P) b5 E! w
& V! Y' g! l9 ?. D& P; k8 I
三:补充配置建议; g4 |9 ?4 P  M" S- o8 [9 j( R
认证配置(建议添加)
1 K0 v/ ]5 D! e6 K# q8 D8 }- H6 J#yaml
) L4 q7 [9 q+ E7 E8 S
3 K! C* t. T* c% X% I9 Scephx: true # 启用认证
2 |1 l! c- X" K5 f7 C9 q
) A3 `8 g( V  u; _) F. `6 Dclient_admin_key: "AQD...==" # 管理员密钥(自己定义)
6 p- F& R, g! v$ a  ~4 i# t) c
& g" F+ }  Q& x! F  I3 m存储池配置
/ Y. @! f) p' p: C#yaml
. m; g- k# y3 a1 E9 F1 Q
2 `& ~2 J8 N6 H7 g! idefault_pool_replica: 3 # 默认副本数 6 Y1 O% c+ V0 J' Z
# ]  e8 V) N& [
pgp_num: 128 # 放置组组合数
, b7 k; _; a; o- r9 _) G- ?8 v; C- q
监控集成6 Q% u) J6 O! z
#yaml
1 y" w/ a9 @) A2 B( Y" w+ c* E
; S0 g* t2 }$ F7 S  Q$ ^( y8 Eceph_dashboard_enabled: true6 T2 N; I- u( K7 b
grafana_integration: true  D- v6 {. a6 o' ]" {+ p' X& ~# j
prometheus_targets: # 监控服务器地址* Q2 h1 x0 N, G8 p3 r
  - 192.168.1.100:9090) D1 b) A& u4 o# l1 k' {) P
: f8 V- F3 c7 v0 P1 b& q; b
硬件优化( g' S& y3 G% }9 K6 Y3 {
#yaml / s! x0 `- z( ^* _; b2 }
" n3 v5 h1 B& @6 h; E
osd_memory_target: 4294967296    # OSD内存限制(4GB)
/ i+ g) ^/ E9 m! Q8 ~2 j) ?6 }! D! O
filestore_max_sync_interval: 5         # 文件存储同步间隔
# ]. y7 D# A* L, n- l) _& P; Q- ~) H8 |6 I7 R/ k0 ?# W) J
四:ansible执行注意事项
* F% u) B0 `; ?9 I( r' o准备 inventory 文件:
6 ?" n9 K0 u7 A7 Z# d( L7 ^' A. I#ini文件
2 D" i5 |. Y1 Y1 r0 @2 i! Z; C; h, x( ]" F" `7 ^/ N$ [
[mons]: R/ _6 R; `: \2 t3 \
ceph-mon1 ansible_host=192.168.1.1010 V- m3 ]4 {3 m# P6 k2 w
ceph-mon2 ansible_host=192.168.1.102$ S% A& ?, @  g1 x

# S9 H6 M: R. b" a7 d+ B[osds]
0 M8 D5 z: L. D: v5 i+ Nceph-osd1 ansible_host=192.168.1.201
! P( M5 ~8 V, M& w, uceph-osd2 ansible_host=192.168.1.202
4 P3 V* B* [' J" b7 P2 I( M' g# u8 k
[mdss]( G* k, d. W  N) F8 V! G5 B
ceph-mds1 ansible_host=192.168.1.301: n, U& r( V4 o  m# O) |# L0 s

, [9 l. Q. e) }4 E0 G[rgws]
) K0 F: n- c  t. P( }: L4 Lceph-rgw1 ansible_host=192.168.1.4019 e# b! k* P& R' o
推荐使用官方 ceph-ansible 角色:
0 W. q( S# a! Z: R7 xyaml
' s$ S; ~! i6 B# c6 V  R; D6 f( }$ T/ S  }
roles:. u1 j& o4 ^; [# F  D$ N0 M7 [
  - role: ceph-ansible
9 Z0 O& c; x" a  |& z- e    vars:  ^6 u3 ?6 y* g( q; V6 }" l
      ceph_origin: repository. n0 W! {1 B. c- t) q7 Y
      ceph_repository: community
- H6 [. }" _; w+ h9 E: r; @
- I0 v( j8 W2 J* t/ ?5 a网络建议:
  l# C6 n2 e! O0 t6 j( p4 x公共网络和生产网络分离
1 q( s4 t. q. [3 Y* ~# ^0 A; V1 M* k  w& `
每个OSD建议10GbE以上带宽5 q, b; V2 f8 q' G6 a- Q" `
% v( m7 }  _- r9 r& L! w; u
监控节点使用SSD磁盘4 d/ i; @, u2 S8 u* ^% I
8 H3 e9 v% Z  e8 ~0 [
验证步骤:
" c" ?8 v: ?+ m+ i6 {7 B* a1 G; ?& k5 Y3 S' O) n4 j" {
# 检查集群状态
6 `+ N  V; R% l0 L( G7 C% w0 n, Sceph -s0 `) ^; H3 \+ O, M9 L& T

; T5 g6 ^! i1 N% {8 O1 S5 ?& s" B# 测试CephFS挂载
. N& ^  v  S7 ?" rmount -t ceph mon1:6789:/ /mnt -o name=admin,secret=xxx; _: u  C0 ?  p0 q% L' a0 J
! G- G- p0 G/ V7 H, D
# 测试RGW访问8 x1 F5 L3 k' Q- D& Z+ ?8 l( i
s3cmd --no-ssl --host=rgw1:7480 ls
, y1 d6 D( M8 r, h+ P; P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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