菜鸟手动部署ceph环境

本人实属菜鸟,不小心跑脚本搞崩了一台服务器。。。学艺不精,难受。。。

话不多说,闯的祸总得弥补和解决~

一、安装ubuntu系统

这个不是此处重点,但是由于本人以前都是在各种大佬的庇护下成长的,所以这种事情也是头一回,还是搞了好一会儿。

可以参照一下两个链接的教程:

https://jingyan.baidu.com/article/bea41d439726c1b4c51be629.html

https://www.linuxidc.com/Linux/2017-11/148341.htm

安装好了虚拟机后,首次登陆设置root密码——sudo passwd,修改成功后,输入命令su root进入root用户。

(1)安装好了系统之后需要手动配置静态IP:

vim /etc/network/interfaces

修改文件内容举例如下:(我的不叫eth0,是enp2s0,输入ifconfig看第一个)

auto eth0
iface eth0 inet static
address 192.168.0.124
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameserver 114.114.114.114

(2)更新主机源,安装相应的包

配置/etc/apt/sources.list,然后更新源,先用echo “ “ > /etc/apt/sources.list清空,然后输入对应的源地址,输入如下:

deb [arch=amd64] http://200.200.212.190/ubuntu/archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse

(3)安装ssh工具,安装完之后可在电脑上远程操作

apt-get install openssh-server   

安装不成功时,需要执行apt-get remove openssh-client

Xshell连接Ubuntu时SSH服务器拒绝了密码问题——vi / etc/ssh/sshd_config 

将PermitRootLogin 后面改为yes

之后重启ssh-server ——sudo /etc/init.d/ssh resarte


(4)安装vim工具:apt-get install vim

(5)安装ceph环境

  • 增加ceph源,在  /etc/apt/sources.list 中加入以下内容:
deb [arch=amd64]  http://200.200.212.190/ubuntu/archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb [arch=amd64]  http://200.200.212.190/ubuntu/archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://200.200.212.190/ubuntu/archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://200.200.212.190/ubuntu/archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://200.200.212.190/ubuntu/archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb [arch=amd64] http://200.200.212.190/ubuntu/release/Ubuntu/ xenial main
deb-src http://200.200.212.190/ubuntu/release/Ubuntu/ xenial main

二、Ceph集群部署

输出内容——ceph version 12.2.4 (52085d5249a80c5f5121a76d6288429f35e4e77b) luminous (stable)  

  • 更新源 apt-get update
  • 执行安装命令apt-get install ceph --allow-unauthenticated
  • 查看ceph版本确认是否正常安装ceph:ceph --version 

 1、创建用户

在运行 ceph 守护进程的节点上创建一个普通用户

  • useradd ceph -d /home/ceph -m  ——创建的时候可能会显示用户已存在,因为Ubuntu系统自带ceph用户,可以直接用该用户
  • passwd ceph——更改ceph用户密码

2、设置host,添加节点对应的ip

  • vim /etc/hostname ——更改主机名(如node1)
  • vim /etc/hosts

  如:200.200.102.140 node1

3、给集群分配唯一uuid

uuidgen
输出如:bda28ad8-b3e8-452c-bdab-65e114a19567,记下来,下一步要用

4、创建 ceph 配置文件, ceph 默认使用 ceph.conf ,其中的 ceph 是集群名字

vim /etc/ceph/ceph.conf
将步骤2生成的唯一uuid写入配置文件
fsid = {UUID}
如:fsid=bda28ad8-b3e8-452c-bdab-65e114a19567

5、把初始监视器写入ceph配置文件

mon initial members = {hostname}[,{hostname}]
例如:mon initial members = node1

6、把初始监视器的 IP 地址写入 ceph 配置文件、并保存

mon host = {ip-address}[,{ip-address}]
例如:mon host = 200.200.102.140

以上三步完成后就保存ceph 配置文件并退出。

7、为此集群创建密钥环、并生成监视器密钥

ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

