一、Ceph集群的部署
1、集群环境
1.1 集群架构
主机名 | 业务IP | 存储IP | 服务器配置 | 系统类型 | 集群角色 |
---|---|---|---|---|---|
ceph-mon1-deploy | 172.17.10.61/16 | 192.168.10.61/24 | 2C/4G | Ubuntu1804 | mon+deploy(部署节点) |
ceph-mon2 | 172.17.10.62/16 | 192.168.10.62/24 | 2C/4G | Ubuntu1804 | mon(监控节点) |
ceph-mon3 | 172.17.10.63/16 | 192.168.10.63/24 | 2C/4G | Ubuntu1804 | mon |
ceph-mgr1 | 172.17.10.64/16 | 192.168.10.64/24 | 2C/4G | Ubuntu1804 | mgr(管理节点) |
ceph-mgr2 | 172.17.10.65/16 | 192.168.10.65/24 | 2C/4G | Ubuntu1804 | mgr |
ceph-node1 | 172.17.10.66/16 | 192.168.10.66/24 | 2C/4G | Ubuntu1804 | node(存储节点) |
ceph-node2 | 172.17.10.67/16 | 192.168.10.67/24 | 2C/4G | Ubuntu1804 | node |
ceph-node3 | 172.17.10.68/16 | 192.168.10.68/24 | 2C/4G | Ubuntu1804 | node |
1.2 环境初始化—网络
- 业务网络:puplic network (千兆)-----172.17.10.0/16
- 存储网络:cluster network (万兆)----192.168.10.0/24
1.2.1 网络配置
root@ceph-mon1:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
version: 2
ethernets:
eth0: #业务网络
dhcp4: no
dhcp6: no
addresses: [172.17.10.61/16]
gateway4: 172.17.1.2
nameservers:
addresses: [114.114.114.114]
eth1: #存储网络
dhcp4: no
dhcp6: no
addresses: [192.168.10.61/24]
nameservers:
addresses: [114.114.114.114]
version: 2
#其他主机依此配置业务IP和存储IP
1.3 创建普通用户—cephadmnin(每个节点都需要配置)
#创建普通用户的目的
推荐使用指定的普通用户部署和运行 ceph 集群,普通用户只要能以非交互方式执行 sudo
命令执行一些特权命令即可,新版的 ceph-deploy 可以指定包含 root 的在内只要可以执行
sudo 命令的用户,不过仍然推荐使用普通用户,安装完成 ceph 会自动创建 ceph 用户, 因
此 推 荐 使 用 除了 了 ceph 用 户 之 外 的 比如 如 cephuser 、cephadmin 这 样 的 普 通 用 户 去 部 署 和
管理 理 ceph 集 群 。
cephadmin 仅在 在 ceph-deploy 用 于 部 署 和 管理 理 ceph 集 群, , 比 如 首 次 初 始 化 集 群 和 部 署 集
群 、 添 加 节 点 、 删 除 节 点 等 ,ceph 集 群在 在 node 节 点 、mgr 节 点 等 会 使用 用 ceph 用 户 启 动
服 务 进 程
root@ceph-mon1:~# groupadd -r -g 2088 cephadmin && useradd -r -m -s /bin/bash -u 2088 -g 2088 cephadmin && echo cephadmin:root123 | chpasswd
#各服务器允许 cephadmin 用户以 sudo 执行特权命令
root@ceph-mon1:~# echo "cephadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
#切换到cephadmin用户
root@ceph-mon1:~#su - cephadmin
1.4 环境初始化–免密登录
#生成服务器的公钥和私钥
cephadmin@ceph-mon1:~$~#ssh-keygen
#免密登录
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.61
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.62
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.63
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.64
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.65
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.66
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.67
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.68
cephadmin@ceph-mon1:~$ssh-copy-id cephadmin@172.17.10.69
1.5 环境初始化–设置主机名
#设置主机名
root@ceph-mon1:~# hostnamectl set-hostname ceph-mon1
#配置/etc/hosts文件
cephadmin@ceph-mon1:~$ cat /etc/hosts
172.17.10.61 ceph-mon1.example.local ceph-mon1
172.17.10.62 ceph-mon2.example.local ceph-mon2
172.17.10.63 ceph-mon3.example.local ceph-mon3
172.17.10.64 ceph-mgr1.example.local ceph-mgr1
172.17.10.65 ceph-mgr2.example.local ceph-mgr2
172.17.10.66 ceph-node1.example.local ceph-node1
172.17.10.67 ceph-node2.example.local ceph-node2
172.17.10.68 ceph-node3.example.local ceph-node3
172.17.10.69 ceph-node4.example.local ceph-node4
#把/etc/hosts文件拷贝到其他节点
cephadmin@ceph-mon1:~$ for i in {62..69};do scp /etc/hosts 172.17.10.$i:/etc/hosts;done
1.6 环境初始化–配置apt源(每个节点都必须执行)
root@ceph-mon1:~# cat /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
#配置ceph源
root@ceph-mon1:~# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
#下载安装包
root@ceph-mon1:~#apt-get -y install python apt-transport-https ca-certificates curl software-properties-common
#更新apt源
root@ceph-mon1:~# apt update
1.7 环境初始化–时间同步
root@ceph-mon1:~# */5 * * * * /usr/sbin/ntpdate time1.aliyun.com &> /dev/null && hwclock -w &> /dev/null
1.8 环境初始化—下载安装ceph的部署工具
cephadmin@ceph-mon1:~$ apt install -y python-pip
cephadmin@ceph-mon1:~$ pip install ceph-deploy
cephadmin@ceph-mon1:~$ pip install ceph-deploy==2.0.1 -i https://mirrors.aliyun.com/pypi/simple
cephadmin@ceph-mon1:~$ ceph-deploy --version
2.0.1
2、部署ceph集群中的mon角色
2.1 在部署节点(ceph-mon1)上初始化mon节点
cephadmin@ceph-mon1:~$ mkdir ceph-cluster
cephadmin@ceph-mon1:~$ cd ceph-cluster
#ceph-deploy命令的介绍
cephadmin@ceph-mon1:ceph-cluster$ ceph-deploy --help
new:开始部署一个新的 ceph 存储集群,并生成 CLUSTER.conf 集群配置文件和 keyring
认证文件。
install: 在远程主机上安装 ceph 相关的软件包, 可以通过--release 指定安装的版本。
rgw:管理 RGW 守护程序(RADOSGW,对象存储网关)。
mgr:管理 MGR 守护程序(ceph-mgr,Ceph Manager DaemonCeph 管理器守护程序)。
mds:管理 MDS 守护程序(Ceph Metadata Server,ceph 源数据服务器)。
mon:管理 MON 守护程序(ceph-mon,ceph 监视器)。
gatherkeys:从指定获取提供新节点的验证 keys,这些 keys 会在添加新的 MON/OSD/MD
加入的时候使用。
disk:管理远程主机磁盘。
osd:在远程主机准备数据磁盘,即将指定远程主机的指定磁盘添加到 ceph 集群作为 osd
使用。
repo: 远程主机仓库管理。
admin:推送 ceph 集群配置文件和 client.admin 认证文件到远程主机。
config:将 ceph.conf 配置文件推送到远程主机或从远程主机拷贝。
uninstall:从远端主机删除安装包。
purgedata:从/var/lib/ceph 删除 ceph 数据,会删除/etc/ceph 下的内容。
purge: 删除远端主机的安装包和所有数据。
forgetkeys:从本地主机删除所有的验证 keyring, 包括 client.admin, monitor, bootstrap 等
认证文件。
pkg: 管理远端主机的安装包。
calamari:安装并配置一个 calamari web 节点,calamari 是一个 web 监控平台。
#初始化mon节点---生成集群配置文件
cephadmin@ceph-mon1:ceph-cluster$ ceph-deploy new --cluster-network 192.168.10.0/24 --public-network 172.17.0.0/16 ceph-mon1
cephadmin@ceph-mon1:ceph-cluster$ ll
-rw-r--r-- 1 root root 264 Jul 4 21:33 ceph.conf #ceph配置文件
-rw-r--r-- 1 root root 371488 Jul 4 23:06 ceph-deploy-ceph.log #初始化日志
-rw------- 1 root root 73 Jul 4 21:33 ceph.mon.keyring #用于ceph mon节点内部通讯认证的秘钥环文件
2.2 初始化node节点
cephadmin@ceph-mon1:ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3
#注意:
–no-adjust-repos #不同步仓库文件
–nogpgcheck #不检查校验
2.3 在mon节点上安装ceph-mon
root@ceph-mon1:~# apt install -y ceph-mon
root@ceph-mon1:~# ceph --version
ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)
安装过程会出现以下截图
2.4 在部署节点上初始化ceph-mon
注意:在初始化前一定先看ceph的配置文件ceph.conf,因为初始化mon节点取决于mon节点
root@ceph-mon1:~/ceph-cluster# cat ceph.conf
[global]
fsid = 0d2fd27a-4347-46fd-ac27-29f11ef10982
public_network = 172.17.0.0/16
cluster_network = 192.168.10.0/24
mon_initial_members = ceph-mon1
mon_host = 172.17.10.61
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
#检查完配置文件后,初始化mon节点
cephadmin@ceph-mon1:~$ ceph-deploy mon create-initial
#注意:初始化完后ceph-mon1节点上就会启动ceph-mon的进程
root@ceph-mon1:~ ps -ef|grep mon1
ceph 1009 1 0 03:42 ? 00:00:31 /usr/bin/ceph-mon -f --cluster ceph --id ceph-mon1 --setuser ceph --setgroup ceph
daemon 1039 1 0 03:42 ? 00:00:00 /usr/sbin/atd -f
message+ 1042 1 0 03:42 ? 00:00:02 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root 1111 1 0 03:42 ? 00:00:00 /usr/lib/accountsservice/accounts-daemon
root 57538 57505 0 04:55 pts/0 00:00:00 grep --color=auto mon
2.5 秘钥的分发
在ceph-deploy节点把配置文件和admin秘钥拷贝至ceph集群需要执行ceph管理命令的节点.从而不需要后期通过ceph命令对ceph集群进行管理配置的时候每次都需要指定ceph-mon节点地址和ceph.client.admin.keyring文件,另外各ceph-mon节点也需要同步ceph的集群配置文件和认证文件
1、在所有需要管理ceph的节点上安装ceph-common软件包(如:ceph-mgr1,ceph-mgr2等)
root@ceph-mon1:~ apt install ceph-common -y
2、分发秘钥
cephadmin@ceph-mon1 ceph-cluster$ ceph-deploy admin ceph-mon1 ceph-mgr1 ceph-mgr2 ceph-node1 ceph-node2 ceph-node3
#注意:
认证文件的属主和属组为了安全考虑,默认设置为了 root 用户和 root 组,如果需要 cephadmin用户也能执行 ceph 命令,那么就需要对 cephadmin 用户进行授权
cephadmin@ceph-mon1 ceph-cluster$ setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
cephadmin@ceph-mgr1 ceph-cluster$ setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
cephadmin@ceph-mgr2 ceph-cluster$ setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
cephadmin@ceph-node1 ceph-cluster$ setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
cephadmin@ceph-node2 ceph-cluster$ setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
cephadmin@ceph-node3 ceph-cluster$ setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
3、验证秘钥是否分发成功
root@ceph-mgr1:~# ssh ceph-node1 'ls /etc/ceph/'
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpHUGujm
root@ceph-mgr1:~# ssh ceph-node2 'ls /etc/ceph/'
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpZ4VQ0R
root@ceph-mgr1:~# ssh ceph-node3 'ls /etc/ceph/'
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpx9fb5U
root@ceph-mgr1:~# ssh ceph-mon1 'ls /etc/ceph/'
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpAkZh_I
root@ceph-mgr1:~# ls /etc/ceph/
ceph.client.admin.keyring ceph.conf rbdmap tmpYNJpSF
3、部署ceph集群中的mgr角色
3.1 在ceph-mgr节点上安装ceph-mgr包
root@ceph-mgr1:~# apt install ceph-mgr -y
root@ceph-mgr2:~# apt install ceph-mgr -y
3.2 在部署节点ceph-mon1上初始化ceph-mgr
#初始化mgr节点
cephadmin@ceph-mon1:~/ceph-cluster$ ceph-deploy mgr create ceph-mgr1
cephadmin@ceph-mon1:~/ceph-cluster$ ceph-deploy mgr create ceph-mgr2
#验证mgr是否安装完毕
root@ceph-mon1:~/ceph-cluster# ceph -s
cluster:
id: 0d2fd27a-4347-46fd-ac27-29f11ef10982
health: HEALTH_WARN
client is using insecure global_id reclaim
mon is allowing insecure global_id reclaim
services:
mon: 1 daemons, quorum ceph-mon1 (age 92m)
mgr: ceph-mgr1(active, since 91m), standbys: ceph-mgr2
osd: 9 osds: 9 up (since 91m), 9 in (since 30h)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 9.0 GiB used, 1.7 TiB / 1.8 TiB avail
pgs:
4、部署ceph集群中的OSD
4.1 在部署节点给node节点安装环境
#部署OSD
ceph-deploy install ceph-node01 ceph-node02 ceph-node03 ceph-node04
#查看node节点的磁盘信息
ceph-deploy disk list ceph-node01
#擦除node节点上磁盘数据
ceph-deploy disk zap ceph-node1 /dev/sdb ,/dev/sdc,/dev/sdd
ceph-deploy disk zap ceph-node2 /dev/sdb ,/dev/sdc,/dev/sdd
ceph-deploy disk zap ceph-node3 /dev/sdb ,/dev/sdc,/dev/sdd
4.2 添加OSD
数据的分类:
类型 | 含义 |
---|---|
Data | ceph保存的对象数据 |
Block | rocks DB数据即元数据 |
block-wal | 数据库的wal日志 |
4.2.1 元数据和数据全放一起
ceph-deploy osd create ceph-node01 --data /dev/sdb
4.2.2 数据分开放
一般会将wal放到nvme上,如果都是ssd就没必要拆开放了.
预写日志和数据日志分开,这个用的稍微多一点,
ceph-deploy osd create ceph-node01 --data /dev/sdc --block-wal /dev/sdb
#数据日志和元数据分开
ceph-deploy osd create ceph-node01 --data /dev/sdc --block-db /dev/sdd
#全部分开放
ceph-deploy osd create ceph-node01 --data /dev/sdc --block-db /dev/sdd --block-wal /dev/sdb
二、ceph集群的高可用
2.1 mon节点的高可用
2.1.1 在新加节点先安装ceph-mon包
apt install ceph-mon -y
2.1.2 在ceph-deploy上加入新节点
ceph-deploy mon add ceph-mon02
ceph-deploy mon add ceph-mon03
2.2 mgr节点的高可用
2.2.1 在新的节点安装ceph-mgr包
sudo apt install ceph-mgr -y
2.2.2 在ceph-deploy上加入新节点
eph-deploy mgr create ceph-mgr02
2.2.3 cehp-mgr主从关系
可以看到ceph-mgr01是主,ceph-mgr02是standbys
ceph -s
mgr: ceph-mgr01(active, since 52m), standbys: ceph-mgr02
入新节点
ceph-deploy mon add ceph-mon02
ceph-deploy mon add ceph-mon03
2.2 mgr节点的高可用
2.2.1 在新的节点安装ceph-mgr包
sudo apt install ceph-mgr -y
2.2.2 在ceph-deploy上加入新节点
eph-deploy mgr create ceph-mgr02
2.2.3 cehp-mgr主从关系
可以看到ceph-mgr01是主,ceph-mgr02是standbys
ceph -s
mgr: ceph-mgr01(active, since 52m), standbys: ceph-mgr02