Ceph: ceph集群部署--基于cephadm

ceph集群部署–基于cephadm

使用cephadm工具部署一个ceph集群。

一、机器规划(Ubuntu 20.04.2 LTS)

192.168.152.11(mon-01) 2C2G mon、mgr
192.168.152.21(node-01) 4C4G osd 50G x 2
192.168.152.22(node-02) 4C4G osd 50G x 1

二、环境准备

1、ntp对时(所有机器)

apt-get -y install ntpstat
apt-get -y install ntp
systemctl start ntp
ntpstat(显示本机上一次和服务器同步时间的情况)

2、添加域名解析(所有机器)

## 主机名必须要和所解析的域名相同
vim /etc/hosts
...
192.168.152.11 mon-01
192.168.152.21 node-01
192.168.152.22 node-02

3、免密登录

## mon节点要对能对其他节点免密登录,在mon机器上创建 /tmp/hosts 文件,写入机器信息以及密码,执行脚本进行批量传密钥
root@mon-01:~# cat /tmp/hosts
node-01 1
node-02 1
mon-01 1

# 然后执行以下脚本即可
root@mon-01:~# cat ssh-nopasswd.sh
#!/usr/bin/env bash
dpkg -s expect &> /dev/null
result=$(echo $?)
[[ ${result} -ne 0 ]] && apt-get -y install expect &> /dev/null && echo "Expect installed successfully!" || echo "Expect already exists!"

if [ ! -f /root/.ssh/id_rsa ];then
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
else
echo "id_rsa has created...Ready to go!"
fi

hostInfoPath="/tmp/hosts" ## 将需要接收公钥的主机以及密码写在/tmp/hosts文件中,每行代表一台主机,如: xx.xx.xx.xx 123abc!!!
num=$(grep -c "" ${hostInfoPath})
expectPath=$(which expect)
for i in $(seq 1 ${num})
do
hostname=$(awk -v line_num=${i} 'NR==line_num{print $1}' ${hostInfoPath})
passwd=$(awk -v line_num=${i} 'NR==line_num{print $2}' ${hostInfoPath})
${expectPath} <<EOF
set timeout 60
spawn ssh-copy-id -i ${hostname}
expect {
"yes/no" { send "yes\n"; exp_continue}
"password" { send "${passwd}\n" }
}
exit -onexit {
send_user "${hostname} done!\n"
}
expect eof
EOF
done
rm -rf ${hostInfoPath}

root@mon-01:~# bash ssh-nopasswd.sh
## 执行成功之后,尝试ssh连接看看是否还需要密码

4、安装python3(所有机器)

## Ubuntu 20.04.2 LTS 默认自带python3.8
root@mon-01:~# python3 -V
Python 3.8.5

5、安装Docker(所有机器)

$ 下面使用的是配置docker源的方式安装docker,当然也有其他方式安装,能安装成功即可
#使用 apt-get 进行安装
# step 1: 安装必要的一些系统工具
apt-get update
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
apt-get -y update
apt-get -y install docker-ce ## 默认安装最新版本
# Step 5:查看进程和版本
root@mon-01:~# systemctl status docker.service
root@mon-01:~# docker version
Client: Docker Engine - Community
Version: 20.10.8
API version: 1.41
...

# Step 6:配置docker镜像加速
root@mon-01:~# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://hub-mirror.c.163.com", # 网易163镜像加速
"https://docker.mirrors.ustc.edu.cn" # 中科大镜像加速
]
}
root@mon-01:~# systemctl restart docker.service
=========================================================================================
# 如果要安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
root@mon-01:~# apt-cache madison docker-ce
docker-ce | 5:20.10.8~3-0~ubuntu-focal | https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal/stable amd64 Packages
docker-ce | 5:20.10.7~3-0~ubuntu-focal | https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal/stable amd64 Packages
docker-ce | 5:20.10.6~3-0~ubuntu-focal | https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal/stable amd64 Packages
...
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的20.10.8~3-0~ubuntu-focal)
# sudo apt-get -y install docker-ce=[VERSION]

6、修改主机配置

当一个主机有大量的OSD时(大于20)可能会产生大量的线程,尤其是在数据进行恢复和重新平衡期间,可以修改主机线程配置(在/etc/sysctl.conf文件中添加kernel.pid_max = 4194303)
root@host27:/opt/ceph-master# sysctl -a|grep pidkernel.cad_pid = 1kernel.core_uses_pid = 0kernel.ns_last_pid = 12891kernel.pid_max = 40960

