|
|
楼主 |
发表于 2020-12-13 12:06:16
|
显示全部楼层
Step 1.admin node Enable epel (Extra Packages for Enterprise Linux) repository、ceph.repo配置文件
9 E, I4 O1 B) I, f/ d复制代码
8 O. h% ^3 z4 ]+ C( S* C% d* s& x# 认证,但我显示系统证书崩溃,请重新注册,就先跳过了; T" J l, m- Z! C6 f+ M/ X
yum install subscription-manager' b/ k2 i* O8 E4 E
subscription-manager repos --enable=rhel-7-server-extras-rpms
' ]0 K" u+ ]% C
' Z7 Y, n/ y. n# l7 K6 P5 Fyum install -y https://dl.fedoraproject.org/pub ... latest-7.noarch.rpm* X" P$ ]# ~2 @2 ` |1 u" H
安装参考:$ m9 k0 n- v- d6 I3 {
http://www.mamicode.com/info-detail-1287279.html3 M6 A7 b2 v& g, v# B3 ~& X" R
复制代码
$ s/ x5 ?8 O% r9 l 7 f a9 _0 m4 T
7 S" R2 D/ ^1 I8 l* n
文件位于控制节点(即admin node)的 /etc/yum.repos.d/ceph.repo! n) z6 D7 W( f% Z! z/ m+ i
; Y v7 H5 Q! f; E- m复制代码- O5 @- Y/ N! P$ G- H9 T \! u& H
[ceph-noarch]4 u/ E% g( E4 B
name=Ceph noarch packages
; Y& z- N7 k6 D" S# baseurl=https://download.ceph.com/rpm/el7/noarch
, N4 L! Y/ e# ubaseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch" B0 r6 p+ L4 T# S. [& b3 @
enabled=1, m- U- @, A: O
gpgcheck=1
/ Q1 M- U6 {2 }& ntype=rpm-md
9 d" j9 B1 f8 k# gpgkey=https://download.ceph.com/keys/release.asc
8 u; Q1 P8 ~, w0 ]* ~5 q( agpgkey=http://mirrors.163.com/ceph/keys/release.asc
- Y( J0 G& \1 Z% {- Z! Y复制代码2 X/ X; q& {" k7 ~, M( ?) j& v
注意:
" ^1 i* n3 b4 |0 ~8 P" v上面的注释部分,是Ceph官网的写法。但是对于我们国内的安装,这样几乎无法成功,因为下载Ceph太慢了,会导致失败。因此,需要改写repo文件以更新Ceph源。 2 ^* e# _1 ]% {
常用的Ceph镜像是163镜像。但在使用163镜像之后,必须将rpm写成rpm-luminous,这样才会安装ceph-deploy-2.0.0;若只写成rpm,则实际安装的是ceph-deploy-1.5.
& S) V0 W* q2 B: X
6 X5 c: v$ f# H# u- j* c " O3 ~5 c# {: I4 D
' l! p0 E" K. y2 S# p5 KStep 2.admin node安装ceph-deploy
& E- \/ Y5 n% _+ |: syum update
% {6 V! D' F% @' O& K: syum install -y ceph-deploy
/ v, D% @" {( g: c 管理节点必须具有对Ceph节点的无密码SSH访问。 当ceph-deploy以用户身份登录到Ceph节点时,该特定用户必须具有无密码的sudo权限。
& ?9 c0 a* U# J+ x- S z
5 \. j2 x( k8 X
7 U/ i- u0 I$ s w
. H/ n7 F) N. D2 t3 @4 [& hStep 3.每个ceph node 安装ntp和openssh-server9 ~0 J+ g% D% _, l( Z
因为将来拥有monitor的Ceph node需要使用ntp来同步时间,因此需要安装ntp相关工具。而openssh-server也是必须的。, X2 M: K, X6 [+ n# ~5 i5 F1 e
8 ?) }/ T$ E# d! `. j; Y3 f
yum install -y ntp ntpdate ntp-doc
1 O( e" m1 t- H; @yum install -y openssh-server
2 L' A8 m2 P+ `, \5 G: U
+ O8 U3 x( l- f' o4 N4 |. l q% ~, ~
Step 4.每个ceph node创建一个Ceph Deploy用户
: @: i* ~( a. _$ i1 a" L0 t8 v" vceph-deploy实用程序必须以具有无密码sudo权限的用户身份登录到Ceph节点,因为它需要安装软件和配置文件而不提示输入密码。
* ]8 Z' k) \9 T* a% {" E( k1 ~6 r) H
最新版本的ceph-deploy支持--username选项,因此您可以指定任何具有无密码sudo的用户(包括root用户,但不建议这样做)。要使用ceph-deploy --username {username},您指定的用户必须具有对Ceph节点的无密码SSH访问权限,因为ceph-deploy不会提示您输入密码。
- |) B1 A; X# F8 S3 b! N& x1 `0 x' o0 h, P
我们建议在群集中的所有Ceph节点上为ceph-deploy创建特定用户。请不要使用“ceph”作为用户名。群集中的统一用户名可以提高易用性(不是必需的),但是您应该避免使用明显的用户名,因为黑客通常会使用暴力破解(例如root,admin,{productname})。以下过程用{username}替换您定义的用户名,描述了如何使用无密码sudo创建用户。
1 s- D* K5 H' M' h9 S4 g- X
f. w, [& k# [, f' v! a4 _* ~7 i注意:从Infernalis版本开始,“ceph”用户名是为Ceph守护进程保留的。 如果Ceph节点上已存在“ceph”用户,则必须在尝试升级之前删除该用户。
1 g0 N1 U5 D7 w! A3 a* I
2 H, ]- i3 M1 X2 e/ Tuseradd -d /home/luxiaodai -m luxiaodai
7 ?4 ~$ Q3 Z# {3 |passwd luxiaodai(123456)5 n" H, y. S v4 U" p) `
# 给该用户sudo的权限
+ G+ O; Q' G+ }9 S9 ~% Z& e$ S7 g9 cecho "luxiaodai ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/luxiaodai
: |; u" x( }, S' \' S9 jchmod 0440 /etc/sudoers.d/luxiaodai/ v# s; v2 T: ~/ d, d
$ o/ L2 y" b% v1 A3 v! k0 H) [: H
' m4 u9 h% ?# l# E! U3 c, W/ B vStep 5.admin node设置免密和填写 ~/.ssh/config 文件
# j# b! M# [' d. y- \' |设置免密4 B+ |4 D3 @3 ^3 F
# }4 u6 m- x; r% ` j% y
复制代码
4 j7 r* u; w3 u# 生成秘钥
1 e; _. b+ X' \0 q% zssh-keygen
5 R( \" n1 K" |
* |( E9 e: W, B' w# 拷贝到其余节点
0 n4 D c3 m0 D3 f4 h4 yssh-copy-id {username}@node1+ ~" u1 ~) j# b$ f' }: E
ssh-copy-id {username}@node2' _; b: h9 s- U" N5 g
ssh-copy-id {username}@node3$ {1 @. g) w: X2 P9 `& K; c
复制代码* O0 w$ g ^- u# G, ^9 M+ W8 b0 M0 g
~/.ssh/config 这个文件是给ceph-deploy使用的。通过此文件,ceph-deploy可以知道用户名和Ceph node的信息;这样,就不用每次在执行ceph-deploy的时候都指定–username {username}了。用户(luxiaodai)和节点名称(node1等)后面会介绍怎么创建的; L* }4 N: k( ^9 @' w3 E
' x) K; i7 r$ x# D复制代码: B2 b) Z7 t% D5 s+ `% V
Host node1
1 Q; |3 p; H9 C( S- C Hostname node12 I/ S8 T/ M$ n( l S
User luxiaodai
: `! w, o! o2 |. x! t+ BHost node24 W, l- @$ N9 W) W, P/ i1 A% ^
Hostname node28 {1 n4 u) c1 q! P' b
User luxiaodai
4 }. N, B/ i% \! s$ ^( rHost node3, |7 Z! n' K3 M: A
Hostname node3* x6 m6 q! Y& L1 n( \% L0 Y# }
User luxiaodai3 Q. l& ~5 ~" u1 n
复制代码- g& f3 O& c; t' j
关闭防火墙:
8 X9 r% Y5 z4 e4 t% ?+ I$ k* j: G- H, \+ e- ], }, t
linux修改主机名+免密认证+关闭防火墙 ) h. Q: a& j2 p) l# R1 i' y
6 l' m0 x( m5 l5 w& m9 r) e
' w6 ?# m4 _$ ^& R$ x* M* M8 \, s
8 n4 T( x+ C/ Y s" U8 E3 t3 eStep 6.TTY3 B( t5 L. e6 m* u5 n
在CentOS和RHEL上,您可能在尝试执行ceph-deploy命令时收到错误。 如果在您的Ceph节点上默认设置了requiretty,请通过执行sudo visudo并找到Defaults requiretty设置来禁用它。 将其更改为Defaults:ceph!requiretty或将其注释掉以确保ceph-deploy可以使用您创建的用户与创建Ceph部署用户进行连接。4 P4 ]* G. s' N* q7 J) g
# V/ Y+ g9 P* g" a5 K. p
5 o! c/ z8 z- d& G* I9 D7 I) O
8 b# `. I9 A0 f9 @, TStep 7.确保您的包管理器已安装并启用了priority/preferences package。 在CentOS上,您可能需要安装EPEL% {2 V ~9 D, H4 L
yum install yum-plugin-priorities
; L: G4 [* z9 N) U. W1 D. T
: j0 H( ^& t$ C* F) s' f9 `8 |4 a6 a$ z( c/ [& Y
CEPH STORAGE CLUSTER安装
( Z. W8 E/ K! RStep 1. 创建工作目录
# _, d, C* I6 [9 n( y) S; ~( E+ v1 G本步骤在admin node上完成。0 d5 E- O: T- Q5 G
# ]8 f! d7 U3 {# \0 M; `* lmkdir my_cluster
; K% d; t6 c0 Ncd my_cluster
2 s, M& N1 P! ?5 ~. i! O0 N* i6 ]5 _ceph-deploy工具将输出一些文件到这个my-cluster目录。要确保每次运行ceph-deploy命令都是在这个目录下。& q( d, k+ q/ m) P
& _: u- O, v2 R7 k- J
注意: 不要使用sudo来运行ceph-deploy命令,也不要在使用非root用户时以root用户身份运行ceph-deploy命令。因为ceph-deploy不会把sudo命令也发送到远端的ceph node上执行。
* ~1 M! R) w% ]1 ?( {
* ^/ {$ y( o% b' H # S/ ]. i4 G+ V5 M% y
3 I' C# ]; |+ r6 ~
Step 2.环境清理
! t3 J* U0 P# _" V" f在任何时候当你陷入困境希望从头开始部署时,就执行以下的命令以清空Ceph的package以及擦除它的数据和配置:
3 P3 K) e+ B. ?; E7 b
: j: @3 b* U7 T. j4 cceph-deploy purge {ceph-node} [{ceph-node}]
) R1 b y! |4 o7 Wceph-deploy purgedata {ceph-node} [{ceph-node}]
2 w! G. n0 X/ rceph-deploy forgetkeys
& ~2 V/ O3 o* \& h& \4 ` h# urm ceph.*
; b- U, C5 g) t! S7 d$ {这里执行* r2 H: G& r6 R8 X4 s- f% o( Z
# N: ^# w' B; K- Pceph-deploy purge node1 node2 node3+ S5 T- f: M2 T1 p1 b0 O) N' h
ceph-deploy purgedata node1 node2 node31 p# I, S1 F- M, Z* N8 c) K
的时候提示1 ]$ ^ @5 h& i( ]1 X
$ X" v# _4 f# o1 j0 [0 G. _- ~( D RImportError: No module named pkg_resources
4 G( D" A$ S& c* R3 K3 p+ g解决方法:7 A9 M* D! r; }( [! q, P! _ K- v
/ ^; E1 o( W2 {/ D3 i
yum install python-setuptools
8 \8 Z+ `' ]% I* A% M0 a+ X6 K s如果执行purge,则必须重新安装Ceph。 最后一个rm命令删除在先前安装期间由本地ceph-deploy写出的所有文件。
: S0 h* W4 V0 R& t0 S7 J0 K, S
; |5 J, [3 ?) G8 q% k. F* l" x- o F
# G! S8 u6 g1 L* O2 u% F6 ]5 e4 r# n9 f" c8 ^8 r2 u
Step 3. 创建一个集群
$ K8 }/ z/ i( i# @先创建如下图所示的ceph集群,1 monitor + 1 manager + 3 osd daemon 5 E4 x+ `0 K0 s- F# G# @
6 u+ @9 k: J4 y" m+ k B; x
! Q# b/ L! `0 f5 k4 ]
' k: o* }4 b7 N- f0 v' B3 V: |1 B
- \0 a9 |1 j+ I* i. X5 P' M7 E* J6 T8 o' z5 U/ P' L
1.创建& o: t+ `' v" p& p' y. S' v
ceph-deploy new node1
5 m1 j8 ?8 F6 z S这个命令结束后,会在my-cluster目录下看到:ceph.conf, ceph.mon.keyring, log文件
9 c$ n( x0 _& w/ Z) O' r) Y
. M% e, O* m+ w+ V! ]
1 v/ T4 `/ g( ?# d6 V: B3 |! V( R/ i& [
& c6 D& Q: g: c) g
, u/ M: t( v( T8 w$ u: r0 Q, P% k$ B2. 添加public network的配置到ceph.conf
z* b* |) H+ Z4 M添加下面这句话到 ceph.conf 文件的 [global] 段
0 F' _3 U2 @ U% F5 N! r
$ {3 p! J" L! ~! s& Wpublic network = 192.168.1.210/247 `! W5 h8 R/ O: g' l5 R
or& x: i5 {7 T1 o+ l$ T
public network = 192.168.1.210/255.255.255.0, ~: [9 @/ @$ y2 E0 B0 }. O
- T; [; c7 s- O
9 }3 j* a! s K3 K- f O+ d, W/ S
如果要在IPv6环境中部署,请将以下内容添加到本地目录中的ceph.conf:
- |9 ?% ^7 u$ O+ @* G \+ H; r5 C
echo ms bind ipv6 = true >> ceph.conf
' R0 I% U$ A* G! S8 L5 K
) Z) a# I% n( n6 D7 s' n3 T
" W$ n! a/ H6 \- r+ c3. 安装Ceph的packages5 N. C2 K) l6 [2 I
ceph-deploy install node1 node2 node3: i/ p: T0 P9 m& _
安装过程中出现的问题
C; k' S7 g6 Y: n* I& y2 {* O5 l! g6 I8 f6 [% D! G, y
复制代码2 m$ O/ E7 \; L4 c! _% q
# 如果安装一直有问题,清空/etc/yum.repo,然后将yum源换掉:http://mirrors.ustc.edu.cn/help/epel.html: I8 @* B+ S0 ?5 S) Z: P7 N
问题:
9 O; _% {) h( N" }7 ~[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'. {0 h) u9 D9 W* C
解决方法:: H8 ?; q* |8 }1 ^ r( z
yum remove ceph-release9 C' A4 O* W# _" B. F! J
rm /etc/yum.repos.d/ceph.repo.rpmsave
5 ^3 ?$ @" `0 |9 J1 S问题:
/ q4 L; o$ v) r* L5 b[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install ceph ceph-radosgw
" t1 n, O0 [0 s& @. W7 P解决方法:
! C: v2 P, b+ n3 [: P* K# Ryum -y install ceph ceph-radosgw
7 a! u0 \6 ~3 _ceph安装缺少python-werkzeug包( l* G- g4 W- S+ J' \
安装包下载地址:http://rpmfind.net/linux/rpm2htm ... ery=python-werkzeug- Y, ]3 z5 H4 ~; b1 N& [
rpm -ivh python-werkzeug-0.9.1-2.el7.noarch.rpm
- c) G. `; @5 J1 D/ H问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph –version
* x+ r- [; \. u解决:ceph1 安装速度过慢,已经超时了,直接手动安装 yum -y install ceph ceph-radosgw
1 E2 G" B2 `4 n1 M0 j复制代码, p0 M* \+ J8 k8 [
安装成功!!!
; M0 ?3 _- M. [0 U
5 ?, Q/ X, Y, c, O1 O# w! N# T8 ?0 q+ F4 a, a! w5 d* F
$ ^0 j4 h- o+ R4 n) S5 C
0 z b* X# h- ], h3 c, T" J. [+ C. C* @8 J0 u
4. 部署第一个monitor并产生keyring
. S# U! i0 u, I+ r5 Rceph-deploy mon create-initial: d2 U, H3 }) u5 G- k5 `
注意: : ^. v. |, ^/ I3 \: F+ P
若出现类似于”Unable to find /etc/ceph/ceph.client.admin.keyring”这样的错误,则要确定在ceph.conf文件中的mon_host的IP应该是public IP,而不是其他IP.
( r7 x2 e9 L D
% ^( z6 m7 |+ _当这一步结束时,my-cluster目录会出现如下的keyring:. A Y7 q9 t% G& S3 v9 O6 m
* T- i" x- P1 q1 d+ S5 M$ y Z
, k1 H! C( C7 _: `' u
! K$ L6 b! C' I7 j, H
9 \( r) z6 ?/ T4 u1 Z+ C/ F- h/ R9 Y" Y5 S
5. 使用ceph-deploy拷贝配置文件和admin key到ceph nodes.3 L" B: c% b! _1 Z+ {4 A
这样就可以使用ceph CLI来执行命令了,而不用每次都指定monitor的地址和ceph.client.admin.keyring.
4 R$ z5 R k8 q. D0 v( W
8 {6 R$ _! m% x, {ceph-deploy admin node1 node2 node3
* l! o- r9 o. f1 h9 @
, b$ O7 m: v# \9 Z/ q @: o$ K
& a) A8 K9 V6 Q2 ? W% k6. 部署一个manager daemon. (Luminous开始要求的)
$ L* `% P! x# g( F$ a) gceph-deploy mgr create node1
. [ V. h: h* ]- Q ' j5 A" P6 V0 L! X
( B* w" \$ A4 q1 F7 d: c( w7. 添加osd
3 P; L; t* G0 X添加3个OSD。 出于说明的目的,我们假设您在每个节点中都有一个名为/ dev / vdb的未使用磁盘。 确保设备当前未使用且不包含任何重要数据。. H8 |9 u5 A7 l8 A# p& ]
j- k$ s& N( Z, c. Q: F. ~
复制代码
+ u) i8 W5 [' Kceph-deploy osd create -data {device} {ceph-node}
8 A. c% f% }' m: Z, s- ~# k$ B5 J9 n, p, n5 Z" M( V# d4 R
ceph-deploy osd create --data /dev/sdb node11 P) o' y, o! O4 e$ e
ceph-deploy osd create --data /dev/sdb node2+ e( Z D* c# g0 H9 \: g3 X7 C
ceph-deploy osd create --data /dev/sdb node3
# z6 K$ b' V+ P6 j. S: `. B8 F
$ p) \% [7 c5 u( s& g3 T注意:如果要在LVM卷上创建OSD,则--data的参数必须是 volume_group/lv_name,而不是卷的块设备的路径。& |. Q- s# a5 T: p8 H
复制代码8 _/ ?' M+ `; x/ b: H, p5 w. P
( ^3 {% t% s. v; n J$ L9 F8 J" @7 _
# l) I; ~9 ?7 r8 l' I' m
% n8 ^' Y2 V5 [5 [/ b
0 Q' T' [9 d( t8 H; ?' [
$ p u+ \) q5 \' U, p5 J/ p; }; |, `( }0 T, v
8. 健康验证
1 L( q) d$ v# t9 D: Issh node1 sudo ceph health
( x9 [( e! @5 W9 t1 M7 X" S) a% a( t' S: [) |5 Q( d
您的群集应报告HEALTH_OK。 您可以使用以下命令查看更完整的群集状态:
6 Q: U4 U! {! T5 ?1 y) D! T
$ p) r& v# h3 n! kssh node1 sudo ceph -s% A4 s6 |. A2 `. L
查询结果如下:% K/ p! U4 E4 v
3 j7 v$ ^5 i( b2 ]8 Z
) y( M( ?/ x/ C% {; m4 i' R- i! j4 c
) S' \' p0 M$ h4 u! p3 |, D5 j8 ]* ^/ ?0 v: T( T/ F
1 ^2 K \5 c# f1 s/ E0 T4 N U- e+ L! N, X$ b/ ?
Step 4. 扩展集群4 J6 l( `- P# F* n' s9 J0 L
启动并运行基本群集后,下一步是展开群集。 将Ceph元数据服务器添加到node1。 然后将Ceph Monitor和Ceph Manager添加到node2和node3,以提高可靠性和可用性。8 H' r9 b5 Q, r% G7 D) F
3 u3 p3 T# Q% a; o' C5 ~! D) J* J! L3 z% r$ E8 o2 a I
) o, |/ I! ~( w0 f9 F
对比第一阶段的工作,第二阶段要扩展的是:
) B' P& Y: M2 x. u4 e C. X" V% Z3 J. ?" d( w7 y
添加1个metadata server$ {2 m0 I( g$ E
添加2个monitor: ]* C0 a" S" K" X9 ^
添加2个manager
. U' W# e! D5 |2 V; y) K5 _$ I添加1个RGW3 y" A( A. q( ?7 r" q2 b
0 x$ x; Q9 X( T* b
( G% b6 l- W* x
1. 添加一个metadata server7 s) l9 w/ W8 h4 ]" p8 M
如果要使用CephFS,就必须至少添加一个metadata server.( [/ k9 A' |$ w1 A( s
& V7 \& V+ \; \* R0 b& {
ceph-deploy mds create node1
% M1 n8 C' O5 T) q! @ F
/ s( l- }' k( P! N1 ?& j) \0 J
3 Q# W# D7 O8 C; C. [' u2. 添加2个monitors,达到3个monitors7 P( w6 S6 v7 ?5 J! F2 U
Ceph存储集群需要至少运行一个Ceph Monitor和Ceph Manager。 为了实现高可用性,Ceph存储集群通常运行多个Ceph监视器,因此单个Ceph监视器的故障不会导致Ceph存储集群崩溃。 Ceph使用Paxos算法,该算法需要大多数监视器(即大于N / 2,其中N是监视器的数量)才能形成法定人数。 虽然这不是必需的,但监视器的数量往往更好。
, x, M' v& [4 G$ n0 O, p7 F; d$ h. H8 |% G" J
ceph-deploy mon add node2
0 b; Y) F( n6 h* Iceph-deploy mon add node3
3 ]" R; D$ g* o! E4 t0 |) N在添加新的monitor之后,ceph会开始同步这些monitor,并形成一个quorum. 要检查quorum的状态,可运行:
- b" D' B% r9 |" o# o/ |' j0 G
% P+ `& p' [. B( @8 S+ S4 p* Jceph quorum_status --format json-pretty
; z! Y1 ~4 Q. H# {; h. g7 }1 n复制代码
! W6 B# k" x- j% D[root@node1 my_cluster]# ceph quorum_status --format json-pretty
- q+ A0 ?: h, h) E{
& P4 b0 n, a( Q& E b "election_epoch": 12,
8 t( m6 `4 j/ j+ ], U "quorum": [3 S( y. \3 |+ }/ U- J
0,! ]; l i) u$ @8 w6 G6 y0 a
1,% |6 `" e9 X$ k; A
2
1 t" L0 v2 j$ Y6 Q8 u ],
& ]2 x. D) [6 {9 C "quorum_names": [
, ^6 l8 [" t/ O9 x4 h: ~ "node1"," \0 `! k2 ?! B
"node2",
( A K8 l2 s, z "node3"1 ~6 v0 V" k- q O, H8 [
],
' J5 _! W( E3 ?9 j "quorum_leader_name": "node1",/ N3 Y c; F/ |) ]
"monmap": {. W! M2 U& I% W# h. }: u
"epoch": 3,' k. F9 C, {, L A' `! X J. l
"fsid": "f314d1c1-b6b9-4060-95b7-c25ec192f612",$ B4 ^4 G6 v/ x( C& m# h
"modified": "2018-11-13 16:04:02.221558",/ `5 n4 O2 H( q$ g
"created": "2018-11-13 15:35:34.338001",
. }1 v- U, Q0 X; U "features": {! o# {' R1 f( ^! s8 s8 x
"persistent": [
. L: o0 s0 A3 J" ^" b+ d "kraken",/ K5 s6 \1 Z+ K+ X
"luminous",! S5 N8 c0 c( X* I
"mimic",, c9 s0 F8 J6 h# ]
"osdmap-prune"
- L8 P% ?) c/ O$ X ],* G. u. d2 g6 C: u! d
"optional": []
9 W/ `8 h1 G2 e* q7 m },
& O" e% C l) D" M "mons": [6 d/ e, B, F0 Z u% N% J2 U% U
{
' J5 X4 o' X, X "rank": 0,* { g# @. y$ Z" X& q4 G- Q m
"name": "node1",9 C" \% Y% k5 W- c
"addr": "192.168.1.210:6789/0",; G$ q. _( }6 `' v; O# l& z
"public_addr": "192.168.1.210:6789/0"
2 d; ^: y8 r$ ~+ p },
+ P W4 W U% T- o+ B {
. ~* Y( S0 ]) U8 t( _ "rank": 1,. h* v2 i: X3 ?: O) g* A
"name": "node2",
9 S0 I6 \6 g0 o: ^/ E$ J4 K! y8 i "addr": "192.168.1.212:6789/0",. ? l7 ?4 R7 \
"public_addr": "192.168.1.212:6789/0". |( O. m# ?# O' f
},
0 ?; W5 S3 A3 z+ N1 C. v {) Q1 {/ m$ G3 E1 z
"rank": 2,. H* A9 a- L# [3 z- H- r
"name": "node3",9 A7 d5 z3 j6 \" u& X T
"addr": "192.168.1.214:6789/0",6 ?" u2 @8 b. @# Q* Y3 `# L ^: \3 g
"public_addr": "192.168.1.214:6789/0"- Y4 Z8 E& Y$ `/ R8 `0 O/ E
}8 E: s8 Z' u7 h
]1 _3 h6 k$ l* C
}. \; F# E/ A- u4 @
}, ^8 I5 Z5 ~) A3 y4 z
复制代码
5 k4 ?8 K1 y2 _. U& `当给Ceph安装多个monitor之后,应该在每个monitor主机上都安装并配置NTP,以保证时间的同步。ntp的配置这里从略,只简单概述一下原理:将2台monitor所在机器配置成向第3台monitor机器做ntp的同步,而第3台monitor上通过crontab来定时调用ntpdate命令向Internet上的ntp时钟源做同步。; y, \% ]+ b& g& N6 n
5 f' ^& w" n0 O 7 E Z: E; ~- l0 h
3 z) N7 W+ R. U" d% y- g3. 添加2个managers,达到3个managers
& @6 d+ S$ ~9 h7 p! a* FCeph Manager daemon工作在active/standby的模式。添加多manager,可以保证如果一个manager或host宕掉,另一个manager可以无缝接管过来。 Q! O& p. K/ [8 E" s
; y6 W$ e; K" ^( b' ~( U
ceph-deploy mgr create node2 node3- A5 u" V. ~4 t% B. J
可以通过ceph -s命令看到active和standby的manager.* r) i1 G9 V$ c, _3 }/ A
9 q. a1 ?' v3 n8 A1 J6 G. p" V, Q3 ^$ e3 h
! J! W* z- c( b) N; F* y
) j' w0 g5 z5 a: a3 @
0 b2 R- Y, y- h1 Q
+ r% i$ Q2 A: m) |1 s- E6 S! V. q/ b& C. J$ x$ H
4. 添加一个RGW实例
' Q7 e) t9 Z2 @& b$ ~2 r! I7 Y$ O要部署Ceph Object Gateway组件,就必须部署一个RGW实例。
9 F3 q9 s; R* n" g8 I8 }6 `
" Q/ q; x7 ~* ]( _6 }& |ceph-deploy rgw create node1
1 M, j% v* i% e6 T3 ~# k2 x( EGW instance监听在7480端口。若需改变端口号,可修改ceph.conf文件。) F: ]) P1 W' ~
' n5 r7 _. B# L$ C- h. d4 o[client]
9 T; C( \( c& {. u6 \' `rgw frontends = civetweb port=80# n. ?% J; e3 T1 `! }
若要使用IPv6地址,可以如下修改ceph.conf& x2 P* g& i. H* O9 i/ Q
) f( z) d- r3 R5 l3 z+ E' V[client]
% i# G6 K( G0 p) }; lrgw frontends = civetweb port=[::]:808 l: u4 p) E: f: j
0 t- D- y6 ]! z' g5 A3 j5 w { \! N8 ]2 G' G% W
存储/检索object数据
0 B, x8 Q' h! \2 P* g要存储object数据,ceph client必须: + N! V1 T. M) l9 W2 C6 b" Z
1. 设置一个object name 2 I6 p0 P& V! Q, O0 Q# ?! U( m" k
2. 指定一个pool" I, z* H/ {0 O k' k+ w2 d6 l
7 @2 Q, k! x; X
注意: 0 K: C: k! ^1 Y! S e& n
关于ceph client,将在下篇博客介绍。4 e# @: w" k. G V" s7 |+ E
]/ K" X2 s0 X: s2 jCeph client获取最新的cluster map; 而CRUSH算法计算怎样将一个object对应到一个placement group,然后再怎样将这个palcement group动态赋给一个OSD daemon.
# O+ \) y% \# [/ x7 m- t4 a要找到这个object的位置,可以执行如下命令:
0 i6 a8 Y; x: v ~2 u5 J3 t3 h9 R7 d; J* N5 U6 r/ ^
ceph osd map {poolname} {object-name}$ u/ ~7 ^4 l! l
作为练习,让我们创建一个对象。 在命令行上使用rados put命令指定对象名称,包含某些对象数据的测试文件的路径和池名称。 例如:
! C3 G# g4 g/ Z1 W& V. Y' T! M; C1 ^! [- ]
rados put {object-name} {file-path} --pool=mytest
8 R$ P' @- x$ h, T" Qceph osd pool create mypool 8 # 8是该pool的PG的数量3 @! C2 s0 x$ Q" s2 t/ i2 K
echo "Hello, World" > 1.txt4 C, c' X1 z% ^. N/ k
rados put my-obj-1 1.txt --pool=mypool" N8 w! M8 ^9 L: h
" G* m7 `. l& V% q3 t检查Ceph集群确实存储了这个object:
7 F" L4 m0 Z# p( N0 c: B
* m2 f' }) e* `rados -p mypool ls
# g/ U- p7 G% A& V: E确定object的位置:4 h4 @* }4 D( Q) k' `+ Y. _
+ `% E: `4 C( H% ^+ ^5 rceph osd map {pool-name} {object-name}
6 K, ^) z% K8 e- l[root@node1 luxiaodai]# ceph osd map mypool my-obj-1- Q0 }+ o! |- f, D) 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)5 X+ w) j) | U
! C6 I( |4 u+ I. Y) E若要删除这个object,可以这样:
" T8 W! w- O' N- P3 v6 F' z- I+ m
: ^2 ?% [0 J+ l' }; |$ z/ Erados rm my-obj-1 --pool=mypool
% T7 W3 F( K4 t8 M如果你要删除池,使用下面命令,出于安全原因,您需要根据提示提供其他参数; 删除池会破坏数据; m+ B; I& w& S! Z
) O$ Q& H% {# l$ _: N" R) P- uceph osd pool rm mypool! T5 | m# G4 O Z
删除需要修改配置文件,加入红色部分,必须在mon节点上执行: h9 \: w. R; H6 x2 _/ e! W
' V, m# |, D; z复制代码$ C4 A4 D7 X2 \6 E k' ]5 L
[root@node1 my_cluster]# ceph osd pool delete mypool
1 l; P$ X( O5 R: J* y7 }" Q) _7 kError 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) f: Y0 d/ H2 Q* q3 b/ {% C3 H[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it9 m9 d6 z1 H8 F
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- n$ r* B) |, g+ B2 `" w. A( W
[root@node1 my_cluster]# vim /etc/ceph/ceph.conf # {1 t! f/ @0 f: l! l/ ?
[root@node1 my_cluster]# cat /etc/ceph/ceph.conf $ e% C: {( t3 |& v T% v& r
[global]! \, l% O! N7 V# w
fsid = f314d1c1-b6b9-4060-95b7-c25ec192f6122 s% D- a+ Q6 `5 I' ~ t
mon_initial_members = node1
/ d( Q/ B! `6 a7 h+ Wmon_host = 192.168.1.210
# y, Z2 k$ w% K! G6 jauth_cluster_required = cephx
* k1 N+ I7 U2 E* V$ D3 Aauth_service_required = cephx
7 ]# {# P0 b# @" y1 mauth_client_required = cephx; U7 Y7 V1 \4 s0 p
public network = 192.168.1.210/245 G1 L3 y; V3 C7 S: @9 `+ p0 i2 S
8 C% F( ]/ f+ f4 d) y
[mon]
% A) d- o+ }! H. B* P2 M2 d8 Imon allow pool delete = true$ P/ L1 U. v) v: v2 L" j: J
[root@node1 my_cluster]# systemctl restart ceph-mon.target! ^2 q; m# U: q& }) a7 B' d) p4 P K
[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it" Y% Q- B+ ~. W% \. |" H2 k
pool 'mypool' removed% m" O$ o2 ?: R. D. F% J
复制代码+ C% }9 \+ a( Y }
现在,集群部署好了,object也能成功创建了,但是却并不利于用户的使用。用户使用存储,一般不直接通过原始的object,而是主要有3种使用方式:' Y4 y1 [" c5 t: u# A3 S
块设备+ n! S. }3 z8 d" ]
文件系统
$ S* E8 ?) Q% i" D* e$ ^& A对象存储(比上述原生的object多了一些封装,常见的有通过S3 API或Swift API进行对象的存取)
! Q9 ]* W) ?- D7 i4 I7 ^+ t8 L8 {( j
7 m3 G8 n( c/ h& X* @! ^* I
8 V" |1 |2 e6 [ h- |5 y0 W" BBLOCK DEVICE QUICK START
1 F4 G& A' B7 F, T' a8 j- D5 P1. 安装Ceph
# e4 ? o) G1 _" S T3 `8 G首先要确保是Linux kernel以及合适的版本。
, l$ j* A: W0 S M2 B$ y+ j$ @- X, z: R* e+ J/ l, N6 P
在admin node上运行以下命令,将Ceph安装到ceph-client node上:
9 D* d w7 V* D, K$ u+ i2 @" {# B0 H
3 L1 E, y5 { w+ h7 Y9 Y, s) s2 Tceph-deploy install host
9 c$ e4 Z3 [2 }/ R* B2 v# f$ L) H$ X+ {然后,运行以下命令将Ceph配置文件和ceph.client.admin.keyring拷贝到ceph-client上。
0 u* r% F, p& L$ R7 H# Q4 F+ f! c" i0 H8 P: f
ceph-deploy admin host& X f' I C9 X0 j& p3 D
' @5 w5 p7 Z! M. f1 E- d
) F; \( J1 d, g) c3 s2. 创建一个块设备的pool
: d& b. I" n/ n) x: K在之前的文章中,已经创建了一个叫做mypool的pool,现在需要运行以下命令以使得该pool可以作为RBD使用:
0 H9 j4 _( `$ l4 E2 d
! _2 t$ t) J- S4 S: O* Rrbd pool init mypool* s; A3 A; i! y* f7 L* v
6 Y' I: u! a) A& t2 f4 t) I4 w
' p3 F, x6 u: x3. 配置一个block device(块设备). X' w) a7 z' ^) [, }
1.创建一个block device image% F2 A/ t7 b1 c2 g' i4 S
rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
0 M5 h/ ], L8 Erbd create test --pool mypool --size 4096 --image-feature layering -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring/ O' L, f @" z& z1 I7 _, S) m. B
如要查看所创建的rbd,可以这样:: z" d5 K; P$ P0 i6 [
: X! |, ]' t3 w2 S. i4 krbd info test -p mypool
3 S0 i# R( n. r; B. q8 M p! U结果如下:
# F) [9 U0 e9 q7 }6 `+ _
8 Z, I) Q( ] T0 L$ F9 q7 X2 ]" j# k" p. `3 y& G8 j$ Z. o
% Z% z* z( ]1 @ , ]6 J1 ]8 B( T! M2 r
) y, g8 [- ^/ d$ _9 j7 c2.map一个block device image
6 A# o; i7 d. [* nsudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
% W0 C4 u) G0 N8 B) @' _2 J. e
rbd map mypool/test --name client.admin -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring
4 A$ d& D: i9 f
7 e2 q2 n( U I; C* `% g: N' J1 w* w2 x
3.创建一个文件系统并挂载! `& y6 e" c% Y8 d( }# f- ]0 Z
9 F8 ~" X2 C" D0 g
4 G0 S' k! A* P3 v: G9 A5 Z注意: 这里的rbd map和mount命令只是当时起作用。若系统重启了,则需要重新手动做。 若要开机自动做 |
|