ceph-authtool命令
功能描述:ceph的密钥环操作工具
概要:
ceph-authtool keyringfile

  • [ -l | --list ]
  • [ -p | --print-key ]
  • [ -C | --create-keyring ]
  • [ -g | --gen-key ]
  • [ --gen-print-key ]
  • [ --import-keyring otherkeyringfile ]
  • [ -n | --name entityname ]
  • [ -u | --set-uid auid ]
  • [ -a | --add-key base64_key ]
  • [ --cap subsystem capability ]
  • [ --caps capfile ]

选项说明:

  • -l, --list列出keyring文件中的所有keys和capabilities
  • -p, --print-key  打印指定的实体的编码后的key
  • -C, --create-keyring   创建密钥环,如果密钥环存在,则重写
  • -g, --gen-key    为指定的实体生成密钥  
  • --import-keyring FILE   要被导入的密钥环文件
  •  -n 指定操作的实体名称,格式为type.id,type的有效类型有:auth,mon,osd,mds,mgr,client等。
  •  -u, --set-uid *auid* 设置实体的auid,即认证用户的user id
  • -a BASE64, --add-key BASE64 添加编码后的key到keyring中
  • --cap  *subsystem* *capability*  设置子系统支持的capability
  •  --caps *capsfile* 设置所有子系统关联的key的所有功能。

capability:
ceph的子系统有: mon,mds,osd,mgr
capability是对给定用户允许做哪些操作的一个描述。采用逗号分隔的形式,包含一个或多个rwx权限说明符的allow子句列表。 allow * 授予给定的子系统超级用户的权限.
例如:
      osd = "allow rwx"  允许读写和执行
     mds = "allow"   允许进入
     mon = "allow rwx"   允许修改集群状态
     librados 用户对单个池的严格限制:
          mon = "allow r"
          osd = "allow rw pool foo"
客户端使用rbd,访问一个池,并且读写另外一个池:
mon = "allow r"
osd = "allow class-read object_prefix  rbd_children, allow pool templates r class-read, allow pool vms rwx"
客户端使用最小权限挂载文件系统:
mds = "allow"
osd = "allow rw pool data"
mon = "allow r"
OSD CAPABILITIES
通常,osd 的功能遵循下面语法:
          osdcap  := grant[,grant...]
          grant   := allow (match capspec | capspec match)
          match   := [pool[=]<poolname> | object_prefix <prefix>]
          capspec := * | [r][w][x] [class-read] [class-write]
capspec 取决于实体可以执行的操作类型:
r  = 读对象
w = 写对象
x = 能调用任何类方法
class-read  = 能调用类中的读方法
class-write = 能调用类中的写方法
* = 等价于rwx,再加上执行osd admin命令的权限。比如ceph osd tell

CAPS 文件格式
Caps 文件格式,包含零个或多个key/value对,每行一个.key和值通过’=’分隔,如果值包含空格,则必须使用单引号或者双引号引用。Key是ceph子系统的名称,而值是capability的字符串值.

8、生成管理员密钥环,生成 client.admin 用户并加入密钥环

ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' --cap mgr 'allow *'

9、把 client.admin 密钥加入 ceph.mon.keyring

ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

10、用规划好的主机名、对应 IP 地址、和 FSID 生成一个监视器图,并保存为 /tmp/monmap

monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap

例如:monmaptool --create --add node1 200.200.102.140:6789 --fsid bda28ad8-b3e8-452c-bdab-65e114a19567 /tmp/monmap

注意:{hostname} {ip-address} --fsid {uuid} 这一步的填写。

11、在监视器主机上分别创建数据目录

sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
例如:sudo mkdir /var/lib/ceph/mon/ceph-node1

12、用监视器图和密钥环组装守护进程所需的初始数据

ceph-mon [--cluster {cluster-name}] --mkfs -i {monid} --keyring /tmp/ceph.mon.keyring

例如:ceph-mon --mkfs -i node1 --keyring /tmp/ceph.mon.keyring

