Ubuntu部署Ceph

1 Ceph简介

ceph是一个分布式文件存储系统

ceph的主要组成部分包括:
Monitors:监视器,主要负责监视整个集群的健康状况
OSDs:存储数据、处理数据
Managers
MDSs:元数据服务器,为ceph文件存储元数据,仅在文件存储中使用

2 在Ubuntu上部署Ceph

2.1 实验硬件环境准备

新建三台虚拟机,均安装Ubuntu操作系统,每台虚拟机配置两块网卡和两个硬盘。
其中:
宿主机操作系统: Windows10
虚拟机软件:VMware Workstation
虚拟机操作系统1:Ubuntu2004LTS
虚拟机操作系统2:Ubuntu2004LTS
虚拟机操作系统3:Ubuntu2004LTS

每台虚拟机的配置:
Ubuntu部署Ceph_第1张图片

2.2 准备工作

因为要将三台虚拟机连接成集群,就需要对它们的主机名、互相之间的ssh密钥访问、时区等进行调整设置。方便起见,这些配置我都将在root用户下进行:

(1) 配置网络

root@yang:~$ vi /etc/netplan/00-installer-config.yaml
修改/添加:
!!其中IP地址和网关需根据自己虚拟机的网络状态进行配置
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses: [192.168.17.100/24]
      gateway4: 192.168.17.2
      nameservers:
        addresses: [202.201.13.22]
    ens37:
      dhcp4: no
      addresses: [192.168.17.101/24]
  version: 2

root@yang:~$ netplan apply

在三台虚拟机上分别进行如上操作,这里我三台虚拟机的IP分别设置为:

  • yang1:192.168.17.100 / 192.168.17.101
  • yang2:192.168.17.102 / 192.168.17.103
  • yang3:192.168.17.104 / 192.168.17.105

(2) 更改更新源并更新系统

root@yang:~$ vi /etc/apt/sources.list
# 直接在命令模式下替换URL:
:%s/cn.archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g
# 保存退出
:wq

root@yang:~$ apt update && apt upgrade -y

在三台虚拟机上分别进行如上操作。

(3) 设置允许root用户登录

Ubuntu默认是不允许以root用户登录的,为了方便后面操作,我们需要修改使其允许。

root@yang:~$ vi /etc/ssh/sshd_config
添加:
PermitRootLogin yes

root@yang:~$ systemctl restart sshd

在三台虚拟机上分别进行如上操作。

(4) 设置主机名和解析

在第一台虚拟机的root用户下:

# 修改主机名
root@yang:~$ hostnamectl set-hostname node0

# 添加主机名解析
root@yang:~$ vi /etc/hosts
添加:
!!IP地址需根据自己的设置进行修改
192.168.17.100 node0
192.168.17.102 node1
192.168.17.104 node2

# 使用scp命令将/etc/hosts文件复制到另外两台虚拟机上
root@yang:~$ scp /etc/hosts node1:/etc/
root@yang:~$ scp /etc/hosts node2:/etc/

# 然后分别进入第二、第三台虚拟机,将其主机名改为node1,node2

这里我设置三个节点的名称分别为node0,node1,node2。

(5) 设置时区,同步时间

root@node0:~$ timedatectl set-timezone Asia/Shanghai
root@node0:~$ vi /etc/systemd/timesyncd.conf
添加:
NTP=cg.lzu.edu.cn

root@node0:~$ systemctl restart systemd-timesyncd
root@node0:~$ timedatectl timesync-status

在三台虚拟机上分别进行如上操作,将时间都同步至cg.lzu.edu.cn服务器。

(6) 设置ssh免密认证

在node0的root用户下:

root@node0:~$ ssh-keygen
root@node0:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
root@node0:~$ vi ~/.ssh/config
添加:
Host *
StrictHostKeyChecking no

# 修改文件权限
root@node0:~$ chmod 600  ~/.ssh/config

# 将密钥复制到其他主机的root用户目录下
root@node0:~$ scp -r /root/.ssh node1:/root/
root@node0:~$ scp -r /root/.ssh node2:/root/

# 测试
root@node0:~$ ssh node1
root@node1:~$ ssh node2
root@node2:~$ ssh node0

若每两台虚拟机之间可以无需密码访问切换,则配置成功。

(7) 其他基本优化

