cephfs简单部署

一,概述
Ceph是一个分布式存储系统,诞生于2004年,最早致力于开发下一代高性能分布式文件系统的项目。随着云计算的发展,ceph乘上了OpenStack的春风,进而成为了开源社区受关注较高的项目之一。
Ceph有以下优势:

1,CRUSH算法
Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案,转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强大的扩展性,理论上支持数千个存储节点。

2,高可用
Ceph中的数据副本数量可以由管理员自行定义,并可以通过CRUSH算法指定副本的物理存储位置以分隔故障域,支持数据强一致性; ceph可以忍受多种故障场景并自动尝试并行修复。

3,高扩展性
Ceph不同于swift,客户端所有的读写操作都要经过代理节点。一旦集群并发量增大时,代理节点很容易成为单点瓶颈。Ceph本身并没有主控节点,扩展起来比较容易,并且理论上,它的性能会随着磁盘数量的增加而线性增长。

4,特性丰富
Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。三种方式可以一同使用。在国内一些公司的云环境中,通常会采用ceph作为openstack的唯一后端存储来提升数据转发效率。

二,部署

系统:centos7
内核:Linux 3.10.0-693.el7.x86_64
环境:ceph01(172.16.10.181),ceph02(172.16.10.182),ceph03(172.16.10.183)

安装ceph前,将所有的服务器设置成免密互访,并且配置hosts将主机名之间可以互访,同时配置好时间同步,关闭firewalld和selinux.

部署工具:
Ceph官方推出了一个用python写的工具 cpeh-deploy,可以很大的简化ceph集群的配置过程,下面是ceph.repo的配置

[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

在三台主机上安装工具

yum install -y ceph-deploy

创建ceph用户

useradd -d /home/ceph -m ceph        
passwd ceph

同时配置免密码登陆,互访,并给予sudo权限
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph

su - ceph
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub ceph@ceph02
ssh-copy-id -i .ssh/id_rsa.pub ceph@ceph03

使用ssh配置文件
Host ceph01
        Hostname ceph01
        Port 22
        User ceph

Host ceph02
        Hostname ceph02
        Port 22
        User ceph

Host ceph03
        Hostname ceph03
        Port 22
        User ceph

创建存储集群

在ceph01上
su - ceph
mkdir my-cluster 
cd my-cluster 

创建moniter集群
ceph-deploy new ceph01 ceph02 ceph03

配置文件副本数以及网络
vi ceph.conf
[global]
fsid = 666f4515-fcbe-4b01-9664-054485ea4117
mon_initial_members = ceph01, ceph02, ceph03
mon_host = 172.16.10.181,172.16.10.182,172.16.10.183
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
mon_pg_warn_max_per_osd = 1000
osd pool default size = 2 
public network = 172.16.10.0/24
mon clock drift allowed = 2
mon clock drift warn backoff = 30

#osd pool default size = 2  默认副本数为3,这里改为2
#public network = 172.16.10.0/24 网络设置
#mon clock drift allowed = 2    monitor间的clock drift(时钟嘀嗒数?,默认.05s)
#mon clock drift warn backoff = 30  时钟偏移补偿指数(默认5)

#安装ceph

#由于国外访问超级慢这里建议更换成国内的源,清华大学的源很快很稳定
export CEPH_DEPLOY_GPG_URL=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
export CEPH_DEPLOY_REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-jewel/el7/

#执行安装
ceph-deploy install ceph01 ceph02 ceph03

#安装失败可以清楚重装
清除所有软件
ceph-deploy purge ceph-node
清除所有数据,配置文件
ceph-deploy purgedata ceph-node
清除所有keys
ceph-deploy forgetkeys

激活监控节点
ceph-deploy mon create-initial

完成上述操作后,当前目录里应该会出现这些密钥环:
ceph.client.admin.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring

部署osd
#列出ceph01上所有的可用磁盘
ceph-deploy disk list ceph01
#disk zap 自命令删除现有分区表
ceph-deploy disk zap ceph01:sdb
ceph-deploy disk zap ceph02:sdb
ceph-deploy disk zap ceph03:sdb

#osd create 子命令首先准备磁盘(用xfs文件系统格式化磁盘),然后激活磁盘的第一、第二个分区,作为数据分区和日志分区
ceph-deploy osd create ceph01:sdb
ceph-deploy osd create ceph02:sdb
ceph-deploy osd create ceph03:sdb

#查看状态
ceph -s
cluster 710da3e5-61c1-4285-9bf2-45bfa5a88ab0
     health HEALTH_OK
     monmap e2: 3 mons at {ceph01=172.16.10.181:6789/0,ceph02=172.16.10.182:6789/0,ceph03=172.16.10.183:6789/0}
            election epoch 8, quorum 0,1,2 ceph01,ceph02,ceph03
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v26: 64 pgs, 1 pools, 0 bytes data, 0 objects
            100 MB used, 134 GB / 134 GB avail
                  64 active+clean

#健康状态检查
ceph -w
cluster 710da3e5-61c1-4285-9bf2-45bfa5a88ab0
     health HEALTH_OK
     monmap e2: 3 mons at {ceph01=172.16.10.181:6789/0,ceph02=172.16.10.182:6789/0,ceph03=172.16.10.183:6789/0}
            election epoch 8, quorum 0,1,2 ceph01,ceph02,ceph03
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v26: 64 pgs, 1 pools, 0 bytes data, 0 objects
            100 MB used, 134 GB / 134 GB avail
                  64 active+clean

2018-06-29 14:00:00.000167 mon.0 [INF] HEALTH_OK

#Ceph monitor仲裁状态
ceph quorum_status --format json-pretty
{
    "election_epoch": 8,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "ceph01",
        "ceph02",
        "ceph03"
    ],
    "quorum_leader_name": "ceph01",
    "monmap": {
        "epoch": 2,
        "fsid": "710da3e5-61c1-4285-9bf2-45bfa5a88ab0",
        "modified": "2018-06-28 17:54:00.672461",
        "created": "2018-06-28 17:53:44.843991",
        "mons": [
            {
                "rank": 0,
                "name": "ceph01",
                "addr": "172.16.10.181:6789\/0"
            },
            {
                "rank": 1,
                "name": "ceph02",
                "addr": "172.16.10.182:6789\/0"
            },
            {
                "rank": 2,
                "name": "ceph03",
                "addr": "172.16.10.183:6789\/0"
            }
        ]
    }
}