ceph-mon
功能描述:ceph 监视器的守护。
概要:
ceph-mon -i monid [ --mon-data mondatapath ]
选项:

  •  -f, --foreground 启动后不用守护进程。不生成pid文件。在执行ceph-run时很有用
  • -d  debug模式运行。类似-f,但会发送所有的日志输出到stderr中
  • --setuser userorgid 启动后设置用户uid.如果指定了用户名称,则查找用户记录以获得uid和gid,并且gid也会被设置,除非通过--setgroup显式设置了gid
  • --setgroup grouporgid 启动后设置gid.如果指定了组名称,则查找组记录以获得gid
  • -c ceph.conf, --conf=ceph.conf 使用ceph.conf配置文件,代替默认的/etc/ceph/ceph.conf,用于在启动过程中决定监视器的地址
  • --keyring  指定密钥环,与--mkfs一起使用
  • --mkfs   初始监视器数据目录,通过给定的种子信息生成并初始ceph的文件系统,或者将监视器加入已存在的监视器集群.

 以下三个信息必须提供:

  • 集群的fsid. 通过指定的 --monmap<path>获得,获得显式的通过 --fsid<uuid>指明.
  • 监视器列表和它们的的地址。监视器列表可以来源于 --monmap文件,地址来源于ceph.conf的mon host配置,或者mon addr配置。如果该监视器是新集群的初始监视器,那么它必须包含在ceph.conf的initial 列表中,name或者address必须同配置之后的列表匹配。
  • 监视器的mon 密钥。 通过--keyring<path>提供

 monid 一般设置为主机的hostname,且必须与第10步中的monmaptool中的name一致,不然会发现执行了该命令之后,数据目录中缺少keyring文件.

13、修改监视器主机数据目录的属主为ceph

chown -R ceph.ceph /var/lib/ceph/mon/ceph-node1

因为ceph-mon守护进程默认以ceph用户运行

14、完善ceph配置文件

vim /etc/ceph/ceph.conf

添加以下内容:

单机部署时,设置osd_crush_chooseleaf_type = 0
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_crush_chooseleaf_type = 1
osd_pool_default_size = 1
osd_journal_size = 100

15、启动监视器

通过服务方式启动——systemctl start ceph-mon@{monid}l
例如:systemctl start ceph-mon@node1


以上步骤创建了monitor,下面将要创建OSD。

三、创建OSD

以下的配置及操作,都假设我们只有两个OSD

1. 硬盘分区

首先确认你的系统有两块与系统无关的磁盘,如果没有,对于虚拟机来讲可以进行添加磁盘。

使用命令lsblk查看磁盘情况

假设你的硬盘sdb有100G,那么

 如上操作就能把该硬盘划分为不同大小的四块盘,可以按照自己的需求划分。

  •  parted -s /dev/sdb mklabel gpt
  •  parted -s /dev/sdb mkpart primary 1 20G
  •  parted -s /dev/sdb mkpart primary 20G 50G
  •  parted -s /dev/sdb mkpart primary 50G 80G
  •  parted -s /dev/sdb mkpart primary 80G 100G

2.配置ceph.conf

红色表示根据osd服务器实际情况修改内容.

  • db path为rocksdb 存放数据的位置
  • wal path 为rocksdb的原子操作位置
  • block path 为实际数据存放的位置

而我们留下的第一个分区 /dev/sdb1  、/dev/sdc1 做为osd的元数据存放位置,里面存放osd的keying,whoami等校验文件。

将以下内容加入到/etc/ceph/ceph.conf中:

[osd]
osd mkfs type = xfs
osd data =/var/lib/ceph/osd/$cluster-$id
osd objectstore = bluestore
bluestore fsck on mount = true
bluestore block create = true
bluestore block db size =48864
bluestore block db create = true
bluestore block wal size =1300000
bluestore block wal create =true
[osd.0]
host = node1
bluestore block db path = /dev/sdb2
bluestore block wal path = /dev/sdb3
bluestore block path = /dev/sdb4
[osd.1]
host = node1
bluestore block db path = /dev/sdc2
bluestore block wal path = /dev/sdc3
bluestore block path = /dev/sdc4