在node0的root用户下:

root@node0:~$ vi /etc/sysctl.conf
添加:
fs.file-max = 10000000000
fs.nr_open = 1000000000

root@node0:~$ vi /etc/security/limits.conf
添加:
* soft nproc 102400
* hard nproc 104800
* soft nofile 102400
* hard nofile 104800
root soft nproc 102400
root hard nproc 104800
root soft nofile 102400
root hard nofile 104800

# 将这两个修改过的文件拷贝到其他节点
root@node0:~$ scp /etc/sysctl.conf node1:/etc/
root@node0:~$ scp /etc/sysctl.conf node2:/etc/
root@node0:~$ scp /etc/security/limits.conf node1:/etc/security/
root@node0:~$ scp /etc/security/limits.conf node2:/etc/security/

# 在三台虚拟机上分别执行以下命令,让内核参数生效,并重启
root@node0:~$ sysctl -p
root@node0:~$ reboot

至此,ceph安装部署的准备工作完毕。

2.3 CEPH集群手动安装部署

(0) 在每个节点安装ceph

# 添加 ceph 源证书
root@node0:~$ wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
# 添加 apt 源
root@node0:~$ echo deb https://download.ceph.com/debian-pacific/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
# 使用教育网镜像来提高访问速度
root@node0:~$ vi /etc/apt/sources.list.d/ceph.list
修改为:
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ focal main

root@node0:~$ apt update
root@node0:~$ apt -y install ceph
root@node0:~$ ceph -v

在三台虚拟机上分别进行如上操作,各节点需保证ceph版本一致。

(1) 创建并配置mon

# 登录到node0
root@node0:~$ ssh node0

# 给集群生成一个唯一 ID
root@node0:~$ uuidgen
de49c7d8-5c5b-483c-9bdd-8f214dc4343e
# 创建配置文件
root@node0:~$ vi /etc/ceph/ceph.conf
添加:
!!其中需要修改的:fsid为刚才生成的ID,mon host为当前主机IP,public network为服务网络,cluster network为集群网络。
[global]
fsid = de49c7d8-5c5b-483c-9bdd-8f214dc4343e
mon initial members = node0
mon host = 192.168.17.100
public network = 192.168.17.0/24
cluster network = 192.168.17.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 3                        
osd pool default min size = 2                  
osd pool default pg num = 16               
osd pool default pgp num = 16
osd crush chooseleaf type = 1

# 为集群生成一个 mon 密钥环
root@node0:~$ sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

# 生成管理密钥环
root@node0:~$ sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

# 生成 bootstrap-osd 密钥环
root@node0:~$ sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'

# 将生成的密钥环导入
root@node0:~$ sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
root@node0:~$ sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

# 修改权限
root@node0:~$ sudo chown ceph:ceph /tmp/ceph.mon.keyring

# 生成监视图
# !!注意更改主机名、ip和fsid
root@node0:~$ monmaptool --create --add node0 192.168.17.100 --fsid de49c7d8-5c5b-483c-9bdd-8f214dc4343e /tmp/monmap

# 创建节点 mon 目录,默认命名格式为ceph-hostname
root@node0:~$ sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node0

# 初始化
root@node0:~$ sudo -u ceph ceph-mon --mkfs -i node0 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

# 启动服务并查看状态
root@node0:~$ systemctl restart ceph-mon@node0
root@node0:~$ systemctl enable ceph-mon@node0
root@node0:~$ systemctl status ceph-mon@node0

# 为防止重新安装创建一个空的 done 文件
root@node0:~$ touch /var/lib/ceph/mon/ceph-node0/done

现在,node0的mon节点已经创建完毕,需要在node1和node2也分别创建一个mon节点:

# 将配置文件拷贝
root@node0:~$ scp -r /etc/ceph/ node1:/etc/

# 到node1创建mon
root@node0:~$ ssh node1
root@node1:~$ sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node1

# 在临时目录获取监视器密钥环
root@node1:~$ ceph auth get mon. -o /tmp/ceph.mon.keyring

# 获取监视器运行图
root@node1:~$ ceph mon getmap -o /tmp/ceph.mon.map

# 修改 ceph.mon.keyring 属主和属组为 ceph
root@node1:~$ chown ceph.ceph /tmp/ceph.mon.keyring

