查看硬盘信息

lsblk

到所有节点配置阿里云centos7软件源:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum更新到所有节点

yum update -y

到所有节点关闭firewalld

systemctl stop firewalld
systemctl disable firewalld

到所有节点关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

到所有节点关闭NetworkManager

systemctl stop NetworkManager
systemctl disable NetworkManager

到所有节点设置主机名

hostnamectl set-hostname ceph-node-1

在ceph-node-1上添加主机名与IP对应关系:发送到其他俩台节点

cat >>/etc/hosts <<EOF
192.168.1.1 ceph-node-1 
192.168.1.2 ceph-node-2
192.168.1.3 ceph-node-3
192.168.1.4 ceph-node-4
EOF
for ip in 2 3 4 ;do scp -rP1234 /etc/hosts root@192.168.1.$ip:/etc/hosts ;done

配置免密登录

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
for ip in 2 3 4 ;do ssh-copy-id -i ~/.ssh/id_rsa.pub -p1234 root@192.168.1.$ip ;done

若ssh端口非默认的话,需将ssh信息写入~/.ssh/config,不然报错:

cat > ~/.ssh/config <<'EOF'
Host ceph-node-1
    Hostname ceph-node-1
    User root
    Port 1234
Host ceph-node-2
    Hostname ceph-node-2
    User root
    Port 1234
Host ceph-node-3
    Hostname ceph-node-3
    User root
    Port 1234
Host ceph-node-4
    Hostname ceph-node-4
    User root
    Port 1234
EOF
chmod 700 ~/.ssh/config
for ip in 2 3 4 ;do scp -rP1234 ~/.ssh/config root@192.168.1.$ip:/etc/hosts ;done

同步网络时间和修改时区

yum install chrony -y
vi /etc/chrony.conf 
  server ntp1.aliyun.com iburst
  allow 192.168.0.0/16
systemctl restart chronyd.service 
systemctl enable chronyd.service 
chronyc sources

其他节点上也安装chrony时间同步 同步ceph-node-1节点

yum install chrony -y
vi /etc/chrony.conf 
  server ceph-node-1 iburst
systemctl restart chronyd.service 
systemctl enable chronyd.service 
chronyc sources

内核参数优化

echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf #开启数据包转发
echo 'kernel.pid_max = 4194303' >>/etc/sysctl.conf #Kernel pid max
echo "vm.swappiness = 0" >>/etc/sysctl.conf #关闭swap/系统安装分区时其实可以不配swap区
sysctl -p

read_ahead,通过数据预读并且记载到随机访问内存方式提高磁盘读操作
根据一些Ceph的公开分享,8192是比较理想的值

echo "8192" > /sys/block/sda/queue/read_ahead_kb

I/O Scheduler
SSD要用noop,SATA/SAS使用deadline

echo "deadline" >/sys/block/sd[x]/queue/scheduler
echo "noop" >/sys/block/sd[x]/queue/scheduler

设置Ceph安装yum源,选择安装版本为octopus

cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装Ceph-deploy,对应版本为2.0.1,重要:默认epel源中ceph-deploy的版本是1.5,版本较老,会涉及到很多rpm依赖,安装问题,安装前检查好对应的版本,确保无误。

yum install ceph-deploy -y
ceph-deploy --version

部署Ceph

部署Ceph-deploy部署过程中会生成一些集群初始化配置文件和key,后续扩容的时候也需要使用到,因此,建议在admin-node上创建一个单独的目录,后续操作都进入到该目录中进行操作,以创建的ceph-admin-node为例。

1、创建一个Ceph cluster集群,可以指定cluster-network(集群内部通讯)和public-network(外部访问Ceph集群)

ceph-deploy new \
>--cluster-network 192.168.1.0/24 \
>--public-network 192.168.1.0/24 ceph-node-1    #创建集群

如果出现以下报错:

Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

则缺python-setuptools,安装它即可:

yum install python-setuptools

2、安装Ceph部署相关的软件,常规通过yum进行安装,由于可能会安装错软件包,因此ceph-deploy提供了一个install的工具辅助软件包的安装

