加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

【Linux运维】Ceph分布式集群存储

发布时间:2022-10-18 12:56:29 所属栏目:Linux 来源:
导读:  Ceph基础介绍

  Ceph是一个可靠的、自动重均衡、自动恢复的分布式存储系统

  根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务

  在虚拟化领域里,比较常用到的是
  Ceph基础介绍
 
  Ceph是一个可靠的、自动重均衡、自动恢复的分布式存储系统
 
  根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务
 
  在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘
 
  Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响
 
  Ceph的核心组件
 
  Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS
 
  Ceph OSD:(OSD的英文全称是Object Storage Device)
 
  Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成
 
  对于Ceph OSD Deamon而言集群linux,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS虽然有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS
 
  Ceph Monitor:
 
  Ceph MDS:(全称是Ceph MetaData Server)
 
  Ceph基础架构组件
 
  集群linux_搭建linux集群,beowulf cluster_linux集群服务器
 
  Ceph是一个对象(object)式存储系统,它把每一个待管理的数据流(例如一个文件)切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存取
 
  对象数据的底层存储服务是由多个主机(host)组成的存储系统,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠,自动化,分布式对象存储系统
 
   librados是RADOS存储集群的API,它支持C,C++,Java,Python,Ruby和PHP等编程语言
 
  由于直接基于librados这个API才能使用Ceph集群的话对使用者是有一定门槛的。当然,这一点Ceph官方也意识到了,于是他们还对Ceph做出了三个抽象资源,分别为RADOSGW,RBD,CEPHFS等
 
  RadosGw,RBD和CephFS都是RADOS存储服务的客户端,他们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象,因而各自适用不同的应用场景,如下所示:
 
  RadosGw:
 
  RBD:
 
  CephFS:
 
  Ceph部署
 
  | 环境介绍
 
  集群linux_linux集群服务器_搭建linux集群,beowulf cluster
 
  | 所有节点都添加映射关系
  
  cat >/etc/hosts<
 
  10.0.0.202 ceph202
 
  10.0.0.203 ceph203
 
  10.0.0.204 ceph204
 
  EOF
 
  | 配置免密登录
 
  (后续ceph-deploy工具依赖免密登录)
  
  # 在ceph202上生成密钥
 
  ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q
  
  # 拷贝密钥到其它节点
 
  ssh-copy-id ceph203
 
  ssh-copy-id ceph204
  
  # 让所有节点共用同一套密钥
 
  scp -rp ~/.ssh ceph203:~
 
  scp -rp ~/.ssh ceph204:~
 
  | ceph202 安装"ceph-deploy"工具
  
  # 准备国内的软件源(含基础镜像软件源和epel源)
 
  curl? -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 
  yum install epel-release -y
  
  # 配置ceph软件源
 
  cat > /etc/yum.repos.d/oldboyedu-ceph.repo <<'EOF'
 
  [ceph-noarch]
 
  name=Ceph noarch packages
 
  baseurl=https://download.ceph.com/rpm-mimic/el7/noarch
 
  enabled=1
 
  gpgcheck=1
 
  type=rpm-md
 
  gpgkey=https://download.ceph.com/keys/release.asc
 
  EOF
  
  # ceph202主机安装"ceph-deploy"工具,用于后期部署ceph集群
 
  sed -ri 's#(keepcache=)0#\11#' /etc/yum.conf
 
  yum makecache
 
  yum -y install ceph-deploy
  
  # 将rpm软件源推送到其它节点
 
  scp /etc/yum.repos.d/*.repo ceph203:/etc/yum.repos.d/
 
  scp /etc/yum.repos.d/*.repo ceph204:/etc/yum.repos.d/
 
  | ceph环境准备
  
  # ceph202 节点安装ceph环境
 
  yum -y install ceph ceph-radosgw
  
  # 将软件打包到本地并推送到其它节点
 
  mkdir ceph-rpm
 
  find /var/cache/yum/ -type f -name "*.rpm" | xargs mv -t ceph-rpm/
 
  tar zcf oldboyedu-ceph.tar.gz ceph-rpm
 
  scp oldboyedu-ceph.tar.gz ceph203:~
 
  scp oldboyedu-ceph.tar.gz ceph204:~
  
  # 其它节点安装ceph环境
 
  tar xf oldboyedu-ceph.tar.gz &&? cd ~/ceph-rpm && yum -y localinstall *.rpm
 
  相关软件包功能说明如下:
 
  linux集群服务器_搭建linux集群,beowulf cluster_集群linux
 
  | 初始化ceph配置并安装组件
  
  # 自定义创建ceph的配置文件目录~
 
  mkdir -pv /oldboyedu/ceph/cluster && cd /oldboyedu/ceph/cluster/
  
  # 初始化ceph的配置文件,注意观察执行命令的所在目录文件变化哟~
 
  ceph-deploy new --public-network 10.0.0.0/24 ceph202 ceph203 ceph204
 
  # 安装ceph-monitor并启动ceph-mon
 
  cd /oldboyedu/ceph/cluster/ && ceph-deploy mon create-initial
  
  # 将配置和client.admin密钥推送到指定的远程主机以便于管理集群
 
  cd /oldboyedu/ceph/cluster/ && ceph202 ceph203 ceph204
  
  # 安装并启动ceph-mgr组件
 
  cd /oldboyedu/ceph/cluster/ && ceph-deploy mgr create ceph202 ceph203 ceph204
 
 
 
  # 安装OSD设备
 
  cd /oldboyedu/ceph/cluster
 
  ceph-deploy osd create ceph202 --data /dev/sdb
 
  ceph-deploy osd create ceph203 --data /dev/sdb
 
  ceph-deploy osd create ceph204 --data /dev/sdb
 
  使用ceph对接k8s
 
  | 使用Ceph身份验证密钥
  
  # 如果提供了Ceph身份验证密钥,则该密钥应首先进行base64编码,然后将编码后的字符串放入密钥yaml中。
 
  # grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64
 
  QVFCNE54ZGhiZzZvQlJBQTZkS1VJeStheVJVV2FFUHBPMHZVNnc9PQ==
  
  # 创建Secret资源,注意替换key的值,要和ceph集群的key保持一致哟,上一步我已经取出来了。
 
  cat > oldboyedu-ceph-secret.yaml <<'EOF'
 
  apiVersion: v1
 
  kind: Secret
 
  metadata:
 
  name: ceph-secret
 
  namespace: oldboyedu-tomcat
 
  type: "kubernetes.io/rbd"
 
  data:
 
  key: QVFCNE54ZGhiZzZvQlJBQTZkS1VJeStheVJVV2FFUHBPMHZVNnc9PQ==
 
  EOF
  
  # 在K8S集群中创建Secret资源,以便于后期Pod使用该资源。
 
  cat >oldboyedu-ceph-secret.yaml <
 
  apiVersion: v1
 
  kind: Secret
 
  metadata:
 
  name: ceph-secret
 
  namespace: oldboyedu-tomcat
 
  type: "kubernetes.io/rbd"
 
  data:
 
  key: QVFCNE54ZGhiZzZvQlJBQTZkS1VJeStheVJVV2FFUHBPMHZVNnc9PQ==
 
  EOF
 
  kubectl apply -f oldboyedu-ceph-secret.yaml
  
  | 创建k8s专用的存储池
  
  ceph osd pool create k8s 128 128# 如果提供了Ceph身
 
  | 创建资源池
  
  # 创建kubernetes集群常用的资源池
 
  ceph osd pool create k8s 128 128
 
  # 在k8s资源池创建块设备,值得注意的是,我们可以指定该镜像的特性,否则由于内核版本过低而无法挂载哟
 
  rbd create -p k8s --size 1024 --image-feature layering oldboyedu-linux
 
  # 创建K8S的资源,将MySQL的Pod持久化到ceph集群
 
  cat >02-mysql-deploy.yml <
 
  apiVersion: extensions/v1beta1
 
  kind: Deployment
 
  metadata:
 
  name: mysql
 
  namespace: oldboyedu-tomcat
 
  spec:
 
  replicas: 1
 
  template:
 
  ? metadata:
 
  ? ? labels:
 
  ? ? ? app: oldboyedu-mysql
 
  ? spec:
 
  ? ? nodeName: 10.0.0.104
 
  ? ? volumes:
 
  ? ? ? ?- name: mysql-data
 
  ? ? ? ? rbd:
 
  ? ? ? ? ? ?# 指定ceph集群的mon节点
 
  ? ? ? ? ? monitors:
 
  ? ? ? ? ? ?- '10.0.0.202:6789'
 
  ? ? ? ? ? ?- '10.0.0.203:6789'
 
  ? ? ? ? ? ?- '10.0.0.204:6789'
 
  ? ? ? ? ? ?# 指定存储池
 
  ? ? ? ? ? pool: k8s
 
  ? ? ? ? ? ?# 指定rbd镜像名称
 
  ? ? ? ? ? image: oldboyedu-linux
 
  ? ? ? ? ? ?# 指定文件系统类型,其会自动帮咱们进行格式化哟~
 
  ? ? ? ? ? fsType: xfs
 
  ? ? ? ? ? ?# 是否可读,如果设置为true表示只读权限哟~
 
  ? ? ? ? ? readOnly: false
 
  ? ? ? ? ? ?# 指定访问ceph集群的用户
 
  ? ? ? ? ? user: admin
 
  ? ? ? ? ? ?# 指定访问集群的密钥资源,这个就是我们自己创建的secret局部资源,请一定要确保Pod和secret在同一个namespace,否则无法访问哟。
 
  ? ? ? ? ? secretRef:
 
  ? ? ? ? ? ? name: ceph-secret
 
  ? ? ? ? ? ?# 指定镜像格式,老版本不支持该字段,因此我这里也就先注释了
 
  ? ? ? ? ? ?# imageformat: "2"
 
  ? ? ? ? ? ?# 指定镜像特性,老版本不支持该字段,因此我这里就先注释了
 
  ? ? ? ? ? ?# imagefeatures: "layering"
 
  ? ? ? ?- name: log
 
  ? ? ? ? emptyDir: {}
 
  ? ? containers:
 
  ? ? ? ?- name: mysql
 
  ? ? ? ? ?# image: 10.0.0.101:5000/mysql:5.7
 
  ? ? ? ? image: oldboyedu-mysql:5.7
 
  ? ? ? ? ?# args: ["sh","-x","/start-mysql.sh"]
 
  ? ? ? ? command: ["sh","-x","/start-mysql.sh"]
 
  ? ? ? ? ports:
 
  ? ? ? ? ?- containerPort: 3306
 
  ? ? ? ? volumeMounts:
 
  ? ? ? ? ? ?- name: mysql-data
 
  ? ? ? ? ? ? mountPath: /var/lib/mysql
 
  ? ? ? ? ? ?- name: log
 
  ? ? ? ? ? ? mountPath: /var/log
 
  ? ? ? ? env:
 
  ? ? ? ? ?- name: MYSQL_ROOT_PASSWORD
 
  ? ? ? ? ? value: '123456'
 
  ROG
 
  温馨提示:
 
  使用"ceph auth ls"指令可以查看身份验证状态的列表创建的资源如下图所示,到时候可以直接参考"/oldboyedu/k8s-ceph"目录的yaml这个软件包会出现一大堆错误,需要我们手动逐个去排查,对学员说是一次不错的历练。上课要演示完整的排查流程
 
  | 数据写入成功
 
   我们成功将数据写入啦
 
  总结
 
  在本教程中,我们通过一些示例学习了如何去部署 Ceph 集群,实现对 Kubernetes 的分布式存储
 
  感谢您的阅读,由于文档整理较费时费力,难免会有疏漏和不妥当地方,敬请谅解
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!