# 初始化 mon
root@node1:~$ sudo -u ceph ceph-mon --mkfs -i node1 --monmap /tmp/ceph.mon.map --keyring /tmp/ceph.mon.keyring

# 为了防止重新被安装创建一个空的 done 文件
root@node1:~$ touch /var/lib/ceph/mon/ceph-node1/done

# 启动服务,它会自动加入集群
root@node1:~$ systemctl start ceph-mon@node1
root@node1:~$ systemctl enable ceph-mon@node1
root@node1:~$ systemctl status ceph-mon@node1

然后 ssh node2,在node2虚拟机上重复上面过程,注意将node1换成node2。
验证:

# 查看集群验证
root@node0:~$ ceph –s
# 若有警告则消除警告:
root@node1:~$ ceph mon enable-msgr2
root@node1:~$ ceph config set mon auth_allow_insecure_global_id_reclaim false
root@node0:~$ ceph –s

Ubuntu部署Ceph_第2张图片

(2) 添加osd

这里我们在每个节点都添加一个osd
进入node0的root用户下:

# 登录到node0
root@node0:~$ ssh node0

# 密钥环从初始 mon 节点拷贝到其他节点相同目录下
root@node0:~$ scp /var/lib/ceph/bootstrap-osd/ceph.keyring node1:/var/lib/ceph/bootstrap-osd/
root@node0:~$ scp /var/lib/ceph/bootstrap-osd/ceph.keyring node2:/var/lib/ceph/bootstrap-osd/

# 在node0添加osd
root@node0:~$ ls /dev/sd*
root@node0:~$ sudo ceph-volume lvm create --data /dev/sdb
# osd会默认自动启动,只需要设置开机自启动
root@node0:~$ systemctl enable ceph-osd@0
# 查看osd和osd服务状态
root@node0:~$ ceph osd tree
root@node0:~$ systemctl status ceph-osd@0


# 在node1添加osd
root@node0:~$ ssh node1
root@node1:~$ ls /dev/sd*
root@node1:~$ sudo ceph-volume lvm create --data /dev/sdb
# osd会默认自动启动,只需要设置开机自启动
root@node1:~$ systemctl enable ceph-osd@1
# 查看osd和osd服务状态
root@node1:~$ ceph osd tree
root@node1:~$ systemctl status ceph-osd@1


# 在node2添加osd
root@node1:~$ ssh node2
root@node2:~$ ls /dev/sd*
root@node2:~$ sudo ceph-volume lvm create --data /dev/sdb
# osd会默认自动启动,只需要设置开机自启动
root@node2:~$ systemctl enable ceph-osd@2
# 查看osd和osd服务状态
root@node2:~$ ceph osd tree
root@node2:~$ systemctl status ceph-osd@2

# 查看集群验证
ceph -s

Ubuntu部署Ceph_第3张图片

(3) 添加mgr

# 登录到node0
root@node0:~$ ssh node0

# 创建密钥环
root@node0:~$ ceph auth get-or-create mgr.node0 mon 'allow profile mgr' osd 'allow *' mds 'allow *'

# 创建 mgr 节点目录
root@node0:~$ sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node0/

# 将 mgr 节点密钥环输出到 mgr 节点目录下
root@node0:~$ ceph auth get mgr.node0 -o /var/lib/ceph/mgr/ceph-node0/keyring

# 启动服务
root@node0:~$ systemctl start ceph-mgr@node0
root@node0:~$ systemctl enable ceph-mgr@node0
root@node0:~$ systemctl status ceph-mgr@node0

# 查看集群验证
ceph -s

Ubuntu部署Ceph_第4张图片

这里我们只在node0安装了一个mgr,实际中mgr可以安装两个,这样当一个主节失效后另一个节点继续可以为集群服务。

在实际应用中,ceph 主要用来提供块存储,目前已基本安装就绪。

(4) 启用DashBoard(可选)

Ceph 自带一个 web 管理控制面板,经配置可使用,它默认是依赖于 MGR 的。

# 登录到node0(mgr所在节点)
root@node0:~$ ssh node0

# 启用 dashboard
root@node0:~$ ceph mgr module enable dashboard

