centos 7 搭建ceph集群——筑梦之路_筑梦之路的博客-CSDN博客
这篇是之前写的,今天再次来搭建一遍,并将过程记录,温故而知新。
如需用于生产,建议磁盘要求吞吐 >=150MB/s,IOPS >= 5000,网络双口万兆Bond堆叠、内存128G
主机名 | 角色 | IP |
node01 | ceph-deploy、mon、mgr、osd | 192.168.31.221 |
node02 | mon、mgr、osd | 192.168.31.222 |
node03 | mon、mgr、osd | 192.168.31.223 |
操作系统:centos7
搭建准备
#换源wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel-7.repowget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS7-Base-ali.reposed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-ali.repo#新增yum源cat >> /etc/yum.repos.d/ceph.repo << EOF
[noarch]
name=ceph-noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enable=1
gpgcheck=0[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
enable=1
gpgcheck=0
EOF# 时间同步#安装 chrony
yum -y install chrony#设置系统的时区
timedatectl set-timezone Asia/Shanghai#设置系统时钟同步,输出以下内容代表同步正常
systemctl enable chronyd --nowtimedatectl statusLocal time: 二 2023-02-27 23:28:58 CSTUniversal time: 二 2023-02-27 15:28:58 UTCRTC time: 二 2023-02-27 15:28:59Time zone: Asia/Shanghai (CST, +0800)NTP enabled: yes
NTP synchronized: yesRTC in local TZ: noDST active: n/a#将当前的 UTC 时间写入硬件时钟,并重启依赖于系统时间的服务 [物理服务器需要]
timedatectl set-local-rtc 0
systemctl restart rsyslog && systemctl restart crond--------------------------------------------------------------
#配置hosts解析使用 ceph-deploy 部署集群时,需要通过主机名来查找主机 IP 地址,所以要在本地 hosts 文件中配置地址解析cat >> /etc/hosts << EOF
192.168.31.221 node01
192.168.31.222 node02
192.168.31.223 node03
EOF-----------------------------------------------------------
#关闭防火墙 selinuxsystemctl disable firewalld.service --nowsetenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config----------------------------------------------------------
#节点之间的免密认证#生成密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''#ssh互发,将各节点的主机信息(host key)写入control_node的~/.ssh/known_hosts文件
for host in 192.168.31.{221..223} node{01..03}; do ssh-keyscan $host >>~/.ssh/known_hosts 2>/dev/null; done#将公钥分发给各个机器
yum -y install sshpass
for host in node{01..03}; do sshpass -p'123456' ssh-copy-id root@$host &>/dev/null; done
集群搭建
# 安装部署工具yum -y install python-setuptools ceph-deploy ceph# 创建工作目录mkdir -p /opt/ops-ceph-cluster# 初始化节点在 ceph-admin 节点上进入 /opt/ops-ceph-cluster 目录下,执行 ceph-deploy 命令初始化集群设置,初始化要求指定节点作为 mon,命令如下:–public-network 代表 ceph 集群对外提供调用的网络,–cluster-network 代表用于集群内部通信的网络。一般情况下 ceph 集群中需要有两个网络,这样可以保证 ceph 集群的安全性。由于此次搭建的环境中只有一个网络,所以此处两个配置项填写同一个网段的地址。上面的命令执行完成后会将 ceph-node1 节点配置为 mon,并且会在 /opt/ops-ceph-cluster 目录下生成集群的配置文件、key 文件(用于身份验证)、日志文件等:ceph-deploy new --public-network 192.168.31.0/24 --cluster-network 192.168.31.0/24 node01cat ceph.conf
[global]
fsid = 0733d796-2798-4c78-b270-d829ab88f887
public_network = 192.168.31.0/24
cluster_network = 192.168.31.0/24
mon_initial_members = node01
mon_host = 192.168.31.221
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx# 在各个节点安装组件yum -y install ceph ceph-mon ceph-mgr ceph-mds ceph-radosgw-----------------------------------------------------
# 初始化mon在初始化集群的过程中已经指定了 mon 的节点,现在需要对 mon 进行初始化,在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下执行如下命令进行初始化:ceph-deploy mon create-initial接下来将 admin用户的 key 文件拷贝给各个 osd 节点,如果为了在 ceph-admin 节点中使用 ceph 命令查看集群状态,那么也需要将 key 文件拷贝给 ceph-admin 节点(ceph-admin节点需要安装 ceph 包)ceph-deploy admin node01 node02 node03拷贝完成后执行 ceph -s 命令可以查看到当前集群的状态------------------------------------------------------# 安装 mgr 进程配置 ceph-node1 节点作为 mgr,在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下执行如下命令:ceph-deploy mgr create node01# 部署 OSD 节点当前环境中,每个 OSD 节点都有两块磁盘 sdb 和 sdc接下来将每个 OSD 节点中的 sdb 磁盘加入到 ceph 集群中,命令如下:for host in 1 2 3
do
ceph-deploy disk zap node0${host} /dev/sdb
ceph-deploy osd create node0${host} --data /dev/sdb
ceph-deploy disk zap node0${host} /dev/sdc
ceph-deploy osd create node0${host} --data /dev/sdc
doneceph-deploy disk zap 命令用于将目标磁盘的分区表和内容擦除,实际上它是调用 /bin/dd if=/dev/zero of=/dev/sdb bs=1M count=10 conv=fsync 命令来销毁 GPT 和 MBR 。如果目标磁盘是未被分区的,可以不使用该命令此时查看 ceph 集群的状态,可以看到有6个 OSD 已经被加入到集群中。
扩展 mon 和 mgr 节点
mon 和 mgr 是 ceph 集群中非常重要的组件,其中 mon 作为整个集群的控制中心,里面存放着集群的信息,所以需要确保 mon 和 mgr 处于高可用的状态,为了保证选举正常,节点数要为奇数ceph-deploy mon add node02
ceph-deploy mon add node03集群信息中显示当前的 mon 节点已经为 3 个,使用如下命令查看 mon 节点的选举状态:ceph quorum_status --format json-pretty{"election_epoch": 60,"quorum": [0,1,2],"quorum_names": ["node01","node02","node03"],"quorum_leader_name": "node01","quorum_age": 26873,"monmap": {"epoch": 3,"fsid": "0733d796-2798-4c78-b270-d829ab88f887","modified": "2023-02-21 10:59:46.767964","created": "2023-02-21 10:46:42.790704","min_mon_release": 14,"min_mon_release_name": "nautilus","features": {"persistent": ["kraken","luminous","mimic","osdmap-prune","nautilus"],"optional": []},"mons": [{"rank": 0,"name": "node01","public_addrs": {"addrvec": [{"type": "v2","addr": "192.168.31.221:3300","nonce": 0},{"type": "v1","addr": "192.168.31.221:6789","nonce": 0}]},"addr": "192.168.31.221:6789/0","public_addr": "192.168.31.221:6789/0"},{"rank": 1,"name": "node02","public_addrs": {"addrvec": [{"type": "v2","addr": "192.168.31.222:3300","nonce": 0},{"type": "v1","addr": "192.168.31.222:6789","nonce": 0}]},"addr": "192.168.31.222:6789/0","public_addr": "192.168.31.222:6789/0"},{"rank": 2,"name": "node03","public_addrs": {"addrvec": [{"type": "v2","addr": "192.168.31.223:3300","nonce": 0},{"type": "v1","addr": "192.168.31.223:6789","nonce": 0}]},"addr": "192.168.31.223:6789/0","public_addr": "192.168.31.223:6789/0"}]}
}#可以看到当前已经可以正常选举,leader 为 node01 节点上的 mon。也可以使用 ceph mon stat 命令查看 mon 的信息:ceph mon state3: 3 mons at {node01=[v2:192.168.31.221:3300/0,v1:192.168.31.221:6789/0],node02=[v2:192.168.31.222:3300/0,v1:192.168.31.222:6789/0],node03=[v2:192.168.31.223:3300/0,v1:192.168.31.223:6789/0]}, election epoch 60, leader 0 node01, quorum 0,1,2 node01,node02,node03使用 ceph mon dump 命令可以查看详细的信息#扩容mgrceph-deploy mgr create node02 node03# 查看集群信息ceph -s