Ceph环境搭建

ceph环境搭建

一、节点规划

4个节点,1个管理节点,3个ceph节点。

hostnameIPalias
xjcc-10-7010.100.70.10admin-node
xjcc-11-7010.100.70.11node1
xjcc-12-7010.100.70.12node2
xjcc-13-7010.100.70.13node3
xjcc-20-7010.100.70.20client
  1. 修改host文件
sudo vim /etc/hosts
  1. 追加
# The following lines are used for ceph
10.100.70.10 xjcc-10-70
10.100.70.11 xjcc-11-70
10.100.70.12 xjcc-12-70
10.100.70.13 xjcc-13-70

二、准备工作&ceph-deploy安装

1.ceph-deploy setup(所有节点)

  1. 将Ceph存储库添加到ceph-deploy管理节点。
wget -q -O- 'http://mirrors.aliyun.com/ceph/keys/release.asc' | sudo apt-key add -
  1. 将Ceph软件包添加到存储库,ceph版本为:octopus
    注意:版本不能太新,服务器源可能没有最新版本
echo deb https://download.ceph.com/debian-octopus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
  1. 更新仓库并安装ceph-deploy(管理节点)
sudo apt-get update
sudo apt-get install ceph-deploy

命令行归纳:

# 所有节点都需要设置的命令
wget -q -O- 'http://mirrors.aliyun.com/ceph/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-octopus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt-get update
  1. 由于python3.8之后弃用了_platform.linux_distribution_,需要对ceph-deply做出以下修改:
/usr/lib/python3/dist-packages/ceph_deploy/hosts/remotes.py

def platform_information(_linux_distribution=None):
     """ detect platform information from remote host """
- linux_distribution = _linux_distribution or platform.linux_distribution
- distro, release, codename = linux_distribution()

+ distro = release = codename = None
+ try:
+       linux_distribution = _linux_distribution or platform.linux_distribution
+       distro, release, codename = linux_distribution()
+   except AttributeError:
+       # NOTE: py38 does not have platform.linux_distribution
+       pass

2. 创建部署Ceph的用户(所有节点)

ceph-deploy工具必须以普通用户登录 ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。

  1. 在各个节点上创建新用户:cepher
sudo useradd -d /home/cepher -m cepher
sudo passwd cepher
  1. 新创建的用户赋予免密sudo权限
echo "cepher ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cepher
sudo chmod 0440 /etc/sudoers.d/cepher
usermod -s /bin/bash cepher  #指定新建用户的shell

3. 无密码SSH登录(管理节点)

由于ceph-deploy不会提示输入密码,因此您必须在管理节点上生成SSH密钥,并将公用密钥分发给每个Ceph节点。 ceph-deploy将尝试为初始监视器生成SSH密钥。

  1. 生成SSH密钥,但不要使用sudo或root用户。 密码留为空。
ssh-keygen
  1. 将密钥复制到每个Ceph节点。
ssh-copy-id cepher@xjcc-11-70
ssh-copy-id cepher@xjcc-12-70
ssh-copy-id cepher@xjcc-13-70
  1. 修改 ~/.ssh/config 文件(没有则新增),这样 ceph-deploy 就能用所建的用户名登录 Ceph 节点了。
sudo vim ~/.ssh/config

内容如下:

Host xjcc-10-70
   Hostname xjcc-10-70
   User cepher
Host xjcc-11-70
   Hostname xjcc-11-70
   User cepher
Host xjcc-12-70
   Hostname xjcc-12-70
   User cepher
Host xjcc-13-70
   Hostname xjcc-13-70
   User cepher
  1. 测试是否设置成功
ssh cepher@xjcc-11-70

4. NTP安装

sudo apt install ntp
for i in {1..3}
do ssh xjcc-1${i}-70 "\
sudo apt install ntp
"
done

ntp配置文件修改

sudo vim /etc/ntp.conf

在上级服务器配置处添加

server 10.100.70.10 prefer

ntp服务重启命令

sudo /etc/init.d/ntp restart

三、集群搭建

管理节点下执行:

1. 安装准备:创建文件夹

cd ~
mkdir my-cluster
cd my-cluster

注意:出错的话,remake:

# 删除安装包
ceph-deploy purge xjcc-10-70 xjcc-11-70 xjcc-12-70 xjcc-13-70

# 清除配置
ceph-deploy purgedata xjcc-10-70 xjcc-11-70 xjcc-12-70 xjcc-13-70
ceph-deploy forgetkeys

