Ceph集群搭建(nautilus版)
1 环境和版本
1.1 操作系统
干干静静的centos7系统,选取的是mini的iso最小化安装,有且只有一块网卡且开机启动网络服务
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
1.2 Ceph版本
本文使用nautilus版本Ceph,官方教程https://docs.ceph.com/en/nautilus/,安装方式采用ceph-deploy安装。
1.3 集群环境
IP | 主机名 | 磁盘 |
---|---|---|
10.10.2.241 | ceph241 | sda |
10.10.2.242 | ceph242 | sda |
10.10.2.243 | ceph243 | sda sdb |
10.10.2.244 | ceph244 | sda sdb |
2 安装
2.1 准备
2.1.1 关闭selinux(在所有节点执行)
setenforce 0 && sed -i 's|SELINUX=\(.*\)|SELINUX=disabled|g' /etc/selinux/config
2.1.2 关闭防火墙 (在所有节点执行)
官方教程是建议开放所需端口,我懒,所以直接关闭了防火墙
systemctl stop firewalld && systemctl disable firewalld
2.1.3 设置hosts(在所有节点执行)
为每个节点设置hosts,使得每个节点可以通过主机名互相访问
vi /etc/hosts
10.10.2.241 ceph241
10.10.2.242 ceph242
10.10.2.243 ceph243
10.10.2.244 ceph244
2.1.4 安装epel源(在所有节点执行)
yum install -y epel-release
2.1.5 将CentOS源替换成清华源(在所有节点执行)
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://opentuna.cn|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
2.1.6 将epel源替换成清华源(在所有节点执行)
sed -e 's!^metalink=!#metalink=!g' \
-e 's!^#baseurl=!baseurl=!g' \
-e 's!//download.fedoraproject.org/pub!//opentuna.cn!g' \
-e 's!//download.example/pub!//opentuna.cn!g' \
-e 's!http://mirrors!https://mirrors!g' \
-i /etc/yum.repos.d/epel*.repo
2.2 安装
2.2.1 配置Ceph源(在所有节点执行)
因为我们是要安装nautilus版本,所以相比于官方教程已经做了相应的版本替换,并且改成使用清华源
vi /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://opentuna.cn/ceph/rpm-nautilus/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://opentuna.cn/ceph/keys/release.asc[ceph-source]
name=Ceph source packages
baseurl=http://opentuna.cn/ceph/rpm-nautilus/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://opentuna.cn/ceph/keys/release.asc[ceph-noarch]
name=Ceph noarch packages
baseurl=http://opentuna.cn/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://opentuna.cn/ceph/keys/release.asc
vi /etc/yum.repos.d/ceph-iscsi.repo
[ceph-iscsi]
name=ceph-iscsi noarch packages
baseurl=https://opentuna.cn/ceph/ceph-iscsi/latest/rpm/el7/noarch
enabled=1
gpgcheck=1
gpgkey=https://opentuna.cn/ceph/keys/release.asc
type=rpm-md[ceph-iscsi-source]
name=ceph-iscsi source packages
baseurl=https://opentuna.cn/ceph/ceph-iscsi/3/rpm/el7/SRPMS
enabled=0
gpgcheck=1
gpgkey=https://opentuna.cn/ceph/keys/release.asc
type=rpm-md
vi /etc/yum.repos.d/tcmu-runner.repo
[tcmu-runner]
name=tcmu-runner
baseurl=https://3.chacra.ceph.com/r/tcmu-runner/master/1793db5ea90f15db9277b0aaa32dd5da2e38b1d3/centos/8/flavors/default/x86_64
priority=1
gpgcheck=0
2.2.2 添加cephx用户(在所有节点执行)
-
添加cephx用户:
useradd -d /home/cephx -m cephx
-
为cephx用户设置密码:
passwd cephx
-
为cephx用户设置sudo权限:
-
echo "cephx ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephx
-
chmod 0440 /etc/sudoers.d/cephx
-
2.2.3 安装Ceph所需软件包(在所有节点执行)
yum -y install ceph ceph-radosgw ceph-iscsi
2.2.4 安装Ceph-Deploy(在ceph241节点执行)
- 安装Ceph-Deploy:
yum install -y ceph-deploy
这个时候我们尝试执行ceph-deploy --help
如果报错No module named pkg_resources
则执行
- 安装pip工具:
yum install -y python-pip
- 安装distribute模块:
pip install distribute
现在执行ceph-deploy --help
就不报错了
2.2.5 设置免密(在ceph241节点执行)
要求ceph241可通过cephx用户免密登录其他ceph节点
- 切换到cephx用户:
su cephx
- 为cephx用户生成公钥:
ssh-keygen
,一路无脑回车 - 将公钥拷贝到ceph242、ceph243、ceph243
ssh-copy-id cephx@ceph242
ssh-copy-id cephx@ceph243
ssh-copy-id cephx@ceph244
2.2.6 安装集群(在ceph241节点执行)
- 切换到cephx用户:
su cephx
- 创建集群路径:
cd ~ && mkdir my-cluster && cd my-cluster
- 安装pip工具:
sudo yum install -y python-pip
- 创建集群:
ceph-deploy new ceph242
,ceph242为mon节点的主机名,注意更换 - 设置集群数量为2:
echo 'osd pool default size = 2' >> ceph.conf
- 安装ceph:
ceph-deploy install ceph242 ceph243 ceph244
- 部署mon节点:
ceph-deploy mon create-initial
- 将秘钥分发至其他节点:
ceph-deploy admin ceph242 ceph243 ceph244
- 部署mgr节点:
ceph-deploy mgr create ceph242
- 部署osd节点:
ceph-deploy osd create --data /dev/sdb ceph243
ceph-deploy osd create --data /dev/sdb ceph244
2.2.7 查看集群状态(在ceph242节点执行)
sudo ceph health
、sudo ceph -s
2.3 扩展
2.3.1 部署mds节点(在ceph241节点执行)
如果需要使用文件存储,则需要部署mds节点
ceph-deploy mds create ceph242
2.3.2 调整ceph.conf文件(在ceph241节点执行)
- 切换用户:
su cephx
- 进入集群目录:
cd ~/my-cluster
- 调整ceph.conf文件:
echo "public network = 10.10.2.1/24" >> ceph.conf
- 推动ceph.conf文件:
ceph-deploy --overwrite-conf config push ceph242 ceph243 ceph244
2.3.3 配置mon节点高可用(在ceph241节点执行)
ceph-deploy mon add ceph243
ceph-deploy mon add ceph244
2.3.4 配置mgr节点高可用(在ceph241节点执行)
ceph-deploy mgr create ceph243
ceph-deploy mgr create ceph244
2.3.5 部署rgw节点(在ceph241节点执行)
如果需要使用对象存储,则需要部署rgw节点
ceph-deploy rgw create ceph242
验证部署结果
curl ceph242:7480
或curl 10.10.2.242:7480
2.3.6 配置ISCSI服务
如果需要将块存储卷提供给其他虚拟机或物理机使用,则需要配置ISCSI服务
-
创建名为rbd的存储池(在ceph242节点执行):
ceph osd pool create rbd 8
-
初始化存储池(在ceph242节点执行):
rbd pool init rbd
-
配置ISCSI(在ceph242 ceph243 ceph244执行)
vi /etc/ceph/iscsi-gateway.cfg
[config]
cluster_name = ceph
gateway_keyring = ceph.client.admin.keyring
api_secure = false
api_user = admin
api_password = admin
api_port = 5001 -
启动ISCSI服务(在ceph242 ceph243 ceph244执行)
systemctl daemon-reload
systemctl enable rbd-target-gw
systemctl start rbd-target-gw
systemctl enable rbd-target-api
systemctl start rbd-target-api
3 使用(在ceph242节点执行)
3.1 对象存储
- 创建存储池:
ceph osd pool create object-pool 8
,其中block-pool为存储池名称,可自定义 - 创建一个文件:
echo "This is text content" >> /tmp/test.1
,其中test.1为文件名称,可自定义 - 将文件存储到ceph:
rados put test.object /tmp/test.1 --pool=object-pool
,其中test.object为对象名称,可自定义 - 查看ceph中存储的对象:
rados ls --pool=object-pool
- 下载ceph中存储的对象:
rados get test.object /tmp/test.2 --pool=object-pool
,其中test.2为文件名称,可自定义
3.2 块存储
3.2.1 创建存储卷
- 创建存储池:
ceph osd pool create block-pool 8
,其中block-pool为存储池名称,可自定义 - 初始化存储池:
rbd pool init block-pool
- 创建存储卷:
rbd create --size 1024 block-pool/block-image
,其中block-image为存储卷名称,可自定义 - 查询存储卷:
rbd list block-pool
3.2.2 通过ISCSI协议提供块存储服务
进入ISCSI配置窗口:gwcli
,执行如下命令:
cd /iscsi-targets
create iqn.2022-06.com.luyanchao.iscsi-target:test
cd iqn.2022-06.com.luyanchao.iscsi-target:test/gateways
create ceph242 10.10.2.242
create ceph243 10.10.2.243
create ceph244 10.10.2.244
cd /disks
create block-pool block-image 1G
cd /iscsi-targets/iqn.2022-06.com.luyanchao.iscsi-target:test/hosts
create iqn.2022-06.com.luyanchao.iscsi-host:test
auth administrator admin@123456
disk add block-pool/block-image
命令说明:
- 第2行的
iqn.2022-06.com.luyanchao.iscsi-target:test
可以自定义,但需要满足IQN命名规则 - 第8行的
block-pool
为上面创建的存储池名称,block-image
为上面创建的存储卷名称 - 第10行的
iqn.2022-06.com.luyanchao.iscsi-host:test
可以自定义,但需要满足IQN命名规则 - 第11行的
administrator
为用户名可自定义,admin@123456
为密码可自定义 - 第12行的
block-pool
为上面创建的存储池名称,block-image
为上面创建的存储卷名称
继续在gwcli
窗口执行ls /
,确认结果如下:
3.3.3 CentOS客户端连接ISCSI块存储服务
任选其他CentOS虚拟机或物理机
-
安装ISCSI客户端以及多路径映射软件:
yum install -y iscsi-initiator-utils device-mapper-multipath
-
创建默认的/etc/multipath.conf文件并启动multipathd服务:
mpathconf --enable --with_multipathd y
-
配置multipathd:
vi /etc/multipath.conf
在文件末尾追加如下内容
devices {
device {
vendor "LIO-ORG"
hardware_handler "1 alua"
path_grouping_policy "failover"
path_selector "queue-length 0"
failback 60
path_checker tur
prio alua
prio_args exclusive_pref_bit
fast_io_fail_tmo 25
no_path_retry queue
}
} -
重启multipathd服务:
systemctl reload multipathd
-
编辑/etc/iscsi/iscsid.conf文件
vi /etc/iscsi/iscsid.conf
- 找到
node.session.auth.authmethod
配置项,去掉前面的#
注释 - 找到
node.session.auth.username
配置项,去掉前面的#
注释,并将值改为administrator
- 找到
node.session.auth.password
配置项,去掉前面的#
注释,并将值改为admin@123456
- 找到
-
编辑/etc/iscsi/initiatorname.iscsi文件
vi /etc/iscsi/initiatorname.iscsi
,将内容改为:InitiatorName=iqn.2022-06.com.luyanchao.iscsi-host:test
其中
iqn.2022-06.com.luyanchao.iscsi-host:test
的来源见上文 -
执行ISCSI服务发现:
iscsiadm -m discovery -t st -p 10.10.2.242
,输出如下:10.10.2.242:3260,1 iqn.2022-06.com.luyanchao.iscsi-target:test
10.10.2.243:3260,2 iqn.2022-06.com.luyanchao.iscsi-target:test
10.10.2.244:3260,3 iqn.2022-06.com.luyanchao.iscsi-target:test可以看到,由于iscsi-targer配置了三个网关,所以这里面出现了三条数据,其中
iqn.2022-06.com.luyanchao.iscsi-target:test
和上文是一致的 -
连接ISCSI服务:
iscsiadm -m node -T iqn.2022-06.com.luyanchao.iscsi-target:test -l
-
查看磁盘挂载情况:
lsblk
,输出如下(省略部分内容):sdc 8:32 0 1G 0 disk
└─mpatha 253:2 0 1G 0 mpath
sdd 8:48 0 1G 0 disk
└─mpatha 253:2 0 1G 0 mpath
sde 8:64 0 1G 0 disk
└─mpatha 253:2 0 1G 0 mpath可以看到,由于iscsi-targer配置了三个网关,所以这里出现了三块磁盘,分别是
sdc
,sdd
,sde
。多路径(multipathd)服务基于这三个磁盘做了mapper映射 -
格式化:
mkfs.xfs /dev/mapper/mpatha
-
挂载:
mount /dev/mapper/mpatha /mnt
-
验证挂载情况:
df -h
-
验证读写性:
echo "This is test content" >> /mnt/test && cat /mnt/test
3.3 文件存储
3.3.1 创建文件存储相关存储池
ceph osd pool create cephfs_data 8
ceph osd pool create cephfs_metadata 8
注意:存储池名称不能变
3.3.2 创建文件存储
ceph fs new test cephfs_metadata cephfs_data
,其中,test
为文件存储名称
3.3.3 查看秘钥
cat /etc/ceph/ceph.client.admin.keyring
,有如下类似输出
[client.admin]
key = AQDcqqlikZszHRAA37t+Esz49gjJpzCWgYiU0g==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
记住上面的用户名和key的值,后面会用到
3.3.4 任选其他CentOS服务器或虚拟机
3.3.4.1 挂载
mount -t ceph 10.10.2.242:6789:/ /mnt -o name=admin,secret=AQDcqqlikZszHRAA37t+Esz49gjJpzCWgYiU0g==
,其中secret的取值则为上面的key,name的取值责任上面的用户名
3.3.4.2 验证读写性
echo "This is test content" >> /mnt/test && cat /mnt/test