▶ 机器列表
主机名 | IP地址 | 配置 | 操作系统 |
---|---|---|---|
ceph-admin | 10.0.1.5 | 2C4G | CentOS 7.5 |
ceph-node1 | 10.0.1.4 | 4C16G | CentOS 7.5 |
ceph-node2 | 10.0.1.7 | 4C16G | CentOS 7.5 |
ceph-node3 | 10.0.1.8 | 4C16G | CentOS 7.5 |
▶ 准备工作
【ceph-node】安装 NTP
建议在 Ceph 节点上安装 NTP(特别是在 Ceph Monitor 节点上),以防止时钟漂移引起的问题。安装方法参考 CentOS 配置阿里云 NTP 服务。
【ceph-node】安装 SSH server
使用命令
rpm -qa | grep ssh
查看是否已安装,
云服务器默认安装并启用,可忽略本步骤
# 安装
yum install openssh-server
# 启动
systemctl start sshd
# 开机自动启动
systemctl enable sshd
【ceph-node】创建 CEPH DEPLOY 用户
用户名不能为 ceph
,假设用户名为 anoyi
,在每个 Ceph 节点执行
# 添加用户
sudo useradd -d /home/anoyi -m anoyi
# 设置密码
sudo passwd anoyi
# 确保 sudo 权限
echo "anoyi ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/anoyi
sudo chmod 0440 /etc/sudoers.d/anoyi
【ceph-admin】无密码 SSH
生成 SSH keys,不要使用 sudo 和 root 用户,passphrase 留空
ssh-keygen
复制 key 到每个 Ceph 节点
ssh-copy-id anoyi@ceph-node1
ssh-copy-id anoyi@ceph-node2
ssh-copy-id anoyi@ceph-node3
【所有机器】在 ONBOOT 上启用网络
进入目录 /etc/sysconfig/network-scripts
,编辑名称类似 ifcfg-{iface}
的文件,设置 ONBOOT=yes
【所有机器】确保连通性
确保短主机名(hostname -s
)能互相 ping 通,必要时需要人工配置 hosts
【所有机器】开放所需端口
Ceph Monitors 默认使用 6789
通信,Ceph OSDs 默认使用 6800:7300
通信。
如果使用 Firewalld,在 Monitors 主机上执行
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
在 OSDs 和 MDSs 主机上执行
sudo firewall-cmd --zone=public --add-service=ceph --permanent
【所有机器】SELINUX
禁用 SELINUX,编辑 /etc/selinux/config
,设置 SELINUX=disabled
【ceph-admin】安装 Ceph-deploy
安装 EPEL
yum install epel-release -y
添加 ceph repo 源,添加文件 /etc/yum.repos.d/ceph.repo
,内容如下
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.huaweicloud.com/ceph/rpm-{ceph-stable-release}/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.huaweicloud.com/ceph/keys/release.asc
{ceph-stable-release}
为稳定版本名,详情 http://docs.ceph.com/docs/master/releases,此处选择版本 nautilus
, 则执行
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.huaweicloud.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.huaweicloud.com/ceph/keys/release.asc
安装 Ceph-deploy
sudo yum install -y ceph-deploy
【ceph-node】TTY
待补充。。。
【ceph-admin】配置 ~/.ssh/config
Host ceph-node1
Hostname ceph-node1
User anoyi
Host ceph-node2
Hostname ceph-node2
User anoyi
Host ceph-node3
Hostname ceph-node3
User anoyi
作用,免去执行 ceph-deploy
命令时指定 --username anoyi
▶ 集群搭建(STORAGE CLUSTER)
首先,在 ceph-admin 节点,创建用于维护部署的配置文件和密钥的文件夹
mkdir anoyi-cluster
cd anoyi-cluster
如果部署过程遇到问题,即可清除部署过程产生的数据和配置
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
不要使用
sudo
命令或root
用户执行ceph-deploy
命令
1、初始化
ceph-deploy new ceph-node1
执行完毕后,会生成如下文件
ceph.conf ceph.log ceph.mon.keyring
2、配置 ceph.conf
如果有多个网络接口,在 [global]
下配置 public network
# 格式
public network = {ip-address}/{bits}
# 示例
public network = 10.1.2.0/24
如果是在 ipv6 环境,执行
echo ms bind ipv6 = true >> ceph.conf
3、安装 ceph 包
ceph-deploy install \
--repo-url https://mirrors.huaweicloud.com/ceph/rpm-nautilus/el7 \
--gpg-url https://mirrors.huaweicloud.com/ceph/keys/release.asc \
ceph-node1 ceph-node2 ceph-node3
4、部署初始 Monitor 并收集密钥
ceph-deploy mon create-initial
执行完毕后,会生成如下文件
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-mgr.keyring
ceph.client.admin.keyring
ceph.mon.keyring
ceph.bootstrap-osd.keyring
5、复制配置文件和管理密钥到 ceph-node
ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
执行完毕后,使用 ceph CLI 时就无需每次指定 Monitor 地址和 ceph.client.admin.keyring
6、创建 manager daemon
ceph-deploy mgr create ceph-node1
7、添加 OSD
查看 ceph-node 的块设备信息,在 ceph-node1 上执行
lsblk
输出内容如下
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 63G 0 part
├─rootvg-tmplv 253:0 0 2G 0 lvm /tmp
├─rootvg-usrlv 253:1 0 10G 0 lvm /usr
├─rootvg-swaplv 253:2 0 2G 0 lvm [SWAP]
├─rootvg-optlv 253:3 0 2G 0 lvm /opt
├─rootvg-homelv 253:4 0 1G 0 lvm /home
├─rootvg-varlv 253:5 0 8G 0 lvm /var
└─rootvg-rootlv 253:6 0 8G 0 lvm /
sdb 8:16 0 32G 0 disk
└─sdb1 8:17 0 32G 0 part /mnt/resource
sr0 11:0 1 1024M 0 rom
使用 sdb
创建 OSD 前,需要清空分区
ceph-deploy disk zap ceph-node1 /dev/sdb
若出现如下错误:
[az-idp-env1][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-volume lvm zap /dev/sdb
解决方案:
# lvdisplay
...
# lvremove --force /dev/ceph-dc39f7cc-e423-48d3-a466-9701e7bf972a/osd-block-f7db38d2-...
创建 OSD
ceph-deploy osd create --data /dev/sdb ceph-node1
接着,在 ceph-node2 和 ceph-node3 上做同样的操作
8、查看集群状态
ssh ceph-node1 sudo ceph -s
输出内容类似如下,即为正常
cluster:
id: 17333331-0d8d-4aa5-9a37-7f166d6e02d2
health: HEALTH_OK
services:
mon: 1 daemons, quorum ceph-node1 (age 2h)
mgr: ceph-node1(active, since 2h)
osd: 3 osds: 3 up (since 2m), 3 in (since 2m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 90 GiB / 93 GiB avail
pgs:
▶ 集群扩展
添加 Monitors
ceph-deploy mon add ceph-node2
ceph-deploy mon add ceph-node3
如果出现类似如下错误
[INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-node2.asok mon_status
[ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
需要修改配置 ceph.conf
添加 public network
项
[global]
fsid = 17333331-0d8d-4aa5-9a37-7f166d6e02d2
mon_initial_members = ceph-node1
mon_host = 10.0.1.4
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 10.0.1.0/24
由于出错的原因,添加 Monitor 时,需要添加 --overwrite-conf
覆盖错误的配置
ceph-deploy --overwrite-conf mon add ceph-node2
一旦添加新的 Ceph Monitor,Ceph 将开始同步 Monitor 并选举 Leader,检查 Monitors 集群状态,在任意 ceph-node 上执行
ceph quorum_status --format json-pretty
添加 Managers
Ceph Manager 以 active/standby 模式运行,部署多个高可用
ceph-deploy mgr create ceph-node2 ceph-node3
查看状态,执行命令 ssh ceph-node1 sudo ceph -s
cluster:
id: 17333331-0d8d-4aa5-9a37-7f166d6e02d2
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 19m)
mgr: ceph-node1(active, since 3h), standbys: ceph-node2, ceph-node3
osd: 3 osds: 3 up (since 49m), 3 in (since 49m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 90 GiB / 93 GiB avail
pgs:
▶ 对象数据存储与检索
创建测试文件
echo "hello ceph" > testfile.txt
创建 pool
ceph osd pool create mytest 128
此处
pg_num
设置为 128 ,参考 A PRESELECTION OF PG_NUM
存储文件
rados put test-object-1 testfile.txt --pool=mytest
查看 pool 中对象
rados -p mytest ls
查看对象位置
ceph osd map mytest test-object-1
输出结果
osdmap e46 pool 'mytest' (2) object 'test-object-1' -> pg 2.74dc35e2 (2.2) -> up ([1,0,2], p1) acting ([1,0,2], p1)
删除对象
rados rm test-object-1 --pool=mytest
删除 pool
ceph osd pool rm mytest
默认情况下,由于安全原因,会出现如下错误
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool mytest. If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.
解决方式一
ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'
ceph osd pool rm mytest mytest --yes-i-really-really-mean-it
解决方式二,编辑 /etc/ceph/ceph.conf
,添加如下内容
[mon]
mon allow pool delete = true
然后重启下服务,再执行删除操作
systemctl restart ceph-mon.target
ceph osd pool rm mytest mytest --yes-i-really-really-mean-it
▶ 相关文档
- ceph-deploy: http://docs.ceph.com/docs/master/start/