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