|
|
楼主 |
发表于 2020-12-13 12:06:16
|
显示全部楼层
Step 1.admin node Enable epel (Extra Packages for Enterprise Linux) repository、ceph.repo配置文件
3 M1 _8 W, P1 f$ P" z复制代码
8 E8 v3 E) V& f8 \4 ]9 S3 V W# 认证,但我显示系统证书崩溃,请重新注册,就先跳过了4 c9 N' z/ r" W V# `0 q- v
yum install subscription-manager( s# I, s* n* k0 C1 ^! o. F
subscription-manager repos --enable=rhel-7-server-extras-rpms
) Q8 k$ G0 I- D/ \
! R' B% O) c- G {yum install -y https://dl.fedoraproject.org/pub ... latest-7.noarch.rpm! G; N. ]0 Q* B
安装参考:9 v0 w. R( T& n
http://www.mamicode.com/info-detail-1287279.html
& ^; m6 @3 M+ u$ N y& Q( S复制代码
- M, c; W! B3 C$ l 1 M& i' n3 t1 Z) W& [- x
+ P( O) m$ S: \6 V: h
文件位于控制节点(即admin node)的 /etc/yum.repos.d/ceph.repo2 j8 w* _. v$ R6 M
; y: t/ _0 H8 X: w. R) H4 ?
复制代码& a6 r5 d V6 Y. d" a
[ceph-noarch]3 C: n4 J& \# h! [3 }8 V
name=Ceph noarch packages+ G& I( R* k: J$ S; `+ T/ ~
# baseurl=https://download.ceph.com/rpm/el7/noarch+ b/ U8 @" \+ N
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch7 \! h$ c2 Y4 F6 S( {
enabled=1
( B% Q: y0 P9 f- J- y5 Zgpgcheck=1
$ f8 o F6 T" N1 ?type=rpm-md
1 ~7 Y; H9 f4 C2 W7 y3 d2 L+ x+ c# gpgkey=https://download.ceph.com/keys/release.asc+ U- b1 c! l) [( ~. y# H9 J" ~
gpgkey=http://mirrors.163.com/ceph/keys/release.asc# n* _6 u6 I, m6 q* r# S) [. ~4 {
复制代码, r/ G# B9 S9 U9 z! _
注意:
) k1 _6 n2 a0 `上面的注释部分,是Ceph官网的写法。但是对于我们国内的安装,这样几乎无法成功,因为下载Ceph太慢了,会导致失败。因此,需要改写repo文件以更新Ceph源。 5 z; u5 p9 G2 q9 Q% Y
常用的Ceph镜像是163镜像。但在使用163镜像之后,必须将rpm写成rpm-luminous,这样才会安装ceph-deploy-2.0.0;若只写成rpm,则实际安装的是ceph-deploy-1.5.
, B0 Q8 {7 _7 t- @$ H, \' M Z& m2 p2 I/ B
8 L6 ~# h* V3 _ g! F
. N, b, D* m& A8 d. ?8 p8 @$ b
Step 2.admin node安装ceph-deploy
- i8 q4 O# l3 a. m* |- @: {yum update7 \! j4 w* p, T* Z
yum install -y ceph-deploy
, n _$ ~' `5 L' T: f% o 管理节点必须具有对Ceph节点的无密码SSH访问。 当ceph-deploy以用户身份登录到Ceph节点时,该特定用户必须具有无密码的sudo权限。4 T) H4 m1 l% Z0 O1 i; c+ U
4 c6 K7 k4 v. J8 v' a; Q# _" D . m2 V# {( ]( v! k4 b5 }
+ f& I! m7 e" N* S3 QStep 3.每个ceph node 安装ntp和openssh-server
1 n o, F) H5 |: l' u+ c% B因为将来拥有monitor的Ceph node需要使用ntp来同步时间,因此需要安装ntp相关工具。而openssh-server也是必须的。6 S7 A/ I! ?% Z1 g3 r4 v$ P
" y: R2 p! B8 @
yum install -y ntp ntpdate ntp-doc+ ~& W2 n! H& E2 z) x
yum install -y openssh-server
2 k$ T# S9 @$ ~6 O( z
- B7 s) W: }. b7 d! o
# s+ o; C% p4 Z9 T V; V* H P rStep 4.每个ceph node创建一个Ceph Deploy用户! N5 o+ y; z2 P
ceph-deploy实用程序必须以具有无密码sudo权限的用户身份登录到Ceph节点,因为它需要安装软件和配置文件而不提示输入密码。- ~: P0 {. k5 E7 }; s0 e
" M) u$ z, X' P0 [+ [最新版本的ceph-deploy支持--username选项,因此您可以指定任何具有无密码sudo的用户(包括root用户,但不建议这样做)。要使用ceph-deploy --username {username},您指定的用户必须具有对Ceph节点的无密码SSH访问权限,因为ceph-deploy不会提示您输入密码。2 j9 [# V5 r5 J0 ~ [- }' f
4 g2 i" p; z- m, n. M( Z% d
我们建议在群集中的所有Ceph节点上为ceph-deploy创建特定用户。请不要使用“ceph”作为用户名。群集中的统一用户名可以提高易用性(不是必需的),但是您应该避免使用明显的用户名,因为黑客通常会使用暴力破解(例如root,admin,{productname})。以下过程用{username}替换您定义的用户名,描述了如何使用无密码sudo创建用户。1 }/ ?0 I$ Z, i" ?; d
. I* G* \( U& t$ n+ o; w& b# K注意:从Infernalis版本开始,“ceph”用户名是为Ceph守护进程保留的。 如果Ceph节点上已存在“ceph”用户,则必须在尝试升级之前删除该用户。) }/ z7 [% X1 L% V( V7 Z+ v; h
. j( D' H4 S6 E
useradd -d /home/luxiaodai -m luxiaodai
4 }2 r3 F' d/ D& S ]7 Bpasswd luxiaodai(123456)1 F* A! E0 p- }3 P8 P2 C) T
# 给该用户sudo的权限5 s X* o- a% R- e8 p
echo "luxiaodai ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/luxiaodai3 P0 L1 r: K, V1 }. C& \0 P: |
chmod 0440 /etc/sudoers.d/luxiaodai. f7 p" F* j' D4 Q# ^
& I7 \7 E t. X
6 b# x% s- h9 \( f& d; v1 W
Step 5.admin node设置免密和填写 ~/.ssh/config 文件
: x6 ~3 D. K9 k7 E. R/ f+ S% C设置免密7 w4 ~1 [6 E# @3 [: l |
6 S& v" B2 R2 b- p8 }4 [( ]
复制代码
1 x7 }" c- d7 _+ R0 J8 a# 生成秘钥
5 i5 C! [7 Y# r6 O4 x2 bssh-keygen
& K( m* C8 D8 F: r% b
; b; j1 D; q8 `( a8 V# 拷贝到其余节点* w! i' ~; t2 I1 @0 T, h, p/ @
ssh-copy-id {username}@node10 `% j" [( A) j
ssh-copy-id {username}@node2& |% e' Z8 V& h
ssh-copy-id {username}@node34 l$ q) j# U G4 U* O. n; z+ U
复制代码% t; y4 Q1 }( E, G# P
~/.ssh/config 这个文件是给ceph-deploy使用的。通过此文件,ceph-deploy可以知道用户名和Ceph node的信息;这样,就不用每次在执行ceph-deploy的时候都指定–username {username}了。用户(luxiaodai)和节点名称(node1等)后面会介绍怎么创建的
8 V. n. U6 w9 C; S) _ t6 D# }/ m9 G5 N7 B9 A
复制代码7 j: S& D7 h9 l. c4 P
Host node12 \( o& X. n& \( [
Hostname node14 U( Q2 L! Q$ s6 Z: ?! m4 Z
User luxiaodai8 }, }- d6 @* s) F
Host node2
) D. u8 o5 p8 F0 d# j Hostname node2$ [, @1 @7 g2 s
User luxiaodai. x0 U4 W2 g8 G' ~. }/ Q) a
Host node3; M3 o/ Z( b4 F. z$ U
Hostname node3
( Z1 R3 X; c$ i8 ?1 T* m User luxiaodai
: P: K) w* M4 h0 f5 A! U2 b复制代码
. i7 E, L/ F, u1 c+ e: k/ w关闭防火墙:2 S5 G8 F6 }1 ?& W
. s p: l( Q) x+ ^6 q4 t( r* }, _% T
linux修改主机名+免密认证+关闭防火墙
+ @" D2 t' o. c' t/ a
1 @5 O1 o4 K! d/ e: y/ e$ e3 v # w0 [; {0 _) C
4 r) v1 T% h/ c9 c qStep 6.TTY
2 Q! X; n/ B y, p在CentOS和RHEL上,您可能在尝试执行ceph-deploy命令时收到错误。 如果在您的Ceph节点上默认设置了requiretty,请通过执行sudo visudo并找到Defaults requiretty设置来禁用它。 将其更改为Defaults:ceph!requiretty或将其注释掉以确保ceph-deploy可以使用您创建的用户与创建Ceph部署用户进行连接。- n6 M. C& |$ E& q; J5 e
4 e. S* X, S2 d8 P8 B
& @; c: j! a" K8 [4 b- V% ^3 w$ J, b4 I$ j, f& W( Q: N, K. z6 H
Step 7.确保您的包管理器已安装并启用了priority/preferences package。 在CentOS上,您可能需要安装EPEL
* h4 G8 N0 M1 @; ~3 N& c Vyum install yum-plugin-priorities* m" g) u& w1 E) ?0 g3 }
+ B- f- M; H* o( e+ |; M
/ [( U/ j) z( w" C+ y! Q/ ZCEPH STORAGE CLUSTER安装* ]$ i. f: F% _ {7 ]2 j
Step 1. 创建工作目录 D& y0 ~0 h7 N8 o& X
本步骤在admin node上完成。
; E5 |( G1 |8 Z' t- @4 M O) w
4 h' x0 o* W7 W2 v" p3 @! Bmkdir my_cluster
: M1 g1 y8 \! c' _& b' Wcd my_cluster
# u1 Q& n4 X+ p* aceph-deploy工具将输出一些文件到这个my-cluster目录。要确保每次运行ceph-deploy命令都是在这个目录下。
+ v+ i) M, D3 z9 a$ ?# C4 K" ~+ c$ V6 s& j0 J1 T! c4 o
注意: 不要使用sudo来运行ceph-deploy命令,也不要在使用非root用户时以root用户身份运行ceph-deploy命令。因为ceph-deploy不会把sudo命令也发送到远端的ceph node上执行。% V) U" ]! S8 `
2 `5 e% ]6 k; [. h. H
' t8 `' W- j5 [7 Q' C
0 i8 A, s: S. O- c1 W
Step 2.环境清理
n8 ~5 Z2 B3 y: O* v- m, {在任何时候当你陷入困境希望从头开始部署时,就执行以下的命令以清空Ceph的package以及擦除它的数据和配置:
2 @0 T( a, _ q2 M7 j3 h( `
) b& ^( u+ V9 \) ^' J2 Hceph-deploy purge {ceph-node} [{ceph-node}]& v0 E- a1 c' X& l X7 f5 ~
ceph-deploy purgedata {ceph-node} [{ceph-node}]# p% s# Z$ e( [* o) t
ceph-deploy forgetkeys
# x( L( a' v6 J! r3 u) J/ h3 Arm ceph.*
* R+ N6 c/ H1 w) A- P2 G! k/ p这里执行
' A1 y+ P" g/ ?+ ]/ _- q- f# z' g* s, B- \
ceph-deploy purge node1 node2 node3# R2 \! T0 o- P9 q+ g( l" q
ceph-deploy purgedata node1 node2 node3 _! p1 e9 W! X& E( n% ` R
的时候提示+ ?5 A- l& }4 I6 T% ]
2 G) f% I3 \' P# z# ~+ q! a: A
ImportError: No module named pkg_resources' h: q. k0 O0 k# E8 d
解决方法:7 s; r, U* Y* C0 n
1 M2 H% Q. t+ P7 A* n) S* O/ w
yum install python-setuptools* {7 ` l2 I$ J# O
如果执行purge,则必须重新安装Ceph。 最后一个rm命令删除在先前安装期间由本地ceph-deploy写出的所有文件。
0 _2 C) K2 [% u) U. R) h4 u& n! h* N, e/ }: n: z
+ a$ C6 W; x3 `8 `' e. p; x. H& ~5 y" t: t0 P
Step 3. 创建一个集群7 Y1 x- X& z) a
先创建如下图所示的ceph集群,1 monitor + 1 manager + 3 osd daemon
( r8 @3 ?* a2 j6 }: D
% i& u; c- |# x! d' X1 w! p, I- Y' ~- M. }
; F* |) v* r0 q" X9 G$ j0 G 7 t) b1 W% S0 k. }6 S: o; j; W( j) s7 l
3 C# G# j% l f n3 f1.创建
$ g% I$ t: O8 d& y: ?ceph-deploy new node18 W2 Z* w1 F) r' V8 K" [
这个命令结束后,会在my-cluster目录下看到:ceph.conf, ceph.mon.keyring, log文件
& o+ t1 V$ _( t9 N9 u7 Z3 Z; A- U7 [8 z7 C: L
4 ]: a2 f: O* y
& v" O, }& P. }
1 K3 ?2 f9 R, |8 F7 J* x) n) i: F+ W' `+ p4 j3 u% F8 d+ w6 Z- w
2. 添加public network的配置到ceph.conf7 J, o7 T' ~3 i
添加下面这句话到 ceph.conf 文件的 [global] 段" M9 [( u1 v' i8 G) e8 L0 D5 V; L
9 X( V0 m# D) u6 P* C$ P0 Gpublic network = 192.168.1.210/24
' Y6 j3 s9 }8 @3 Y2 y5 S3 Uor
# M6 o# n2 ]# \$ S6 b0 z8 m7 @public network = 192.168.1.210/255.255.255.0 X# h; F+ \; r( ?( {5 j
$ F! i, N9 e. j' U+ f( z& F/ k: F" V M
如果要在IPv6环境中部署,请将以下内容添加到本地目录中的ceph.conf:
4 L8 J1 }4 G2 e5 M# U
" z" u2 O: b1 f9 m! L: b s( K) G1 Q& x1 ^; xecho ms bind ipv6 = true >> ceph.conf
/ R- Z" z& A" a# b# D
) ?$ n+ o9 d* }" F$ n4 v; b" S8 F/ D4 ]3 @& V+ H$ a
3. 安装Ceph的packages% Q8 z$ v7 z; A+ P1 [8 D
ceph-deploy install node1 node2 node3* L1 Y1 X/ { P& e
安装过程中出现的问题/ d7 B+ s; o8 D; t' d, u3 z0 n
. h8 y: Q% F) |0 m' }& j0 Z1 ^
复制代码
* x; U% c2 w6 m4 @. Z# 如果安装一直有问题,清空/etc/yum.repo,然后将yum源换掉:http://mirrors.ustc.edu.cn/help/epel.html
; t2 r6 Y& U9 A+ A7 G1 @" [3 A问题:1 v/ F* I7 h8 v# P- c% u& G; w% C
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'
" x1 v& J9 N ?3 A: a解决方法:
" V J5 ? R: m5 Yyum remove ceph-release0 `' g( \2 e/ _% R$ c0 K
rm /etc/yum.repos.d/ceph.repo.rpmsave
3 f. r2 h& A3 Q# h* X% n0 X8 J问题:4 O; `$ R0 C& g* ]* Q6 a! p& }+ u: u( ~
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install ceph ceph-radosgw
1 t' u0 |' B. Q9 ^8 ?: [0 U2 k) N& q解决方法: [' I+ T: C3 f+ [
yum -y install ceph ceph-radosgw
, @ |/ U; B) g3 ]3 J/ T: mceph安装缺少python-werkzeug包
4 N( ]; H' {1 m& N安装包下载地址:http://rpmfind.net/linux/rpm2htm ... ery=python-werkzeug
, l' o( q. L) x3 p4 w/ {+ y9 m3 R. Q# zrpm -ivh python-werkzeug-0.9.1-2.el7.noarch.rpm; E% Y2 m, s0 ]& _
问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph –version
* | E! G$ m0 ]+ e: M! A( f% ^解决:ceph1 安装速度过慢,已经超时了,直接手动安装 yum -y install ceph ceph-radosgw: p" o: u7 l- [2 m! Q
复制代码4 I$ B* E" S/ ~
安装成功!!!. s& ~6 M" m" J5 b A' Y2 b/ ?8 t" z
+ O) r+ ~+ v' D' I) b+ E9 U
2 O4 g2 Y: v8 c7 R/ f1 [1 g+ ?, J" T" T, m1 e/ `
; T! m* Y9 c9 A0 w2 }7 n6 X
; k o8 ]7 i: U4 s1 ?( N1 U3 T
4. 部署第一个monitor并产生keyring6 k& l+ O- Y5 ?+ }/ n* f% T
ceph-deploy mon create-initial
6 _6 t8 j, Z6 e- S( j7 L注意: 4 t; I5 |; ^' ^1 J3 V0 ~
若出现类似于”Unable to find /etc/ceph/ceph.client.admin.keyring”这样的错误,则要确定在ceph.conf文件中的mon_host的IP应该是public IP,而不是其他IP.
) @6 ?8 D+ r' \3 p0 W/ k- e# k2 ?( [9 K, o: ~9 H
当这一步结束时,my-cluster目录会出现如下的keyring:- B. c" A2 @; f" n; M0 x
* x: {- r9 S9 r) y: p
! w- J1 q6 R! R* p( @" Z, A2 G/ G- _0 ^4 F2 c7 ~! R
9 g% u4 r% h0 a# n" X' n3 l
/ h' R# N1 m/ I3 K" p& S+ J1 S5. 使用ceph-deploy拷贝配置文件和admin key到ceph nodes.% u ~0 R( |5 I' K9 }7 e5 y
这样就可以使用ceph CLI来执行命令了,而不用每次都指定monitor的地址和ceph.client.admin.keyring.
8 O. W( _" g) ^/ r# E( O$ t j. |0 O# r7 r b- b
ceph-deploy admin node1 node2 node3: M6 y" ^; d- E0 S. {: V: x$ a
5 K$ ?8 s; ^& k; C
N5 s- H4 F. Y8 K$ Q6. 部署一个manager daemon. (Luminous开始要求的); w2 p0 g# U, o8 b" M
ceph-deploy mgr create node11 _7 ~& R8 p; ^# ]: G
8 E: I5 o4 Z' C0 T3 a o( X c) D
7 [( P5 s! f- K: s) N7 b6 \7. 添加osd3 q6 c4 N; D! g+ }+ h Y0 U7 M5 d
添加3个OSD。 出于说明的目的,我们假设您在每个节点中都有一个名为/ dev / vdb的未使用磁盘。 确保设备当前未使用且不包含任何重要数据。5 J" t9 D. H9 p% M- r5 R# R
4 k7 |* D ?7 U1 B+ d
复制代码/ }, H# S, ~# n
ceph-deploy osd create -data {device} {ceph-node}
( F& B/ o8 k, y Y% ^9 G& T2 a: v4 B5 M0 s7 a; U5 Y1 i
ceph-deploy osd create --data /dev/sdb node1
/ @. G1 ^. K' _( _5 W7 _6 Pceph-deploy osd create --data /dev/sdb node24 l& d8 x# S# i* a
ceph-deploy osd create --data /dev/sdb node37 n1 ^" e: F! w1 F, Q' g" w( k
% n8 U9 e/ v$ P; w C
注意:如果要在LVM卷上创建OSD,则--data的参数必须是 volume_group/lv_name,而不是卷的块设备的路径。, g4 ^2 Z. ~1 I0 ^
复制代码4 d& y4 h) [& J1 C m6 m& {% g
7 C* u( ~4 }; ?0 m
3 k5 K3 z$ R/ N6 h* u
. Y! n. A6 `$ Y/ P8 K
: j( N# T# \+ ~7 ^
9 _! n( q7 C; s6 l5 M6 M- F g; \4 o% X
8. 健康验证% U& G) A. A' [* p+ K
ssh node1 sudo ceph health
8 ~7 [: @ ?: s' K
, q `9 @/ Q' V- s您的群集应报告HEALTH_OK。 您可以使用以下命令查看更完整的群集状态:
+ ?. @) k8 {8 Q5 ?2 h9 r8 Q& D5 Q6 N) b9 L9 E% D8 n1 ~
ssh node1 sudo ceph -s
% z a) N j( l* W. s. I2 N9 t 查询结果如下:8 e$ D+ I" r0 b6 E9 u0 |
6 I' ]7 s# R: l( y2 {2 S- ~, o9 X$ a
, S+ q2 @7 Z' c! n4 b7 c: }9 l6 I S0 |/ N5 }
, X$ Z* V. ~3 b% R, J6 K* |1 Y% ^/ g, {% `
$ W0 k: Y4 V* J% M) E& s0 _$ o' h( `2 m. m- s4 G# X* I1 |
Step 4. 扩展集群/ Q1 k+ @: G( z3 v
启动并运行基本群集后,下一步是展开群集。 将Ceph元数据服务器添加到node1。 然后将Ceph Monitor和Ceph Manager添加到node2和node3,以提高可靠性和可用性。
9 z ~: X6 Q+ o+ X3 `
' [& a8 E7 r. b6 G) v/ n2 D& I( e4 u6 L
4 H7 @7 g& g2 V* e/ d4 u
对比第一阶段的工作,第二阶段要扩展的是:; E# `9 a# z0 J( \/ ~! j7 r
/ e9 H! h. Q, U2 f4 j; D' s9 _6 O
添加1个metadata server5 J; u; Q' _4 ?4 Y8 ~% B- w% [
添加2个monitor0 n, C l [$ ^) c. A; c% R5 [
添加2个manager' ^8 K# j! w+ {8 N) C6 i4 u
添加1个RGW
+ w" ~/ X! @) n/ U
4 M# I1 t3 O3 g G1 L! L
+ Y$ f! z8 Q- t! o J- H1. 添加一个metadata server
' O& D5 |' _6 j' ?如果要使用CephFS,就必须至少添加一个metadata server.- p, X' A) g& \4 }
0 z2 Z! G( O4 e# _( m1 g
ceph-deploy mds create node10 I+ |& @) ^) F! C/ y
D3 H: O8 l; |6 B2 U6 t4 S, n7 G) ?9 }. n9 j
2. 添加2个monitors,达到3个monitors* Q% x: c: ?. I7 p' Z4 f Z2 R
Ceph存储集群需要至少运行一个Ceph Monitor和Ceph Manager。 为了实现高可用性,Ceph存储集群通常运行多个Ceph监视器,因此单个Ceph监视器的故障不会导致Ceph存储集群崩溃。 Ceph使用Paxos算法,该算法需要大多数监视器(即大于N / 2,其中N是监视器的数量)才能形成法定人数。 虽然这不是必需的,但监视器的数量往往更好。 t& Y2 v1 M3 T7 P' [! _2 d- {
1 r9 j: }: |# H% v+ Wceph-deploy mon add node22 w) F2 k p: b' g9 p* v; H9 K$ j
ceph-deploy mon add node3
1 i& f2 t3 t2 M/ g在添加新的monitor之后,ceph会开始同步这些monitor,并形成一个quorum. 要检查quorum的状态,可运行:4 n$ w" N1 ]( r1 ?( z9 i3 [
2 |6 q: C, f% k2 X# k Xceph quorum_status --format json-pretty/ b" w! Y, Y8 U, x* B
复制代码0 C0 ^5 l# D) s9 H7 T8 z. w
[root@node1 my_cluster]# ceph quorum_status --format json-pretty" Q% _$ M+ }$ O( L& T' `% z
{
5 L2 l- M! \2 b5 \; s "election_epoch": 12,
3 {/ e3 Y1 q" m" ?( c "quorum": [8 j' [0 t0 B# K% {5 A
0,
2 s8 C% t6 u! C$ D4 B) L7 y 1,
4 Q: o# s8 p" q% v( c 2
# u+ J. A2 l5 S8 m ],
+ t6 p* U# B P# Z% `& T6 @ "quorum_names": [, T# E; \# K# V3 g$ M
"node1",; l3 n7 L! o- s; Y' B
"node2",
, M, a% |& H: m3 I% y p6 l "node3"
; ~- c" T; w3 s: y) n+ k ],
% K- t1 Y3 d- l6 E "quorum_leader_name": "node1",+ _, Q7 E. x t" s7 f* I& `8 J
"monmap": { `$ X Z2 J% w: h1 T9 s: S& p
"epoch": 3,
9 ^7 q- A* R& e5 G, Y "fsid": "f314d1c1-b6b9-4060-95b7-c25ec192f612",; A1 J, h n4 k6 r
"modified": "2018-11-13 16:04:02.221558",
; g; f. m8 q+ c; F& ^. G) I- `" R) P "created": "2018-11-13 15:35:34.338001",) V' v9 ^7 y$ S6 R2 ~, W
"features": {' t9 H4 o) C, R9 z5 P# E
"persistent": [3 D! S8 [# E7 E
"kraken",! U* z1 |; X+ } v" Q
"luminous",; W% ]' R5 F a1 Y1 }$ M6 H
"mimic",' O# G2 Y, a7 f1 M0 N6 _
"osdmap-prune"' u1 A1 F# M6 J c7 y8 E+ V( A
],
6 b+ H9 N7 n0 w' [ "optional": []
* \% c' Q9 ~$ `1 T L* s },9 P5 [7 R# E1 ?3 j" Q% p& Y6 h, m5 U" ]
"mons": [
% d4 P4 o: i, D {
! `- ^. {8 @( M% g& { "rank": 0,- |1 q9 _6 w+ A9 C. V
"name": "node1",- \; `( o1 o, N2 p S' k$ ^2 D
"addr": "192.168.1.210:6789/0",. B( G0 D, N5 E2 c6 V# r$ s
"public_addr": "192.168.1.210:6789/0"; `) t W( W" I
},
: ]) `( d' V$ x( J& B, s {* ~- ~2 S! _" [/ z5 S
"rank": 1,$ M" t& F0 a: U
"name": "node2",
& z& I5 \8 P: a4 S" `+ X "addr": "192.168.1.212:6789/0",. O3 Z' l1 j, \7 b3 Q3 p1 v
"public_addr": "192.168.1.212:6789/0"7 H$ f3 H! S ^ H
},3 _9 l' `, V+ c* ]" \
{; Y' i" K* @+ ] O( h ?! x
"rank": 2,( }8 D4 C j& i2 J; F# M! M
"name": "node3",
2 t a$ N( _7 G8 k7 \ "addr": "192.168.1.214:6789/0",
$ n K( ^% Z, V7 V$ ` "public_addr": "192.168.1.214:6789/0"( B1 C& @3 q/ `- O' X* n
}- u; Y7 ?/ X9 ]+ m: K4 ?
]& f7 J4 w. @" ~+ w8 `/ c# |
}4 m1 J# x- w8 o/ r' I4 d
}/ h$ P, q& u5 a& ~1 u5 \
复制代码0 q$ _) j6 Z# J- u3 k
当给Ceph安装多个monitor之后,应该在每个monitor主机上都安装并配置NTP,以保证时间的同步。ntp的配置这里从略,只简单概述一下原理:将2台monitor所在机器配置成向第3台monitor机器做ntp的同步,而第3台monitor上通过crontab来定时调用ntpdate命令向Internet上的ntp时钟源做同步。* j2 _, M( B5 t, g
- O1 A5 o l6 A; U; i2 H: ?
' D- _" H0 @5 ?, T3 o! S+ B5 {
) u+ o# b8 [5 S# C+ H- Q K( [7 a3. 添加2个managers,达到3个managers: t) e4 z: V- C
Ceph Manager daemon工作在active/standby的模式。添加多manager,可以保证如果一个manager或host宕掉,另一个manager可以无缝接管过来。
]1 T# R# N: @: M
% [# e% [2 ]) Sceph-deploy mgr create node2 node3
{+ z5 S, b0 n- c8 Y可以通过ceph -s命令看到active和standby的manager.
* T" s3 a' v8 i6 ?/ h+ X6 o; ]
6 j% N, Y# {- E0 B& P& L! X5 o0 O5 L: k6 U; q
0 e# P# A* |9 E
& P' m6 R/ ~6 W3 b% q' e8 |
8 l6 X$ E6 }0 m# i" X" \: s- b
9 [. K- R0 f7 z$ u& x- V r
2 [/ M! y* e) Q d4. 添加一个RGW实例) W% c% q" W' z2 G- F
要部署Ceph Object Gateway组件,就必须部署一个RGW实例。
0 H) @% y6 s# _% {" _4 n# h1 D% x9 R/ j5 S9 i# h# _9 M" H
ceph-deploy rgw create node12 f8 D6 z2 { L& [" P6 L7 v# t2 q
GW instance监听在7480端口。若需改变端口号,可修改ceph.conf文件。# ^' T' L$ X: @+ S* }
( _- }% ], F! E4 H# \
[client]6 ^* E8 q$ L6 O8 M
rgw frontends = civetweb port=80
/ s6 K) J$ H, ~6 Z若要使用IPv6地址,可以如下修改ceph.conf
$ t r i2 r# b) r
6 A9 W$ R9 B% V1 r C) [5 o[client]
Q5 \+ ~5 w. N" z" `; j4 r- F9 ^2 ergw frontends = civetweb port=[::]:80% O! x1 L' W' i+ W, {
1 J- p% b) A# U$ O
9 }) j' z/ ~& T$ Z$ D: R存储/检索object数据 X' ? u( w4 Y$ E; N* J
要存储object数据,ceph client必须:
" ~! h& Q, E! x) q% }) o- h& F* [2 d1. 设置一个object name / q' R. h# y% H, u. @# O8 ?6 r" u
2. 指定一个pool
$ b, W; ?2 u, l9 E5 r& Q! r6 y( Q @2 K; w3 E8 j1 N
注意: 7 s; ^$ P: G0 }# v; D) ?
关于ceph client,将在下篇博客介绍。
8 | S$ X% H+ L. `
5 I5 P+ N% T, G" ?0 N1 n. dCeph client获取最新的cluster map; 而CRUSH算法计算怎样将一个object对应到一个placement group,然后再怎样将这个palcement group动态赋给一个OSD daemon.
/ p" I @& ` t8 y8 v要找到这个object的位置,可以执行如下命令:
, E( U8 M/ u$ R, y1 ]/ V0 k: M3 p" ]# w7 ]/ I! S1 ?$ G! Z
ceph osd map {poolname} {object-name}
6 R9 B) F- W9 C$ s9 {; _6 i作为练习,让我们创建一个对象。 在命令行上使用rados put命令指定对象名称,包含某些对象数据的测试文件的路径和池名称。 例如:5 P1 r9 N, e( X6 v) X
N( m6 e& {/ C( o, Trados put {object-name} {file-path} --pool=mytest$ a1 c) S8 m0 P% n, E
ceph osd pool create mypool 8 # 8是该pool的PG的数量
, H2 ^) l' \% m- Qecho "Hello, World" > 1.txt4 ^5 e2 f8 m2 y. h& o( N% G
rados put my-obj-1 1.txt --pool=mypool
$ }& o2 A: ?7 i0 S! \# w
' O! S s: P/ \9 w: o' Z检查Ceph集群确实存储了这个object:
/ N9 \) U# M0 M1 Q1 W; k7 W' j# q
rados -p mypool ls
8 h; G5 f0 H# e确定object的位置:
( J, k9 p$ W1 |3 J C# o
- b7 g8 f$ d+ i- cceph osd map {pool-name} {object-name}" Q9 Z! y( ^, ^8 \" R6 S
[root@node1 luxiaodai]# ceph osd map mypool my-obj-1: e) D I$ F, v# |& e
osdmap e26 pool 'mypool' (5) object 'my-obj-1' -> pg 5.ced445fe (5.6) -> up ([0,1,2], p0) acting ([0,1,2], p0)
3 x3 \2 w$ c4 F8 M6 J. c
' n; n8 z5 t( \) r" Q若要删除这个object,可以这样:
* o0 z1 T; {. x$ {+ f8 z8 O( K! R8 A
0 T* B3 o% Y, g; ?5 C+ qrados rm my-obj-1 --pool=mypool
( D: [. q1 Q8 G4 r. h, v8 o如果你要删除池,使用下面命令,出于安全原因,您需要根据提示提供其他参数; 删除池会破坏数据
) ^! z6 x6 K4 J0 O3 d- j
( Y7 F; K: z1 d8 H* M3 Hceph osd pool rm mypool0 W2 \' D" d' P
删除需要修改配置文件,加入红色部分,必须在mon节点上执行
" H# _6 W' h2 o0 @) i) u. B2 `9 c/ w
复制代码' W. K2 Z; ?" f. [. X2 J
[root@node1 my_cluster]# ceph osd pool delete mypool
1 i$ G& S( ?# U& ?0 fError 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.' v b$ N! R( S, A% G, V4 j
[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it
1 o( F$ X) \" w3 S& X* }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
* P0 v& a- D5 R: |8 o[root@node1 my_cluster]# vim /etc/ceph/ceph.conf 1 @7 Y9 ^! Q# B( _5 m1 S/ U
[root@node1 my_cluster]# cat /etc/ceph/ceph.conf 5 S- C2 W6 {3 L) I) W) R; ?
[global]
9 U2 l$ k6 N5 s5 ?: @* h+ ]5 F) Cfsid = f314d1c1-b6b9-4060-95b7-c25ec192f612 D2 s$ t) W' `
mon_initial_members = node1
( u* ~9 G2 K$ L5 r1 dmon_host = 192.168.1.210
j" e1 w+ ]* R+ c) iauth_cluster_required = cephx: r7 y0 p7 E; |
auth_service_required = cephx& @5 F, m6 _# a" A: `4 g2 e
auth_client_required = cephx
1 h! p, K" s- @% U$ K/ Upublic network = 192.168.1.210/249 [2 [) ]' e& _
! x5 a1 q7 l9 U# o, v+ k/ @[mon]' [3 p9 D4 _/ v+ ~3 r# R+ o
mon allow pool delete = true
; ]1 T' G' R+ K/ }[root@node1 my_cluster]# systemctl restart ceph-mon.target
) i2 Q9 [* J1 R1 I/ B* s[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it' u: H; o) d2 X2 T$ C
pool 'mypool' removed; q/ ^* @0 B4 G3 |: X+ q
复制代码
0 |9 G* z8 ^/ d2 l W2 t' |% r现在,集群部署好了,object也能成功创建了,但是却并不利于用户的使用。用户使用存储,一般不直接通过原始的object,而是主要有3种使用方式:7 A, F( @0 p$ o$ a* D; p" N% k
块设备! z8 z. B+ x3 p( e5 a! o$ p% }" f
文件系统 q% H( p9 W1 G& q9 S: C" J( X* M0 _ ]
对象存储(比上述原生的object多了一些封装,常见的有通过S3 API或Swift API进行对象的存取)- ?* S/ B- v( F+ _ B/ j8 U5 F9 i
! \- q. ]" z6 ?
' j9 {+ r9 G3 E7 Z- V
BLOCK DEVICE QUICK START- n# m; V1 @4 _" z3 p) H# q
1. 安装Ceph
0 J$ b4 `3 j$ z5 N首先要确保是Linux kernel以及合适的版本。
. J0 p' y: V6 t- j% d
' o5 Z, W! P0 { P, k& j在admin node上运行以下命令,将Ceph安装到ceph-client node上:8 c" M* ?$ u: r
& A d6 Q/ ]/ n. c% U+ _ M6 `ceph-deploy install host
/ A# b) k0 w0 n然后,运行以下命令将Ceph配置文件和ceph.client.admin.keyring拷贝到ceph-client上。
! ?( I- N) A1 u7 S6 d
) }# g" d6 J/ r- Kceph-deploy admin host( }8 B" k* \7 m7 ?3 z$ x; u6 i5 K
. Y4 e0 f5 {$ O8 j, u' _; M/ d7 m3 O0 U; c, R4 L7 L% N
2. 创建一个块设备的pool
, A. v5 b f8 {2 f( R& h" }在之前的文章中,已经创建了一个叫做mypool的pool,现在需要运行以下命令以使得该pool可以作为RBD使用:
; s4 P; H' b, {% P- Q! ^+ [ S, `7 v5 f9 ]% A: ]* W
rbd pool init mypool) n( }( z7 n& ~" z/ A8 H5 X, x
8 m ]' Q- \) I5 Z% e: f" P: X
3. 配置一个block device(块设备)
9 q, |+ z9 y3 d M; R1.创建一个block device image
/ a3 P, X3 b% Q1 rrbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]- |' v* Y: q- A
rbd create test --pool mypool --size 4096 --image-feature layering -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring
5 B4 ^) I; ]$ R* O8 u8 |- c2 Y- M如要查看所创建的rbd,可以这样:
6 ?$ X" J8 A7 w% Y% h( {' J7 B
2 O A# |3 p+ C# h: ]7 L/ Grbd info test -p mypool! `& d' A( F+ V
结果如下:
{- I/ t+ A. ~# s. m( ?0 X& i8 v2 u& b7 k) m
% y, a; M6 J$ \. f) A2 F6 ?$ w0 B- A/ X* _% e# F
9 m! x) L4 e# K3 ?! {8 Q8 S& K0 O1 ]" v# E
2.map一个block device image
0 I. Z* o: y" H4 \( isudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]" Y9 Y! U) [: e0 h! @; w% L
& | ]; J) |# k/ i& Urbd map mypool/test --name client.admin -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring
# G0 } \3 V! R E y9 i0 y
1 {7 I5 x" C- v h
}1 P# I% B' H# ?) E3.创建一个文件系统并挂载
1 G; W5 |3 m+ T- w8 t# R
, V$ o7 M0 d+ P+ K4 b- ~; m
/ z. _# {) T) N$ Q; l) x3 N注意: 这里的rbd map和mount命令只是当时起作用。若系统重启了,则需要重新手动做。 若要开机自动做 |
|