|
|
楼主 |
发表于 2020-12-13 12:06:16
|
显示全部楼层
Step 1.admin node Enable epel (Extra Packages for Enterprise Linux) repository、ceph.repo配置文件
( _* f" Y, p% u1 W复制代码# t. x5 J- d4 |
# 认证,但我显示系统证书崩溃,请重新注册,就先跳过了5 ^: O7 C' W" }+ ~, \% Q
yum install subscription-manager
6 c' I. I( H" }' x: gsubscription-manager repos --enable=rhel-7-server-extras-rpms
$ Y, W0 M* t( K) a' F# X; b
+ _% Z; k/ T1 y' U4 G5 kyum install -y https://dl.fedoraproject.org/pub ... latest-7.noarch.rpm
[6 j7 k$ M: r; R安装参考:
% S" ]9 f" J/ b6 C& Y' uhttp://www.mamicode.com/info-detail-1287279.html9 g: I8 `4 `: _) B8 B+ m' b
复制代码/ F$ f3 A1 Z) f) Y9 Z
$ E* Y4 Y9 Y& E" B9 e
$ x6 U% W: b( g文件位于控制节点(即admin node)的 /etc/yum.repos.d/ceph.repo
% t4 P- }/ U/ }4 ]& y2 d9 V v; C7 v
复制代码
/ U. p. y1 i( O# X9 s7 c1 V' x8 r" n[ceph-noarch]% z: s% s6 s2 K0 m) t
name=Ceph noarch packages
( ?4 [+ O! F' R6 L8 a# baseurl=https://download.ceph.com/rpm/el7/noarch4 l% f9 r* Z3 W/ R6 b" z
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch
* \" O' [, v z; l+ Benabled=1: Q5 f2 c0 n% K
gpgcheck=1
" r0 |$ ]: b0 \% Q0 F! v- i5 \type=rpm-md
+ k8 @/ p. ~0 s7 s3 i5 K# gpgkey=https://download.ceph.com/keys/release.asc
/ Q' A. o6 L; p- k2 F9 j! Ggpgkey=http://mirrors.163.com/ceph/keys/release.asc
: c3 B4 z' c2 @1 R& U# T$ H# s6 @5 d复制代码& b' B/ q( v8 R; ~2 t1 M- S
注意:
* v4 i1 ]. }2 {/ B上面的注释部分,是Ceph官网的写法。但是对于我们国内的安装,这样几乎无法成功,因为下载Ceph太慢了,会导致失败。因此,需要改写repo文件以更新Ceph源。
* n& S6 x3 v- G F7 w/ g- e常用的Ceph镜像是163镜像。但在使用163镜像之后,必须将rpm写成rpm-luminous,这样才会安装ceph-deploy-2.0.0;若只写成rpm,则实际安装的是ceph-deploy-1.5. V+ [' @# E }2 `, v
0 t0 E/ k4 h6 x/ e$ }
0 T; @# n4 A6 O w! }, I8 K/ P% P4 e. o) j
Step 2.admin node安装ceph-deploy
) Z; b' c9 i: {7 M6 G+ _7 \yum update, w6 R- u6 w- S2 w- _0 ~
yum install -y ceph-deploy4 u- `* q3 o" j/ _8 g) u3 T3 C
管理节点必须具有对Ceph节点的无密码SSH访问。 当ceph-deploy以用户身份登录到Ceph节点时,该特定用户必须具有无密码的sudo权限。
- N/ R# ?: C- X$ P% W6 r n& V7 h+ j- _ K
9 }7 s2 y) k# V$ `: H; X& A% S5 F5 u
Step 3.每个ceph node 安装ntp和openssh-server
: u5 C4 K. Y4 K& s+ X: X2 t: }因为将来拥有monitor的Ceph node需要使用ntp来同步时间,因此需要安装ntp相关工具。而openssh-server也是必须的。
( C6 S' Z ~5 P; c0 H3 s& k- e5 D$ I+ j4 k( Y; y9 B3 c
yum install -y ntp ntpdate ntp-doc5 {# L* k T, M7 b7 g- u
yum install -y openssh-server
5 Z' b, G/ L4 l# M 7 ^% \, {; g5 q% y
; @: _9 S; d, [5 | O7 T
Step 4.每个ceph node创建一个Ceph Deploy用户" {# Q \, P' e, K' F, P
ceph-deploy实用程序必须以具有无密码sudo权限的用户身份登录到Ceph节点,因为它需要安装软件和配置文件而不提示输入密码。: ]9 q$ g% ^9 Q# L) [
; ^+ J0 P I# [( ^& g+ Q
最新版本的ceph-deploy支持--username选项,因此您可以指定任何具有无密码sudo的用户(包括root用户,但不建议这样做)。要使用ceph-deploy --username {username},您指定的用户必须具有对Ceph节点的无密码SSH访问权限,因为ceph-deploy不会提示您输入密码。
% I2 ]) }8 F' N K. U2 y+ ]* p5 I; L; o9 J# R/ Z8 y; v4 R' v
我们建议在群集中的所有Ceph节点上为ceph-deploy创建特定用户。请不要使用“ceph”作为用户名。群集中的统一用户名可以提高易用性(不是必需的),但是您应该避免使用明显的用户名,因为黑客通常会使用暴力破解(例如root,admin,{productname})。以下过程用{username}替换您定义的用户名,描述了如何使用无密码sudo创建用户。
7 Q5 g# |! N) J7 P- e! c/ h8 J$ |/ b; Z8 g2 K; J5 |
注意:从Infernalis版本开始,“ceph”用户名是为Ceph守护进程保留的。 如果Ceph节点上已存在“ceph”用户,则必须在尝试升级之前删除该用户。9 a. m' q% R3 p: ] a! E3 {, ~
4 a- W$ A8 M5 v" D: D# `/ xuseradd -d /home/luxiaodai -m luxiaodai/ S# O+ K% @' t* V+ M
passwd luxiaodai(123456)
4 @ H5 F5 X8 }& O6 p# 给该用户sudo的权限
9 M7 e4 Z- e: c3 p2 t @echo "luxiaodai ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/luxiaodai
7 g2 g/ ]' d+ J/ }8 ?7 R% rchmod 0440 /etc/sudoers.d/luxiaodai: |: D2 @3 P/ ~/ H
" i" G, F K6 v
6 l$ d( f/ Z- n& j* A& }Step 5.admin node设置免密和填写 ~/.ssh/config 文件
- H! r. M. Z/ w1 U设置免密
, `7 V7 U1 X/ a. X( A( I$ q
- N9 {0 q* L+ V7 v9 R% z* b复制代码5 X- ~, k' C j9 j
# 生成秘钥
- W& @% q2 W# Y- F Dssh-keygen; X- M1 m: T/ N4 T U' p; r
' w# m) A/ k4 ^/ A1 S0 K+ w
# 拷贝到其余节点; y% j* @# N: p; _& f' L# P
ssh-copy-id {username}@node1% S, [: t% o. ]+ Y3 m! J
ssh-copy-id {username}@node24 K, W# Y. ^* @$ r$ x+ J
ssh-copy-id {username}@node3- q# z; ?* v4 h. l. m) n
复制代码- J, b& K, W, e- m+ `
~/.ssh/config 这个文件是给ceph-deploy使用的。通过此文件,ceph-deploy可以知道用户名和Ceph node的信息;这样,就不用每次在执行ceph-deploy的时候都指定–username {username}了。用户(luxiaodai)和节点名称(node1等)后面会介绍怎么创建的! t& ~, d$ X' O( }2 i
2 Q0 |4 F% Y: g复制代码
@- X7 K# }# U5 ~) SHost node1
/ G9 Z9 h6 \) l4 t Hostname node1
# S$ D$ w% s3 N7 Y: J: U& ~ User luxiaodai
4 o' e* h8 l0 f8 oHost node2" i6 P0 ^$ a" X
Hostname node2
. r: O9 _; ?# B User luxiaodai
# m- q% w& ^& p* C; P* m8 K- l: f4 ~) wHost node3. n& N7 r& _5 e6 G5 W% S, c1 I. w, ~
Hostname node3
" L! M" F8 D6 V: P% o User luxiaodai7 z# P; Y# c, p1 ?9 r
复制代码! } N: R/ }3 c P" G2 ^7 H) |4 G
关闭防火墙:
$ t \8 R+ w% v2 Y) ~! o4 q& V' K X
linux修改主机名+免密认证+关闭防火墙 8 _" H* r- g' ~1 Q
6 ?4 v2 Y) [+ w8 j9 [2 E6 F * e/ v. d1 }# N( R- J* W! n3 P
: ~! `+ n! s1 `% MStep 6.TTY& y$ X5 m3 v# H" `( j, y6 f
在CentOS和RHEL上,您可能在尝试执行ceph-deploy命令时收到错误。 如果在您的Ceph节点上默认设置了requiretty,请通过执行sudo visudo并找到Defaults requiretty设置来禁用它。 将其更改为Defaults:ceph!requiretty或将其注释掉以确保ceph-deploy可以使用您创建的用户与创建Ceph部署用户进行连接。
/ s. a+ k9 U; [& A# c2 H7 r' d1 `8 b: |
& h) @" ]. {, g& b U
9 P$ `+ p. |/ n- |
Step 7.确保您的包管理器已安装并启用了priority/preferences package。 在CentOS上,您可能需要安装EPEL* o. n9 U# o% z1 s" i. v
yum install yum-plugin-priorities
6 L1 G$ v9 F; A. b
* @0 [9 x4 |' S ~9 ]8 k
+ d5 b5 m/ f3 J: l3 rCEPH STORAGE CLUSTER安装
: q' v# P/ g# _Step 1. 创建工作目录
! {7 S# U: \1 b" E本步骤在admin node上完成。: y% U7 y! {( c) P
2 m' y& ^% n6 W# E9 n% ~, |0 Y% Fmkdir my_cluster3 E t( Q) `5 w- A$ [3 q Q" s/ }
cd my_cluster
- p: ]! z! Y2 q! f; V9 n& y, M5 \+ pceph-deploy工具将输出一些文件到这个my-cluster目录。要确保每次运行ceph-deploy命令都是在这个目录下。
1 ~% u( |+ k3 L2 S1 O' o0 L7 r) f
! @& ?' q) {& @, ^& C$ c0 @7 z& e. G注意: 不要使用sudo来运行ceph-deploy命令,也不要在使用非root用户时以root用户身份运行ceph-deploy命令。因为ceph-deploy不会把sudo命令也发送到远端的ceph node上执行。3 a7 ?( _* ]3 b: ]
0 v0 r* i" j0 `7 E; h3 R; R
; Z/ @2 U! j3 g5 B! d
, [/ u# X. `$ S1 ~, R4 B# RStep 2.环境清理
7 Y- ^9 r" G+ w( ^$ h在任何时候当你陷入困境希望从头开始部署时,就执行以下的命令以清空Ceph的package以及擦除它的数据和配置:
' [) X. n, C1 {% \6 r; l3 y# e# c' }! W" S7 v F" J- k
ceph-deploy purge {ceph-node} [{ceph-node}]
* {8 E% G$ H; p+ u; T; \ceph-deploy purgedata {ceph-node} [{ceph-node}]
% l. T ?/ Y5 {9 T& ~! y; O$ Tceph-deploy forgetkeys
3 l. O9 L; M2 t' J6 Q" G0 k4 X! grm ceph.*5 Q9 N8 B7 o" c6 J
这里执行" A, l- F* n' n( L9 T: Q
. v- y& l& h' H3 g& ~& Y" N
ceph-deploy purge node1 node2 node3; e! l0 J5 W% S9 L
ceph-deploy purgedata node1 node2 node3! M L1 V" i4 o9 i! V o6 E
的时候提示
3 C) B# M* [6 y6 u9 g9 q7 g' }, i5 h* S3 h s; _9 B
ImportError: No module named pkg_resources
, u) X* ~! n$ I& b解决方法:) K* _/ C. J9 ~9 C2 F6 Z
" b6 ]/ p, r7 V" H
yum install python-setuptools, J. p9 c/ s. j i9 h3 e
如果执行purge,则必须重新安装Ceph。 最后一个rm命令删除在先前安装期间由本地ceph-deploy写出的所有文件。
: d3 ~9 r! f8 E8 c5 p& }! S: G7 g% h7 t% X) D
5 F, ]( m4 R+ Y& S
; g/ K/ q. ], x% z1 B* i' j
Step 3. 创建一个集群6 L) @1 S, {5 J' G
先创建如下图所示的ceph集群,1 monitor + 1 manager + 3 osd daemon ' }7 A' E- Y; m6 X8 Y* t/ ] d% ]& ~, e! K
5 p, D* [3 M( O; p, ` |
& X4 C2 e+ g* L3 \/ G N! H8 Y
1 R5 p& I0 O2 F {7 W4 i
/ b2 G% R: U7 I/ b: Q! L$ f
: p3 W ~2 p, @# T) n% c8 j$ {1.创建( P$ g* c. C( d1 C, e
ceph-deploy new node1
: _0 v( p$ R1 N; n* z这个命令结束后,会在my-cluster目录下看到:ceph.conf, ceph.mon.keyring, log文件
# h. j& O0 V; l* ^% W# B5 b/ P1 R* B0 G
# g3 t0 n) C1 @0 ?; Z: `4 n Y; m. j; c# c' k
% s$ k2 b) R1 U8 O% k% ^0 h1 K- P% u6 L$ y; C
2. 添加public network的配置到ceph.conf; {4 P B! y- j$ X
添加下面这句话到 ceph.conf 文件的 [global] 段
5 f- k s' p3 a; a5 r, L" R, a0 `% m0 O' [
public network = 192.168.1.210/24
. ^2 G7 C5 O1 {1 k7 `, t7 t8 oor" }+ E. u8 @+ y( H& u
public network = 192.168.1.210/255.255.255.0) b" {& W; q& U) M2 S( D, [) J
9 j+ O7 M8 F% q7 C6 @2 Q* ]! H8 L% T
如果要在IPv6环境中部署,请将以下内容添加到本地目录中的ceph.conf:
) d8 T4 I4 R) n* m' W
1 j) O# B( w* x; cecho ms bind ipv6 = true >> ceph.conf
+ n0 r0 w5 h2 i5 |. a + N: C# D8 B- P0 l& K& `6 E( h) g
- J4 s9 J$ y2 O0 X3. 安装Ceph的packages) P, ^$ J$ X7 s/ C
ceph-deploy install node1 node2 node3
8 B7 K! \ q/ I. @) \- K安装过程中出现的问题
/ S0 F/ A5 {: F& \2 m5 g9 L4 S/ ?# u5 k
复制代码2 B2 O2 p9 z, V9 M! v ]2 _
# 如果安装一直有问题,清空/etc/yum.repo,然后将yum源换掉:http://mirrors.ustc.edu.cn/help/epel.html, {" p3 X% T. M* T u
问题:/ Q8 C; f7 y( }/ F- P. c
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'5 X2 y; |; M; h9 w
解决方法:* ^& U- N( l9 N# V3 P. i G
yum remove ceph-release
/ | m: H5 a3 z, E) D' frm /etc/yum.repos.d/ceph.repo.rpmsave$ o1 c% M/ M2 f# u# f; e* d
问题:2 g3 H8 ?' V) z5 r& m) ^
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install ceph ceph-radosgw" m! P5 M6 D; m. Q/ @! X# W' a
解决方法:; Q R+ A$ K6 J& t
yum -y install ceph ceph-radosgw
8 K" ]& g Z* M( }) I. R& Gceph安装缺少python-werkzeug包
& v7 }& @1 Q3 j; i: r安装包下载地址:http://rpmfind.net/linux/rpm2htm ... ery=python-werkzeug
j C& x2 A. j+ |! d I& J, rrpm -ivh python-werkzeug-0.9.1-2.el7.noarch.rpm
6 v! I( K, `; X% V$ d问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph –version: o- x* w3 Q, S3 j/ R6 ?: h% h6 u
解决:ceph1 安装速度过慢,已经超时了,直接手动安装 yum -y install ceph ceph-radosgw
0 T. W6 A* J+ W" r. G% }4 w7 `3 ]复制代码+ X* K* C- C/ a: q2 G
安装成功!!!
# Q# L5 ^" K: d3 i% |, }- Z- p9 }) S9 w/ }3 ?
0 u" s; S0 Z5 x( B* W" X$ H: Y6 N% S' F) N; k
4 I c3 P6 Z8 s9 G/ n7 d, ]5 v
. U1 f* `7 D/ \3 c# @5 j2 M4. 部署第一个monitor并产生keyring
3 [$ d3 B/ B- }ceph-deploy mon create-initial, L) U3 q9 E x, M6 h0 a: b0 }
注意: - i R: N3 d( J Y
若出现类似于”Unable to find /etc/ceph/ceph.client.admin.keyring”这样的错误,则要确定在ceph.conf文件中的mon_host的IP应该是public IP,而不是其他IP.$ v% Y8 {0 S! H; A2 y
m) r# \/ {6 E/ H/ v, w$ v/ K当这一步结束时,my-cluster目录会出现如下的keyring:+ N2 b/ N0 h( n; y. T4 M7 g2 W
4 G; J2 z9 F) N/ b5 D/ V$ g) m) @( p! V4 K. w/ g8 D
0 b! d9 K- E* O- s4 u- J
: u1 J2 Q6 _4 M8 {5 F- t% {' K( N6 ]; d/ w6 q5 y4 r) U2 ~* J+ N
5. 使用ceph-deploy拷贝配置文件和admin key到ceph nodes.' q0 l z8 @( x
这样就可以使用ceph CLI来执行命令了,而不用每次都指定monitor的地址和ceph.client.admin.keyring.; V# c" ^0 t; Y: w/ \ X
& o0 R5 f& F" w0 z; g0 h; L
ceph-deploy admin node1 node2 node3
- N/ Y- j& a# D- I. B: H D 6 p' P. g7 c/ O* g' ~% |
1 H' I+ I+ j4 r1 e% R
6. 部署一个manager daemon. (Luminous开始要求的)3 h' M& J- o$ k9 d, ^
ceph-deploy mgr create node1
0 D: f C" f4 J) T
1 M. `' Y- M0 H1 Y- x7 e k$ e4 j. j; |
7. 添加osd
0 a" E! o1 X+ F& s _/ p1 s添加3个OSD。 出于说明的目的,我们假设您在每个节点中都有一个名为/ dev / vdb的未使用磁盘。 确保设备当前未使用且不包含任何重要数据。0 y/ h! { Q9 M
+ v7 s; \3 {0 h. w5 ^
复制代码
" U- ~) C& e @2 c# E0 Y* N/ }ceph-deploy osd create -data {device} {ceph-node}
/ g) B. K1 o+ n' _2 x6 j3 |. _# p4 L. S% [0 K& ^! q
ceph-deploy osd create --data /dev/sdb node18 ~- g) j( {/ {9 f# I% z! D
ceph-deploy osd create --data /dev/sdb node2
2 W! V1 F H, H4 o0 C, @ zceph-deploy osd create --data /dev/sdb node3/ {& J0 ?" ]8 Q% W- V1 x
( o6 d+ o7 l2 C9 z2 A( `注意:如果要在LVM卷上创建OSD,则--data的参数必须是 volume_group/lv_name,而不是卷的块设备的路径。
! y1 K$ `) C4 |" }$ ^1 h复制代码" b9 t3 x- c4 N/ K4 v; @* y
: ^' B8 w, h( i( q" a: u; h& y: w: ?- [% E$ u, F) j
B6 N _$ M7 J |+ a. R
( S# \" P$ b) F# k ' n$ r. f o3 H' n" u
) P/ k, \# B0 N/ `+ m5 z& n
8. 健康验证
- k% [* B2 o3 @ssh node1 sudo ceph health
+ |% g3 l! {( x2 f' O& |4 s, \/ P& p5 n; X4 s1 c
您的群集应报告HEALTH_OK。 您可以使用以下命令查看更完整的群集状态:
5 X3 k2 a5 ]* r7 i# c* `' {
6 }' |7 ?& _) i0 jssh node1 sudo ceph -s ~5 A! Y: n) k$ v: @ m
查询结果如下:
; g9 \ i1 ~# X; X( |" U7 ^2 L, e' q7 k3 f* d6 @
+ m2 Y* Y" V2 U5 O5 J; s; I7 z% a! R1 x* j
/ g" E4 I( Q6 N: w* W" R
* u" H: S6 p- D6 y! t5 |2 S( s
: ~' r+ Z# S7 S6 F9 j. ~ x" O: Z( M q; @9 e
Step 4. 扩展集群' b0 U# Q' g! H) X5 L
启动并运行基本群集后,下一步是展开群集。 将Ceph元数据服务器添加到node1。 然后将Ceph Monitor和Ceph Manager添加到node2和node3,以提高可靠性和可用性。
! @- A" F/ M9 s: K7 A% Z2 ^
# \. h+ [. {/ t6 `* q8 d5 ?* C
, v8 l8 ^) y$ B4 R9 u: M$ D3 c/ s; q3 u. b/ f5 b5 Y
对比第一阶段的工作,第二阶段要扩展的是:
/ ]' m2 M/ A+ l) |( B' c. ]2 r5 { d+ m* b) M+ [' Z
添加1个metadata server
/ {0 a6 H0 W$ t$ |. F# K添加2个monitor
, j" O; G. O4 A* f添加2个manager( I$ ~% ]& M% X: c2 D I
添加1个RGW
, H5 V h9 u3 t) \ $ E, ] m1 ~- K+ i6 m
6 k: F0 f; {. j; z4 C2 {1. 添加一个metadata server; p3 p3 _9 `# o; A* N, H
如果要使用CephFS,就必须至少添加一个metadata server.% ?9 |. |" r2 u/ Y" {
L! y6 t6 D) V0 H* L7 r& Vceph-deploy mds create node1# ~) D o0 m/ N6 Q: c
) a; I" Y% Y3 U0 }# q
& P" I' z9 l. @/ `2. 添加2个monitors,达到3个monitors
, V4 A1 V+ Z4 r3 FCeph存储集群需要至少运行一个Ceph Monitor和Ceph Manager。 为了实现高可用性,Ceph存储集群通常运行多个Ceph监视器,因此单个Ceph监视器的故障不会导致Ceph存储集群崩溃。 Ceph使用Paxos算法,该算法需要大多数监视器(即大于N / 2,其中N是监视器的数量)才能形成法定人数。 虽然这不是必需的,但监视器的数量往往更好。
! ^5 H6 A3 j. b0 z% ?% c2 W5 i, M
ceph-deploy mon add node2! p& f T4 ^) C8 k: X7 z
ceph-deploy mon add node37 S5 T- N7 J1 Y) A5 ~
在添加新的monitor之后,ceph会开始同步这些monitor,并形成一个quorum. 要检查quorum的状态,可运行:4 `& B3 g6 v0 l" P9 Y1 h. ^# d3 ?
7 j' f- L( t% g6 c
ceph quorum_status --format json-pretty; C! W$ X# \1 R2 `
复制代码
8 ~3 Z/ q$ m L; f# g[root@node1 my_cluster]# ceph quorum_status --format json-pretty
$ h4 ?. n1 `- Y; e/ R{; t& Y0 j, U' H
"election_epoch": 12,% e! K; Q" H# r0 v/ l
"quorum": [- |/ C+ T. ^: s) P
0,3 [. c' n. T$ _2 r3 N
1,& I0 C$ H+ m4 O+ @8 c# m {
2
$ D+ `; I* v3 c/ a ],2 c4 ]2 l; D& y
"quorum_names": [5 `! \, n0 V. t1 O
"node1",$ u6 C8 u) G, E( r
"node2",
$ o& X4 b$ \3 x "node3"
- L* |3 |6 y& _* E7 @- ]3 b2 c ],
2 s# J% }$ B9 d+ c1 M9 J "quorum_leader_name": "node1",
8 C) [0 Z z& W0 |4 T+ ? "monmap": {" H% u5 X9 G0 x6 L
"epoch": 3, w1 k4 X2 n# _3 e- m5 @& }3 D
"fsid": "f314d1c1-b6b9-4060-95b7-c25ec192f612",5 y, O7 d: \. o+ I9 G7 @' l2 w7 w
"modified": "2018-11-13 16:04:02.221558",
: b0 y/ ? H7 n "created": "2018-11-13 15:35:34.338001",
: V# z: M& M7 ?, u, ^9 H "features": {
/ \7 a$ [- _5 D c4 N "persistent": [
" v3 f( B! g+ ^3 K8 m: U "kraken",/ Y$ S3 K: y' N9 A2 h9 N; E
"luminous",! l8 w! E) _$ W/ F# a
"mimic",
( c* ^; u: `9 K/ _- R; d "osdmap-prune"
& X; Q- F4 s( q ],3 d+ X7 ?5 X* ^. d
"optional": []
4 y$ I4 ]) S! q+ |& f- @ },- U5 G ~3 P5 }$ i; I. T
"mons": [6 a( q5 U) H T/ S; m
{
9 E, o- p+ i% i7 R- q "rank": 0,
' J( n% a5 _9 J' I2 _2 W- \ "name": "node1",3 ]; I0 t+ M% Q( G( R1 o
"addr": "192.168.1.210:6789/0",( i' W6 l! w* C6 W+ C$ |
"public_addr": "192.168.1.210:6789/0"
6 _0 M6 \+ x+ q9 H) c( ~ },4 D% j ~4 c2 o' s1 l
{2 ]# h$ d. M5 I* F. [; M
"rank": 1,
]% \; l* d! { "name": "node2",
6 v( w/ q9 D$ a; t; E% H0 I "addr": "192.168.1.212:6789/0",
; @, D) g: T$ i9 T "public_addr": "192.168.1.212:6789/0"- R5 a2 `! W" z' E3 o
},1 v4 ]) A/ z3 Y& ]* h3 _
{2 F& g. G! n* ]% w p
"rank": 2,
4 K6 H# K- W& w "name": "node3",4 A9 |1 e3 ~& v
"addr": "192.168.1.214:6789/0",( h' H q K( {4 w. m; i
"public_addr": "192.168.1.214:6789/0"
1 \# i& f9 w# v& c0 @& q( Y }
' `* ^! F; e- t0 O9 N/ @ ]
; K3 z( J( F& H( \- f }6 X n$ l) T3 s
}
6 q9 }" P. \2 Y8 y0 Z! V; \( b复制代码
# d9 I! k) P6 @0 B6 g2 Z2 z当给Ceph安装多个monitor之后,应该在每个monitor主机上都安装并配置NTP,以保证时间的同步。ntp的配置这里从略,只简单概述一下原理:将2台monitor所在机器配置成向第3台monitor机器做ntp的同步,而第3台monitor上通过crontab来定时调用ntpdate命令向Internet上的ntp时钟源做同步。4 H0 n! U. r# O% A$ j; d
2 Y( z9 U) F. @, ~3 H# L W
2 N5 o4 o- l: G, G4 J4 A9 p k: V" @4 o z1 C, Z, J' O; L
3. 添加2个managers,达到3个managers
3 z5 \3 X5 D3 L J/ i( D) aCeph Manager daemon工作在active/standby的模式。添加多manager,可以保证如果一个manager或host宕掉,另一个manager可以无缝接管过来。
3 J1 R! D# B% S4 ]: q" k; k) Y* a$ r6 H' n
ceph-deploy mgr create node2 node3
8 W" u- K1 X- i' d2 Y# E% }/ u可以通过ceph -s命令看到active和standby的manager.
5 w0 U p# M9 v+ D9 M; u& D( s6 q; M3 o0 M6 \% ^3 T
0 X9 v4 x- o: A( D! i
. N; ^6 J' o8 g# R $ F/ O6 W8 c" H4 M. b4 a
1 r# \7 K+ G! R# N
3 ~# I& ?0 h$ p% N
/ ~0 j& e8 ~+ Y1 Y6 a+ M
4. 添加一个RGW实例
' }& d% F# d. \" M0 t, H& `要部署Ceph Object Gateway组件,就必须部署一个RGW实例。
F# U% W& Y& @1 b' O$ M% Z c. f# A4 B6 N; \! o8 W7 R
ceph-deploy rgw create node10 J) y3 E4 w8 W
GW instance监听在7480端口。若需改变端口号,可修改ceph.conf文件。% V3 f' q2 x! G& r8 x
' q$ P! Y- l3 C8 q+ _- \[client]( S7 T7 |' \& v# W, X: i
rgw frontends = civetweb port=80
, I( G s- d! ^若要使用IPv6地址,可以如下修改ceph.conf
2 k4 C; L" h$ u- m( v( T9 Y/ P, N, D6 J* e
[client]
( r$ P# E9 A' n8 o& _$ hrgw frontends = civetweb port=[::]:80
+ T1 A4 T: }/ j* F T8 v) N * o/ B/ B+ ]# U% [
& t6 S$ H$ |0 u3 X" ~+ V存储/检索object数据; H- u9 j. G$ P$ q% H0 t7 y g5 ~
要存储object数据,ceph client必须: 4 |& i# U) z! B4 G
1. 设置一个object name
3 J0 s% p. l: H( [2. 指定一个pool
" p6 i% P" N" z8 j/ K! C/ q) c8 T* q! V' H% D9 F; i
注意:
! ]9 C" \' f, I4 B( J关于ceph client,将在下篇博客介绍。6 }3 A0 T8 h& ` N) K
) E0 ?" \$ U! z' c9 ~8 U1 B! R
Ceph client获取最新的cluster map; 而CRUSH算法计算怎样将一个object对应到一个placement group,然后再怎样将这个palcement group动态赋给一个OSD daemon.
( g& i4 r4 q, a* q要找到这个object的位置,可以执行如下命令:
9 r6 l7 r* m5 N" v6 y, H
7 T2 N5 H0 p- |ceph osd map {poolname} {object-name}& j1 P& d O6 j7 d
作为练习,让我们创建一个对象。 在命令行上使用rados put命令指定对象名称,包含某些对象数据的测试文件的路径和池名称。 例如: n z7 s$ B& F( Z+ c2 s7 w. C1 ^9 y
& g; K4 |; D7 r- |+ k9 E! U
rados put {object-name} {file-path} --pool=mytest
. J7 c9 m2 D% _7 B3 h r* t! a; Qceph osd pool create mypool 8 # 8是该pool的PG的数量: t4 y/ y& d/ N3 \ T
echo "Hello, World" > 1.txt/ T6 l( e) d$ \% K5 O3 S8 g8 k" G! O9 A
rados put my-obj-1 1.txt --pool=mypool
0 F d7 ?& C/ H" I* Z9 c. Y9 l) b. U6 c2 X
检查Ceph集群确实存储了这个object:
: `2 a8 P- [, i* _ H& j- { {' B" j% F
rados -p mypool ls# t; w5 r$ s2 b+ T2 y. H
确定object的位置:
/ O$ {: `2 n' Y
+ U% y* H1 \- {6 e n% Mceph osd map {pool-name} {object-name}# g2 }3 X$ ~+ E. G% P+ q$ X% Z
[root@node1 luxiaodai]# ceph osd map mypool my-obj-1% u8 \# S1 A2 H4 h/ y" {$ o1 C5 F
osdmap e26 pool 'mypool' (5) object 'my-obj-1' -> pg 5.ced445fe (5.6) -> up ([0,1,2], p0) acting ([0,1,2], p0)
% I% H/ E( a5 G; V( Y. I5 u3 A. K. P4 S
若要删除这个object,可以这样:# h @/ ^, n( O' X
( }' T! M( G0 G( Urados rm my-obj-1 --pool=mypool4 m' D7 e$ c; h5 t
如果你要删除池,使用下面命令,出于安全原因,您需要根据提示提供其他参数; 删除池会破坏数据5 \( c1 z3 c; B4 ?4 C* [
5 O8 g8 R7 [" i& |ceph osd pool rm mypool. ~0 N# J% h- F& {( j; z" a7 U1 d
删除需要修改配置文件,加入红色部分,必须在mon节点上执行
# N3 g, i) B4 Z6 M+ A/ H% v' o' j- m) `8 Q' L% q6 w
复制代码; _/ k# b# X. H+ d( t4 R
[root@node1 my_cluster]# ceph osd pool delete mypool) O5 H/ B m m/ C. x
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool mypool. If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.
( l6 y" `" {4 a: H[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it' a5 M, D1 s6 I U8 T
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
! l9 i# C5 H7 p5 Z) O3 o- B1 s5 q3 i[root@node1 my_cluster]# vim /etc/ceph/ceph.conf
# w6 A- i- J1 s% D3 V$ N[root@node1 my_cluster]# cat /etc/ceph/ceph.conf : Q% R" b- b, Z, H9 _7 Q. _( u
[global]6 B* k- [! _$ k+ b* f- W- \
fsid = f314d1c1-b6b9-4060-95b7-c25ec192f612
" h4 W$ _" N) i: j7 R0 U4 Smon_initial_members = node15 v8 ~& Q2 z' ]9 |; s
mon_host = 192.168.1.210" B3 J$ W9 R; i8 w
auth_cluster_required = cephx
/ v5 n- z4 w1 x, f( iauth_service_required = cephx
* M* Z/ ]( H" j Z% }$ P$ sauth_client_required = cephx
* [# |5 w( x, Cpublic network = 192.168.1.210/24
" e% J7 o' T+ v4 v, {' _3 q
0 Q6 g4 K. R( @[mon]
! H( L. u2 T; N1 B7 F) Hmon allow pool delete = true: i# M* q/ }" ^' Y
[root@node1 my_cluster]# systemctl restart ceph-mon.target
! E; M1 X; K( { R! }8 \+ p[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it/ n0 l) p1 |0 i2 i$ X( j
pool 'mypool' removed$ o% N7 E! e, \: i2 l& V
复制代码' P* c( M) Z. }3 n/ G) u; b) I* o
现在,集群部署好了,object也能成功创建了,但是却并不利于用户的使用。用户使用存储,一般不直接通过原始的object,而是主要有3种使用方式:7 |7 ~7 s( k' ]
块设备9 A O( b9 E# P: c1 K% P( c, Q. e
文件系统$ J. |3 |& g \2 Z
对象存储(比上述原生的object多了一些封装,常见的有通过S3 API或Swift API进行对象的存取)0 n% J6 W9 @9 C5 C- u/ o1 C9 b) L
( k, Z( P# x/ }) g1 P, u
4 q; d' m" l- tBLOCK DEVICE QUICK START4 D7 n; L8 v. F3 J% B
1. 安装Ceph/ i- Q7 i; x2 z/ j' X) X
首先要确保是Linux kernel以及合适的版本。1 L3 S3 t# r/ L( |; X0 c
z6 t% T9 l% w7 w在admin node上运行以下命令,将Ceph安装到ceph-client node上:
8 a" K R) f2 m; F4 q# I2 G0 _. s& t& P9 b/ D- Q
ceph-deploy install host4 D4 M( k4 ]3 S% ?
然后,运行以下命令将Ceph配置文件和ceph.client.admin.keyring拷贝到ceph-client上。
4 j6 g5 Q( y5 F9 P9 e9 E# o# I+ L2 E# o& N8 t
ceph-deploy admin host
: l3 n+ @1 m6 F" p& }3 l7 i% Y$ v 1 ~7 t I3 z8 q- ?
+ s, @) r/ `. Z6 K/ [# W
2. 创建一个块设备的pool
2 P: j7 N) u9 P* K在之前的文章中,已经创建了一个叫做mypool的pool,现在需要运行以下命令以使得该pool可以作为RBD使用:) M4 Z' D& |& n: u6 X x" P
! U' a, o$ B! v2 _6 |. G i8 L5 i% _5 ]# Grbd pool init mypool; v& ]" Q% B1 b0 _. y3 a
- W- P& e$ \9 y! U) y
9 c8 f1 |* O# ^; b1 d/ T3. 配置一个block device(块设备)
( Y6 [- g$ d X# W+ [1.创建一个block device image
4 t# Y* h" l4 H, i! V8 Srbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]* |" o2 Y7 W T% ^1 B4 s
rbd create test --pool mypool --size 4096 --image-feature layering -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring' z4 L. ]% v/ J- Y6 ? \
如要查看所创建的rbd,可以这样:# C$ D: i+ ?' }$ t
( H) i7 M G8 x5 R" srbd info test -p mypool
2 N, O; z' T3 C' N0 t3 S6 c6 ~! r$ J结果如下:
, f" Y- m. D& m! v+ u1 x) x3 v5 a q. k- y" V; l" C* t& k( ]1 f
5 q/ D% ~ w; \/ a% O
8 ~# _: D [9 A y
' y( Y( \: G0 v# j: p3 ^8 w* t1 n* ?1 p
2.map一个block device image7 w. c2 |. n+ R8 v
sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
9 f% H$ }; D, r1 C6 e
' _1 Y: k. i, ~0 y1 }2 R( Brbd map mypool/test --name client.admin -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring% y% [7 E( u+ D! w, W" ]: O
; q( z7 r+ A# q( f0 n& E8 q4 d$ j6 T7 g" C0 N w ]
3.创建一个文件系统并挂载
! c. D/ L" g T ; X7 p# u: v4 M4 D
6 `" N& e7 L3 y8 B
注意: 这里的rbd map和mount命令只是当时起作用。若系统重启了,则需要重新手动做。 若要开机自动做 |
|