CentOS7.7 使用Ceph-deply安装N版ceph集群
官方文档:https://ceph.readthedocs.io/en/latest/install/ceph-deploy/quick-start-preflight/
ceph版本列表:https://ceph.readthedocs.io/en/latest/releases/
ceph-deploy 文档: http://docs.ceph.org.cn/man/8/ceph-deploy/
1- 集群环境
1.1- 主机规划
| ROLE | HOSTNAME | IP | 规格 | OS | DISK |
|---|---|---|---|---|---|
| mon ceph-deploy |
mon1 | 10.68.3.121 192.168.1.121 |
2C 2G | CensOS-7.7-mini | OS: 40G |
| monitor,mgr,rgw,mds | mon2 | 10.68.3.122 192.168.1.122 |
2C 2G | CensOS-7.7-mini | OS: 40G |
| monitor,mgr,rgw,mds | mon3 | 10.68.3.123 192.168.1.123 |
2C 2G | CensOS-7.7-mini | OS: 40G |
| monitor,mgr,rgw,mds | mon4 | 10.68.3.124 192.168.1.124 |
2C 2G | CensOS-7.7-mini | OS: 40G |
| monitor,mgr,rgw,mds | mon5 | 10.68.3.125 192.168.1.125 |
2C 2G | CensOS-7.7-mini | OS: 40G |
| osd | node1 | 10.68.3.131 192.168.1.131 |
2C 4G | CensOS-7.7-mini | OS: 40G OSD{0,3,6,9,12,15,18,21,24,27}: 60G journal: 50G |
| osd | node2 | 10.68.3.132 192.168.1.132 |
2C 4G | CensOS-7.7-mini | OS: 40G OSD{1,4,7,10,13,16,19,22,25,28}: 60G journal:50G |
| osd | node3 | 10.68.3.133 192.168.1.133 |
2C 4G | CensOS-7.7-mini | OS: 40G OSD{2,5,8,11,14,17,20,23,26,29}: 60G journal:50G |
ntp 服务器: 10..68.3.101
1.2- 节点角色:
- ceph-deploy:ceph集群部署节点,负责集群整体部署,也可以复用cpeh集群中的节点作为部署节点。
- monitor:Ceph监视管理节点,承担Ceph集群重要的管理任务,一般需要3或5个节点。
- mgr: Ceph 集群管理节点(manager),为外界提供统一的入口。
- rgw: Ceph对象网关,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群
- mds:Ceph元数据服务器,MetaData Server,主要保存的文件系统服务的元数据,使用文件存储时才需要该组件
- osd:Ceph存储节点Object Storage Daemon,实际负责数据存储的节点。
1.3- 安装版本:
- ceph版本:nautilus 14.2.9
- deploy版本:ceph-deploy 2.0.1
- Ceph网络:Ceph Cluster网络均采用192.168.1.0/24,Ceph Public网络采用10.68.3.0/24
1.4- 网络示意图

