- Host-OS:Ubuntu 20.04.4 LTS x86_64
- Host:HP Pavilion Aero Laptop 13-be0152AU
- Kernel:5.13.0-48-generic
- CPU:AMD Ryzen 7 5800U with Radeon Graphics (16) @ 1.900GHz
- GPU:AMD ATI 03:00.0 Device 1638
- VM:VMware Workstation 16.2.3 build-19376536
- VM-OS:CentOS 7
-
增加硬盘:在 VMware 的 Devices 栏目中,新建设备,添加 SCSI 与 NVMe 硬盘各一块。
-
配置网卡:打开 Virtual Network Editor,将 vmnet8 的 IP 地址改为 192.168.153.1。在 VMware 的 Devices 栏目中,新建设备,添加一个选择 vmnet8 的网卡。
-
配置网络:
cd /etc/sysconfig/network-scripts/ sudo vi ifcfg-ens33
将
ONBOOT=no
修改为ONBOOT=yes
,IPV4 与 DNS 服务器地址改为 192.168.31.10。类似地将
ifcfg-ens35
文件中的ONBOOT=no
修改为ONBOOT=yes
,IPV4 与 DNS 服务器地址改为 192.168.153.10。 -
重新启动网络服务:
systemctl restart network
使用 VMware 的 clone 方式创建 3 台与之相同的虚拟机,并将其IP地址最后一段分别改为 11,12,13。
client 节点作为 deploy 节点,在 client 节点执行
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
在client节点执行
echo "192.168.31.10 client client.localdomain" >> /etc/hosts
echo "192.168.31.11 node1 node1.localdomain" >> /etc/hosts
echo "192.168.31.12 node2 node2.localdomain" >> /etc/hosts
echo "192.168.31.13 node3 node3.localdomain" >> /etc/hosts
scp /etc/hosts node1:/etc/hosts
scp /etc/hosts node2:/etc/hosts
scp /etc/hosts node3:/etc/hosts
-
在 client,node1,node2,node3 节点上都关闭 selinux:
vi /etc/selinux/config
将
SELINUX
值设置为disabled
。 -
在 client,node1,node2,node3 节点上都关闭防火墙:
systemctl stop firewalld systemctl disable firewalld
-
client 节点作为 ntp server,在 client、node1、node2、node3 上安装 ntp。
yum install ntp -y
-
在 node1、node2、node3 上配置 ntp,添加 client 节点作为时间服务器。
vi /etc/ntp.conf
写入server client iburst。
-
开启 ntp 服务
systemctl start ntpd
-
确认 ntp 服务器指向了 client 节点
ntpq -pn
-
添加 CentOS7 的 yum 源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo
-
添加 epel 的 yum 源
sudo yum install -y epel-release sudo sed -e 's|^metalink=|#metalink=|g' \ -e 's|^#baseurl=https\?://download.fedoraproject.org/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \ -e 's|^#baseurl=https\?://download.example/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \ -i.bak \ /etc/yum.repos.d/epel.repo
-
添加 ceph 的 yum 源
vi /etc/yum.repos.d/ceph.repo
[ceph_noarch] name=noarch baseurl=https://mirrors.ustc.edu.cn/ceph/rpm-nautilus/el7/noarch/ enabled=1 gpgcheck=0 [ceph_x86_64] name=x86_64 baseurl=https://mirrors.ustc.edu.cn/ceph/rpm-nautilus/el7/x86_64/ enabled=1 gpgcheck=0
-
在部署节点(client)安装 ceph 的部署工具
yum install python-setuptools -y yum install ceph-deploy -y
-
确保 ceph-deploy 的版本是 2.0.1
ceph-deploy --version
-
在 node1、node2、node3 执行下面命令,安装 ceph 相关的包
yum install -y ceph ceph-mon ceph-osd ceph-mds ceph-radosgw ceph-mgr
-
node1 作为 monitor 节点,在部署结点(client)创建一个工作目录,后续的命令在该目录下执行,产生的配置文件保存在该目录中。
mkdir ~/my-cluster cd ~/my-cluster ceph-deploy new --public-network 192.168.31.0/24 --cluster-network 192.168.153.0/24 node1
-
初始化 monitor
ceph-deploy mon create-initial
-
将配置文件复制到对应的节点
ceph-deploy admin node1 node2 node3
-
部署高可用 monitor,将 node2、node3 也加入 mon 集群。
ceph-deploy mon add node2 ceph-deploy mon add node3
-
node1 作为 mgr 节点,在部署节点(client)执行
cd my-cluster ceph-deploy mgr create node1
-
部署高可用 mgr,将 node2、node3 也添加进来
ceph-deploy mgr create node2 node3
-
确认每个节点的硬盘情况
ceph-deploy disk list node1 node2 node3
-
清理 node1、node2、node3 节点上的硬盘里的现有数据和文件系统
ceph-deploy disk zap node1 /dev/sdb ceph-deploy disk zap node2 /dev/sdb ceph-deploy disk zap node3 /dev/sdb ceph-deploy disk zap node1 /dev/nvme0n1 ceph-deploy disk zap node2 /dev/nvme0n1 ceph-deploy disk zap node3 /dev/nvme0n1
-
添加 OSD
ceph-deploy osd create --data /dev/sdb --journal /dev/nvme0n1 --filestore node1 ceph-deploy osd create --data /dev/sdb --journal /dev/nvme0n1 --filestore node2 ceph-deploy osd create --data /dev/sdb --journal /dev/nvme0n1 --filestore node3
-
列出所有的 ceph 服务
systemctl status ceph\*.service ceph\*.target
-
启动所有的服务守护程序
systemctl start ceph.target
-
停止所有服务的守护程序
systemctl stop ceph.target
-
按服务类型启动所有守护进程
systemctl start ceph-osd target systemctl start ceph-mon target systemctl start ceph-mds target
-
按服务类型停止所有守护进程
systemctl stop ceph-osd target systemctl stop ceph-mon target systemctl stop ceph-mds target
-
列出已经创建的存储池
ceph osd lspools ceph osd pool ls
-
创建存储池
ceph osd pool create test 64 64
-
重命名存储池
ceph osd pool rename test ceph
-
查看对象副本数
ceph osd pool get ceph size
-
查看 pg 数
ceph osd pool get ceph pg_num
-
查看 pgp 数,一般小于等于 pg_num
ceph osd pool get ceph pg_num
-
在配置文件中写入
[mon] mon allow_pool_delete = true
-
推送到每个节点
ceph-deploy --overwrite-conf config push node1 node2 node3
-
重新启动所有的服务守护程序
systemctl restart ceph.target
-
删除存储池
ceph osd pool rm ceph ceph --yes-i-really-really-mean-it
-
检查集群的状态
ceph -s ceph -w ceph health ceph health detail
-
检查 OSD 状态
ceph osd status ceph osd tree
-
检查 Mon 状态
ceph mon stat ceph quorum_status
ceph osd pool application enable ceph <app>
<app>
可以选择 cephfs
,rbd
,rgw
。
-
根据对象数设置配额
ceph osd pool set-quota ceph max_objects 10000
-
根据容量设置配额
ceph osd pool set-quota ceph max_bytes 1048576
-
上传对象到存储池
echo "test ceph objectstore" > test.txt rados -p ceph put test ./test.txt
-
列出存储池中的对象
rados -p ceph ls
-
从存储池下载对象
rados -p ceph get test ./test.txt.tmp
-
删除存储池的对象
rados -p ceph rm test
[root@client my-cluster]# ceph -s
cluster:
id: 7c4d332f-e068-4d8c-9d83-a5ed97de575c
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
clock skew detected on mon.node2, mon.node3
services:
mon: 3 daemons, quorum node1,node2,node3 (age 14m)
mgr: node2(active, since 14m), standbys: node3, node1
osd: 3 osds: 3 up (since 14m), 3 in (since 9h)
data:
pools: 1 pools, 64 pgs
objects: 1.41k objects, 5.5 GiB
usage: 17 GiB used, 43 GiB / 60 GiB avail
pgs: 64 active+clean
这是分布式部署的结果,为完成在单机上的优化任务,我们也进行了单机部署。其过程是分布式部署的子过程,在此不再赘述。