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