ceph存储配置大全
软件定义存储SDS
传统存储是设计是自下而上,SDS存储是自顶向下
一、Ceph存储对外提供三大类型服务:
1、对象存储(rgw)
2、块存储(rbd)
3、文件存储(cephfs)
二、基本组件
1、mon(Monitor)
Ceph Monitor:由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,
Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。
2、osd
OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。
3、mds
Ceph MDS:全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。
三、存储过程
rbd/rgw/cephfs—>rados---->crush map(pools)---->PG(placement Groups)---->osds
四、写流程
client—>primary osd(缓存)---->secondary osd/tertiary osd(缓存)
五、部署规划设计:
准备3台虚拟机centos7.9系统,每台一块能上公网的网卡(要用公网yum源),每台vm上添加3盘10G硬盘。
1、改网络配置为静态static、可以访问外网、内网互通
vim /etc/sysconfig/network-scripts/ifcfg-ens33
Node1
BOOTPROTO=“static”
IPADDR=192.168.2.100
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=114.114.114.114
Node2
BOOTPROTO=“static”
IPADDR=192.168.2.101
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=114.114.114.114
Node3
BOOTPROTO=“static”
IPADDR=192.168.2.102
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=114.114.114.114
route -n //看网关
cat /etc/resolv.conf //看dns
ping www.baidu.com //测试上网
2、改计算机名,添加hosts记录
hostnamectl set-hostname ceph_node1
hostnamectl set-hostname ceph_node2
hostnamectl set-hostname ceph_node3
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.100 ceph_node1
192.168.2.101 ceph_node2
192.168.2.102 ceph_node3
scp /etc/hosts ceph_node2:/etc/ //改好的hosts推送到其它节点
3、关防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
setenforce 0 //临时关selinux
getenforce
4、生成公私密钥,ssh公钥推送(注意要给本机自己也得推送一份公钥)
各个节点都要改sshd文件允许推送过来,不然推送公钥失败
sudo vi /etc/ssh/sshd_config # 用 root 权限编辑
PubkeyAuthentication yes # 启用公钥认证(默认是 yes,若被修改需改回)
AuthorizedKeysFile .ssh/authorized_keys # 指定公钥文件路径(默认正确)
PermitRootLogin yes # 若需以 root 登录,设为 yes(按需调整)
ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsa.pub ceph_node1
ssh-copy-id -i /root/.ssh/id_rsa.pub ceph_node2
ssh-copy-id -i /root/.ssh/id_rsa.pub ceph_node3
ssh hosts里的域名测试是否需要密码连接
5、配置时间服务,保持所有的时间一致
设置控制节点时间服务指向外网,其它受控节点指向控制节点
yum -y install chrony
Ceph_node1控制节点上
vi /etc/chrony.conf
server ntp1.aliyun.com iburst //指向公网
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
allow 192.168.111.0/24
local stratum 10
systemctl start chronyd
systemctl enable chronyd
Ceph_node2/3节点上
vi /etc/chrony.conf
server ceph_node1 iburst //指向控制节点
查看时间同步源
chronyc sources -v
手动同步系统时钟
chronyc -a makestep
6、添加yum源
cd /etc/yum.repos.d/
mkdir yum_bak
mv *.repo yum_bak
基础yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
epel源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
ceph源
cat << EOF | tee /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[Ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF
生成yum源缓存
yum clean all
yum makecache fast
yum list |grep ceph
7、部署Ceph
部署控制节点在ceph_node1节点上安装ceph-deploy
yum -y install ceph-deploy ceph
在ceph_node1上创建一个cluster目录,下面所有命令必须再此目录下进行操作
[root@ceph_node1 ~]# mkdir /cluster
[root@ceph_node1 ~]# cd /cluster
将ceph_node1,ceph_node2,ceph_node3加入集群
[root@ceph_node1 cluster]# ceph-deploy new ceph_node1 ceph_node2 ceph_node3
输出没有报错,表示部署成功。
如果报python错误:
yum install python2-pip
所有节点上node1-node3上安装ceph
Yum install ceph -y
查看ceph版本
[root@ceph_node1 cluster]# ceph -v
必须再此目录下进行操作cluster,生成mon角色
[root@ceph_node1 cluster]# ceph-deploy mon create-initial
必须再此目录下进行操作cluster,生成ceph密钥
[root@ceph_node1 cluster]# ceph-deploy admin ceph_node1 ceph_node2 ceph_node3
部署MGR,提供web界面管理ceph(可选安装)
ceph-deploy mgr create ceph_node1 ceph_node2 ceph_node3
8、部署rgw
yum -y install ceph-radosgw
[root@ceph_node1 cluster]# ceph-deploy rgw create ceph_node1
9、部署cephfs(可选)
[root@ceph_node1 cluster]# ceph-deploy mds create ceph_node1 ceph_node2 ceph_node3
10、初始化OSD
在ceph_node1上一次初始化所有磁盘
ceph-deploy osd create --data /dev/sdb ceph_node1
ceph-deploy osd create --data /dev/sdc ceph_node1
ceph-deploy osd create --data /dev/sdd ceph_node1
ceph-deploy osd create --data /dev/sdb ceph_node2
ceph-deploy osd create --data /dev/sdc ceph_node2
ceph-deploy osd create --data /dev/sdd ceph_node2
ceph-deploy osd create --data /dev/sdb ceph_node3
ceph-deploy osd create --data /dev/sdc ceph_node3
ceph-deploy osd create --data /dev/sdd ceph_node3
查看OSD状态
[root@ceph_node1 cluster]# ceph osd status
±—±-----------±------±------±-------±--------±-------±--------±----------+
| id | host | used | avail | wr ops | wr data | rd ops | rd data | state |
±—±-----------±------±------±-------±--------±-------±--------±----------+
| 0 | ceph_node1 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 1 | ceph_node1 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 2 | ceph_node1 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 3 | ceph_node2 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 4 | ceph_node2 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 5 | ceph_node2 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 6 | ceph_node3 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 7 | ceph_node3 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
| 8 | ceph_node3 | 1031M | 9204M | 0 | 0 | 0 | 0 | exists,up |
±—±-----------±------±------±-------±--------±-------±--------±----------+
11、查看osd进程
Ps aux | grep osd
12、查看ceph状态
[root@ceph_node1 cluster]# ceph -s
[root@ceph_node1 cluster]# ceph -s
cluster:
id: 17342e84-06cd-406d-a48b-c66be10c5b48
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph_node1,ceph_node2,ceph_node3 (age 10m)
mgr: ceph_node1(active, since 37m), standbys: ceph_node2, ceph_node3
mds: 3 up:standby
osd: 9 osds: 9 up (since 44s), 9 in (since 44s)
rgw: 1 daemon active (ceph_node1)
task status:
data:
pools: 4 pools, 128 pgs
objects: 187 objects, 1.2 KiB
usage: 9.1 GiB used, 81 GiB / 90 GiB avail
pgs: 128 active+clean
至此,整个ceph的部署就完成了,健康状态也是ok的。
如果状态不OK,有以下问题
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
禁用不安全的 global_id 回收可以解决
ceph config set mon auth_allow_insecure_global_id_reclaim false
systemctl restart ceph-mon@$(hostname -s)
13、Ceph操作使用
创建存储池
[root@ceph_node1 cluster]# ceph osd pool create mypool1 128
pool ‘mypool1’ created
#查看已创建的存储池信息
[root@ceph_node1 cluster]# ceph osd pool ls
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
mypool1
查看存储池详细参数
[root@ceph_node1 cluster]# ceph osd pool ls detail
查看存储池单个参数配置
[root@ceph_node1 cluster]# ceph osd pool get mypool1 size
[root@ceph_node1 cluster]# ceph osd pool get mypool1 pg_num
修改存储池参数
ceph osd pool set mypool1 pg_num 64
14、创建EC池,创建EC策略
[root@ceph_node1 cluster]#ceph osd erasure-code-profile set ec001 k=3 m=2 crush-failure-domain=osd
[root@ceph_node1 cluster]# ceph osd pool create mypool2 100 erasure ec001
[root@ceph_node1 cluster]# ceph osd pool ls detail
15、rgw使用
设置mypool2为rgw,使用rados客户端工具测试上传下载
[root@ceph_node1 cluster]# ceph osd pool application enable mypool2 rgw
#将/etc/passwd 上到mypool2中,命名为t_pass
[root@ceph_node1 cluster]# rados -p mypool2 put t_pass /etc/passwd
#查看mypool2 中的文件
[root@ceph_node1 cluster]# rados -p mypool2 ls
将mypool2中的文件t_pass下载到/tmp/passwd
[root@ceph_node1 cluster]# rados -p mypool2 get t_pass /tmp/passwd
查看下载的文件内容
[root@ceph_node1 cluster]# cat /tmp/passwd
16、rbd使用
设置mypool3为rbd,并创建卷,挂载到/mnt, 映射给业务服务器使用。
#创建存储池mypool3
[root@ceph_node1 cluster]# ceph osd pool create mypool3 64
#设置存储池类型为rbd
[root@ceph_node1 cluster]# ceph osd pool application enable mypool3 rbd
在存储池里划分一块名为disk1的磁盘,大小为1G
[root@ceph_node1 cluster]# rbd create mypool3/disk1 --size 1G
#将创建的磁盘map成一个块设备
[root@ceph_node1 cluster]# rbd map mypool3/disk1
[root@ceph_node1 cluster]# rbd feature disable mypool3/disk1 object-map fast-diff deep-flatten
[root@ceph_node1 cluster]# rbd map mypool3/disk1
[root@ceph_node1 cluster]# ll /dev/rbd
rbd/ rbd0
[root@ceph_node1 cluster]# ll /dev/rbd0
brw-rw----. 1 root disk 252, 0 Feb 18 14:46 /dev/rbd0
#格式化块设备
[root@ceph_node1 cluster]# mkfs.ext4 /dev/rbd0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1024 blocks, Stripe width=1024 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
#挂载使用
[root@ceph_node1 cluster]# mount /dev/rbd0 /mnt
[root@ceph_node1 cluster]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 18M 973M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.9G 16G 11% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 199M 0 199M 0% /run/user/0
tmpfs 991M 52K 991M 1% /var/lib/ceph/osd/ceph-0
tmpfs 991M 52K 991M 1% /var/lib/ceph/osd/ceph-1
tmpfs 991M 52K 991M 1% /var/lib/ceph/osd/ceph-2
/dev/rbd0 976M 2.6M 907M 1% /mnt