无论你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,仍是想部署一个 Ceph 文件系统或者把 Ceph 做为他用,全部 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少须要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必需要有元数据服务器( Metadata Server )。html
Ceph 把客户端数据保存为存储池内的对象。经过使用 CRUSH 算法, Ceph 能够计算出哪一个归置组(PG)应该持有指定的对象(Object),而后进一步计算出哪一个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群可以动态地伸缩、再均衡和修复。node
Ceph消除了对系统单一中心节点的依赖,从而实现可真正的无中心节点结果的设计思想,这种设计思想是其余分布式存储系统所不能相比的。python
Ceph之因此能那么火,与OpenStack有莫大的关系;OpenStack是目前比较流行的开源云管理平台;OpenStack与Ceph的集成已成为开源云平台的标配。linux
Ceph中文文档,请参考连接:算法
http://docs.ceph.org.cn/start/intro/ubuntu
高可用性指的是系统某个组件失效后,系统依然能够提供正常的服务的功能。能够采用设备部件和数据冗余来提升可靠性。在Ceph集群中可经过数据多副本、纠删码这两种方式提供数据冗余。bash
可线性扩展指的是能够灵活的应对集群伸缩。这里能够指两方面:服务器
一、指集群的存储容量能够伸缩、能够任意添加、删除存储节点和存储设备;网络
二、指系统的性能随集群的扩充而线性增长。架构
Ceph能够提供对象存储、块设备存储和文件系统存储,其对象存储能够对接网盘应用业务;其块设备能够对接IaaS云平台软件。IaaS云平台软件包括:OpenStack、CloudStack、Zstack等;其文件系统存储目前还未成熟,官方不建议在生产环境中使用。
Ceph正处于持续开发、快速发展中。debian系列,发行了9个版本。分别是firefly,giant,hammer,infernalis,jewel,kraken,luminous,mimic,testing。
访问下载网站:
就能够到对应的版本中,下载你须要的软件包。
本文所使用的是jewel版本,也称之为候选版本!
本文所用的环境和具体节点配置以下:
操做系统 | 主机名 | IP地址 | 功能 |
ubuntu-16.04.5-server-amd64 | jqb-node128 | 192.168.91.128 | MDS,MON,OSDS |
ubuntu-16.04.5-server-amd64 | jqb-node129 | 192.168.91.129 | MON,OSDS |
ubuntu-16.04.5-server-amd64 | jqb-node131 | 192.168.91.131 | MON,OSDS |
因为官方要求:至少须要一个 Ceph Monitor 和两个 OSD 守护进程。
因此使用了3台服务器来安装ceph集群。
注意mds只有一台
注意:3台Ubuntu系统,须要启动root帐户登陆。
接下来的操做,都是以root用户执行的!
这个很是重要,决定ceph搭建成败就在这里,务必注意!!!
我踩了不少坑,说多了都是泪...!下面说具体操做!
登陆3台服务器,查看主机名
cat /etc/hostname
若是输出不是上面表格中的主机名,请务必修改!
修改完成以后,必需要重启服务器才行!
因为这里并无使用私有的DNS,因此直接用hosts文件来强制解析。
务必保证3台服务器的hosts文件有以下3条记录
192.168.91.128 jqb-node128 192.168.91.129 jqb-node129 192.168.91.131 jqb-node131
因为默认的更新源太慢了,调整为阿里云的更新源
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse
添加 release key
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
添加Ceph软件包源,用Ceph稳定版(如 cuttlefish 、 dumpling 、 emperor 、 firefly 等等)替换掉 {ceph-stable-release}
deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main
ceph-stable-release 我选择的是jewel版本
那么在ubuntu服务器上面执行命令
echo "deb http://download.ceph.com/debian-jewel/ $(lsb_release -sc) main"
就能够获得结果:
deb http://download.ceph.com/debian-jewel/ xenial main
将这条信息写入/etc/apt/sources.list中,那么文件sources.list完整内容以下:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse deb http://download.ceph.com/debian-jewel/ xenial main
请保证3台服务器的/etc/apt/sources.list是一致的
更新系统更新源,3台服务器执行如下命令
apt-get clean
apt-get update
务必保证3台服务器的时区是同样的,强制更改时区为上海,执行如下命令
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime bash -c "echo 'Asia/Shanghai' > /etc/timezone"
安装ntpdate
apt-get install -y ntpdate
使用阿里云的时间服务器更新
ntpdate ntp1.aliyun.com
3台服务器都执行一下,确保时间一致!
Ceph 经过radosgw提供RESTFul HTTP API接口支持对象存储能力,radosgw本质上是一个客户端程序,提供FastCGI 服务
apt-get install -y radosgw --allow-unauthenticated
配置apt容许以 HTTPS方式拉取镜像安装
apt-get install -y apt-transport-https --allow-unauthenticated
安装ceph相关包
apt-get install -y ceph-base ceph-common ceph-fs-common ceph-fuse ceph-mds ceph-mon ceph-osd --allow-unauthenticated
以上,都是3台服务器,都须要执行的!
如下操做都是在jqb-node128进行的,登陆到jqb-node128服务器
安装 ceph-deploy
apt-get install -y ceph-deploy --allow-unauthenticated
修改https为http
sed -i -e "28s/https/http/g" /usr/lib/python2.7/dist-packages/ceph_deploy/hosts/debian/install.py
生成秘钥,并写入到authorized_keys
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
节点之间的用户认证,是采用ssh方式的。务必要设置ssh免密登陆!
执行如下3个命令
ssh-copy-id jqb-node128 ssh-copy-id jqb-node129 ssh-copy-id jqb-node131
它会在远程主机写入文件 ~/.ssh/authorized_keys
ssh jqb-node128 exit ssh jqb-node129 exit ssh jqb-node131 exit
请确保以上3个命令,不须要输入密码
建立配置文件目录
cd /opt mkdir -p cephinstall cd cephinstall
先定义几个常量
MDS="jqb-node128" MON="jqb-node128 jqb-node129 jqb-node131" OSDS="jqb-node128 jqb-node129 jqb-node131" INST="$OSDS $MON"
INST表示要安装的节点
用 ceph-deploy 命令经过定义监控节点 ,建立一个新集群。
ceph-deploy new $MON
执行以后,它会在当前目录生成文件ceph.conf
修改配置文件ceph.conf
echo "osd pool default size = 2 osd max object name len = 256 osd max object namespace len = 64 mon_pg_warn_max_per_osd = 2000 mon clock drift allowed = 30 mon clock drift warn backoff = 30 rbd cache writethrough until flush = false" >> ceph.conf
安装 Ceph 到全部节点
ceph-deploy install $INST
部署监控节点
ceph-deploy mon create-initial
仔细观察输出内容,请确保没有error错误!
这里将/data/ceph/osd目录,用来存储数据
for i in $OSDS; do echo $i ssh $i 'mkdir -p /data/ceph/osd' ssh $i 'ln -snf /data/ceph/osd /var/lib/ceph/osd' ceph-deploy osd prepare $i:/data/ceph/osd # success indicator: Host xxx is now ready for osd use done
for i in $OSDS; do echo $i ssh $i 'chown -R ceph:ceph /var/lib/ceph/' ssh $i 'chown -R ceph:ceph /data/ceph/' ceph-deploy osd activate $i:/data/ceph/osd #fix problem "socket /com/ubuntu/upstart: Connection refused" ssh $i 'dpkg-divert --local --rename --add /sbin/initctl' ssh $i 'ln -snf /bin/true /sbin/initctl' ssh $i 'rm -f /etc/apt/sources.list.d/ceph.list' ssh $i 'modprobe ceph' done
部署管理密钥到全部关联节点
ceph-deploy admin $MDS
查看节点信息
ssh $MDS "ceph osd tree"
查看验证秘钥
ssh $MDS "ceph auth get-key client.admin | base64" ssh $MDS "mkdir -p /var/lib/ceph/mds/ceph-$MDS" ssh $MDS "chown -R ceph:ceph /var/lib/ceph"
一般在建立pool以前,须要覆盖默认的pg_num
,官方推荐:
ssh $MDS ceph osd pool create fs_db_data 512 ssh $MDS ceph osd pool create fs_db_metadata 512
查看pool
ceph osd lspools
ssh $MDS ceph fs new cephfs fs_db_metadata fs_db_data
查看Cephfs
ssh $MDS ceph fs ls
ceph-deploy --overwrite-conf mds create $MDS
# 挂载须要的验证秘钥 MOUNTKEY=`ssh $MDS "ceph auth get-key client.admin"` # 节点ip MONIP=`ssh $MDS cat /etc/ceph/ceph.conf |grep mon_host|cut -d "=" -f2|sed 's?,?:6789,?g'` # 挂载目录 mkdir /mycephfs # 开始挂载 mount -t ceph $MONIP:6789:/ /mycephfs -o name=admin,secret=$MOUNTKEY
查看挂载状况
root@jqb-node128:~/cephinstall# df -hT Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 971M 0 971M 0% /dev tmpfs tmpfs 199M 5.8M 193M 3% /run /dev/sda1 ext4 19G 7.5G 11G 43% / tmpfs tmpfs 992M 0 992M 0% /dev/shm tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs tmpfs 199M 0 199M 0% /run/user/0 192.168.91.128:6789,192.168.91.129:6789,192.168.91.131:6789:/ ceph 56G 26G 31G 46% /mycephfs
注意:挂载的命令很是长,它须要全部节点的ip和端口号
若是须要往ceph中,增长文件。只须要进入/mycephfs目录,像linux同样操做文件,就能够了!
#/bin/bash #前提环境 # 系统必须为ubuntu-16.04.5-server-amd64,至少有3个节点 # 务必保证每台主机的hostname和下面的变量设置一致 # 保证主机相互之间能用域名访问 # 保证每台主机开启了root登陆 # 务必使用root用户运行此脚本 # 请参考连接:https://www.cnblogs.com/xiao987334176/articles/9909039.html set -e ##注意mds和admin只有一台,请设置好MDS的值 ################################################################ MDS="jqb-node128" MON="jqb-node128 jqb-node129 jqb-node131" OSDS="jqb-node128 jqb-node129 jqb-node131" INST="$OSDS $MON" ################################################################ echo "设置ubuntu更新源" >> /opt/ceph_install.log # 设置ubuntu更新源 echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse deb http://download.ceph.com/debian-jewel/ xenial main" > /etc/apt/sources.list echo "设置时区以及安装软件" >> /opt/ceph_install.log # 设置时区以及安装软件 ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime bash -c "echo 'Asia/Shanghai' > /etc/timezone" apt-get clean apt-get update apt-get install -y ceph-deploy --allow-unauthenticated sed -i -e "28s/https/http/g" /usr/lib/python2.7/dist-packages/ceph_deploy/hosts/debian/install.py echo "生成ssh秘钥" >> /opt/ceph_install.log # 生成ssh秘钥 if [ ! -f ~/.ssh/id_rsa ];then ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys fi echo "ssh免密登陆" >> /opt/ceph_install.log # ssh免密登陆 for i in $INST; do echo $i ssh-copy-id $i done echo "远程节点环境设置以及软件安装" >> /opt/ceph_install.log # 远程节点环境设置以及软件安装 for i in $INST; do # 更新源 ssh $i "echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse deb http://download.ceph.com/debian-jewel/ xenial main' > /etc/apt/sources.list" # 时区设置 ssh $i ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ssh $i "echo 'Asia/Shanghai' > /etc/timezone" ssh $i apt-get update ssh $i apt-get install -y ntpdate ssh $i /etc/init.d/ntp stop ssh $i ntpdate ntp1.aliyun.com # 更新时间 # ceph相关软件安装 ssh $i apt-get install -y apt-transport-https --allow-unauthenticated ssh $i apt-get install -y radosgw --allow-unauthenticated ssh $i apt-get install -y "ceph-base ceph-common ceph-fs-common ceph-fuse ceph-mds ceph-mon ceph-osd" --allow-unauthenticated done echo "建立管理目录" >> /opt/ceph_install.log # 建立管理目录 mkdir -p /opt/cephinstall cd /opt/cephinstall echo "过定义监控节点,建立一个新集群" >> /opt/ceph_install.log # 过定义监控节点,建立一个新集群 ceph-deploy new $MON echo "修改配置文件" >> /opt/ceph_install.log # 修改配置文件 echo "osd pool default size = 2 osd max object name len = 256 osd max object namespace len = 64 mon_pg_warn_max_per_osd = 2000 mon clock drift allowed = 30 mon clock drift warn backoff = 30 rbd cache writethrough until flush = false" >> ceph.conf echo "安装 Ceph 到全部节点" >> /opt/ceph_install.log # 安装 Ceph 到全部节点 ceph-deploy install $INST echo "部署监控节点" >> /opt/ceph_install.log # 部署监控节点 ceph-deploy mon create-initial echo "增长 OSD 到集群" >> /opt/ceph_install.log # 增长 OSD 到集群 # 这里将/data/ceph/osd目录,用来存储数据 for i in $OSDS; do echo $i ssh $i 'mkdir -p /data/ceph/osd' ssh $i 'ln -snf /data/ceph/osd /var/lib/ceph/osd' ceph-deploy osd prepare $i:/data/ceph/osd # success indicator: Host xxx is now ready for osd use done echo "激活 OSD节点" >> /opt/ceph_install.log # 激活 OSD节点 for i in $OSDS; do echo $i ssh $i 'chown -R ceph:ceph /var/lib/ceph/' ssh $i 'chown -R ceph:ceph /data/ceph/' ceph-deploy osd activate $i:/data/ceph/osd #fix problem "socket /com/ubuntu/upstart: Connection refused" ssh $i 'dpkg-divert --local --rename --add /sbin/initctl' ssh $i 'ln -snf /bin/true /sbin/initctl' ssh $i 'rm -f /etc/apt/sources.list.d/ceph.list' ssh $i 'modprobe ceph' done echo "部署管理密钥到全部关联节点" >> /opt/ceph_install.log # 部署管理密钥到全部关联节点 ceph-deploy admin $MDS # 查看节点信息 ssh $MDS "ceph osd tree" echo "查看验证秘钥" >> /opt/ceph_install.log # 查看验证秘钥 ssh $MDS "ceph auth get-key client.admin | base64" ssh $MDS "mkdir -p /var/lib/ceph/mds/ceph-$MDS" ssh $MDS "chown -R ceph:ceph /var/lib/ceph" echo "建立POOL" >> /opt/ceph_install.log # 建立POOL ssh $MDS ceph osd pool create fs_db_data 512 ssh $MDS ceph osd pool create fs_db_metadata 512 # 查看pool ssh $MDS ceph osd lspools echo "建立Cephfs" >> /opt/ceph_install.log # 建立Cephfs ssh $MDS ceph fs new cephfs fs_db_metadata fs_db_data # 查看pool ssh $MDS ceph fs ls echo "部署MDS" >> /opt/ceph_install.log # 部署MDS ceph-deploy --overwrite-conf mds create $MDS echo "挂载须要的验证秘钥" >> /opt/ceph_install.log # 挂载须要的验证秘钥 MOUNTKEY=`ssh $MDS "ceph auth get-key client.admin"` # 节点ip MONIP=`ssh $MDS cat /etc/ceph/ceph.conf |grep mon_host|cut -d "=" -f2|sed 's?,?:6789,?g'` # 挂载目录 mkdir /mycephfs echo "开始挂载" >> /opt/ceph_install.log # 开始挂载 mount -t ceph $MONIP:6789:/ /mycephfs -o name=admin,secret=$MOUNTKEY # 查看磁盘挂载 df -hT echo "挂载完成" >> /opt/ceph_install.log
注意:执行以前,请仔细查看前置环境是否符合
执行以后,查看日志文件/opt/ceph_install.log输出:
设置ubuntu更新源
设置时区以及安装软件
生成ssh秘钥
ssh免密登陆
远程节点环境设置以及软件安装
设置ubuntu更新源
设置时区以及安装软件
生成ssh秘钥
ssh免密登陆
远程节点环境设置以及软件安装
建立管理目录
过定义监控节点,建立一个新集群
修改配置文件
安装 Ceph 到全部节点
部署监控节点
增长 OSD 到集群
激活 OSD节点
部署管理密钥到全部关联节点
查看验证秘钥
建立POOL
建立Cephfs
部署MDS
挂载须要的验证秘钥
开始挂载
挂载完成
如下文章,有兴趣的,能够看一下!
如何在 Ubuntu 16.04 中安装 Ceph 存储集群:
https://linux.cn/article-8182-1.html
Ceph基础知识和基础架构认识:
http://www.javashuo.com/article/p-tzqhamfq-em.html
史上最全的Ceph介绍、原理、架构: