ceph 002 ceph架构 ceph数据存储过程 ceph集群安装

ceph 架构

rgw:实现对象存储 (web的url和swift,s3接口)
mon:集群的访问入口 (集群,同时工作,得同步信息。每个mon的ip不一样)
mgr:监控 信息收集 web 界面 (将信息,汇报给mon。主备)
osd:磁盘

数据存储过程

本质上的底层为对象存储
ceph接口 librados
ceph驱动 rados
上面封装了三种存储类型


一个文件被切分成多个对象
object默认4M oid 对象id
切分后就为二进制文件(object),单独存在无意义。下载的话得将二进制组合
对象被映射到osd上面
如果osd所在的主机坏了,那么这个文件的对象就缺失,就不完整
所以object会多存2份在其他的osd上面 (三副本,真正的容量/3)

如果一个文件很大1TB 你将它切成无数个4M,那么随着对象的增多,检索效率会变低
所以中间多了一层PGs 1-10 11-20 21-30 加快检索效率

对象映射的pg的算法叫hash算法
简单的hash算法
有100个组     对象id为54
54/100取余   余数为54,那么被放到54组里

归置组到osd

crush算法
三副本,那么归置组映射三个osd(在组出来的时候,映射关系就出来了。存文件之前就已经存在这个映射关系)

osd写一个成功(主osd),然后复制两个(备osd)
ceph 强一致性,确保三副本每一个写成功,才返回客户端
正常的话主提供读写,坏了,能自我修复,备osd先顶上

尽量将主osd放在ssd上

ceph搭建

安装方法
ceph-deploy centos7 centos8(不支持)
cephadm o版开始的部署工具 web界面 容器部署 (docker podman)
manual 纯手动
ceph-ansible ansible github

c-e 集群
serverg 可以加入集群的节点(扩容)
serverf 单节点集群
utility 镜像仓库 dns
classroom 资料与yum源
basion 路由转发 路由器
clienta 管理节点
clientb 另外一个集群的管理节点

正常情况 mon mgr osd 三个都单独部署
mon三台主机 mgr两台节点 osd数据节点
教师环境节点复用一个节点mon mgr osd都有

cephadm 一台做好,将其他节点加入进来

1 预准备,并执行ansible

cephadm-ansible 预部署,给你准备好前提条件 yum文件 时间同步 容器工具

[root@serverc ~]# yum -y install cephadm-ansible

[root@serverc ~]# cd /usr/share/cephadm-ansible/
[root@serverc cephadm-ansible]# ls
ansible.cfg  cephadm-preflight.yml  cephadm-purge-cluster.yml  ceph-defaults
[root@serverc cephadm-ansible]# 

写主机清单

[root@serverc cephadm-ansible]# cat hosts 
clienta.lab.example.com
serverc.lab.example.com
serverd.lab.example.com
servere.lab.example.com



[root@serverc cephadm-ansible]# ansible-playbook -i hosts cephadm-preflight.yml  \
> --extra-vars "ceph_origin="

--extra-vars "ceph_origin= 指定为空,不从红帽官网安装,从本地源装

- clienta.lab.example.com
- serverc.lab.example.com
- serverd.lab.example.com
- servere.lab.example.com

ceph会取主机名clienta这一部分

2 写配置文件

这个文件得自己写

vim  ~/ceph/initial-config-primary-cluster.yaml
[root@serverc ~]# cat ceph/initial-config-primary-cluster.yaml 
service_type: host
addr: 172.25.250.10
hostname: clienta.lab.example.com
---
service_type: host
addr: 172.25.250.12
hostname: serverc.lab.example.com
---
service_type: host
addr: 172.25.250.13
hostname: serverd.lab.example.com
---
service_type: host
addr: 172.25.250.14
hostname: servere.lab.example.com
---
service_type: mon
placement:
hosts:
    - clienta.lab.example.com
    - serverc.lab.example.com
    - serverd.lab.example.com
    - servere.lab.example.com
---
service_type: rgw
service_id: realm.zone
placement:
hosts:
    - serverc.lab.example.com
    - serverd.lab.example.com
---
service_type: mgr
placement:
hosts:
    - clienta.lab.example.com
    - serverc.lab.example.com
    - serverd.lab.example.com
    - servere.lab.example.com
---
service_type: osd
service_id: default_drive_group
placement:
host_pattern: 'server*'
data_devices:
paths:
    - /dev/vdb
    - /dev/vdc
