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)