Centos7安装Ceph集群
查看硬盘信息
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