# 自创建安装证书
root@node0:~$ ceph dashboard create-self-signed-cert
root@node0:~$ openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca
root@node0:~$ ceph dashboard set-ssl-certificate -i dashboard.crt
root@node0:~$ ceph dashboard set-ssl-certificate-key -i dashboard.key
# !!注意更改IP
root@node0:~$ ceph config set mgr mgr/dashboard/server_addr 192.168.17.100
root@node0:~$ ceph config set mgr mgr/dashboard/server_port 8080
root@node0:~$ ceph config set mgr mgr/dashboard/ssl_server_port 8443

# 创建密码文件,内容为 web 管理用户密码
root@node0:~$ vi /root/cephpasswd
添加密码(可自行设置):
node0admin123456

root@node0:~$ ceph dashboard ac-user-create admin -i /root/cephpasswd administrator

# 查看配置
root@node0:~$ ceph config dump

# 重启 mgr 服务
root@node0:~$ systemctl restart ceph-mgr@node0

此时可以从浏览器通过 https://IP:8443 访问DashBoard,进行管理。用户名为admin,密码为刚才设置文件中的密码。
Ubuntu部署Ceph_第5张图片

(5) 块存储

在集群中(node0)配置块存储:

# 登录到node0
root@node0:~$ ssh node0

# 手动创建rbd池,并初始化
root@node0:~$ ceph osd pool create rbd 16
root@node0:~$ ceph osd lspools
root@node0:~$ rbd pool init rbd

# 创建一个 10G 的盘 disk01,并查看
root@node0:~$ rbd create disk01 --size 10G --image-feature layering
root@node0:~$ rbd ls –l

# 映射到node0本地,并查看映射情况
root@node0:~$ rbd map disk01
root@node0:~$ rbd showmapped

# 格式化该硬盘
root@node0:~$ sudo mkfs.xfs /dev/rbd0

# 挂载硬盘并查看
root@node0:~$ sudo mount /dev/rbd0 /mnt
root@node0:~$ df -kh

# 断开挂载
root@node0:~$ umount /mnt

# (实验中无需执行):
# 断开映射
root@node0:~$ rbd device unmap disk01
# 删除硬盘
root@node0:~$ rbd remove disk01

在服务器中为客户端创建授权:

# 创建用户client.rbd
root@node0:~$ ceph auth get-or-create client.rbd

# 授予权限给用户
root@node0:~$ ceph auth caps client.rbd mon 'allow r' osd 'allow rwx pool=rbd'

# 获取该用户的权限列表并导出该文件
root@node0:~$ ceph auth get client.rbd -o /etc/ceph/client.rbd.keyring

客户端使用块存储:

# 在客户端安装ceph
root@client:~$ wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add
root@client:~$ echo deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ focal main | sudo tee /etc/apt/sources.list.d/ceph.list
root@client:~$ apt update
root@client:~$ apt -y install ceph-common

# 从服务器获得client.rbd.keyring文件保存至本地/etc/ceph/
root@client:~$ scp 192.168.17.100:/etc/ceph/client.rbd.keyring /etc/ceph/

# 从服务器获得ceph.conf文件并修改
root@client:~$ scp 192.168.17.100:/etc/ceph/ceph.conf /etc/ceph/
root@client:~$ vi /etc/ceph/ceph.conf
修改/添加,只保留[global][client.rdb][global]
fsid = xxxxxxxxxxxxxxx
mon initial members = node0
mon host = 192.168.17.100
public network = 192.168.17.0/24
cluster network = 192.168.17.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
[client.rbd]
keyring=/etc/ceph/client.rbd.keyring

# 客户端连接测试
root@client:~$ ceph -s --user rbd
root@client:~$ ceph osd lspools --user rbd

# 查看镜像
root@client:~$ rbd ls -l --id rbd
# 映射到本地并查看
root@client:~$ rbd map disk01 --id rbd
root@client:~$ rbd showmapped  --user id
# 格式化
root@client:~$ mkfs.xfs /dev/rbd0 
# 挂载
root@client:~$ mount /dev/rbd0 /mnt 
root@client:~$ df -hT 

此时集群上的disk01硬盘被映射成了客户端本地的rbd0硬盘,就可以像使用本地硬盘一样使用了(进行格式化、挂载、查看、存储等操作)。

(6) 文件存储

在集群中添加MDS服务:

# 登录到node0
root@node0:~$ ssh node0