导出monitor信息
ceph mon dump
dumped monmap epoch 2
epoch 2
fsid 710da3e5-61c1-4285-9bf2-45bfa5a88ab0
last_changed 2018-06-28 17:54:00.672461
created 2018-06-28 17:53:44.843991
0: 172.16.10.181:6789/0 mon.ceph01
1: 172.16.10.182:6789/0 mon.ceph02
2: 172.16.10.183:6789/0 mon.ceph03

#检查集群使用状态
ceph df
GLOBAL:
    SIZE     AVAIL     RAW USED     %RAW USED 
    134G      134G         100M          0.07 
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd      0         0         0        65579M           0 

#检查Ceph monitor、OSD和PG(配置组)状态
[ceph@ceph01 ~]$ ceph mon stat
e2: 3 mons at {ceph01=172.16.10.181:6789/0,ceph02=172.16.10.182:6789/0,ceph03=172.16.10.183:6789/0}, election epoch 8, quorum 0,1,2 ceph01,ceph02,ceph03
[ceph@ceph01 ~]$ ceph osd stat
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
[ceph@ceph01 ~]$ ceph pg stat
v26: 64 pgs: 64 active+clean; 0 bytes data, 100 MB used, 134 GB / 134 GB avail

#列表PG
ceph pg dump

#列表Ceph存储池
[ceph@ceph01 ~]$ ceph osd lspools
0 rbd,

#检查OSD的CRUSH map
[ceph@ceph01 ~]$ ceph osd tree
ID WEIGHT  TYPE NAME       UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.13170 root default                                      
-2 0.04390     host ceph01                                   
 0 0.04390         osd.0        up  1.00000          1.00000 
-3 0.04390     host ceph02                                   
 1 0.04390         osd.1        up  1.00000          1.00000 
-4 0.04390     host ceph03                                   
 2 0.04390         osd.2        up  1.00000          1.00000 

#列表集群的认证秘钥
[ceph@ceph01 ~]$ ceph auth list

#创建cephfs

#要运行 Ceph 文件系统,你必须先装起至少带一个 Ceph 元数据服务器的 Ceph 存储集群。我这里让三台服务器全部成为mds的角色
#进入存放ceph集群配置文件的目录
ceph-deploy mds create ceph01 ceph02 ceph03

#查看mds文件
[ceph@ceph01 my-cluster]$ ls /var/lib/ceph/mds/ceph-ceph01/
done  keyring  systemd

