Ceph生产环境推荐:
(1)存储集群全采用万兆网络
(2)集群网络(cluster-network,用于集群内部通讯)与公共网络(public-network,用于外部访问Ceph集群)分离
(3)mon、mds与osd分离部署在不同主机上(测试环境中可以让一台主机节点运行多个组件)
(4)OSD使用SATA亦可
(5)根据容量规划集群
(6)至强E5 2620 V3或以上CPU,64GB或更高内存
(7)集群主机分散部署,避免机柜的电源或者网络故障
column1 | column2 | 角色 |
---|---|---|
admin | 10.0.0.3 | admin(管理节点负责集群整体部署)、client |
node01 | 10.0.0.22 | mon、mgr、osd |
node02 | 10.0.0.59 | mon、mgr、osd |
node03 | 10.0.0.56 | mon、osd |
client | 10.0.0.55 | client |
一.环境准备
1.所有主机关闭和禁止防火墙
systemctl stop firewalld
sentenforce 0
2.根据规划设置主机名
hostname admin
hostname node01
hostname node02
hostname node03
hostname client
3.配置hosts解析,添加各自ip地址与主机名的映射关系
vim /etc/hosts
10.0.0.3 admin
10.0.0.22 node01
10.0.0.59 node02
10.0.0.56 node03
10.0.0.55 client
4.在所有节点上安装常用的软件和依赖包
yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass
5.在admin管理节点上配置ssh免密登录所有节点
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sshpass -p '1' ssh-copy-id -o StrictHostKeyChecking=no root@admin
sshpass -p '1' ssh-copy-id -o StrictHostKeyChecking=no root@node01
sshpass -p '1' ssh-copy-id -o StrictHostKeyChecking=no root@node02
sshpass -p '1' ssh-copy-id -o StrictHostKeyChecking=no root@node03
6.同步时间
systemctl restart chronyd
systemctl enable --now chronyd
systemctl status chronyd
timedatectl set-ntp true #开启 NTP
timedatectl set-timezone Asia/Shanghai #设置时区
chronyc -a makestep #强制同步下系统时钟
timedatectl status #查看时间同步状态
chronyc sources -v #查看 ntp 源服务器信息
timedatectl set-local-rtc 0 #将当前的UTC时间写入硬件时钟
7.重启依赖于系统时间
timedatectl set-ntp true #开启 NTP
timedatectl set-timezone Asia/Shanghai #设置时区
chronyc -a makestep #强制同步下系统时钟
timedatectl status #查看时间同步状态
chronyc sources -v #查看 ntp 源服务器信息
timedatectl set-local-rtc 0 #将当前的UTC时间写入硬件时钟
8.在所有节点上配置源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && sudo yum makecache
yum update
删除local源
添加epel源
[epel]
name=扩展源
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0
9.重启所有主机
10.给所有node节点添加网卡和硬盘
![](https://img-blog.csdnimg.cn/direct/95c81ed993014fe792782a40e901ff83.png)
修改node节点,添加网卡为外网网卡
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
lsblk
![](https://img-blog.csdnimg.cn/direct/d94e064f42784a7cb0352482c0703ad8.png)
11.部署ceph集群
1>所有节点创建工作目录
mkdir -p /etc/ceph
2>在admin节点安装ceph-deploy部署工具
cd /etc/ceph
yum install -y ceph-deploy
ceph-deploy --version
3>在admin节点为其它节点安装Ceph软件包
ceph-deploy install --release nautilus node0{1..3} admin
4>生成初始配置
ceph-deploy new --public-network 10.0.0.0/24 --cluster-network 10.0.1.0/24 node01 node02 node03
ls /etc/ceph
ceph.conf #ceph的配置文件
ceph-deploy-ceph.log #monitor的日志
ceph.mon.keyring #monitor的密钥环文件
5>在admin节点初始化mon节点
ceph-deploy mon create node01 node02 node03 #创建 mon 节点,由于 monitor 使用 Paxos 算法,其高可用集群节点数量要求为大于等于 3 的奇数台
ceph-deploy --overwrite-conf mon create-initial #配置初始化 mon 节点,并向所有节点同步配置
ceph-deploy gatherkeys node01 #可选操作,向 node01 节点收集所有密钥
6>扩容mon节点
ceph-deploy mon add node01
7>在admin节点处理ceph集群的节点
ceph-deploy --overwrite-conf config push node01 node02 node03 #向所有 mon 节点同步配置,确保所有 mon 节点上的 ceph.conf 内容必须一致
ceph-deploy admin node01 node02 node03 #本质就是把 ceph.client.admin.keyring 集群认证文件拷贝到各个节点
8>在admin节点上部署osd存储节点
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdb
9>在admin节点扩容osd节点
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd
10>部署mgr节点
#mgr至少要有两个节点来进行工作
ceph-deploy mgr create node01 node02
#禁用不安全模式:
ceph config set mon auth_allow_insecure_global_id_reclaim false
11>扩容mgr节点
ceph-deploy mgr create node01
ceph-deploy mgr create node02
ceph-deploy mgr create node03
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd
12>在节点上开启监控模块
yum install -y ceph-mgr-dashboard
在节点上开启dashboard模块,禁用ssl连接,并配置dashboard监听的地址和端口
#开启 dashboard 模块
ceph mgr module enable dashboard --force
#禁用 dashboard 的 ssl 功能
ceph config set mgr mgr/dashboard/ssl false
#配置 dashboard 监听的地址和端口
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8000
#重启 dashboard
ceph mgr module disable dashboard
ceph mgr module enable dashboard --force
#确认访问 dashboard 的 url
ceph mgr services
13>浏览器验证访问
http://节点IP地址:8000,账号密码为admin/123
12.创建一个存储池
创建 Ceph 块存储系统 RBD 接口
服务端操作
1>创建一个名为 rbd-demo 的专门用于 RBD 的存储池
ceph osd pool create rbd-demo 64 64
2>将存储池转换为 RBD 模式
ceph osd pool application enable rbd-demo rbd
3>初始化存储池
rbd pool init -p rbd-demo # -p 等同于 --pool
4>创建镜像
rbd create -p rbd-demo --image rbd-demo1.img --size 1G
可简写为:
rbd create rbd-demo/rbd-demo2.img --size 1G
5>镜像管理
查看存储池下存在哪些镜像
[root@admin ceph]#rbd ls -l -p rbd-demo
#查看镜像的详细信息
[root@admin ceph]#rbd info -p rbd-demo --image rbd-demo1.img
rbd image 'rbd-demo1.img':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 37447959d374
block_name_prefix: rbd_data.37447959d374
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Sat Dec 16 21:59:19 2023
access_timestamp: Sat Dec 16 21:59:19 2023
modify_timestamp: Sat Dec 16 21:59:19 2023
修改镜像大小
rbd resize -p rbd-demo --image rbd-demo1.img --size 2G
#使用 resize 调整镜像大小,一般建议只增不减,如果是减少的话需要加选项 --allow-shrink
rbd resize -p rbd-demo --image rbd-demo1.img --size 1G --allow-shrink
删除镜像
#直接删除镜像
rbd rm -p rbd-demo --image rbd-demo1.img
rbd remove rbd-demo/rbd-demo1.img
#推荐使用 trash 命令,这个命令删除是将镜像移动至回收站,如果想找回还可以恢复
rbd trash move rbd-demo/rbd-demo1.img
#查看存储池下存在哪些镜像
rbd ls -l -p rbd-demo
#查看回收站内容
rbd trash list -p rbd-demo
5fc98fe1f304 rbd-demo1.img
#还原镜像
rbd trash restore rbd-demo/5fc98fe1f304
#再次查看存储池下存在哪些镜像
rbd ls -l -p rbd-demo
6>Linux客户端使用
客户端使用 RBD 有两种方式:
●通过内核模块KRBD将镜像映射为系统本地块设备,通常设置文件一般为:/dev/rbd*
●另一种是通过librbd接口,通常KVM虚拟机使用这种接口。
本例主要是使用Linux客户端挂载RBD镜像为本地磁盘使用。开始之前需要在所需要客户端节点上面安装ceph-common软件包,因为客户端需要调用rbd命令将RBD镜像映射到本地当作一块普通硬盘使用。并还需要把ceph.conf配置文件和授权keyring文件复制到对应的节点。
在管理节点创建并授权一个用户可访问指定的 RBD 存储池
#示例,指定用户标识为client.osd-mount,对另对OSD有所有的权限,对Mon有只读的权限
ceph auth get-or-create client.osd-mount osd "allow * pool=rbd-demo" mon "allow r" > /etc/ceph/ceph.client.osd-mount.keyring
#修改RBD镜像特性,CentOS7默认情况下只支持layering和striping特性,需要将其它的特性关闭
rbd feature disable rbd-demo/rbd-demo1.img object-map,fast-diff,deep-flatten
#将用户的keyring文件和ceph.conf文件发送到客户端的/etc/ceph目录下**
cd /etc/ceph
scp ceph.client.osd-mount.keyring ceph.conf root@client:/etc/ceph
linux客户端操作
#安装 ceph-common 软件包
[root@client ceph]#yum install -y ceph-common
#执行客户端映射
[root@client ceph]#cd /etc/ceph
[root@client ceph]#rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
#查看映射
[root@client ceph]#rbd showmapped
[root@client ceph]#rbd device list
#断开映射
[root@client ceph]#rbd unmap rbd-demo/rbd-demo1.img
#格式化并挂载
[root@client ceph]#mkfs.xfs /dev/rbd0
[root@client ceph]#mkdir /data/rbd01 -p
[root@client ceph]# mount /dev/rbd0 /data/rbd01
[root@client ceph]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.4G 48G 5% /
/dev/mapper/centos-home 47G 33M 47G 1% /home
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/rbd0 1014M 33M 982M 4% /data/rbd01
#在线扩容
在管理节点调整镜像的大小
[root@admin ceph]# rbd resize rbd-demo/rbd-demo1.img --size 5G
在客户端刷新设备文件
[root@client ceph]#xfs_growfs /dev/rbd0 #刷新xfs文件系统容量
[root@client ceph]#resize2fs /dev/rbd0 #刷新ext4类型文件系统容量
#查看扩容后的容量
[root@client ceph]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.4G 48G 5% /
/dev/mapper/centos-home 47G 33M 47G 1% /home
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/rbd0 5.0G 34M 5.0G 1% /data/rbd01