三、部署Ceph

1、安装cephadm(mon-01)

root@mon-01:~# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm # 可能要执行两次

root@mon-01:~# chmod +x cephadm # 注意,这个脚本不要放到环境变量中去
root@mon-01:~# ./cephadm add-repo --release pacific
Installing repo GPG key from https://download.ceph.com/keys/release.gpg...
Installing repo file at /etc/apt/sources.list.d/ceph.list...
Updating package list...
Completed adding repo.

root@mon-01:~# sed -ri.bak 's#download\.ceph\.com#mirrors\.aliyun\.com/ceph#g' /etc/apt/sources.list.d/ceph.list

root@mon-01:~# ./cephadm install
Installing packages ['cephadm']...
root@mon-01:~# which cephadm
/usr/sbin/cephadm # 出现命令则说明成功

2、添加mon节点(bootstrap a cluster (mon + mgr daemons))(mon-01)

root@mon-01:~# cephadm bootstrap --mon-ip 192.168.152.11
Creating directory /etc/ceph for ceph.conf
Verifying podman|docker is present...
Verifying lvm2 is present...
...
Ceph Dashboard is now available at:

URL: https://mon-01:8443/
User: admin
Password: 0lvww2mfrg ## 记录下来,登录后改密码 12345678
# --initial-dashboard-user xxx --initial-dashboard-password xxxx
# 可以在bootstrap接以上参数自定义用户名密码

You can access the Ceph CLI with:

sudo /usr/sbin/cephadm shell --fsid e7e88ff8-0a27-11ec-8a93-f399d087a6b5 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Please consider enabling telemetry to help improve Ceph:

ceph telemetry on

For more information see:

https://docs.ceph.com/docs/master/mgr/telemetry/

Bootstrap complete.
=========================================================================================
此命令将会进行以下操作:
为本地主机上的新群集创建monitor和manager守护程序。
为 Ceph 群集生成新的 SSH 密钥,并将其添加到root用户的文件/root/.ssh/authorized_keys
将与新群集通信所需的最小配置文件保存到 /etc/ceph/ceph.conf
将client.admin管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring
将公钥的副本写入/etc/ceph/ceph.pub

PS:查看容器,此时已经运行了以下组件
ceph-mgr ceph管理程序
ceph-monitor ceph监视器
ceph-crash 崩溃数据收集模块
prometheus prometheus监控组件
grafana 监控数据展示dashboard
alertmanager prometheus告警组件
node_exporter prometheus节点数据收集组件
=========================================================================================
## cephadm不支持原生的ceph命令,要进入 cephadm shell才可以使用ceph命令
root@mon-01:~# cephadm shell
Inferring fsid e7e88ff8-0a27-11ec-8a93-f399d087a6b5
Inferring config /var/lib/ceph/e7e88ff8-0a27-11ec-8a93-f399d087a6b5/mon.mon-01/config
Using recent ceph image ceph/ceph@sha256:056637972a107df4096f10951e4216b21fcd8ae0b9fb4552e628d35df3f61139
root@mon-01:/# ceph -s
cluster:
id: e7e88ff8-0a27-11ec-8a93-f399d087a6b5
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3

services:
mon: 1 daemons, quorum mon-01 (age 15m)
mgr: mon-01.ageacl(active, since 15m)
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:

## 如果想要命令行使用ceph原生命令,可以按照以下两种办法
$ 方法一:
root@mon-01:~# cephadm shell -- ceph -s
Inferring fsid e7e88ff8-0a27-11ec-8a93-f399d087a6b5
Inferring config /var/lib/ceph/e7e88ff8-0a27-11ec-8a93-f399d087a6b5/mon.mon-01/config
Using recent ceph image ceph/ceph@sha256:056637972a107df4096f10951e4216b21fcd8ae0b9fb4552e628d35df3f61139
cluster:
id: e7e88ff8-0a27-11ec-8a93-f399d087a6b5
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3

services:
mon: 1 daemons, quorum mon-01 (age 19m)
mgr: mon-01.ageacl(active, since 19m)
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
$ 方法二 # 安装ceph-common工具,使bash支持原生命令
root@mon-01:~# cephadm install ceph-common
Installing packages ['ceph-common']...
root@mon-01:~# ceph -s
cluster:
id: e7e88ff8-0a27-11ec-8a93-f399d087a6b5
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3

services:
mon: 1 daemons, quorum mon-01 (age 18m)
mgr: mon-01.ageacl(active, since 17m)
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:

3、添加osd(node-1、node-2)

## 将ceph生成的公钥传给其他节点
root@mon-01:~# ssh-copy-id -f -i /etc/ceph/ceph.pub root@node-01
root@mon-01:~# ssh-copy-id -f -i /etc/ceph/ceph.pub root@node-02
## 注意,虽然前面已经做过了免密登录,但是这个公钥还是要传到其他节点,因为这是cephadm管理集群需要用的公钥

# 禁用自动部署mon节点,否则每添加一个节点,都会在节点上自动部署一个mon,默认最多自动部署5个
root@mon-01:~# ceph orch apply mon --unmanaged
Scheduled mon update...

# 在node节点安装lvm2
root@node-01:~# apt-get -y install lvm2
=================================================================
不然添加节点的时候会报错
root@mon-01:~# ceph orch host add node-01
Error EINVAL: New host node-01 (node-01) failed check: ['podman|docker (/usr/bin/docker) is present', 'systemctl is present', 'Unit ntp.service is enabled and running', 'Hostname "node-01" matches what is expected.', 'ERROR: lvcreate binary does not appear to be installed']
==================================================================

# 添加节点
root@mon-01:~# ceph orch host add node-01 # 只能使用主机名添加
Added host 'node-01'
root@mon-01:~# ceph orch host add node-02
Added host 'node-02'

4、标记osd节点(node-1、node-2)

root@mon-01:~# ceph orch host label add node-01 osd
Added label osd to host node-01
root@mon-01:~# ceph orch host label add node-02 osd
Added label osd to host node-02

root@mon-01:~# ceph orch host ls
HOST ADDR LABELS STATUS
mon-01 mon-01
node-01 node-01 osd
node-02 node-02 osd

5、创建新的osd

root@mon-01:~# ceph orch daemon add osd node-01:/dev/sdb
Created osd(s) 0 on host 'node-01'

## 查看所有可用设备(即可以继续添加的设备)
root@mon-01:~# ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
node-01 /dev/sdc hdd 53.6G Unknown N/A N/A Yes
node-01 /dev/sdb hdd 53.6G Unknown N/A N/A No # 刚刚已经添加过了,所以不能再添加
node-02 /dev/sdb hdd 53.6G Unknown N/A N/A Yes

===========================================================
Ceph拒绝在不可用的设备上配置OSD,满足以下所有条件,则认为存储设备可用:
设备必须没有分区。
设备不得具有任何LVM状态。
不得安装设备。
该设备不得包含文件系统。
该设备不得包含Ceph BlueStore OSD。
设备必须大于5 GB。
=============================================================
root@mon-01:~# ceph orch daemon add osd node-01:/dev/sdc
Created osd(s) 1 on host 'node-01'
root@mon-01:~# ceph orch daemon add osd node-02:/dev/sdb
Created osd(s) 2 on host 'node-02'
root@mon-01:~# ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
node-01 /dev/sdb hdd 53.6G Unknown N/A N/A No
node-01 /dev/sdc hdd 53.6G Unknown N/A N/A No
node-02 /dev/sdb hdd 53.6G Unknown N/A N/A No
===================================================================
root@node-01:~# lsblk
.....
└─sda5 8:5 0 99.5G 0 part /
sdb 8:16 0 50G 0 disk
└─ceph--3ae21424--f9a3--44cb--90d6--589ed2b06895-osd--block--7b204fdc--9cec--4b81--9199--dfeee0f14ba9 253:0 0 50G 0 lvm
sdc 8:32 0 50G 0 disk
└─ceph--9d73bfdf--bda8--48a0--aaf0--2fabc624acdf-osd--block--f7431a16--c030--4dcf--bff3--71947695a4eb 253:1 0 50G 0 lvm
## 可以看到,添加osd的磁盘变成了逻辑卷lvm,这就是为什么要在osd的节点安装lvm2的原因

6、检查状态

root@mon-01:~# ceph -s
cluster:
id: e7e88ff8-0a27-11ec-8a93-f399d087a6b5
health: HEALTH_OK

services:
mon: 1 daemons, quorum mon-01 (age 54m)
mgr: mon-01.ageacl(active, since 53m), standbys: node-01.jejgqn
osd: 3 osds: 3 up (since 5m), 3 in (since 5m); 1 remapped pgs

data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 147 GiB / 150 GiB avail
pgs: 1 active+clean

至此,一个最小化的ceph节点就搭建好了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值