[ceph@ceph01 my-cluster]$ ll /var/lib/ceph/osd/ceph-0/
total 48
-rw-r--r--  1 root root  484 Jun 28 17:55 activate.monmap
-rw-r--r--  1 ceph ceph    3 Jun 28 17:55 active
-rw-r--r--  1 ceph ceph   37 Jun 28 17:55 ceph_fsid
drwxr-xr-x 86 ceph ceph 1439 Jun 28 17:56 current
-rw-r--r--  1 ceph ceph   37 Jun 28 17:55 fsid
lrwxrwxrwx  1 ceph ceph   58 Jun 28 17:55 journal -> /dev/disk/by-partuuid/9dc3637d-685b-48ec-81e0-8b87e94343ed
-rw-r--r--  1 ceph ceph   37 Jun 28 17:55 journal_uuid
-rw-------  1 ceph ceph   56 Jun 28 17:55 keyring
-rw-r--r--  1 ceph ceph   21 Jun 28 17:55 magic
-rw-r--r--  1 ceph ceph    6 Jun 28 17:55 ready
-rw-r--r--  1 ceph ceph    4 Jun 28 17:55 store_version
-rw-r--r--  1 ceph ceph   53 Jun 28 17:55 superblock
-rw-r--r--  1 ceph ceph    0 Jun 28 17:56 systemd
-rw-r--r--  1 ceph ceph   10 Jun 28 17:55 type
-rw-r--r--  1 ceph ceph    2 Jun 28 17:55 whoami

可以看到mds实际是存在ceph osd上的

#查看元数据状态,可以看到状态均为待机,这是由于未建立存储池
e4:, 3 up:standby

#创建存储池,一个用于存储metadata另一个用于存储data
ceph osd pool create cephfs_metadata 128
ceph osd pool create cephfs_data 128

#存储池pg_num取值参考
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
*少于 5 个 OSD 时可把 pg_num 设置为 128
*OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
*OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
*OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
*自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

#创建好存储后,使用fs new命令创建文件系统
ceph fs new cephfs cephfs_metadata cephfs_data

#查看状态
[ceph@ceph01 my-cluster]$ ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

#这样一个简单的cephfs系统就创建成功了,挂在cephfs系统

客户端: 
   第一步  创建挂载目录 
        mkdir  /data
   第二步  查看cephfs 秘钥 
   name 和secret 在ceph 的osd 下面目录去获取 
   cat /etc/ceph/ceph.client.admin.keyring

   第三步 mount 文件系统 
   如果有多个监视器:
   mount.ceph monhost1,monhost2,monhost3:/ /mnt/foo
   mount -t ceph  172.16.10.181:6789,172.16.10.182:6789,172.16.10.183:6789:/ /data  -o name=admin,secret=$keys

   第四步 写入fstab 
   172.16.10.181:6789,172.16.10.182:6789,172.16.10.183:6789:/ /data    ceph    name=admin,secret=AQCprj5ZAilVHRAA73bX47zr2fGKpIwgk/DGsA==,noatime,_netdev    0      0


##########################################
ceph-fuse挂在方式
ceph-fuse -c /etc/ceph/ceph.conf /data -o nonempty

 

#下面两个是部署过程中遇到的问题

cluster 666f4515-fcbe-4b01-9664-054485ea4117
health HEALTH_WARN
clock skew detected on mon.ceph03
Monitor clock skew detected
monmap e1: 3 mons at {ceph01=172.16.10.181:6789/0,ceph02=172.16.10.182:6789/0,ceph03=172.16.10.183:6789/0}
election epoch 22, quorum 0,1,2 ceph01,ceph02,ceph03
fsmap e9: 1/1/1 up {0=ceph02=up:active}, 2 up:standby
osdmap e27: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v17474: 1314 pgs, 3 pools, 2048 MB data, 532 objects
4230 MB used, 130 GB / 134 GB avail
1314 active+clean

#在我自己测试过程中,我关闭了其中一台服务器,并未影响ceph运行已经数据完整性,但是当我起来的时候莫名报了下列错误,我查询说是时间服务器不同步,这个我之前设置过,其实同步的,因为用的是内网中的一个ntp服务器,所以几乎不存在不同步的问题,后来查询才发现原来是两个参数的问题

#在ceph.conf中增加下列两个参数,同步到集群的node中,重启服务解决
mon clock drift allowed = 2    monitor间的clock drift(时钟嘀嗒数?,默认.05s)
mon clock drift warn backoff = 30  时钟偏移补偿指数(默认5)

ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03

admin_socket: exception getting command descriptions: [Errno 2] No such file or directory问题解决

#这个问题困扰了一天,后来仔细查看才发现原来,ceph-deploy后面带的主机名,要能找到对应的主机IP,所以做事儿要细心,一步步来.

此条目发表在kubernetes分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注