# 清除ceph-deploy创建的文件
rm ceph.*

2. 在每个节点上运行如下命令,自动修复存在异常的deb

sudo apt --fix-broken  install
  1. 创建集群和监控(monitor)节点(mon节点)
    创建集群并初始化监控节点,这里xjcc-11-70是监控节点,所以执行:
ceph-deploy new xjcc-11-70

4. 安装Ceph

在所有节点上安装ceph:

ceph-deploy install xjcc-10-70 xjcc-11-70 xjcc-12-70 xjcc-13-70

注意:安装过程中出错,使用如下两条指令

sudo apt --fix-broken  install
dpkg -i --force-overwrite /var/cache/apt/archives/ceph-base_15.1.0-1bionic_amd64.deb # 后面这个参数根据报错内容更改

5. 配置初始 monitor(s)、并收集所有密钥

ceph-deploy mon create-initial

6. 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点

ceph-deploy admin xjcc-11-70 xjcc-12-70 xjcc-13-70

7. 部署管理器守护程序

ceph-deploy mgr create xjcc-11-70

8. 添加3个OSD

  • 首先新建文件夹
ssh xjcc-11-70
sudo dd if=/dev/zero of=/var/local/osd0.img bs=1M count=1024 oflag=direct
sudo sgdisk -g --clear /var/local/osd0.img
sudo vgcreate ceph-osds $(sudo losetup --show -f /var/local/osd0.img)
sudo lvcreate -L1000M -nosd0 ceph-osds
sudo mkfs.xfs -f /dev/ceph-osds/osd0
sudo mount /dev/ceph-osds/osd0 /mnt
exit

ssh xjcc-12-70
sudo dd if=/dev/zero of=/var/local/osd1.img bs=1M count=1024 oflag=direct
sudo sgdisk -g --clear /var/local/osd1.img
sudo vgcreate ceph-osds $(sudo losetup --show -f /var/local/osd1.img)
sudo lvcreate -L1000M -nosd1 ceph-osds
sudo mkfs.xfs -f /dev/ceph-osds/osd1
sudo mount /dev/ceph-osds/osd1 /mnt
exit

ssh xjcc-13-70
sudo dd if=/dev/zero of=/var/local/osd2.img bs=1M count=1024 oflag=direct
sudo sgdisk -g --clear /var/local/osd2.img
sudo vgcreate ceph-osds $(sudo losetup --show -f /var/local/osd2.img)
sudo lvcreate -L1000M -nosd2 ceph-osds
sudo mkfs.xfs -f /dev/ceph-osds/osd2
sudo mount /dev/ceph-osds/osd2 /mnt
exit
  1. 在管理节点部署OSD
ceph-deploy osd create --data /dev/ceph-osds/osd0 xjcc-11-70
ceph-deploy osd create --data /dev/ceph-osds/osd1 xjcc-12-70
ceph-deploy osd create --data /dev/ceph-osds/osd2 xjcc-13-70

9. 检查集群的健康状况和OSD节点状况

ssh xjcc-11-70 sudo ceph health
ssh xjcc-11-70 sudo ceph -s

四、集群扩展

1. 添加mds

要使用CephFS,至少需要一个元数据服务器

ceph-deploy mds create xjcc-11-70

2. 添加mon

一个Ceph存储集群至少需要一个Ceph Monitor和Ceph Manager才能运行。 为了获得高可用性,Ceph存储群集通常运行多个Ceph监视器,因此单个Ceph监视器的故障不会使Ceph存储群集停机。
2. 首先,修改ceph.conf文件中mon_initial_membersmon_hostpublic network的配置为:

mon_initial_members = xjcc-11-70,xjcc-12-70,xjcc-13-70
mon_host = 10.100.70.11,10.100.70.12,10.100.70.13
public network = 10.100.70.10/24
  1. 将配置推送到其他节点
ceph-deploy --overwrite-conf config push xjcc-11-70 xjcc-12-70 xjcc-13-70
  1. 添加mon节点
ceph-deploy mon create-initial

3. 添加mgr

Ceph Manager守护进程以活动/备用模式运行。 部署其他管理器守护程序可确保如果一个守护程序或主机发生故障,则另一守护程序或主机可以接管而不会中断服务。

部署其他管理器守护程序:

ceph-deploy mgr create xjcc-12-70 xjcc-13-70

4. 添加RGW实例