# 创建目录
root@node0:~$ sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node0

# 生成 mds.node0 密钥
root@node0:~$ ceph auth get-or-create mds.node0 osd "allow rwx" mds "allow" mon "allow profile mds"

# 导出 mds 密钥
root@node0:~$ ceph auth get mds.node0 -o /var/lib/ceph/mds/ceph-node0/keyring

# 在 ceph.conf 中添加配置
root@node0:~$ vi /etc/ceph/ceph.conf
添加:
[mds.node0]
host = node0

# 启动服务
root@node0:~$ systemctl start ceph-mds@node0
root@node0:~$ systemctl enable ceph-mds@node0
root@node0:~$ systemctl status ceph-mds@node0

# 查看集群
root@node0:~$ ceph -s

# 创建文件存储所需存储池,文件存储服务 data 数据需要一个存储池,meta 数据一个存储池。
root@node0:~$ ceph osd pool create cephfs_data 16
root@node0:~$ ceph osd pool create cephfs_metadata 16
root@node0:~$ ceph fs new cephfs cephfs_metadata cephfs_data
root@node0:~$ ceph fs ls
root@node0:~$ ceph mds stat

客户端使用文件存储:

# 在客户端安装ceph
root@client:~$ wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add
root@client:~$ echo deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ focal main | sudo tee /etc/apt/sources.list.d/ceph.list
root@client:~$ apt update
root@client:~$ apt -y install ceph-fuse ceph-common

# 将 ceph.conf 拷贝至客户端目录下
root@client:~$ mkdir /etc/ceph
root@client:~$ scp 192.168.17.100:/etc/ceph/ceph.conf /etc/ceph/

# 将管理员密钥环拷贝过来(实际应用中不安全,仅供测试,实际应用中需要创建新用户)
root@client:~$ scp 192.168.17.100:/etc/ceph/ceph.client.admin.keyring /etc/ceph/keyring

# 挂载并查看
root@client:~$ mount -t ceph 192.168.17.100:6789:/ /mnt -o name=admin
root@client:~$ df –kh

# 取消挂载
root@client:~$ umount /mnt

此时可以通过访问/操作客户端本地的/mnt来访问/操作集群中的文件。

(7) 对象存储

在集群中添加对象存储服务(radosgw):

# 登录到node0
root@node0:~$ ssh node0

# 安装radosgw
root@node0:~$ apt -y install radosgw

# 修改ceph.conf
root@node0:~$ vi /etc/ceph/ceph.conf
添加:
[client.rgw.node0]
host = node0
rgw frontends = "civetweb port=10001"
rgw dns name = node0

# 为radosgw的node0创建文件夹
root@node0:~$ sudo -u ceph mkdir -p /var/lib/ceph/radosgw/ceph-rgw.node0

# 将密钥环输出至rgw-node0
root@node0:~$ ceph auth get-or-create client.rgw.node0 osd 'allow rwx' mon 'allow rw' -o /var/lib/ceph/radosgw/ceph-rgw.node0/keyring

# 启动服务
root@node0:~$ systemctl enable --now [email protected]
# 会 自 动 生 成 .rgw.root 与 default.rgw.log 与 default.rgw.control 与 default.rgw.meta 与default.rgw.buckets.index 默认存储池,类型均为 rgw。
root@node0:~$ ceph osd lspools

# 若提示超过最大PG数,可通过下面步骤修改PG,若无提示则忽略下面步骤
root@node0:~$ vi /etc/ceph/ceph.conf
添加/修改:
[global]
osd pool default pg num = 16
osd pool default pgp num = 16
mon_max_pg_per_osd = 1000
# 重启mon并修改pg和pgp
root@node0:~$ systemctl restart ceph-mon@node0
root@node0:~$ ceph osd pool set default.rgw.log pg_num 16
root@node0:~$ ceph osd pool set default.rgw.log pgp_num 16

# 创建admin用户
root@node0:~$ radosgw-admin user create --uid="admin" --display-name="admin user" --system

# 查询账户信息
root@node0:~$ radosgw-admin user info --uid=admin
root@node0:~$ radosgw-admin user list

# 分别将上面admin账户信息中的access_key和secret_key复制粘贴到两个新建的空文件中
root@node0:~$ vi rgw_access_key
添加:
xxxxxx