- /dev/vdd

    [root@serverc ceph]# ls
    initial-config-primary-cluster.yaml
    [root@serverc ceph]# pwd
    /root/ceph

这个配置文件有相关ceph信息
可以更改,然后再次跑这个文件完成更新

3 使用配置文件跑cephadm


关于安装可以查找帮助文档

[root@serverc ceph]# cephadm bootstrap --mon-ip=172.25.250.12  --apply-spec initial-config-primary-cluster.yaml --registry-url registry.lab.example.com --registry-username registry --registry-password redhat --initial-dashboard-password redhat --dashboard-password-noupdate --allow-fqdn-hostname

4 查验

[root@serverc ceph]# cephadm shell
调用容器,里面有所有ceph工具
[ceph: root@serverc /]# ceph -s
cluster:
    id:     e5f9d02c-140c-11ed-aa7b-52540000fa0c
    health: HEALTH_OK

services:
    mon: 4 daemons, quorum serverc.lab.example.com,servere,serverd,clienta (age 106s)
    mgr: serverc.lab.example.com.eskdfx(active, since 4m), standbys: clienta.ecdris, serverd.wpncqk, servere.mguxgb
    osd: 9 osds: 9 up (since 2m), 9 in (since 3m)
    rgw: 2 daemons active (2 hosts, 1 zones)

data:
    pools:   5 pools, 119 pgs
    objects: 189 objects, 4.9 KiB
    usage:   71 MiB used, 90 GiB / 90 GiB avail
    pgs:     119 active+clean

progress:

[ceph: root@serverc /]# 

开源ceph部署

三台节点centos7,最小化安装

1.基础配置

更改合适的主机名
例
hostnamectl set-hostname ceph01.example.com

配置网络可以互通且能通外网