要使用Ceph的Ceph对象网关组件,必须部署RGW的实例。

ceph-deploy rgw create xjcc-11-70

默认情况下,RGW实例将在端口7480上侦听。可以通过在运行RGW的节点上编辑ceph.conf进行更改,如下所示:

[client]
rgw frontends = civetweb port=80

五、存储/检索对象数据

要将对象数据存储在Ceph存储集群中,Ceph客户端必须:

  1. 设置对象名称
  2. 指定一个池

例子:存储一个对象

  1. 创建一个对象
echo hahaha > testfile.txt
# 创建一个池
sudo ceph osd pool create mytest 8
# sudo rados put {object-name} {file-path} --pool=mytest
sudo rados put test-object-1 testfile.txt --pool=mytest
  1. 验证Ceph存储集群是否存储了该对象
sudo rados -p mytest ls
  1. 确定对象位置
# sudo ceph osd map {pool-name} {object-name}
sudo ceph osd map mytest test-object-1

Ceph应该输出对象的位置,比如:

osdmap e537 pool 'mytest' (1) object 'test-object-1' -> pg 1.d1743484 (1.4) -> up [1,0] acting [1,0]
  1. 删除测试对象,使用rados rm命令
# sudo rados rm {object-name} --pool={pool-name}
sudo rados rm test-object-1 --pool=mytest
  1. 删除创建的pool
    首先应该运行mon删除pool:在管理节点修改ceph.conf,添加以下内容
[mon]
mon allow pool delete = true

将配置推送到其他节点

ceph-deploy --overwrite-conf config push xjcc-11-70 xjcc-12-70 xjcc-13-70

重启mon节点

for i in {1..3}
do ssh xjcc-1${i}-70 "\
sudo systemctl restart ceph-mon.target
"
done

删除pool

# sudo ceph osd pool rm {pool-name} {pool-name} --yes-i-really-really-mean-it
sudo ceph osd pool rm mytest mytest --yes-i-really-really-mean-it
  1. 验证是否删除pool
sudo rados lspools

六、块设备快速入门(client安装)

1. 创建用户、配置无密码ssh并安装ceph

这里将xjcc-20-70作为client

  1. 在管理节点修改hosts文件,追加主机名xjcc-20-70
# The following lines are desirable for ceph clients
10.100.70.20 xjcc-20-70
  1. 在新节点创建新用户方法见:创建新用户
  2. 在管理节点设置无密码ssh链接见:无密码SSH登录
  3. 为新节点安装NTP服务见:安装NTP服务
  4. 在在管理节点为新的、将作为client的主机安装ceph
ceph-deploy install xjcc-20-70
  1. 在管理节点上,使用ceph-deploy将Ceph配置文件和ceph.client.admin.keyring复制到ceph-client
ceph-deploy admin xjcc-20-70

注意,这里要确保密钥环文件具有适当的读取权限,例如sudo chmod + r /etc/ceph/ceph.client.admin.keyring

2. 创建一个块设备池

  1. 在client节点上,使用ceph工具创建一个池(建议使用名称“ rbd”)
sudo ceph osd pool create rbd
  1. 在管理节点上,使用rbd工具初始化池以供RBD使用:
ssh xjcc-11-70 rbd pool init rbd

3. 配置块设备

  1. 在ceph-client节点上,创建一个块设备映像
# rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
# mon-IP:mon节点的IP地址
rbd create foo --size 4096 --image-feature layering -m 10.100.70.11 -k /etc/ceph/ceph.client.admin.keyring -p rbd
  1. 在ceph-client节点上,将映像映射到块设备
# sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
sudo rbd map foo --name client.admin -m 10.100.70.11 -k /etc/ceph/ceph.client.admin.keyring -p rbd
  1. 通过在ceph-client节点上创建文件系统来使用块设备
# sudo mkfs.ext4 -m0 /dev/rbd/{pool-name}/foo
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
# This may take a few moments.
  1. 在ceph-client节点上挂载文件系统
sudo mkdir /mnt/ceph-block-device
# sudo mount /dev/rbd/{pool-name}/foo /mnt/ceph-block-device
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
cd /mnt/ceph-block-device

手动搭建方式

1. 安装ceph (已作废)

  1. 为提高clone速度,将github的ceph导入到gitee,然后修改ceph/.gitmodules文件中submodules的仓库来源从github.com换到gitee,例如将"github.com/ceph/…“替换为"gitee.com/czy233/…
    ps. 其中由于gitee个伞兵把spawn认定为敏感词,所以ceph/spawn使用https://gitee.com/xuqiliang/spawn.git代替
    pss. 子模块中又有子子模块,所以子子模块也要fork到gitee。
  2. 安装npm和cypress,因为后期老下载失败