root@node0:~$ vi rgw_secret_key
添加:
xxxxxxx

# 将radosgw集成到dashboard
root@node0:~$ ceph dashboard set-rgw-api-ssl-verify false
root@node0:~$ ceph dashboard set-rgw-api-access-key -i rgw_access_key
root@node0:~$ ceph dashboard set-rgw-api-secret-key -i rgw_secret_key

此时就可以通过dashboard (https://IP:8443) 来创建用户和buckey,并授权了。

(8) iscsi

服务器端配置:(仅配置node0)

# 登录到node0
root@node0:~$ ssh node0

# 修改cepn.conf
root@node0:~$ vi /etc/ceph/ceph.conf
添加/修改:
[osd]
osd heartbeat grace = 20
osd heartbeat interval = 5

root@node0:~$ ceph tell osd.* config set osd_heartbeat_grace 20
root@node0:~$ ceph tell osd.* config set osd_heartbeat_interval 5

# 安装ceph-iscsi
root@node0:~$ apt update
root@node0:~$ apt install ceph-iscsi

# 修改配置
root@node0:~$ 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
trusted_ip_list = 192.168.17.100,192.168.17.102,192.168.17.104

# 启动(重启)服务
root@node0:~$ systemctl enable --now tcmu-runner
root@node0:~$ systemctl enable --now rbd-target-gw
root@node0:~$ systemctl enable --now rbd-target-api
root@node0:~$ systemctl restart tcmu-runner
root@node0:~$ systemctl restart rbd-target-gw
root@node0:~$ systemctl restart rbd-target-api

# 将iscsi服务添加到dashboard中
root@node0:~$ vi iscsigw1
添加:
http://admin:admin@node0:5001

root@node0:~$ ceph dashboard set-iscsi-api-ssl-verification false
root@node0:~$ ceph dashboard iscsi-gateway-add -i iscsigw1
root@node0:~$ ceph dashboard iscsi-gateway-list

# 配置 iSCSI Target 将一个 rbd 镜像输出为 LUN0
root@node0:~$ gwcli
/> ls
# 添加target
/> cd /iscsi-targets
/> create iqn.2022-01.com.test:test1
/> cd iqn.2022-01.com.test:test1/gateways
/> create node0 192.168.17.100
# 添加镜像
/> cd /disks
/> create pool=rbd image=disk_1 size=10G
# 添加客户端,并为客户端添加硬盘、设置认证
/> cd /iscsi-targets/iqn.2022-01.com.test:test1/hosts
/> create iqn.2022-03.cn.edu.lzu.cg:desktop-cg2021
/> cd iqn.2022-03.cn.edu.lzu.cg:desktop-cg2021
/> disk add rbd/disk_1
/> auth username=username2022 password=password2022
/> ls
/> exit

客户端使用iscsi:

# 安装iscsi
root@client:~$ apt -y install open-iscsi multipath-tools

# 配置open-iscsi
root@client:~$ vi /etc/iscsi/initiatorname.iscsi
修改:(!!注意修改镜像名称)
InitiatorName=iqn.2022-03.cn.edu.lzu.cg:desktop-cg2021

root@client:~$ vi /etc/iscsi/iscsid.conf
添加/修改:(!!注意修改用户名和密码)
node.session.auth.authmethod = CHAP
node.session.auth.username = username2022
node.session.auth.password = password2022

root@client:~$ systemctl restart iscsid open-iscsi

# 配置multipath
root@client:~$ 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
  }
}

# 重启multipath
root@client:~$ systemctl restart multipathd

# 发现target
root@client:~$ iscsiadm -m discovery -t st -p 192.168.17.100

# 查看状态
root@client:~$ iscsiadm -m node -o show

# 登录
root@client:~$ iscsiadm -m node --login

# 查看会话
root@client:~$ iscsiadm -m session -o show

# 查看multipath
root@client:~$ multipath -ll

# 注销会话
root@client:~$ iscsiadm -m node --logout

3 总结

总的来说,ceph的基本组成部分包括:mon,osd,mgr;能实现的基本功能包括:块存储服务,文件存储服务,对象存储服务。 当然,ceph的功能不只这些,还可以作为openstack的后端存储等等,需要学习的还有很多。

你可能感兴趣的:(ubuntu,ceph,linux)