配置hosts解析
[root@ceph01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


192.168.92.11   ceph01.example.com ceph01
192.168.92.22   ceph02.example.com ceph02
192.168.92.33   ceph03.example.com ceph03

关闭selinux
setenforce 0

设置防火墙规则
[root@ceph01 ~]# firewall-cmd --permanent --add-service=ntp
success
[root@ceph01 ~]# firewall-cmd --reload
success

以上三台主机都要做

安装时间同步
yum -y install chrony
主同步节点
vim /etc/chrony.conf
local stratum 10
allow 192.168.0.0/16
systemctl restart chronyd

client节点
cat /etc/chrony.conf  | grep iburst
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ceph01.example.com iburst
systemctl restart chronyd

2.安装软件包

[root@ceph02 bin]# ls | grep python
python
python2
python2.7

安装wget取得阿里源
yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
两个源二选一
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

安装python3
yum -y install python3

安装docker-ce
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

设置docker 开机自启
systemctl enable docker

配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://lrppnyd2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.安装ceph集群

第一种方法
[root@ceph01 ~]# curl  --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
来自ceph官网
第二种
去github搜索ceph拿自己想要的版本
下载cephadm

[root@ceph01 ~]# chmod a+x cephadm 
给权限
[root@ceph01 ~]# ./cephadm add-repo --release octopus
拉个o版仓库源源

[root@ceph01 ~]# ./cephadm install
Installing packages ['cephadm']...
[root@ceph01 ~]# 
安装相关工具包
倘若有gpgkey的问题,关闭秘钥检查

以上三台主机都要做

在一个节点

[root@ceph01 ~]# cephadm bootstrap --mon-ip 192.168.92.11 --initial-dashboard-password redhat --dashboard-password
-noupdate --allow-fqdn-hostname
开始cephadm部署
因为有网,访问的到网络上的源,所以没有特别指定registry-url

4.查看结果

[root@ceph01 ~]# cephadm shell
Inferring fsid cb8f4abe-14a7-11ed-a76d-000c2939fb75
Inferring config /var/lib/ceph/cb8f4abe-14a7-11ed-a76d-000c2939fb75/mon.ceph01.example.com/config
Using recent ceph image quay.io/ceph/ceph@sha256:c3336a5b10b069b127d1a66ef97d489867fc9c2e4f379100e5a06f99f137a420
[ceph: root@ceph01 /]# 
cephadm shell  会启动一个临时的容器,退出时关闭。

想在容器外访问节点,那得安装ceph软件包命令
yum -y install ceph-common


[ceph: root@ceph01 /]# ceph orch daemon add osd ceph01.example.com:/dev/sdb
Created osd(s) 0 on host 'ceph01.example.com'
[ceph: root@ceph01 /]# ceph orch daemon add osd ceph01.example.com:/dev/sdc
Created osd(s) 1 on host 'ceph01.example.com'
[ceph: root@ceph01 /]# ceph orch daemon add osd ceph01.example.com:/dev/sdd
Created osd(s) 2 on host 'ceph01.example.com'

注意此时在容器里

在容器里面操作主机之间免密登录

[ceph: root@ceph01 /]# ceph cephadm get-pub-key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCysZgbSqzlN9UKGcIFprdLR/m9y5TYoFcckOXEZzFsA7o9zaWrfJYbkNyGSYbw8DSywYF1pcZu1QOiZ9DAG0XVotz/Gk4NqO9ewp6bPwxonShB5xGi63OZ0qhsgj0iV368FB7C7POM09kXCKueGlKyGXzOIX38k6yk2HHLN2Apx956qixJ+nuqOXpmK2a4dgkU98xE27ldlksxk+FlfSmI+ZuDscGQIZRpLhtLig6shrDMQzwjt+8UKdDMLFDyKkKBwqMwT1c0Av3z0EjQU8IUPOU50kbWNqAsJsq4Gq+kIZcSbeX/3Jnequ6znMwFqkB55Xr9XUWueEWIz14jX60ZX8Dma7+BBUAszH+VkK1hoBIU5xgVXA3rmZSZxLLGZswcB7pYhCO2mnrIACJjErJF4BlVv0zxh5QTchVq9m8Y+2H3sZdut5Umu0vfZhuMlYeTs8b5axUCEOwkwevV1t9QZiUdAw9iMBHGpNHKAO6R3bBdDZ8wpNUYFIvMuHccDr8= ceph-cb8f4abe-14a7-11ed-a76d-000c2939fb75
[ceph: root@ceph01 /]# ceph cephadm get-pub-key > ~/ceph.pub

ssh-copy-id -f -i ~/ceph.pub root@ceph02.example.com
ssh-copy-id -f -i ~/ceph.pub root@ceph03.example.com

增加节点

[ceph: root@ceph01 /]# ceph orch host add ceph02.example.com
Added host 'ceph02.example.com'
[ceph: root@ceph01 /]# ceph orch host add ceph03.example.com
Added host 'ceph03.example.com'
[ceph: root@ceph01 /]# 


查看所有镜像

[ceph: root@ceph01 /]# ceph orch ps
NAME                           HOST                STATUS         REFRESHED  AGE  VERSION  IMAGE NAME                                IMAGE ID      CONTAINER ID  
alertmanager.ceph01            ceph01.example.com  running (24m)  2m ago     26m  0.20.0   quay.io/prometheus/alertmanager:v0.20.0   0881eb8f169f  c396bb1811ca  
crash.ceph01                   ceph01.example.com  running (26m)  2m ago     26m  15.2.16  quay.io/ceph/ceph:v15                     296d7fe77d4e  2df23f92e960  
grafana.ceph01                 ceph01.example.com  running (24m)  2m ago     25m  6.7.4    quay.io/ceph/ceph-grafana:6.7.4           557c83e11646  41a4d79bffdf  
mgr.ceph01.example.com.wvuoii  ceph01.example.com  running (27m)  2m ago     27m  15.2.16  quay.io/ceph/ceph:v15                     296d7fe77d4e  3c35496cc85b  
mon.ceph01.example.com         ceph01.example.com  running (27m)  2m ago     28m  15.2.16  quay.io/ceph/ceph:v15                     296d7fe77d4e  e05f0ede5bf8  
node-exporter.ceph01           ceph01.example.com  running (22m)  2m ago     25m  0.18.1   quay.io/prometheus/node-exporter:v0.18.1  e5a616e4b9cf  74929a93b396  
osd.0                          ceph01.example.com  running (12m)  2m ago     12m  15.2.16  quay.io/ceph/ceph:v15                     296d7fe77d4e  f7ada88e07aa  
osd.1                          ceph01.example.com  running (11m)  2m ago     11m  15.2.16  quay.io/ceph/ceph:v15                     296d7fe77d4e  286a0513c451  
osd.2                          ceph01.example.com  running (10m)  2m ago     10m  15.2.16  quay.io/ceph/ceph:v15                     296d7fe77d4e  f65a9be01916  
prometheus.ceph01              ceph01.example.com  running (25m)  2m ago     25m  2.18.1   quay.io/prometheus/prometheus:v2.18.1     de242295e225  fbebcbe1b1cf  
[ceph: root@ceph01 /]# 

增加其他节点的osd

[ceph: root@ceph01 /]# ceph orch daemon add osd ceph02.example.com:/dev/sdb
Created osd(s) 3 on host 'ceph02.example.com'
[ceph: root@ceph01 /]# ceph orch daemon add osd ceph02.example.com:/dev/sdc
Created osd(s) 4 on host 'ceph02.example.com'
[ceph: root@ceph01 /]# ceph orch daemon add osd ceph02.example.com:/dev/sdd
Created osd(s) 5 on host 'ceph02.example.com'
[ceph: root@ceph01 /]# 

[ceph: root@ceph01 /]# ceph orch daemon add osd ceph03.example.com:/dev/sdb
Created osd(s) 6 on host 'ceph03.example.com'
[ceph: root@ceph01 /]# ceph orch daemon add osd ceph03.example.com:/dev/sdc
Created osd(s) 7 on host 'ceph03.example.com'
[ceph: root@ceph01 /]# ceph orch daemon add osd ceph03.example.com:/dev/sdd
Created osd(s) 8 on host 'ceph03.example.com'
[ceph: root@ceph01 /]# 

加入主机后,每个主机都应该有镜像docker ps 查看(其他hosts需要什么镜像就会自动下载什么)

查看

[ceph: root@ceph01 /]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME        STATUS  REWEIGHT  PRI-AFF
-1         0.17537  root default                              
-3         0.05846      host ceph01                           
0    hdd  0.01949          osd.0        up   1.00000  1.00000
1    hdd  0.01949          osd.1        up   1.00000  1.00000
2    hdd  0.01949          osd.2        up   1.00000  1.00000
-5         0.05846      host ceph02                           
3    hdd  0.01949          osd.3        up   1.00000  1.00000
4    hdd  0.01949          osd.4        up   1.00000  1.00000
5    hdd  0.01949          osd.5        up   1.00000  1.00000
-7         0.05846      host ceph03                           
6    hdd  0.01949          osd.6        up   1.00000  1.00000
7    hdd  0.01949          osd.7        up   1.00000  1.00000
8    hdd  0.01949          osd.8        up   1.00000  1.00000

图形界面也可以查看,也比较好

[ceph: root@ceph01 /]# ceph orch device ls
Hostname            Path      Type  Serial  Size   Health   Ident  Fault  Available  
ceph01.example.com  /dev/sdb  hdd           21.4G  Unknown  N/A    N/A    No         
ceph01.example.com  /dev/sdc  hdd           21.4G  Unknown  N/A    N/A    No         
ceph01.example.com  /dev/sdd  hdd           21.4G  Unknown  N/A    N/A    No         
ceph02.example.com  /dev/sdb  hdd           21.4G  Unknown  N/A    N/A    No         
ceph02.example.com  /dev/sdc  hdd           21.4G  Unknown  N/A    N/A    No         
ceph02.example.com  /dev/sdd  hdd           21.4G  Unknown  N/A    N/A    No         
ceph03.example.com  /dev/sdb  hdd           21.4G  Unknown  N/A    N/A    No         
ceph03.example.com  /dev/sdc  hdd           21.4G  Unknown  N/A    N/A    No         
ceph03.example.com  /dev/sdd  hdd           21.4G  Unknown  N/A    N/A    No         
[ceph: root@ceph01 /]# 

查看编排情况

[root@ceph01 ceph]# mv ceph.conf ~/
[root@ceph01 ceph]# ceph -s
Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)',)

就算有命令,没配置文件,也无法访问

[root@ceph01 ceph]# cat ceph.conf 
# minimal ceph.conf for cb8f4abe-14a7-11ed-a76d-000c2939fb75
[global]
    fsid = cb8f4abe-14a7-11ed-a76d-000c2939fb75
    mon_host = [v2:192.168.92.11:3300/0,v1:192.168.92.11:6789/0]

配置文件里写着mon(入口地址,类似keystone)
posted @ 2022-08-04 19:35  supermao12  阅读(694)  评论(0编辑  收藏  举报