sudo apt install npm
npm install cypress --save-dev
  1. clone源代码
git clone --recursive git@gitee.com:czy233/ceph.git
  1. 安装相应的库和依赖
    首先,安装pip并换源,加速whl文件下载
    clone mkcodes,防止从GitHub clone失败
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
git clone https://gitee.com/czy233/mkcodes.git /home/mcloud/ceph/install-deps-python3/src/mkcodes

创建 ~/.pip/pip.conf

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

然后,进入到ceph文件夹,安装依赖

cd ceph
./install-deps.sh
  1. cmake出makefile
cd ceph
./do_cmake.sh  # debug版本
./do_cmake.sh ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo"  # release版本
  1. 编译
cd build
sudo ninja -j16
  1. 安装
sudo ninja install -j16
  1. 测试
sudo ninja vstart        # builds just enough to run vstart
../src/vstart.sh --debug --new -x --localhost --bluestore
./bin/ceph -s

安装ceph(从tar包导入)

  1. 从中科大镜像站get tarball
wget http://mirrors.ustc.edu.cn/ceph/tarballs/ceph_15.2.9.orig.tar.gz
  1. 解压
gzip -d ceph_15.2.9.orig.tar.gz
tar -xvf ceph_15.2.9.orig.tar
  1. 手动安装pip并换源
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py    # 运行安装脚本
pip -v # 查看pip版本
# 创建 ~/.pip/pip.conf
mkdir ~/.pip
vim ~/.pip/pip.conf
# 加入以下内容
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

# 查看pip源
pip config list
  1. 安装相关依赖
cd ceph-15.2.9/
./install-deps.sh
  1. 修改./do_cmake.sh,取消更新submodules(此过程不重要,可选
sed -i "s/git submodule update --init --recursive/# git submodule update --init --recursive/g" do_cmake.sh
  1. make & install
./do_cmake.sh -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_MANPAGE=OFF -DWITH_BABELTRACE=OFF -DWITH_MGR_DASHBOARD_FRONTEND=OFF
cd build
make -j16
sudo make install
  1. 运行测试样例
sudo make vstart
../src/vstart.sh -d -n -x
./bin/ceph -s
../src/stop.sh
  1. 最后提供一个脚本start.sh来一键编译安装ceph
#!/bin/bash -e
wget http://mirrors.ustc.edu.cn/ceph/tarballs/ceph_15.2.9.orig.tar.gz
gzip -d ceph_15.2.9.orig.tar.gz
tar -xvf ceph_15.2.9.orig.tar
cd ceph-15.2.9/
sudo apt-get -y install python3-pip
mkdir ~/.pip
echo "[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com" >> ~/.pip/pip.conf
./install-deps.sh
sed -i "s/git submodule update --init --recursive/# git submodule update --init --recursive/g" do_cmake.sh
ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_MANPAGE=OFF -DWITH_BABELTRACE=OFF -DWITH_MGR_DASHBOARD_FRONTEND=OFF" ./do_cmake.sh
cd build
sudo make -j24
sudo make install
../src/vstart.sh --debug --new -x --localhost --bluestore
./bin/ceph -s

../src/stop.sh

ps1:目前已经将整个项目上传到gitee,可以从gitee上clone 代码存在问题,已作废,需要下载tar包手动安装

git clone https://gitee.com/czy233/ceph-invoke-fabric.git

下载的tar包push到git上之前,要打tag,否则就会编译失败

git tag v1.0

ps2:从gitee上clone后依然要进行pip安装与换源
ps3:由于fstream不支持路径“~”,需要修改log中的打开文件的绝对路径

2. 安装 ccache,提高本地编译速度

  1. 安装
sudo apt-get install ccache
  1. 查看ccache 安装位置
whereis ccache
  1. 启用ccache
vim ~/.bashrc
# 添加
export USE_CCACHE=1
export PATH=/usr/lib/ccache:$PATH
# 退出
  1. 设置ccache大小
ccache –M 50G

3. 错误处理

  1. 从tar包下载的项目推送到git之前先打个tag,然后本地编译一遍之后才能push到git,不然clone下来无法使用
  2. internal compiler error: Segmentation fault错误:重新编译
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值