ceph分布式存储搭建V1

1668186625099

ceph分布式存储

ca5186cf45f9f3cfce2e8409957e529

版本标识

V1

编制作者

李斌

编制日期

2022年11月11日

Ceph官网

https://docs.ceph.com/en/latest/

简介

Ceph是宠物章鱼的昵称,也是“cephalopod”的简称

Ceph的宗旨:提供一个扩展性强大、性能优越且无单点故障的分布式存储系统。

Ceph理念:贯彻的理念是SDS(软件定义储存)

SDS:可以降低存储基础设施的TCO(总体拥有成本);

具有灵活性、可扩展性、可靠性

Ceph的优点:分布式、可扩展性、性能、可靠性、稳健性、性价比高

Ceph的企业级特性:可扩展性、可靠性、纠删码、缓存和计数

Ceph是可以基于对象来实现块储存和文件储存的

Ceph架构革新,引入了新的方法(CRUSH),CRUSH表示数据存储的分布方式选择算法,CRUSH独具基础架构感知功能,它能理解基础设备各个部件之间的关系

Ceph的建设性理念:

每个组件能够线性扩展;

无任何单故障点;

解决方案必须是基于软件的、开源的、适应性强的;

运行于现有的商业硬件上;

每个组件必须尽可能拥有自我管理和自我修复能力

对象存储是ceph的基础,也是ceph的构建部件,对象存储具有使用对象存储实现平台和硬件独立的独特优势;对象不依赖于物理路径,使ceph可以实现从PB到EB的线性发展。

Openstack包含很多项目,如:Cinder、Glance、Swift,可以为openstack提供储存功能。

Ceph架构简述

Ceph monitor(监视器,简称MON):通过保存一份集群状态映射来维护整个集群的健康状态,所有集群节点都向MON节点汇报状态信息,ceph monitor不存储数据,这是OSD的任务。

Ceph对象存储设备(OSD):只要应用程序向ceph集群发送写操作,数据就会被以对象形式存储在OSD中,这是ceph集群中唯一能存储用户数据的组件。通常情况下,一个OSD守护进程会被捆绑在集群中的一块物理磁盘上,所以,Ceph集群中的物理磁盘总数等于在磁盘上运行的存储用户数据的OSD守护进程的数量是相同的。

Ceph元数据服务器(MDS):MDS只为cephFs文件系统跟踪文件的层次结构和存储元数据。

RADOS:RADOS是ceph存储集群基础。在ceph中,所有数据都以对象形式存储,无论哪种类型,RADOS都负责保存,RADOS层可以确保数据始终一致。

Librados:librados库为编程语言提供了方便地访问RADOS接口的方式,同时还为组件提供了原生的接口,librados支持直接访问RADOS来节省HTTP开销。

RADOS块设备(RBD):RBD是ceph块设备,。提供持久化存储,RBD服务已经被封装成了基于librados的一个原生接口。

RADOS网关接口(RGW):RGW提供对象存储服务

CephFS:ceph文件系统提供了一个使用ceph存储集群存储用户数据的与POSIX兼容的文件系统。Ceph服务也基于librados封装了原生接口

第一章 架构布局

1.1主机布局:

主机名

IP地址

libin.com

192.168.124.132

libin2.com

192.168.124.133

libin3.com

192.168.124.134

1.2系统防火墙设置:

[libin@libin ansible]$ vim rhca447-55.yaml

---

- name: 系统防火墙设置

hosts: web

tasks:

- name:

shell: systemctl stop firewalld

- name:

shell: systemctl disable firewalld

1.3关闭selinux:

---

#- name: 系统防火墙设置

# hosts: web

# tasks:

# - name:

# shell: systemctl stop firewalld

# - name:

# shell: systemctl disable firewalld

- name: 关闭selinux(linux的安全子系统)

hosts: web

tasks:

- name:

shell: sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

1.4设置主机名:

# 三台主机分别设置主机名

hostnamectl set-hostname libin.com

hostnamectl set-hostname libin2.com

hostnamectl set-hostname libin3.com

1.5 免密登录:

# 在libin.com执行:

[root@libin ~]# ssh-copy-id libin.com

[root@libin ~]# ssh-copy-id libin2.com

[root@libin ~]# ssh-copy-id libin3.com

1.6 配置host:

# 分别在libin.com 、libin2.com、libin3.com上执行

cat >> /etc/hosts <<EOF

192.168.124.133 libin.com

192.168.124.134 libin2.com

192.168.161.136 libin3.com

EOF

1.7 运行ntp服务:

# 分别开启libin.com 、libin2.com、libin3.com的ntp服务

[libin@libin ansible]$ ansible db -a "systemctl start ntpd"

[libin@libin ansible]$ ansible db -a "systemctl enable ntpd"

1.8 设置别名:

# 分别在libin.com 、libin2.com、libin3.com上执行

[root@libin ~]# echo 'alias ceph="docker exec mon ceph"' >> /etc/profile

[root@libin ~]# source /etc/profile

