ceph分布式存储系统

1.环境准备

hostnamectl set-hostname xuegod62.cn
8.2 ceph集群部署实验
主机准备 (禁用selinux, 关闭防火墙)
xuegod63 192.168.1.63 admin,osd, mon作为管理和监控节点
xuegod62 192.168.1.62 osd,mds
xuegod64 192.168.1.64 osd,mds
xuegod65 192.168.1.65 client


[root@xuegod63 ~]# vi /etc/hosts
192.168.1.63 xuegod63
192.168.1.62 xuegod62
192.168.1.64 xuegod64
192.168.1.65 xuegod65

 


SSH免密码登录(所有节点需要操作)
在管理节点使用ssh-keygen 生成ssh keys 发布到各节点

[root@xuegod63 ~]# ssh-keygen #所有的输入选项都直接回车生成。

[root@xuegod63 ~]# ssh-copy-id xuegod63
[root@xuegod63 ~]# ssh-copy-id xuegod62
[root@xuegod63 ~]# ssh-copy-id xuegod64
[root@xuegod63 ~]# ssh-copy-id xuegod65

 

 


yum配置文件(各节点都要配置ceph源)
[

root@xuegod63 ~]# mkdir /etc/yum.repos.d/yum/
[root@xuegod63 ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/yum/
[root@xuegod63 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@xuegod63 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@xuegod63 ~]# vim /etc/yum.repos.d/ceph.repo    #添加如下内容:
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
rm -rf /etc/yum.repos.d/*
scp -r /etc/yum.repos.d/* xuegod64:/etc/yum.repos.d/
scp -r /etc/yum.repos.d/* xuegod62:/etc/yum.repos.d/
scp -r /etc/yum.repos.d/* xuegod65:/etc/yum.repos.d/

[root@xuegod63 ~]# yum clean all
[root@xuegod63 ~]# yum makecache

 

时间同步 如果时间不同步可能重启后 服务会异常

rm /etc/localtime #删除link
ln -vs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #软件link
yum install ntpdate -y
ntpdate time.nist.gov

 

开始安装部署
#xuegod63作管理. osd. mon节点; xuegod62和64作osd mds; xuegod65客户端
前三台服务器增加一块硬盘/dev/sdb实验, 创建目录并挂载到/var/local/osd{0,1,2}

[root@xuegod63 ~]# mkfs.xfs /dev/sdb
[root@xuegod63 ~]# mkdir /var/local/osd{0,1,2}
[root@xuegod63 ~]# mount /dev/sdb /var/local/osd0/

[root@xuegod62 ~]# mkfs.xfs /dev/sdb
[root@xuegod62 ~]# mkdir /var/local/osd{0,1,2}
[root@xuegod62 ~]# mount /dev/sdb /var/local/osd1/

[root@xuegod64 ~]# mkfs.xfs /dev/sdb
[root@xuegod64 ~]# mkdir /var/local/osd{0,1,2}
[root@xuegod64 ~]# mount /dev/sdb /var/local/osd2/

 

 

第二步:更新软件源并安装ceph-deploy 管理工具

[root@xuegod63 ~]# yum -y install ceph-deploy

创建monitor服务
[root@xuegod63 ~]# mkdir /etc/ceph && cd /etc/ceph
[root@xuegod63 ceph]# ceph-deploy new xuegod63 #mon安装在xuegod63节点

 

[root@xuegod63 ceph]# ls #生成配置文件在当前目录下
ceph.conf ceph.log ceph.mon.keyring

Ceph配置文件、一个monitor密钥环和一个日志文件
修改副本数

[root@xuegod63 ceph]# vi ceph.conf #配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,把下面这行加入到[global]段(可选配置)
[global]
fsid = 92f5581d-79d2-4c9f-a523-4965eedc846b
mon_initial_members = xuegod63
mon_host = 192.168.1.63
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2

 


8.2.2 安装ceph
在所有节点上安装:
scp -r /etc/yum.repos.d/* xuegod64:/etc/yum.repos.d/
scp -r /etc/yum.repos.d/* xuegod62:/etc/yum.repos.d/
yum clean all
yum makecache

[root@xuegod63 ceph]# ceph-deploy install xuegod63 xuegod62 xuegod64 xuegod65

 


弹什么错误运行什么命令
(如果网络源安装失败,手工安装epel-release 然后安装yum -y install ceph-release再yum -y install ceph ceph-radosgw)

如果提示
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

可能是网络不好换时间试试

8.2.3 安装ceph monitor

cd /etc/ceph
[root@xuegod63 ceph]# ceph-deploy mon create xuegod63
收集节点的keyring文件
[root@xuegod63 ceph]# ceph-deploy gatherkeys xuegod63

 


8.2.4 部署osd服务
添加osd节点 (所有osd节点执行)
我们实验准备时已经创建目录/var/local/osd{id}
创建激活osd
#创建osd

[root@xuegod63 ceph]# ceph-deploy osd prepare xuegod63:/var/local/osd0 xuegod62:/var/local/osd1 xuegod64:/var/local/osd2

 

[ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
rm -rf /etc/ceph/ceph.conf 删除节点文件重新配置正常

8.2.5 激活osd

[root@xuegod63 ceph]# ceph-deploy osd activate xuegod63:/var/local/osd0 xuegod62:/var/local/osd1 xuegod64:/var/local/osd2

 


如果报错

解决:在各个节点上给/var/local/osd0/、/var/local/osd1/和/var/local/osd2/添加权限
如下:

chmod 777 -R /var/local/osd0/
chmod 777 -R /var/local/osd1/
chmod 777 -R /var/local/osd2/

 

查看状态:

[root@xuegod63 ceph]# ceph-deploy osd list xuegod63 xuegod62 xuegod64

 


统一配置
(用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了)

root@xuegod63 ceph]# ceph-deploy admin xuegod63 xuegod62 xuegod64 xuegod65

 

各节点修改ceph.client.admin.keyring权限:

chmod +r /etc/ceph/ceph.client.admin.keyring

 

查看osd状态
[root@xuegod63 ceph]# ceph health #或 ceph -s

 

部署mds服务

[root@xuegod63 ceph]# ceph-deploy mds create xuegod62 xuegod64 #我们MDS安装2台
[root@xuegod63 ceph]# ceph mds stat #查看状态

 


集群状态


[root@xuegod63 ceph]# ceph -s

以上基本上完成了ceph存储集群的搭建。

 

8.2.6 创建ceph文件系统
[root@xuegod63 ceph]# ceph fs ls #创建之前

 

创建存储池
[root@xuegod63 ceph]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
[root@xuegod63 ceph]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created

 

其中: 128 ,
关于创建存储池
确定 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 命令创建文件系统了

[root@xuegod63 ceph]# ceph fs new 128 cephfs_metadata cephfs_data

 


new fs with metadata pool 2 and data pool 1
其中:<fs_name> = cephfs 可自定义

[root@xuegod63 ceph]# ceph fs ls #查看创建后的cephfs
[root@xuegod63 ceph]# ceph mds stat #查看mds节点状态

active是活跃的,另1个是处于热备份的状态

挂载ceph文件系统

 


8.3 不同挂载方式
8.3.1 内核驱动挂载Ceph文件系统
[root@xuegod65 ceph]# mkdir /opt #创建挂载点
[root@xuegod64 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDNBQFca7UYGxAA6wOfoZR4JWdP5yM56S8DeQ==
# 将key对应的值复制下来保存到文件:/etc/ceph/admin.secret中。

[root@xuegod65 ~]# vim /etc/ceph/admin.secret
AQDNBQFca7UYGxAA6wOfoZR4JWdP5yM56S8DeQ==

挂载
[root@xuegod65 ceph]# mount -t ceph 192.168.1.63:6789:/ /opt -o name=admin,secretfile=/etc/ceph/admin.secret #指定验证文件挂载

取消挂载
[root@xuegod65 ceph]# umount /opt

8.3.2 用户控件挂载Ceph文件系统
安装ceph-fuse
[root@xuegod65 ceph]# yum install -y ceph-fuse
挂载

从客户端拷贝认证文件

scp /etc/ceph/ceph.client.admin.keyring 192.168.1.65:/etc/ceph/ceph.client.admin.keyring 

[root@xuegod65 ceph]# ceph-fuse -m 192.168.1.63:6789 /opt

ceph-fuse -m 192.168.1.63:6789 /opt fuse.ceph defaults 0 0

取消挂载
[root@xuegod65 ceph]# fusermount -u /opt

 


ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

关于其他:
清理机器上的ceph相关配置:
停止所有进程: stop ceph-all
卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]
删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]
删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]
删除key:ceph-deploy forgetkeys

卸载ceph-deploy管理:
yum -y remove ceph-deploy

挂载参考资料
https://blog.csdn.net/wylfengyujiancheng/article/details/81102717


rbd create create test-image --size 10240 --image-format 2 -m 192.168.1.63

 

2.7.1 添加osd节点扩容
# hostnamectl set-hostname node4
# vim /etc/hosts
# systemctl stop firewalld
# iptables -F
# iptables -X
# setenforce 0
# yum install -y ntp
# systemctl start ntpd
# systemctl enable ntpd

时间同步
rm /etc/localtime #删除link
ln -vs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #软件link
yum install ntpdate -y
ntpdate time.nist.gov


准备yum源
#mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/yum/
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
添加ceph源
#vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
#yum clean all
#yum makecache

 

mkfs.xfs /dev/sdb
mkdir /var/local/osd5
mount /dev/sdb /var/local/osd5/
ceph 主节点执行
ssh-copy-id node5
ceph-deploy install node5
ceph-deploy osd prepare node5:/var/local/osd5
ceph-deploy osd activate node5:/var/local/osd5

 

读写速度测试
time dd if=/dev/sda of=/test.out bs=1M count=30 oflag=direct,nonblock time dd if=/dev/mapper/centos-root of=/root/a.txt bs=1M count=50 oflag=direct,nonblock time dd if=/dev/sda of=/opt/a.txt bs=1M count=50 oflag=direct,nonblock

 

time+dd 测磁盘读写速度

1、先熟悉两个特殊的设备及一些相关参数:

1) time有计时作用,dd用于复制,从if读出,写到of;

2) if=/dev/zero(产生字符)不产生IO,因此可以用来测试纯写速度;

3) 同理of=/dev/null(回收站、无底洞)不产生IO,可以用来测试纯读速度;

4) 将/tmp/test拷贝到/var则同时测试了读写速度;

5) bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

当写入到驱动盘的时候,我们简单的从无穷无用字节的源 /dev/zero 读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的 /dev/null。在整个操作过程中, DD 命令会跟踪数据传输的速度并且报告出结果。

2、测试磁盘写能力

time dd if=/dev/zero of=/testw.dbf bs=4k count=100000

因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。命令结尾添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存。
3、测试磁盘读能力

time dd if=/dev/sdb of=/dev/null bs=4k

因为/dev/sdb是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb上,也相当于测试磁盘的读能力。(Ctrl+c终止测试)

4、测试同时读写能力

time dd if=/dev/sdb of=/testrw.dbf bs=4k

在这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb是读,对/testrw.dbf是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。

5、测试纯写入性能

dd if=/dev/zero of=test bs=8k count=10000 oflag=direct

6、测试纯读取性能

dd if=test of=/dev/null bs=8k count=10000 iflag=direct

 

注意:dd 只能提供一个大概的测试结果,而且是连续 I/O 而不是随机 I/O,理论上文件规模越大,测试结果越准确。 同时,iflag/oflag 提供 direct 模式,direct 模式是把写入请求直接封装成 I/O 指令发到磁盘,非 direct 模式只是把数据写入到系统缓存就认为 I/O 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘。(参考链接:http://www.360doc.com/content/15/0906/17/8737500_497292503.shtml

 

操作实例

使用一块“三星 Evo 120G” 的固态硬盘,实验中,把硬盘接在 SATA 2.0 端口上。

1)写入速度

首先让我们写入固态硬盘

$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied,4.82364 s,223 MB/s

1M的大小实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。

2)读取速度

现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。

运行下面的命令来清除内存缓存

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在读取此文件

$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied,3.0114 s,225 MB/s

 报错

too many PGs per OSD

vi /etc/ceph/ceph.conf
mon_pg_warn_max_per_osd = 1000 #修改配置文件重启

 https://www.cnblogs.com/yanwanglol/p/9860202.html

posted @ 2018-12-22 11:13  夜辰雪扬  阅读(422)  评论(0编辑  收藏  举报