分布式存储Ceph
1、Ceph简介
Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用。出现Ceph开源社区版本和Redhat企业版。
Ceph主要设计的初衷是变成一个可避免单节点故障的统一的分布式文件系统,提供较好的性能、可靠性和PB级别的扩展能力。作为对象存储把每一个数据流分割为固定大小的对象数据。
2、Ceph特性
高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到EB级的扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
高 性 能:数据分布均衡。
存储类别:可用于对象存储,块设备存储和文件系统存储
3、Ceph集群部署
官方文档:
http://docs.ceph.com 注:有哪里有问题可以留言,看到会回复
准备环境
系统版本:centos7.4 x86_64 server
网卡配置:除admin以外,其余节点再配一块网卡并设置IP
1.给三台node节点添加2块大小20G的磁盘
2.所有节点修改主机名并相互解析
3.关闭所有机器的防火墙和selinux
主机名 ip role
admin 192.168.116.131 admin
node1 192.168.116.132 / 192.168.117.132 osd /mgr
node2 192.168.116.133 / 192.168.117.133 osd /mgr
node3 192.168.116.134 / 192.168.117.134 osd
mon1 192.168.116.135 / 192.168.117.135 mon1
mon1 192.168.116.136 / 192.168.117.136 mon2
mon1 192.168.116.137 / 192.168.117.137 mon3
client 192.168.116.138 / 192.168.117.138 client
4.配置YUM源并安装epel-release源:所有节点-root
# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph package
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/aarch64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph1]
name=ceph1
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-noarch]
name=ceph noarch
baseurl=https://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
baseurl=https://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
# yum update
# yum -y install epel-release
5.同步系统时钟
admin作为时钟服务器:
# yum install -y ntp
# vim /etc/ntp.conf #有4行server的位置,把那4行server行注释掉,填写以下两行
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10 #stratum 层;阶层 / ˈstrɑːtəm
# systemctl restart ntpd
其他所有节点:
# yum install ntpdate -y
# ntpdate admin
6.创建用户并开启sudo 权限:所有节点-root
# useradd cephu
# echo 1 |passwd --stdin cephu
# visudo ----在root ALL=(ALL) ALL下面添加: /etc/sudoers
cephu ALL=(root) NOPASSWD:ALL
7.配置SSH免密登录并创建工作目录:admin节点-cephu
# su - cephu
$ mkdir my_cluster #工作目录
$ ssh-keygen
#将admin节点cephu用户生成的密钥拷贝到各Ceph节点:
$ ssh-copy-id cephu@node1
$ ssh-copy-id cephu@node2
$ ssh-copy-id cephu@node3
$ ssh-copy-id cephu@mon1
$ ssh-copy-id cephu@mon2
$ ssh-copy-id cephu@mon3
$ ssh-copy-id cephu@client
8.部署ceph-deploy:admin节点-root
# yum -y install ceph-deploy
—————————————————————————————
安装Python依赖,不装会报错
# wget https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
# unzip distridate
# cd distribute-0.7.3/
# python setup.py install
9.初始化集群:admin节点-cephu
# su - cephu
$ cd my_cluster/
$ ceph-deploy new \
--cluster-network 192.168.117.0/24 \
--public-network 192.168.116.0/24 \
mon1
-------------------------------------
# 参数
--cluster-network 集群通信网络
--public-network 外部通信网络
mon1 指定mon节点
-------------------------------------
$ ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
创建成功会有三个文件:ceph.conf, ceph.mon.keyring, and a log file
10.安装ceph和ceph-radosgw主包:admin节点-cephu
$ ceph-deploy install --no-adjust-repos node1 node2 node3 mon1 mon2 mon3 client
------------------------------
# 参数
--no-adjust-repos 通过本地源安装
11.初始化mon节点,收集秘钥:admin节点–cephu
$ ceph-deploy mon create-initial
12.赋予各个节点使用命令免用户名权限:admin节点–cephu
$ ceph-deploy admin node1 node2 node3 mon1 mon2 mon3 client
-----------------------------------------------------
为cephu赋予读取密钥的权限:所有节点
# setfacl -m u:cephu:r /etc/ceph/ceph.client.admin.keyring
13.部署mgr节点:admin节点–cephu
$ ceph-deploy mgr create node1
14.扩展mon和mgr节点:admin节点–cephu
# 扩展monitor
$ ceph-deploy mon add mon2
$ ceph-deploy mon add mon3
# 扩展manager
$ ceph-deploy mgr create node2
15.添加OSD:admin节点–cephu
# 查看可用磁盘
$ ssh node1 lsblk -f
---------------------------------------------------
# 添加osd
$ ceph-deploy osd create --data /dev/sdb node1
$ ceph-deploy osd create --data /dev/sdb node2
$ ceph-deploy osd create --data /dev/sdb node3
$ ceph-deploy osd create --data /dev/sdc node1
$ ceph-deploy osd create --data /dev/sdc node2
$ ceph-deploy osd create --data /dev/sdc node3
----------------------------------------------------
16.查看集群状态:client节点-root
# ceph -s
cluster:
id: cab710b1-8dbf-4622-9a49-60a0384be5aa
health: HEALTH_OK
services:
mon: 3 daemons, quorum mon1,mon2,mon3 #quorum 法定人数 / ˈkwɔːrəm
mgr: node1(active), standbys: node2 #standbys 备用物品 / ˈstændbaɪz
osd: 6 osds: 6 up, 6 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 6.02GiB used, 114GiB / 120GiB avail
pgs:
17.配置Dashboard:mgr节点-root
创建管理域秘钥:
# ceph auth get-or-create \
mgr.node1 \
mon 'allow profile mgr' \
osd 'allow *' \
mds 'allow *'
开启 ceph-mgr 管理域
# ceph-mgr -i node1
打开dashboard模块
# ceph mgr module enable dashboard
绑定开启dashboard模块的ceph-mgr节点的ip地址
# ceph config-key \
set mgr/dashboard/node1/server_addr 192.168.116.132 # ip地址为mgr节点的ip地址
浏览器访问:
http://192.168.116.132:7000
18.配置客户端使用rbd:client节点-root
------------------------------------------------------------------
创建存储池:
# ceph osd pool create rbd 128 128
------------------------------------------------------------------
初始化存储池
# rbd pool init rbd
------------------------------------------------------------------
修改client下的ceph配置文件
# vi /etc/ceph/ceph.conf
rbd_default_features = 1
------------------------------------------------------------------
创建块设备镜像:单位是M,这里是4个G
# rbd create foo --size 4096
------------------------------------------------------------------
client节点映射镜像到主机
# rbd map foo --name client.admin
/dev/rbd0
客户端重起之后,设备需要重新作映射,不然可能会卡死
------------------------------------------------------------------
client节点格式化块设备
# mkfs.ext4 /dev/rbd/rbd/foo
------------------------------------------------------------------
client节点mount块设备
# mkdir /mnt/ceph-block-device #创建挂载点
# mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载
------------------------------------------------------------------