3.创建osd的元数据目录

mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdc1

mkdir -p /var/lib/ceph/osd/ceph-0
mkdir -p /var/lib/ceph/osd/ceph-1

mount /dev/sdb1    /var/lib/ceph/osd/ceph-0
mount /dev/sdc1  /var/lib/ceph/osd/ceph-1

4.OSD

(1)创建osd——ceph osd create

这一步可能会遇到错误:Cluster connection interrupted or timed out

这是因为没有开启服务,可以查看monitor——ps -elf|grep ceph-mon

解决方法——systemctl start ceph-mon@node1

systemctl命令是系统服务管理器指令

(2)创建osd的元数据

sudo ceph-osd -i 0  --mkfs  --mkkey

注意,这里如果你要创建两个osd则需要执行两次ceph osd create ,如下:

ceph osd create
sudo ceph-osd -i 0  --mkfs  --mkkey
ceph osd create
sudo ceph-osd -i 1  --mkfs  --mkkey

正常输出如下:

2018-07-22 21:32:19.753081 7effffb2de00 -1 auth: error reading file: /var/lib/ceph/osd/ceph-0/keyring: can't open /var/lib/ceph/osd/ceph-0/keyring: (2) No such file or directory
2018-07-22 21:32:19.818500 7effffb2de00 -1 created new key in keyring /var/lib/ceph/osd/ceph-0/keyring
2018-07-22 21:32:19.982231 7effffb2de00 -1 bluestore(/var/lib/ceph/osd/ceph-0/block) _read_bdev_label failed to open /var/lib/ceph/osd/ceph-0/block: (2) No such file or directory
2018-07-22 21:32:19.982268 7effffb2de00 -1 bluestore(/var/lib/ceph/osd/ceph-0/block) _read_bdev_label failed to open /var/lib/ceph/osd/ceph-0/block: (2) No such file or directory
2018-07-22 21:32:19.982284 7effffb2de00 -1 bluestore(/var/lib/ceph/osd/ceph-0/block) _read_bdev_label failed to open /var/lib/ceph/osd/ceph-0/block: (2) No such file or directory
2018-07-22 21:32:20.350831 7effffb2de00 -1 bluestore(/var/lib/ceph/osd/ceph-0) _read_fsid unparsable uuid 
2018-07-22 21:32:30.398186 7effffb2de00 -1 created object store /var/lib/ceph/osd/ceph-0 for osd.0 fsid 43bf26f8-4038-4d89-9d24-5181ad5490aa

(3)注册osd 密钥,osd的keyring路径取决于元数据的存储路径

有两个osd则输入两次命令,注意修改osd的osdnum  :

sudo ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring
sudo ceph auth add osd.1 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-1/keyring

(4)把此osd节点加入CRUSH map

sudo ceph osd crush add-bucket  node1  host

(5)把host加到crush map的根节点root

sudo ceph osd crush move node1 root=default

(6)把osd加到crush map的host中,将此osd节点作为主机的一个条目、分配权重、重新编译、注入集群

root@node1:/etc/ceph# ceph osd crush add osd.1 1.0 host=node1 
输出:add item id 2 name 'osd.1' weight 1 at location {host=node1} to crush map

(7)修改osd数据目录和磁盘分区的属主

chown -R ceph.ceph /var/lib/ceph/osd/ceph-0
chown ceph /dev/sdb2
chown ceph /dev/sdb3
chown ceph /dev/sdb4

(8)启动osd

服务器启动——service ceph-osd@0 start

手动启动——ceph-osd -i {osdnumber}    例如:ceph-osd -i 0

 

5.MDS

(1)创建mds工作目录——mkdir -p /var/lib/ceph/mds/ceph-node1

(2)2.注册mds的密钥。{$id} 是 MDS 的标识字母