[01:48:42 root@libin2 ~]# echo 'alias ceph="docker exec mon ceph"' >> /etc/profile

[01:48:42 root@libin2 ~]# source /etc/profile

[01:50:35 root@libin3 libin]# echo 'alias ceph="docker exec mon ceph"' >> /etc/profile

[01:48:42 root@libin2 ~]#source /etc/profile

1.9 创建ceph目录:

# 在libin.com 上创建ceph目录与容器建立映射,便于直接操纵管理Ceph配置文件

(1)目录说明

admin文件夹下用于存储启动脚本

etc文件夹下存放了ceph.conf等配置文件

lib文件夹下存放了各组件的密钥文件

logs文件夹下存放了ceph的日志文件

[root@libin ~]# mkdir -p /usr/local/ceph/{admin,etc,lib,logs}

[03:02:02 root@libin2 osd]# mkdir -p /usr/local/ceph/{admin,etc,lib,logs}

[03:14:16 root@libin3 osd]# mkdir -p /usr/local/ceph/{admin,etc,lib,logs}

(2) 对docker内用户进行授权

[root@libin ~]# chown -R 167:167 /usr/local/ceph/

1.10 安装docker:

# 说明,因为启用了ansible使用ansible-hoc去批量管理与安装

# 卸载三台节点上的旧版本

[libin@libin ansible]$ ansible db -m shell -a "yum -y remove docker docker-common docker-selinux docker-engine"

# 安装依赖包

[libin@libin ansible]$ ansible db -m shell -a "yum -y install yum-utils device-mapper-persistent-data lvm2"

# 配置yum源

[libin@libin ansible]$ ansible db -m shell -a "yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"

# 安装docker

[libin@libin ansible]$ ansible db -m shell -a 'yum -y install docker-ce-18.03.1.ce'

# 启动服务

# 设置开机自启

[libin@libin ansible]$ ansible db -m shell -a 'systemctl enable docker'

# 查看docker版本

[libin@libin ansible]$ ansible db -m shell -a 'docker version'

# 修改docker仓库镜像,我在libin.com上编辑好好进行拷贝到其他节点

# 若不进行修改,那么pull镜像就会失败

[root@libin yum.repos.d]# vim /etc/docker/daemon.json

{

"registry-mirrors": [

"https://registry.docker-cn.com",

"http://hub-mirror.c.163.com",

"https://docker.mirrors.ustc.edu.cn"

]

}

[root@libin yum.repos.d]# scp /etc/docker/daemon.json root@libin2.com:/etc/docker/

[root@libin yum.repos.d]# scp /etc/docker/daemon.json root@libin3.com:/etc/docker/

# 重新加载docker服务和重启docker

[libin@libin ansible]$ ansible db -m shell -a 'systemctl daemon-reload'

[libin@libin ansible]$ ansible db -m shell -a 'systemctl restart docker'

1.11 创建OSD盘:

# 说明:我是三台虚拟机,分别新添加三块10G的独立磁盘

# 格式化裸盘

[libin@libin ansible]$ ansible libin.com,libin2.com -m shell -a 'mkfs.xfs -f /dev/sdb'

[libin@libin ansible]$ ansible libin3.com -m shell -a 'mkfs.xfs -f /dev/sdc'

# 创建挂载目录,并进行挂载

[libin@libin ansible]$ ansible db -m shell -a 'mkdir -p /dev/osd'

[libin@libin ansible]$ ansible libin.com,libin2.com -m shell -a 'mount /dev/sdb /dev/osd'

[libin@libin ansible]$ ansible libin3.com -m shell -a 'mount /dev/sdc /dev/osd'

# dockerhub 上最流行的 ceph/daemon 镜像(这里需要拉取nautilus版本的ceph,latest-nautilus)

[libin@libin ansible]$ ansible db -m shell -a 'docker pull ceph/daemon:latest-nautilus'

1.12 编写启动监视器脚本:

说明:由于环境问题,我只搭建了一台主机libin.com,之前创建的/usr/local/ceph/admin/应该要放置在10G的/dev/osd中,导致我后面只搭建了一台

# 在三个节点,之前创建的/usr/local/ceph/admin/目录

启动脚本说明:

  1. name参数,指定节点名称,这里设为mon
  2. -v xxx:xxx 是建立宿主机与容器的目录映射关系,包含 etc、lib、logs目录。
  3.  MON_IP是Docker运行的IP地址(通过ifconfig来查询,取ens33里的inet那个IP),这里我们有3台服务器,那么MAN_IP需要写上3个IP,如果IP是跨网段的CEPH_PUBLIC_NETWORK必须写上所有网段。

4. CEPH_PUBLIC_NETWORK配置了运行Docker主机所有网段 这里必须指定nautilus版本,不然会默认操作最新版本ceph,mon必须与前面定义的name保持一致。

# 更正后的写法:

[root@libin admin]# cat ceph_start-monitor.sh

#!/bin/bash

sudo docker run -d --net=host --name=mon \

