ceph集群搭建
预检
搭建前先来了解官方给出的一些名字
ceph osds:ceph OSD 守护进程的功能是存储数据,出来数据的复制,恢复,回填,再均衡,并通过检查其他osd守护进程的心态来想ceph monitors 提供一些监控信息。当ceph存储集群设定为2个副本是,至少需要2个OSD守护进程,集群才能达到 active+clean状态,ceph默认有三个副本,但你可以退调整副本数。
monitor:ceph monitor 维护着展示集群状态的各种图标,包括监视视图,OSD图,归置图(PG),和crsh图。ceph保存着发生在monitor,osd 和pg 上的每一次状态变更的历史信息,称为epoch。
MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls
、find
等基本命令。
Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。
节点规划
主机名称 | ip | 描述 | role |
---|---|---|---|
admin-node | 172.21.51.5 | 管理节点 | ceph-deploy |
node1 | 172.21.51.6 | ceph 监控节点 | mon.node1 |
node2 | 172.21.51.7 | osd节点 | osd.0 |
noed3 | 172.21.51.8 | osd节点 | osd.1 |
以下操作没有注明的则是所有节点都需操作
修改主机名
hostnamectl set-hostname admin-node
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
bash
配置hosts解析
cat >>/etc/hosts<<EOF
172.21.51.5 admin-node
172.21.51.6 node1
172.21.51.7 node2
172.21.51.8 node3
EOF
安装NPT
以免时钟漂移导致故障
yum install ntp ntpdate ntp-doc -y
同步时间
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo ntpdate -u ntp.aliyun.com && date
安装ssh
yum install openssh-server -y
创建部署ceph的用户,并且配置sudo权限
useradd -d /home/dave -m dave
passwd dave # 123456
echo "dave ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/dave
sudo chmod 0440 /etc/sudoers.d/dave
配置免密登陆(管理节点)
因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对,不要用 sudo 或 root 用户。提示 “Enter passphrase” 时,直接回车,口令即为空
# 切换用户,如不特别说明,后续的操作均在该用户下进行
su - dave
ssh-keygen # 直接回车,管理节点上
ssh-copy-id dave@node1
ssh-copy-id dave@node2
ssh-copy-id dave@node3
# 检查
# admin下多了如下三个文件:
[dave@admin-node ~]$ ls /home/dave/.ssh/
id_rsa id_rsa.pub known_hosts
# 其他多了如下一个文件
[dave@node1 ~]$ ls /home/dave/.ssh/
authorized_keys
# 修改~/.ssh/config 文件
# 修改 ~/.ssh/config 文件(没有则新增),这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了。
$ sudo vi ~/.ssh/config
Host admin-node
Hostname admin-node
User dave
Host node1
Hostname node1
User dave
Host node2
Hostname node2
User dave
Host node3
Hostname node3
User dave
测试
[dave@admin-node ~]$ ssh dave@node1
Last login: Sun Jun 20 01:26:47 2021
[dave@node1 ~]$ exit
logout
Connection to node1 closed.
[dave@admin-node ~]$ ssh dave@node2
Last login: Sun Jun 20 01:26:31 2021
[dave@node2 ~]$ exit
logout
Connection to node2 closed.
[dave@admin-node ~]$ ssh dave@node3
Last login: Sun Jun 20 01:22:47 2021
[dave@node3 ~]$ exit
logout
Connection to node3 closed.
引导时联网(ceph节点)
Ceph 的各 OSD 进程通过网络互联并向 Monitors 上报自己的状态。如果网络默认为 off ,那么 Ceph 集群在启动时就不能上线,直到你打开网络。
$ cat /etc/sysconfig/network-scripts/ifcfg-ens33
//确保ONBOOT 设置成了 yes
开放所需端口(ceph节点)
Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。Ceph OSD 能利用多个网络连接进行与客户端、monitors、其他 OSD 间的复制和心跳的通信。
sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
// 或者关闭防火墙
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
这里是学习使用,直接关闭所有节点的防火墙即可,加sudo
sudo systemctl stop firewalld && sudo systemctl disable firewalld
sudo iptables -F
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sudo setenforce 0
sudo getenforce
安装高级包管理工具(管理节点)
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
把软件包源加入软件仓库(管理节点)
sudo vi /etc/yum.repos.d/ceph.repo
把如下内容粘帖进去,保存到 /etc/yum.repos.d/ceph.repo 文件中。
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
更新软件并安装ceph-deploy (管理节点)
sudo yum update && sudo yum install ceph-deploy -y
sudo yum install yum-plugin-priorities -y
耐心等待,时间稍长
搭建集群
在 管理节点 下执行如下步骤:
安装准备,创建文件夹
在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对
$ cd ~
$ mkdir ceph-cluster
$ cd ceph-cluster
注:若安装ceph后遇到麻烦可以使用以下命令进行清除包和配置:
# 删除安装包
$ ceph-deploy purge admin-node node1 node2 node3
# 清除配置
$ ceph-deploy purgedata admin-node node1 node2 node3
$ ceph-deploy forgetkeys
创建集群和监控节点
创建集群并初始化监控节点:
ceph-deploy new {initial-monitor-node(s)} # 安装mnonitor的node上执行
这里node1是monitor节点,所以执行:
ceph-deploy new node1
完成后,ceph-clster 下多了3个文件:ceph.conf、ceph-deploy-ceph.log 和 ceph.mon.keyring
[dave@admin-node ceph-cluster]$ ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
修改配置文件
修改前:
cat ceph.conf
[global]
fsid = eace5df1-e8dc-483f-876e-4faca399724a
mon_initial_members = node1
mon_host = 172.21.51.6
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把 osd pool default size = 2 加入 [global] 段:
执行如下:
$ sed -i '$a\osd pool default size = 2' ceph.conf
修改后如下:
[global]
fsid = eace5df1-e8dc-483f-876e-4faca399724a
mon_initial_members = node1
mon_host = 172.21.51.6
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
如果有多个网卡,
可以把 public network 写入 Ceph 配置文件的 [global] 段:
public network = {ip-address}/{netmask}
安装ceph
在所有节点上安装ceph:
ceph-deploy install admin-node node1 node2 node3
配置初始 monitor(s)、并收集所有密钥
ceph-deploy mon create-initial
完成上述操作后,当前目录里应该会出现这些密钥环:
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring
添加2个OSD
1. 登录到 Ceph 节点、并给 OSD 守护进程创建一个目录,并添加权限。
ssh node2
sudo mkdir /var/local/osd0
sudo chmod 777 /var/local/osd0/
exit
ssh node3
sudo mkdir /var/local/osd1
sudo chmod 777 /var/local/osd1/
exit
2. 然后,从管理节点执行 ceph-deploy 来准备 OSD 。
ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
3. 最后,激活 OSD
ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
把配置文件和admin秘钥拷贝到管理节点和ceph节点
ceph-deploy admin admin-node node1 node2 node3
确保你对 ceph.client.admin.keyring 有正确的操作权限
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
检查集群的健康状况和OSD节点状况
[dave@admin-node ceph-cluster]$ ceph health
HEALTH_OK
[dave@admin-node ceph-cluster]$ ceph -s
cluster eace5df1-e8dc-483f-876e-4faca399724a
health HEALTH_OK
monmap e1: 1 mons at {node1=172.21.51.6:6789/0}
election epoch 3, quorum 0 node1
osdmap e10: 2 osds: 2 up, 2 in
flags sortbitwise,require_jewel_osds
pgmap v23: 64 pgs, 1 pools, 0 bytes data, 0 objects
14861 MB used, 143 GB / 157 GB avail
64 active+clean
[dave@admin-node ceph-cluster]$ ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 0.07709 1.00000 80876M 7430M 73445M 9.19 1.00 64
1 0.07709 1.00000 80876M 7430M 73445M 9.19 1.00 64
TOTAL 157G 14861M 143G 9.19
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
扩展集群(扩容)
添加OSD
在node1 上添加一个OSD.2
1.创建目录
ssh node1
sudo mkdir /var/local/osd2
sudo chmod 777 /var/local/osd2/
exit
2.准备osd
ceph-deploy osd prepare node1:/var/local/osd2
3.激活osd
ceph-deploy osd activate node1:/var/local/osd2
4.检查集群状态和osd节点
[dave@admin-node root]$ ceph -s
cluster eace5df1-e8dc-483f-876e-4faca399724a
health HEALTH_OK
monmap e1: 1 mons at {node1=172.21.51.6:6789/0}
election epoch 3, quorum 0 node1
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v63: 64 pgs, 1 pools, 0 bytes data, 0 objects
22295 MB used, 215 GB / 236 GB avail
64 active+clean
[dave@admin-node root]$ ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 0.07709 1.00000 80876M 7430M 73445M 9.19 1.00 41
1 0.07709 1.00000 80876M 7430M 73445M 9.19 1.00 43
2 0.07709 1.00000 80876M 7433M 73443M 9.19 1.00 44
TOTAL 236G 22295M 215G 9.19
MIN/MAX VAR: 1.00/1.00 STDDEV: 0.00
添加monitors
在 ndoe2 和 node3 添加监控节点。
修改 mon_initial_members、mon_host 和 public network 配置:
修改前
[dave@admin-node ceph-cluster]$ cat ceph.conf
[global]
fsid = eace5df1-e8dc-483f-876e-4faca399724a
mon_initial_members = node1
mon_host = 172.21.51.6
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
修改后:
[dave@admin-node ceph-cluster]$ vim ceph.conf
[global]
fsid = eace5df1-e8dc-483f-876e-4faca399724a
mon_initial_members = node1,node2,node3
mon_host = 172.21.51.6,172.21.51.7,172.21.51.8
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public network = 172.21.51.0/24
推送至其他节点
ceph-deploy --overwrite-conf config push node1 node2 node3
添加监控节点
ceph-deploy mon add node2
ceph-deploy mon add node3
查看集群状态和监控节点
[dave@admin-node ceph-cluster]$ ceph -s
cluster eace5df1-e8dc-483f-876e-4faca399724a
health HEALTH_OK
monmap e3: 3 mons at {node1=172.21.51.6:6789/0,node2=172.21.51.7:6789/0,node3=172.21.51.8:6789/0}
election epoch 6, quorum 0,1,2 node1,node2,node3
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v216: 64 pgs, 1 pools, 0 bytes data, 0 objects
22314 MB used, 215 GB / 236 GB avail
64 active+clean
[dave@admin-node ceph-cluster]$ ceph mon stat
e3: 3 mons at {node1=172.21.51.6:6789/0,node2=172.21.51.7:6789/0,node3=172.21.51.8:6789/0}, election epoch 6, quorum 0,1,2 node1,node2,node3
orum 0,1,2 node1,node2,node3
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v216: 64 pgs, 1 pools, 0 bytes data, 0 objects
22314 MB used, 215 GB / 236 GB avail
64 active+clean
[dave@admin-node ceph-cluster]$ ceph mon stat
e3: 3 mons at {node1=172.21.51.6:6789/0,node2=172.21.51.7:6789/0,node3=172.21.51.8:6789/0}, election epoch 6, quorum 0,1,2 node1,node2,node3