服务(第三十四篇)ceph-分布式存储

什么是ceph?

ceph 是一种统一的分布式文件系统,具有优秀的性能、高可用性和可扩展性。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为 openstack 的唯一后端存储来提高数据转发效率。

ceph的存储类型有哪些?

①块存储   
一对一,只能被一个主机挂载使用,数据以块为单位进行存储,典型代表:硬盘;

②文件存储
一对多,能被多个主机同时挂载使用,数据以文件的形式存储的(元数据和实际数据是分开存储的),并且有目录的层级关系,典型代表:NFS;

③对象存储
一对多,能被多个主机通过API接口访问使用,数据以文件进行存储,一个文件即一个对象,元数据和实际数据是存储在一起的,文件是扁平化的存储,没有目录的层级关系,典型代表:OSS、S3。
 

Ceph架构:

④ 客户端(APP/VM/HOST)
③ 三个默认接口(块存储RBD,文件存储cephFS,对象存储RGW)
② LibRADOS对象访问接口
① RADOS基础存储系统(统一存储池)

Ceph组件:

OSD                    负责存储数据,一般一个磁盘对应一个OSD,响应客户端的读写请求
Monitor(mon)      负责保存OSD的元数据,维护Ceph集群状态的MAP映射视图,管理客户端的认证与授权
Manager(mgr)     负责跟踪集群状态和监控指标,暴露接口给监控软件获取监控指标数据
MDS                    负责保存 CephFS 文件系统的元数据,仅在使用 CephFS 接口功能时使用

PG                       可以理解成保存OSD位置的索引,一个PG里包含多个数据对象,一个对象只能属于一个PG
Pool                     数据池,可以理解成一个命名空间,一个Pool里有多个PG

Ceph的存储过程:

①文件被分成一个或者多个4M大小的数据对象;

②每个数据对象有自己的oid(由ino和ono组成),通过对oid进行hash算法得到一个十六进制的数值,然后除以pool里的pg总数,取余得到pgid(由poolid和pgid组成);

③对pgid进行crush算法得到osdid;

④通过osdid获得数据对象该存储在那个osd里,然后存储进去。

基于 ceph-deploy 部署 Ceph 集群:

Ceph 生产环境推荐:
1、存储集群全采用万兆网络
2、集群网络(cluster-network,用于集群内部通讯)与公共网络(public-network,用于外部访问Ceph集群)分离
3、mon、mds 与 osd 分离部署在不同主机上(测试环境中可以让一台主机节点运行多个组件)
4、OSD 使用 SATA 亦可
5、根据容量规划集群
6、至强E5 2620 V3或以上 CPU,64GB或更高内存
7、集群主机分散部署,避免机柜的电源或者网络故障

①Ceph 环境规划

主机名Public网络Cluster网络角色
admin192.168.169.10admin(管理节点负责集群整体部署)、client
node01192.168.169.20192.168.100.20mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node02192.168.169.40192.168.100.40mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node03192.168.169.50192.168.100.50mon、osd(/dev/sdb、/dev/sdc、/dev/sdd)
admin192.168.169.60client

②关闭防火墙 

③配置 hosts 解析

cat > /etc/hosts << EOF
192.168.169.10 admin
192.168.169.20 node01
192.168.169.40 node02
192.168.169.50 node03
192.168.169.60 client
EOF

 ④安装常用软件和依赖包

yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass

⑤在 admin 管理节点配置 ssh 免密登录所有节点

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@admin
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@node01
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@node02
sshpass -p '123456' ssh-copy-id -o StrictHostKeyChecking=no root@node03

 ⑥配置时间同步

systemctl enable --now chronyd
timedatectl set-ntp true                    #开启 NTP
timedatectl set-timezone Asia/Shanghai        #设置时区
chronyc -a makestep                            #强制同步下系统时钟
timedatectl status                            #查看时间同步状态
chronyc sources -v                            #查看 ntp 源服务器信息
timedatectl set-local-rtc 0                    #将当前的UTC时间写入硬件时钟

#重启依赖于系统时间的服务
systemctl restart rsyslog 
systemctl restart crond

#关闭无关服务
systemctl disable --now postfix

 ⑦配置 Ceph yum源

wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate

rpm -ivh ceph-release-1-1.el7.noarch.rpm --force

⑧执行完上面所有的操作之后重启所有主机
sync
reboot

⑨为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行
mkdir -p /etc/ceph

安装 ceph-deploy 部署工具
cd /etc/ceph
yum install -y ceph-deploy

ceph-deploy --version

在管理节点为其它节点安装 Ceph 软件包
#ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本
cd /etc/ceph
ceph-deploy install --release nautilus node0{1..3} admin

#ceph-deploy install 本质就是在执行下面的命令:
yum clean all
yum -y install epel-release
yum -y install yum-plugin-priorities
yum -y install ceph-release ceph ceph-radosgw

⑩安装网卡,配置网卡

在管理节点运行下述命令,告诉 ceph-deploy 哪些是 mon 监控节点:

cd /etc/ceph

ceph-deploy new --public-network 192.168.169.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03

命令执行成功后会在 /etc/ceph 下生成配置文件:

 ls /etc/ceph
ceph.conf                    #ceph的配置文件
ceph-deploy-ceph.log        #monitor的日志
ceph.mon.keyring            #monitor的密钥环文件

 在管理节点初始化 mon 节点:

cd /etc/ceph
ceph-deploy mon create node01 node02 node03            #创建 mon 节点,由于 monitor 使用 Paxos 算法,其高可用集群节点数量要求为大于等于 3 的奇数台

ceph-deploy --overwrite-conf mon create-initial     #配置初始化 mon 节点,并向所有节点同步配置
                                                                           # --overwrite-conf 参数用于表示强制覆盖配置文件

这里有过一次错误:node2和node3没成功一会出现bug?

解决方法:看ceph.conf的配置信息是否正确。

ceph-deploy gatherkeys node01                        #可选操作,向 node01 节点收集所有密钥

#命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.bootstrap-mds.keyring            #引导启动 mds 的密钥文件
ceph.bootstrap-mgr.keyring            #引导启动 mgr 的密钥文件
ceph.bootstrap-osd.keyring            #引导启动 osd 的密钥文件
ceph.bootstrap-rgw.keyring            #引导启动 rgw 的密钥文件
ceph.client.admin.keyring            #ceph客户端和管理端通信的认证密钥,拥有ceph集群的所有权限
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring

 在node节点上查看自动开启的 mon 进程
ps aux | grep ceph

 在管理节点查看 Ceph 集群状态:

 cd /etc/ceph
ceph -s

查看 mon 集群选举的情况:

ceph quorum_status --format json-pretty | grep leader

 扩容 mon 节点
ceph-deploy mon add <节点名称>

⑪部署能够管理 Ceph 集群的节点      #可实现在各个节点执行 ceph 命令管理集群 

cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03

ceph-deploy admin node01 node02 node03            #本质就是把 ceph.client.admin.keyring 集群认证文件拷贝到各个节点

 在节点上看:ls /etc/ceph

 查看下健康状态:ceph -s

⑫部署 osd 存储节点(三个node节点部署)
#主机添加完硬盘后不要分区,直接使用

如果是利旧的硬盘,则需要先擦净(删除分区表)磁盘(可选,无数据的新硬盘可不做)
cd /etc/ceph
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb

添加 osd 节点:
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sd

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值