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)

ceph 002 ceph架构 ceph数据存储过程 ceph集群安装的更多相关文章

  1. HBase体系架构和集群安装

    大家好,今天分享的是HBase体系架构和HBase集群安装.承接上两篇文章<HBase简介>和<HBase数据模型>,点击回顾这2篇文章,有助于更好地理解本文. 一.HBase ...

  2. 【架构师之路】集群/分布式环境下5种session处理策略

    [架构师之路]集群/分布式环境下5种session处理策略   转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...

  3. 大数据入门第五天——离线计算之hadoop(上)概述与集群安装

    一.概述 根据之前的凡技术必登其官网的原则,我们当然先得找到它的官网:http://hadoop.apache.org/ 1.什么是hadoop 先看官网介绍: The Apache™ Hadoop® ...

  4. CentOS6安装各种大数据软件 第十章:Spark集群安装和部署

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  5. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  6. Redis架构之哨兵机制与集群

    Redis架构之哨兵机制与集群 哨兵机制 1.介绍: Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个 ...

  7. 朝花夕拾之--大数据平台CDH集群离线搭建

    body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...

  8. 大数据测试之hadoop集群配置和测试

    大数据测试之hadoop集群配置和测试   一.准备(所有节点都需要做):系统:Ubuntu12.04java版本:JDK1.7SSH(ubuntu自带)三台在同一ip段的机器,设置为静态IP机器分配 ...

  9. 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序

    第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...

  10. 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装

    一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...

随机推荐

  1. golang errgroup 的超时检测

    errgroup 的超时检测通常是一种事后得到结果的方式. errgroup本身并不直接支持超时控制,而是依赖于与之关联的context.Context来实现超时和取消功能. 当context超时时, ...

  2. nonatomic 带来的线程安全问题

    一.结论 一个对象对外暴露的读写属性,如果这个属性在多个线程中访问,一定会出现crash. 因此对外暴露的属性一定要考虑线程安全问题. 二.看下面的代码 下面的代码一定会crash,除非obj是ato ...

  3. Xcode 最近使用的一些问题

    1.上架的App如何测试推送? 苹果的证书分为开发证书和发布证书,上架AppStore的App应该使用发布证书进行配置,但是发布证书编译出包的App无法安装到手机上 只有一种方式,采用Ad hoc p ...

  4. 《利用python进行数据分析》笔记章节索引

    本文章作为我的一系列关于<利用python进行数据分析>的笔记的文章的索引.分为四部分. 第一部分:numpy基础,共六节: numpy基础--ndarray(一种多维数组对象):http ...

  5. AGC043

    AGC043 A.Range Flip Find Route 简单DP B.123 Triangle 推性质. 利用模运算将减法变成加法(在绝对值0/1的情况下). Giant Graph 类似于博弈 ...

  6. docker 报Failed to create thread: Operation not permitted (1) 解决方法

    docker启动容器时报:Failed to create thread: Operation not permitted (1) 原因:docker内的用户权限受限 解决办法1: 启动docker时 ...

  7. 3年Java阿里跳字节的面试心得总结

    中厂->阿里->字节,成都->杭州->成都 系列文章目录和关于我 0.前言 笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到 ...

  8. 三种方法教你下载 Windows 10 和 Windows 11 原生镜像

    原文地址:https://itxiaozhang.com/three-methods-to-download-windows-10-and-windows-11-iso/ 本文配合视频食用效果最佳,视 ...

  9. 通俗易懂的路径搜索之A-star算法

    A-star算法 搜索技术 搜索技术是一种通用的问题求解技术,可以将待解决的问题转化为可搜索的问题空间,然后在该空间中搜索求解.搜索技术在人工智能领域有着非常广泛的应用. 盲目搜索 盲目搜索是最简单的 ...

  10. 用Tensorboard在VScode Remote ssh中显示图像

    可以用Tensorboard在vscode的ssh连接中显示plot出的图像. 具体方法如下: from torch.utils.tensorboard import SummaryWriter wr ...