osd节点2块网卡
2- 节点初始化
2.1- 操作系统相关
- 关闭firewalld和selinux ```bash systemctl stop firewalld systemctl disable firewalld
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/‘ /etc/selinux/config
- 主机名```bashhostnamectl set-hostname mon1
- 配置国内yum源 ```bash rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y epel-release sed -i ‘s|^#baseurl=http://download.fedoraproject.org/pub|baseurl=https://mirrors.tuna.tsinghua.edu.cn|‘ /etc/yum.repos.d/epel sed -i ‘s|^metalink|#metalink|’ /etc/yum.repos.d/epel
- ceph N版yum源设置
```bash
cat <<EOF >/etc/yum.repos.d/ceph.repo
[ceph] #路径为以上的x86_64目录
name=ceph
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-nautilus/el7/x86_64/
gpgcheck=0
enabled=1
[ceph-noarch] #路径为以上noarch目录
name=ceph-noarch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-nautilus/el7/noarch/
gpgcheck=0
enabled=1
EOF
Ceph Public Network
10.68.3.121 mon1 10.68.3.122 mon2 10.68.3.123 mon3 10.68.3.124 mon4 10.68.3.125 mon5 10.68.3.131 node1 10.68.3.132 node2 10.68.3.133 node3
Ceph Cluster Network
192.168.1.121 mon1 192.168.1.122 mon2 192.168.1.123 mon3 192.168.1.131 node1 192.168.1.132 node2 192.168.1.133 node3 EOF
- 时间同步
```bash
yum install chrony -y
systemctl enable --now chronyd
sed -i 's|^server|#server|' /etc/chrony.conf
echo "server 10.68.3.100 iburst" >> /etc/chrony.conf
systemctl restart chronyd
chronyc sources
- 内核调整
OSD节点osd进程可以产生大量线程,如有需要,可以调整下内核最大允许线程数
cat << eof >> /etc/sysctl.conf
kernel.pid_max = 4194303
kernel.pid_max = 4194303
eof
安装基础包
yum install nmap bind-utils telnel wget curl net-tools -y安装ceph包
也可以通过ceph install 安装
yum -y install ceph ceph-radosgw # 所有节点
yum install ceph-mgr -y # mgr节点
yum install ceph-mon -y # mon节点
yum install ceph-osd -y # osd节点
yum install ceph-mds -y # mds节点
yum install ceph-deploy-2.0.1 # deploy节点
3- 部署集群
3.1- 安装ceph-deploy工具
ceph-deploy是ceph官方提供的部署工具,它通过ssh远程登录其它各个节点上执行命令完成部署过程,我们可以随意选择一台服务器安装此工具
yum install -y ceph-deploy
- 配置ssh免密 ```bash ssh-copy-id
ssh-copy-id mon1 ssh-copy-id mon2 ssh-copy-id mon3 ssh-copy-id mon4 ssh-copy-id mon5
<a name="cJXtb"></a>
## 3.2- ceph软件包安装
先安装ceph软件包到三个节点上。上面我们已经配置好ceph源,因此这里使用`--no-adjust-repos`参数忽略设置ceph源
```bash
ceph-deploy install --no-adjust-repo mon1 mon2 mon3 mon4 mon5
## [root@mon1 ceph]# ceph-deploy install --no-adjust-repos mon1 mon2 mon3 mon4 mon5
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
## 处理故障
yum install -y python-pip
或者在个节点直接安装: yum -y install ceph ceph-radosgw
3.3- 创建集群mon节点
mkdir -p /opt/ceph
cd /opt/ceph
ceph-deploy new mon1 mon2 --cluster-network 192.168.1.0/24 \
--public-network 10.68.3.0/24
- 这里直接指定cluster-network(集群内部通讯)和public-network(外部访问Ceph集群),也可以在执行命令后修改配置文件方式指定。
- 这里先配置mon1,mon2,mon3为mon节点,后续在添加mon4,mon5
Ceph Monitors之间默认使用6789端口通信, OSD之间默认用6800:7300范围内的端口通信,多个集群应当保证端口不冲突- 目录下会生成下面3个文件:
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
- 配置ceph.conf配置文件的一些参数 ```bash cat << eof >> ceph.conf osd_journal_size = 5120 # journal盘的大小 osd_pool_default_size = 2 osd_pool_default_min_size=1 #journal默认5G建议1TB数据5G,4T盘设置20G,这个影响性能的 mon_pg_warn_max_per_osd = 1000
eof
> 一套可供生产环境使用的ceph集群,考虑的问题比较多,特别是配置文件的配置量参数。这里记录调试后的配置参数:
```bash
[global]
fsid = 4f79f6df-abf6-4461-a5be-9e1aa6adb9a9
mon_initial_members = mon1, mon2
mon_host = 10.68.3.121,10.68.3.122
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network = 10.68.3.0/24 #管理网络
cluster_network = 192.168.1.0/24 #集群网络
mon_pg_warn_max_per_osd = 1000 #每个osd上pg数量警告值,这个可以根据具体规划来设定
osd_pool_default_size = 3 #默认副本数为3
osd_pool_default_min_size = 2 #最小副本数为2,也就是只能坏一个
mon_osd_full_ratio = .85 #存储使用率达到85%将不再提供数据存储
mon_osd_nearfull_ratio = .70 #存储使用率达到70%集群将会warn状态
osd_deep_scrub_randomize_ratio = 0.01 #随机深度清洗概率,值越大,随机深度清洗概率越高,太高会影响业务
[osd]
osd_max_write_size = 1024 #默认90M,一次写操作最小值
osd_recovery_op_priority = 1 #默认为10, 1-63 osd修复操作的优先级, 。值越小,优先级越低
osd_recovery_max_active = 1 #限定每个osd上同时有多少个pg可以同时进行recover
osd_recovery_max_single_start = 1 # 和osd_recovery_max_active一起使用,要理解其含义。假设我们配置osd_recovery_max_single_start为1,osd_recovery_max_active为3,那么,这意味着OSD在某个时刻会为一个PG启动一个恢复操作,而且最多可以有三个恢复操作同时处于活动状态。
osd_recovery_max_chunk = 1048576 #默认为8388608, 设置恢复数据块的大小,以防网络阻塞
osd_recovery_threads = 1 #恢复数据所需的线程数
osd_max_backfills = 1 #集群故障后,最大backfill数为1,太大会影响业务
osd_scrub_begin_hour = 22 #清洗开始时间为晚上22点
osd_scrub_end_hour = 7 #清洗结束时间为早上7点
osd_recovery_sleep = 0 #默认为0,recovery的时间间隔,会影响recovery时常,如果recovery导致业务不正常,可以调大该值,增加时间间隔
osd_crush_update_on_start = false # 新加的osd会up/in,但并不会更新crushmap,prepare+active期间不会导致数据迁移
- 初始化mon节点
创建监视器,初始化monitor,并收集所有密钥,官方介绍:为了获得高可用性,您应该运行带有至少三个监视器的生产Ceph集群
ceph-deploy mon create-initial
初始化完毕后会自动生成以下几个文件,这些文件用于后续和Ceph认证交互使用:
[root@mon1 ceph]# ls -l
total 156
-rw------- 1 root root 113 Dec 28 07:53 ceph.bootstrap-mds.keyring
-rw------- 1 root root 113 Dec 28 07:53 ceph.bootstrap-mgr.keyring
-rw------- 1 root root 113 Dec 28 07:53 ceph.bootstrap-osd.keyring
-rw------- 1 root root 113 Dec 28 07:53 ceph.bootstrap-rgw.keyring
-rw------- 1 root root 151 Dec 28 07:53 ceph.client.admin.keyring
-rw-r--r-- 1 root root 488 Dec 28 07:51 ceph.conf
-rw-r--r-- 1 root root 85851 Dec 28 07:53 ceph-deploy-ceph.log
-rw------- 1 root root 73 Dec 28 07:33 ceph.mon.keyring
使用ceph-deploy命令将配置文件和 admin key复制到管理节点和Ceph节点,以便每次执行ceph CLI命令无需指定monitor地址和 ceph.client.admin.keyring。
ceph-deploy admin mon1 mon2检查集群 ceph -s ```bash [root@mon1 ceph]# ls /etc/ceph/ ceph.client.admin.keyring ceph.conf rbdmap tmpIzRxct
[root@mon1 ceph]# ceph -s cluster: id: 4f79f6df-abf6-4461-a5be-9e1aa6adb9a9 health: HEALTH_WARN clock skew detected on mon.mon2
services: mon: 2 daemons, quorum mon1,mon2 (age 2m) mgr: no daemons active osd: 0 osds: 0 up, 0 in
data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:
<a name="G4QRX"></a>
## 3.4- 创建mgr节点
- 创建mgr节点
```bash
ceph-deploy mgr create mon1 mon2
3.5- 创建rgw实例
要使用 Ceph Object Gateway对象网关组件,必须部署RGW的实例。执行以下操作以创建RGW的新实例:
ceph-deploy rgw create mon1 mon2
默认情况下,RGW实例将侦听7480端口。可以通过在运行RGW的节点上编辑ceph.conf来更改此端口,如下所示:
[client] rgw frontends = civetweb port=80
- 验证
3.6- 添加OSD设备
- 每个OSD节点/dev/sdj 50G的磁盘创建journal分区,每个分区分配5G给不同的osd磁盘使用 ```bash fdisk /dev/sdl
lsblk sdl 8:176 0 50G 0 disk ├─sdl1 8:177 0 1K 0 part ├─sdl5 8:181 0 5G 0 part ├─sdl6 8:182 0 5G 0 part ├─sdl7 8:183 0 5G 0 part ├─sdl8 8:184 0 5G 0 part ├─sdl9 8:185 0 5G 0 part ├─sdl10 8:186 0 5G 0 part ├─sdl11 8:187 0 5G 0 part ├─sdl12 8:188 0 5G 0 part ├─sdl13 8:189 0 5G 0 part └─sdl14 8:190 0 5G 0 part
- 添加OSD
注意顺序,按照添加的顺序加入OSD
```bash
ceph-deploy admin node1 node2 node3
ceph-deploy osd create --bluestore node1 --fs-type xfs --data /dev/sdb --journal /dev/sdl5
ceph-deploy osd create --bluestore node2 --fs-type xfs --data /dev/sdb --journal /dev/sdl5
ceph-deploy osd create --bluestore node3 --fs-type xfs --data /dev/sdb --journal /dev/sdl5
*****
- 验证
```bash
[root@mon1 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.75781 root default
-3 0.58594 host node1
0 hdd 0.05859 osd.0 up 1.00000 1.00000 3 hdd 0.05859 osd.3 up 1.00000 1.00000 6 hdd 0.05859 osd.6 up 1.00000 1.00000 9 hdd 0.05859 osd.9 up 1.00000 1.00000 14 hdd 0.05859 osd.14 up 1.00000 1.00000 16 hdd 0.05859 osd.16 up 1.00000 1.00000 19 hdd 0.05859 osd.19 up 1.00000 1.00000 25 hdd 0.05859 osd.25 up 1.00000 1.00000 26 hdd 0.05859 osd.26 up 1.00000 1.00000 29 hdd 0.05859 osd.29 up 1.00000 1.00000 -5 0.58594 host node2
1 hdd 0.05859 osd.1 up 1.00000 1.00000 4 hdd 0.05859 osd.4 up 1.00000 1.00000 7 hdd 0.05859 osd.7 up 1.00000 1.00000 10 hdd 0.05859 osd.10 up 1.00000 1.00000 12 hdd 0.05859 osd.12 up 1.00000 1.00000 17 hdd 0.05859 osd.17 up 1.00000 1.00000 18 hdd 0.05859 osd.18 up 1.00000 1.00000 21 hdd 0.05859 osd.21 up 1.00000 1.00000 22 hdd 0.05859 osd.22 up 1.00000 1.00000 23 hdd 0.05859 osd.23 up 1.00000 1.00000 -7 0.58594 host node3
2 hdd 0.05859 osd.2 up 1.00000 1.00000 5 hdd 0.05859 osd.5 up 1.00000 1.00000 8 hdd 0.05859 osd.8 up 1.00000 1.00000 11 hdd 0.05859 osd.11 up 1.00000 1.00000 13 hdd 0.05859 osd.13 up 1.00000 1.00000 15 hdd 0.05859 osd.15 up 1.00000 1.00000 20 hdd 0.05859 osd.20 up 1.00000 1.00000 24 hdd 0.05859 osd.24 up 1.00000 1.00000 27 hdd 0.05859 osd.27 up 1.00000 1.00000 28 hdd 0.05859 osd.28 up 1.00000 1.00000 [root@mon1 ceph]#
```