-v /etc/ceph:/etc/ceph \

-v /var/lib/ceph/:/var/lib/ceph \-e MON_IP=192.168.124.132 \-e CEPH_PUBLIC_NETWORK=192.168.0.0/16 \

ceph/daemon:latest-nautilus mon

# 检查

[root@libin admin]# docker ps -l

#若报错就进行删除并排错

[root@libin admin]# docker rm mon

# 执行脚本

[root@libin admin]# sh /usr/local/ceph/admin/ceph_start-monitor.sh

546b42825bc954b57f44f79ac9afd97a1db842fb0754ca6026d3923dae7c972a

#查看运行情况

[root@libin admin]# docker ps -l

# 查看日志

[root@libin admin]# docker logs -f mon

# 查看集群状态

# libin3.com 节点

1.13 编写启动OSD组件脚本:

这个脚本是用于启动OSD组件的,OSD(Object Storage Device)是RADOS组件,其作用是用于存储资源。

脚本说明:

  1. name 是用于指定OSD容器的名称,也可以不写
    2. net 是用于指定host,就是前面我们配置host
  2. restart指定为always,使osd组件可以在down时重启。
  3. privileged是用于指定该osd是专用的。 这里我们采用的是osd_directory 镜像模式

[root@libin admin]# vim /usr/local/ceph/admin/ceph_start-osd.sh

#!/bin/bash

sudo docker run -d --net=host \

--privileged=true \

-v /etc/ceph:/etc/ceph \

-v /var/lib/ceph/:/var/lib/ceph \

-v /dev/:/dev/ \

-e OSD_DEVICE=/dev/sdb \

ceph/daemon:latest-nautilus osd_directory

# 启动OSD在libin.com

[root@libinadmin]# pwd

/usr/local/ceph/admin

[root@libinadmin]# docker exec -it mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring

[root@libin admin]# sh ceph_start-osd.sh

f055c5a5ccdc838cab801c642a84ac15286f910be5e40b2803b399c22617b05e

# 查看集群状态,

# 启动OSD在libin3.com

1.14 编写启动mgr组件脚本:

# 脚本说明

脚本是用于启动mgr组件,它的主要作用是分担和扩展monitor的部分功能,提供图形化的管理界面以便我们更好的管理ceph存储系统

[root@libin admin]# vim /usr/local/ceph/admin/ceph_start-mgr.sh

#!/bin/bash

sudo docker run -d --net=host \

--privileged=true \

-v /etc/ceph:/etc/ceph \

-v /var/lib/ceph/:/var/lib/ceph \

ceph/daemon:latest-nautilus mgr

[root@libin admin]# sh ceph_start-mgr.sh

8ada22bc83348169a2f133f4647f030138666e6fc2807b5024c7f6dba13ad22a

1.15 编写启动rgw组件脚本:

# 脚本说明

主要是用于启动rgw组件,rgw(Rados GateWay)作为对象存储网关系统,一方面扮演RADOS集群客户端角色,为对象存储应用提供数据存储,另一方面扮演HTTP服务端角色,接受并解析互联网传送的数据。

[03:30:06 root@libin3 admin]# vim /usr/local/ceph/admin/ceph_start-rgw.sh

#!/bin/bash

sudo docker run -d --net=host \

--name=rgw \

--privileged=true \

-v /etc/ceph:/etc/ceph \

-v /var/lib/ceph/:/var/lib/ceph \

-v /usr/local/ceph/logs:/var/log/ceph \

ceph/daemon:latest-nautilus rgw

[root@libin admin]# docker exec mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring

exported keyring for client.bootstrap-rgw

[root@libin admin]# sh ceph_start-rgw.sh

1.16 Dashboard管理后台设置:

# 查看模块

ceph mgr module ls |less

# 启动模块

ceph mgr module enable dashboard --force

# 关闭 dashboard SSL 功能

ceph config set mgr mgr/dashboard/ssl false

# 开启dashboard功能

docker exec mgr ceph mgr module enable dashboard

# 指定 dashboard 监听地址

ceph config set mgr mgr/dashboard/server_addr 192.168.124.132

# 指定 dashboard 监听端口

ceph config set mgr mgr/dashboard/ceph-mgr1/server_port 9009

#配置外部访问端口

docker exec mgr ceph config set mgr mgr/dashboard/server_port 8444

 

# 开启prometheus监控
ceph mgr module enable prometheus

# 创建登录用户和密码设置

[root@libin ceph]# vim /etc/ceph/pass #这里为密码文件

admin

[root@libin ceph]# docker exec mgr ceph dashboard set-login-credentials admin -i /etc/ceph/pass

# 查看dashboard 管理后台配置

ceph config dump

# 访问

bcaef2a0b14c33761ce699d1dd9ae07

说明:该文档只作为参考,ceph最后只在libin.com上搭建,没有实现集群环境,该文档为初版

posted @ 2022-11-12 16:07  LB_运维技术  阅读(522)  评论(0编辑  收藏  举报