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- 网络示意图


    0. ceph集群部署 - 图1

    osd节点2块网卡

2- 节点初始化

2.1- 操作系统相关

  • 关闭firewalld和selinux ```bash systemctl stop firewalld systemctl disable firewalld

sed -i ‘s/^SELINUX=.*/SELINUX=disabled/‘ /etc/selinux/config

  1. - 主机名
  2. ```bash
  3. hostnamectl set-hostname mon1

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
  • 配置hosts ```bash cat >> /etc/hosts <<EOF

    ceph deploy

    10.68.3.121 ceph-deploy

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]#

```