虽然安装环境并不是属于研发人员的本质工作,甚至有些研发人员抵触一些环境的搭建工作。在一些大型企业中,由于分工明确,造成了一些研发人员在这一方面能力的严重缺失。其实环境安装对于开发人员从整体上掌握软件架构师非常有益的,同时随着云计算、云原生的发展,对于DevOps的软件开发模式也越来越被企业接受,可以预见的是,未来DevOps将是所有研发人员必备的技能之一。
本文主要目标是帮助研发人员用最小成本搭建一套Ceph环境,为了降低搭建成本,使用了Ceph Deploy及国内源加速安装速度。我们选择目前Ceph Octopus最新的稳定版本进行安装。
部署架构
我们准备四台服务器,其中一台作为部署发起节点和后续Client节点使用。另外三台作为Ceph节点使用,其中第一台节点node01上,除了monitor和osd外,还将运行Manager, MDS和RGW服务,用于提供文件及对象存储服务。每一台Ceph节点都另外挂载了一块单独的磁盘,由于我使用的是虚拟机环境,所以挂载节点为/dev/vdb,如果使用是其他环境需要注意挂载点名称。
部署时序图
使用Ceph Deploy将大幅度简化安装过程,大体上分为以下安装步骤:
- 节点初始化配置
- Ceph Deploy节点安装
- Ceph集群初始化
- ODS节点安装、安装Mgr服务及添加ODS磁盘,完成Ceph基本安装
- CephFS安装,部署Metadata服务
- Ceph RGW安装,部署RGW服务
(全部节点)环境准备
这是我非常常用的针对CentOS 7的设置,为了测试方便,关闭了防火墙、SELINUX,同时更新了系统和EPEL源为阿里源,最后进行系统更新,保证系统软件包更新到最新版本后,再进行环境安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| ## Set SELinux in permissive mode (effectively disabling it)
setenforce 0
##sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
firewall-cmd --state
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache
yum update -y
|
如果按照正常流程安装后,执行ceph -s,会出现restful模块无法找到,缺少pecan的安装包,所以在初始化阶段直接将缺少的包进行安装。
1
2
| yum install -y python3-pip
pip3 install pecan werkzeug
|
Ceph-Deploy节点安装
(Ceph Deploy节点)安装Ceph-Deploy
1
2
3
4
5
6
7
8
9
| cat << EOF > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
EOF
|
1
2
| yum makecache
yum install -y ceph-deploy
|
(全部节点)设置时间同步服务
时间同步服务是分布式系统的生命线,所以安装时候先要安装NTP或者Chrony。在RHEL 7中,默认的时间同步被替换为Chrony,很多新的安装文档中也开始使用Chrony作为时间同步服务,但是NTP也被同时保留。我的环境中Chrony已经被安装并启动,如果没有请自行安装。
(Ceph Deploy节点)无密码登录
这里为了简便,使用了root用户进行安装。配置完成后,需要让Ceph Deploy能够无密码的方式访问全部Ceph节点。
1
2
3
| ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3
|
Ceph集群安装
(Ceph Deploy节点)Ceph块存储服务安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| export CEPH_DEPLOY_REPO_URL=https://mirrors.aliyun.com/ceph/rpm-octopus/el7
export CEPH_DEPLOY_GPG_URL=https://mirrors.aliyun.com/ceph/keys/release.asc
## 集群初始化,这一步会生成初始化的ceph.conf,可以配置网络等信息
ceph-deploy new node01
ceph-deploy install node01 node02 node03
## 初始化monitor,并收集keys
ceph-deploy mon create-initial
ceph-deploy admin node01 node02 node03
ceph-deploy mgr create node01
ceph-deploy osd create --data /dev/vdb node01
ceph-deploy osd create --data /dev/vdb node02
ceph-deploy osd create --data /dev/vdb node03
## 检查集群状态
ceph -s
|
由于默认采用了Bluestore安装方式,如果想使用SSD作为block.db和block.wal,可以这样创建OSD
1
| ceph-deploy osd create --data /dev/vdb --block-db /dev/vdc --block-wal /dev/vdc node01
|
在Ceph Deploy节点,将Ceph相关配置文件拷贝至系统的/etc/ceph目录
1
2
3
| mkdir -p /etc/ceph
cp ceph.conf /etc/ceph
cp ceph.client.admin.keyring /etc/ceph
|
(Ceph Deploy节点)增加多个Monitor节点
添加多个Monitor节点,可以实现高可靠,但是一定为奇数。先更新配置文件,在刚才初始化集群目录下的ceph.conf中的mon_host添加所有节点IP,之后设定public network,这里我们使用了Ceph节点的网段:
1
2
3
4
5
| ## ceph.conf
## ...
mon_host = 192.168.10.105,192.168.10.176,192.168.10.139
public network = 192.168.10.1/24
## ...
|
分发配置文件
1
2
3
4
5
6
7
| ceph-deploy --overwrite-conf admin node01 node02 node03
ceph-deploy mon add node02
ceph-deploy mon add node03
## 检查quorum状态
ceph quorum_status --format json-pretty
|
(Ceph Deploy节点)Ceph文件系统服务安装
1
2
3
4
5
6
7
8
| ceph-deploy mds create node01
## 添加多个Manager服务,Manager采用的是主从模式
ceph-deploy mgr create node02 node03
## 可以看到Manager主从节点状态
ceph -s
|
如果发现Ceph Monitor节点启动失败,需要到相应的节点上查看失败原因,比如我的Monitor使用Start启动,返回这样的提示
1
2
| Job for ceph-mon@node02.service failed because start of the service was attempted too often. See "systemctl status ceph-mon@node02.service" and "journalctl -xe" for details.
To force a start use "systemctl reset-failed ceph-mon@node02.service" followed by "systemctl start ceph-mon@node02.service" again.
|
按照提示重新启动即可
1
2
| systemctl reset-failed ceph-mon@node02.service
systemctl start ceph-mon@node02.service
|
(Ceph Deploy节点)Ceph对象存储服务安装
1
| ceph-deploy rgw create node01
|
测试
块存储测试
建立存储空间
挂载使用
文件系统测试
建立存储空间
1
2
3
4
5
6
| ceph osd pool create cephfs_data 16
ceph osd pool create cephfs_metadata 16
## ceph fs new <fs_name> <metadata> <data>
ceph fs new cephfs cephfs_metadata cephfs_data
ceph fs ls
|
内核方式挂载
1
2
| mkdir -p /mnt/mycephfs
mount -t ceph 192.168.10.11:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
|
Fuse方式挂载
确保/etc/ceph下面已经拷贝了ceph.conf和keyring文件
1
2
| mkdir -p /mnt/mycephfs
ceph-fuse -m 192.168.10.11:6789 /mnt/mycephfs
|
对象存储测试