Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
分布式ceph集群搭建
1,首先配置hosts实现免密登陆
vi /etc/hosts
10.99.8.68 主机名
10.99.8.69 主机名
.....依次类推
配置写入完成后,在每台设备上面互ping一下主机名
2,创建用户
Useradd ceph
Passwd ceph
密码根据自己想法编写
3,赋予新用户sudo权限(重要)
Vi /etc/sudoers
root ALL=(ALL) ALL
ceph ALL+(root) NOPASSWD:ALL
此文件为只读文件,所以修改完保存退出要用wq!
4,配置master控制节点ssh密钥,在master上操作
ssh-keygen
一直回车
ssh-copy-id ceph@主机名
将密钥依次传递给各个机器
5,在admin设备上用root用户添加.ssh/config配置文件,这样ceph-deploy 就能用所建的用户名登录ceph节点了
Mkdir ~/.ssh
Vi ~/.ssh/config
Host 主机名
Hostname 主机名
User ceph
依次类推,沿着向下写把集群所有集群写完
6,安装ceph-deploy
vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
yum clean all
yum makecache
vim /etc/yum.conf
keepcache=1
yum安装ceph-deploy
yum install ceph-deploy -y
如果是生产环境无法连接外网,可以在虚拟机按照此步骤添加源,然后使用yumdownloader下载为rpm包,再去生产跑,之后所有要下载的都这么整,结果一样成功,本人已在生产环境测试
7,时间同步
vi /etc/ntp.conf #有4行server的位置,把那4行server注释掉,填写一下两行
Server 127.127.1.0 #local clock
Fudge 127.127.1.0 stratum 10
Systemctl start ntpd
Systemctl enable ntpd
给全部节点安装ntpd
yum -y install ntpdate
ntpdate 时间服务器ip
即可同步时间至时间服务器相同时间
8,Ceph集群部署
Su - ceph
Sudo mkdir cluster
sudo wget -c
https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
sudo unzip distribute-0.7.3.zip
cd distribute-0.7.3.zip
sudo python setup.py install
cd cluster/
sudo ceph-deploy new 主机名
ls (会看到ceph的配置文件和密钥的生成)
9,在各个设备上均操作
安装ceph和ceph-radosgw
sudo yum -y install epel-release
sudo vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
sudo yum clean all
sudo yum makecache
sudo yum install ceph ceph-radosgw -y(所有设备)
如果是生产环境将依赖和ceph,打包安装完成之后可能会少依赖
pip -V
看看有无回显有的话跳过此步骤,没有的活安装依赖
yum -y install pip
如果不行的活,在网上搜索pip的tar包进行安装
unzip setuptools-36.4.0.zip
cd setuptools-36.4.0
python setup.py build
python setup.py install
tar -zxf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install
此时使用pip -v即可查看到信息,下一步结束
如果出现此问题,找不到包的话,可以私信我给你发
10,集群初始化操作
在admin设备上面用ceph用户执行,初始化mon
su - ceph
cd cluster/
sudo ceph-deploy mon create-initial
赋予各个节点使用命令免用户权限
sudo ceph-deploy admin 所有主机名
安装ceph-mgr:只有luminous才有,为使用dashboard做准备
sudo ceph-deploy mgr create 主机名
创建osd
注意用来做osd的磁盘需要格式化
sudo ceph-deploy osd create --data /dev/磁盘 主机名
创建完成之后使用ceph -s查看状态
创建管理密钥
sudo ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
创建管理域密钥
sudo ceph-mgr -i 主机名
查看ceph状态,确认mgr的状态为active
sudo ceph status
打开dashboard模块
sudo ceph mgr module enable dashboard
绑定开启dashboard模块的ceph-mgr节点的ip地址
sudo ceph config-key set mgr/dashboard/主机名/server_addr IP地址
激活mds组件
ceph-deploy mds create 主机名(可以多个)
ceph mds stat
回显为3up:standby
11,创建存储池
ceph fs ls #查看ceph文件系统为未启用状态
ceph mgr module enable pg_autoscaler #开启pg自动调整模块
ceph osd pool create cephfs_data1 512 #创建ceph存储池,512为pg数量,cephfs_data1为存储池名称,可自定义;pg值也可以不选,直接选自动调整参数,系统会自动调整;
autoscaler是按每个池配置的,可以在以下几种模式下运行:
**警告(warn)**模式:如果建议的pg_num值与当前值相差太大,则会发出健康警告。 这是新池和现有池的默认设置。
**启用(on)**模式:无需任何管理员交互即可自动调整池pg_num。
**禁用(off)**模式:还可以为任何给定池关闭autoscaler,让管理员像以前一样手动管理pg_num。
pool 'cephfs_data' created
(OSDs * 100) / max replication count #(osd数*100) / 副本数
Total PGs = ------------------------------------ #pg计算公式
pool size #pool数量
ceph osd pool create cephfs_data2 512 --autoscale-mode=<on,off,warn>
#创建第二个存储池,cephfs必须要有两个存储池才能进行创建,一个作为元数据存储池,一个作为数据存储池
Ceph集群中的PG总数:
PG总数 = (OSD总数 * 100) / 最大副本数
** 结果必须舍入到最接近的2的N次方幂的值。
Ceph集群中每个pool中的PG总数:
存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数
其中:<pg_num> = 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 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数
PG的增加会引起PG内的数据进行分裂,分裂到相同的OSD上新生成的PG当中
PGP的增加会引起部分PG的分布进行变化,但是不会引起PG内对象的变动
12,创建ceph文件系统
eph fs new cephfs cephfs_data1 cephfs_data2 #创建ceph文件系统,cephfs_data1作为元数据存储池,cephfs_data2为数据存储池,其中cephfs可自定义
ceph fs ls #再查看一下ceph文件系统
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph-1 ceph]# ceph mds stat #查看mds状态
cephfs:1 {0=ceph-3=up:active} 2 up:standby
13,ceph磁盘挂载
下载挂载工具ceph-fuse
yun -y install ceph-fuse
ceph-fuse -m 10.99.8.68:6789,10.99.8.78:6789,10.99.8.79:6789 /cephmount
#挂载到/cephmount目录
Ceph分布式集群搭建完毕