ceph auth get-or-create mds.node1 mds 'allow *' osd 'allow rwx'  mon   'allow profile mds'  -o  /var/lib/ceph/mds/ceph-node1/keyring

(3)启动mds进程

服务器启动——service ceph-mds@node1 start

手动启动——ceph-mds  --cluster ceph --id node1 --setuser ceph --setgroup ceph

6. Pool

1、创建pool

ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] \
        [crush-ruleset-name] [expected-num-objects]
ceph osd pool create {pool-name} {pg-num}  {pgp-num}   [erasure] \
        [erasure-code-profile] [crush-ruleset-name] [expected_num_objects]

例如:
ceph osd pool create fsdata 128 128
ceph osd pool create fsmetadata 128 128

参数说明:

  • pool-name  存储池名称,必须唯一;string;必需
  • pg-num  存储池拥有的归置组总数;整型;必需
  • pgp-num  用于归置的归置组总数;整型;必需
  • {replicated|erasure}   存储池类型,可以是副本(保存多份对象副本,以便从丢失的 OSD 恢复)或纠删(获得类似 RAID5 的功能);string;非必需
  • crush-ruleset-name  此存储池所用的 CRUSH 规则集名字。指定的规则集必须存在;string; 非必需
  • erasure-code-profile=profile  仅用于纠删存储池。指定纠删码配置框架,此配置必须已由 osd erasure-code-profile set 定义;string;非必需
  • expected-num-objects  为这个存储池预估的对象数。设置此值(要同时把 filestore merge threshold 设置为负数)后,在创建存储池时就会拆分 PG 文件夹,以免运行时拆分文件夹导致延时增大;整型;非必需

 7. 创建ceph文件系统

       一个ceph文件系统需要至少两个rados存储池,一个用于数据,一个用于元数据。创建好存储池后,就可以用fs new命令创建文件系统了:

 ceph fs new <fs_name> <metadata> <data>
例如:ceph fs new  cephfs  fsmetadata  fsdata

 文件系统创建完毕后, MDS 服务器就能达到 active 状态了,比如在一个单 MDS 系统中:

$ ceph mds stat
e5: 1/1/1 up {0=a=up:active}

创建好文件系统且 MDS 活跃后,就可以挂载此文件系统。

8. 把ceph FS挂载为FUSE

单节点不用挂载,直接执行如下操作:

使用ceph-fuse命令挂载ceph文件系统作为客户机的用户空间文件系统。
sudo mkdir /home/usernname/cephfs
sudo ceph-fuse -m 200.200.102.140:6789 /home/username/cephfs

注意,这里的username是你的主机名,可以cd home看一下

9.mgr

(1)创建mgr的数据目录.{$id} 是 mgr 的标识字母

mkdir -p /var/lib/ceph/mgr/ceph-{$id}
例如:mkdir -p /var/lib/ceph/mgr/ceph-node1

(2)创建密钥

ceph auth get-or-create mgr.node1 mon 'allow *'  osd  'allow *' mds  'allow *' -o /var/lib/ceph/mgr/ceph-node1/keyring

(3)启动mgr进程

服务方式启动:
systemctl start ceph-mgr@{id}
例如:systemctl start ceph-mgr@node1
进程启动:
ceph-mgr -i {$id}
例如:ceph-mgr -i node1

以上步骤全部搞定之后,执行ceph -s,正常情况下会出现如下内容:

root@node1:~# ceph -s
  cluster:
    id:     43bf26f8-4038-4d89-9d24-5181ad5490aa
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum node1
    mgr: node2(active), standbys: node1
    mds: cephfs-1/1/1 up  {0=node1=up:active}
    osd: 2 osds: 2 up, 2 in
 
  data:
    pools:   2 pools, 256 pgs
    objects: 21 objects, 2246 bytes
    usage:   35470 MB used, 102 GB / 136 GB avail
    pgs:     256 active+clean

猜你喜欢

转载自blog.csdn.net/u012114090/article/details/81125795