ceph-deploy install ceph-node-1 ceph-node-2 ceph-node-3  ceph-node-4

如果出现以下报错:

[ceph-node-1][WARNIN] ensuring that /etc/yum.repos.d/ceph.repo contains a high priority
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'

运行:yum remove ceph-release
然后再次执行:ceph-deploy install ceph-node-1 ceph-node-2 ceph-node-3 ceph-node-4

3、初始化monitor节点

ceph-deploy mon create-initial

初始化完毕后会生成对应的keyring文件,用于ceph认证:

 - ceph.client.admin.keyring
 - ceph.bootstrap-mgr.keyring
 - ceph.bootstrap-osd.keyring
 - ceph.bootstrap-mds.keyring
 - ceph.bootstrap-rgw.keyring
 - ceph.bootstrap-rbd.keyring
 - ceph.bootstrap-rbd-mirror.keyring

4、将认证密钥拷贝到其他节点,便于ceph命令行可以通过keyring和ceph集群进行交互

ceph-deploy admin ceph-node-1 ceph-node-2 ceph-node-3  ceph-node-4
Ceph monitors(MON):Ceph监视器通过保存集群状态的映射来跟踪整个集群的健康状况

此时,Ceph集群已经建立起来,包含一个monitor节点,通过ceph -s可以查看当前ceph集群的状态,由于此时并没有任何的OSD节点,因此无法往集群中写数据等操作,如下是ceph -s查看的输出结果。

5、集群中目前还没有OSD节点,因此没法存储数据,接下来开始往集群中添加OSD节点,每个节点上都有1块4TB的sdb磁盘,格式化后将其加入到集群中作为OSD节点。

ceph-deploy disk zap ceph-node-1 /dev/sdb
ceph-deploy osd create ceph-node-1 --data /dev/sdb

如果出现以下错误:

[ceph-node-1][WARNIN] ceph-volume lvm create: error: GPT headers found, they must be removed on: /dev/sdb
[ceph-node-1][ERROR ] RuntimeError: command returned non-zero exit status: 2
[ceph_deploy.osd][ERROR ] Failed to execute command: /usr/sbin/ceph-volume --cluster ceph lvm create --bluestore --data /dev/sdb
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs

新增的硬盘中发现了 GPT 分区表,所以添加失败了,我们要手动清理掉硬盘的分区表 (当然如果硬盘是全新的, 这里应该就成功了)。这里我们直接暴力干掉分区表,不用费事的操作 PV 和 VG 了。(注意,一定要再三检查目标硬盘是否是期望的硬盘,如果操作错了硬盘,分区表直接就没了。)

dd if=/dev/zero of=/dev/sdb bs=512K count=1

利用 dd 命令把硬盘的前 512K 填充为 0, 直接干掉分区信息.
注意如果这块盘之前已经挂载了, 那需要重启才能生效.
然后重新添加OSD

ceph-deploy osd create ceph-node-1 --data /dev/sdb

6、此时Ceph的health状态为HEALTH_WARN告警状态,提示信息为“no active mgr”,因此需要部署一个mgr节点,manager节点在luminous之后的版本才可以部署(本环境部署的是M版本,因此可以支持),将mgr部署到node-1节点,执行

ceph-deploy mgr create ceph-node-1 ceph-node-2 ceph-node-3 ceph-node-4
Ceph manager:Ceph manager
守护进程(Ceph-mgr)是在Kraken版本中引入的,它与monitor守护进程一起运行,为外部监视和管理系统提供额外的监视和接口。

本文参考、摘录:
https://cloud.tencent.com/developer/article/1592733
https://www.jianshu.com/p/e7582ec55900
https://cloud.tencent.com/developer/article/1173069
https://zhuanlan.zhihu.com/p/73479251
https://blog.csdn.net/cheng198600000/article/details/54729492
http://docs.ceph.org.cn/start/quick-start-preflight/#ceph

标签: Ceph

添加新评论