ceph分布式存储搭建V1
ceph分布式存储
版本标识 |
V1 |
编制作者 |
李斌 |
编制日期 |
|
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/目录 启动脚本说明:
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组件,其作用是用于存储资源。 脚本说明:
[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 # 访问 |
说明:该文档只作为参考,ceph最后只在libin.com上搭建,没有实现集群环境,该文档为初版