欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ubuntu16.04LTS部署CEPH文件存储集群

程序员文章站 2022-07-12 17:13:09
...
基础环境安装
添加硬盘
步骤1集群安装需要三台及以上服务器,此处以3台作为示例,此处直接使用每台主机第二块硬盘空间作为存储空间方案,每台服务器须添加一块硬盘。
//查看每台硬盘情况
# lsblk
NAME                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                     8:16   0 223.6G  0 disk 
├─sda2                  8:18   0   732M  0 part /boot
├─sda3                  8:19   0 222.4G  0 part 
│ ├─ubuntu--vg-swap_1 253:1    0   976M  0 lvm  [SWAP]
│ └─ubuntu--vg-root   253:0    0 221.4G  0 lvm  /
└─sda1                  8:17   0   512M  0 part /boot/efi
sdb                     8:0    0 931.5G  0 disk 
├─sdb5                  8:5    0 931.5G  0 part 
└─sdb1                  8:1    0     1K  0 part 
使用sdb作为存储空间
步骤2将新硬盘格式化成xfs格式(ceph对xfs支持比ext4好)。
//第1台服务器
# sudo  mkfs.xfs /dev/sdb
//第2台服务器
# sudo  mkfs.xfs /dev/sdb
//第3台服务器
# sudo  mkfs.xfs /dev/sdb
//其他服务器以此类推 此处以最小集群3台配置
时间设置
步骤13台均强制更改时区为上海,执行以下命令。
需要务必保证3台服务器的时区是一样的
# ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
bash -c "echo 'Asia/Shanghai' > /etc/timezone"
步骤23台均执行时间同步。
# apt-get install -y ntpdate ntp
//与阿里云时间服务器同步时间
# ntpdate ntp1.aliyun.com
添加主机
步骤1集群安装需要三台及以上服务器,每台服务器。角色分配为三台均为mon+osd,第一台为Control。依次添加hostname,hostname可自行规划。
//第1台服务器
# sudo  hostname set-hostname wh01 && su
//第2台服务器
# sudo  hostname set-hostname wh02 && su
//第3台服务器
# sudo  hostname set-hostname wh03 && su
//其他服务器以此类推 此处以最小集群3台配置
步骤2所有服务器均添加所有服务器的IP和对应hosts。
//第1台服务器 IP为对应服务器IP
# sudo echo "192.168.20.241 wh01" >> /etc/hosts
# sudo echo "192.168.20.242 wh02" >> /etc/hosts
# sudo echo "192.168.20.243 wh03" >> /etc/hosts
//第2台服务器 IP为对应服务器IP
# sudo echo "192.168.20.241 wh01" >> /etc/hosts
# sudo echo "192.168.20.242 wh02" >> /etc/hosts
# sudo echo "192.168.20.243 wh03" >> /etc/hosts
//第3台服务器 IP为对应服务器IP
# sudo echo "192.168.20.241 wh01" >> /etc/hosts
# sudo echo "192.168.20.242 wh02" >> /etc/hosts
# sudo echo "192.168.20.243 wh03" >> /etc/hosts
//其他服务器以此类推 此处以最小集群3台配置
添加账号和免密登陆
步骤1添加账号。
//在3台机器上均创建账号:
# useradd -m -s /bin/bash cephuser
# echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
//输入账号密码
# passwd cephuser
步骤2在3台机器上从其他账号家目录复制.ssh目录及文件。
cp -r /root/.ssh/ /home/cephuser/ && chown cephuser:cephuser /home/cephuser -R
步骤3在第一台上添加SSH配置,注意对应每台主机。
# sudo echo "Host wh01
    Hostname wh01
    User cephuser
Host wh02
    Hostname wh02
    User cephuser
Host wh03
    Hostname wh03
    User cephuser" >> ~/.ssh/config
# chmod 644 ~/.ssh/config
步骤4生产SSH公钥并添加。
//在第3台上切换至cephuser账号
# su - cephuser
//一直回车直到生成秘钥
# ssh-******
//互相拷贝对方秘钥(第一台执行,但推荐每台都执行)
# ssh-keyscan wh01 wh02 wh03 >> ~/.ssh/known_hosts
# ssh-copy-id [email protected]
# ssh-copy-id [email protected]
# ssh-copy-id [email protected]
//在第一台上验证是否免密登陆
# ssh [email protected]
# ssh [email protected]
# ssh [email protected]
更新下载源(mimic版本13.2.6)
步骤1更新为阿里源(可选) 。
由于默认的更新源太慢了,调整为阿里云的更新源
# mv /etc/apt/sources.list /etc/apt/sources.list_bak
# sudo echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted
deb http://mirrors.aliyun.com/ubuntu xenial-security universe
deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse" >> /etc/apt/sources.list
步骤2添加CEPH官方源。
添加 release key
# wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
添加Ceph软件包源,用Ceph稳定版(如 cuttlefish 、 dumpling 、 emperor 、 firefly、luminous 等等)替换掉 {ceph-stable-release}
deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main
ceph-stable-release 我选择的是mimic版本
那么在ubuntu服务器上面执行命令
# echo "deb http://download.ceph.com/debian-mimic/ $(lsb_release -sc) main"
就可以得到结果:
deb http://download.ceph.com/debian-mimic/ xenial main
更新源
# apt-get update
需要保证3台服务器的源都是一致的
步骤3使用CEPH国内源(可选有效)。
粘贴后连续回车
# sudo echo "
export export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/debian-mimic
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc
" >> /etc/profile
# source /etc/profile
更新下载源(系统自带版本10.2.11就是debian-jewel版本)
步骤1更新为阿里源(可选) 。
由于默认的更新源太慢了,调整为阿里云的更新源
# mv /etc/apt/sources.list /etc/apt/sources.list_bak
# sudo echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted
deb http://mirrors.aliyun.com/ubuntu xenial-security universe
deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse" >> /etc/apt/sources.list
步骤2添加CEPH官方源。


安装CEPH
步骤1本章节及之后章节均以cephuser用户执行
步骤2主节点安装cepf-deploy。
创建配置目录
# sudo mkdir /opt/ceph-cluster  
# sudo chown cephuser:cephuser /opt/ceph-cluster -R
主节点安装ceph-deploy
# sudo apt-get update && sudo apt-get install ceph-deploy
步骤3创建ceph集群。
创建新集群
# ceph-deploy new wh01 wh02 wh03
当前目录会生成配置文件ceph.conf
如果提示
bash: python2: command not found
需要在每台上
# apt-get install python
步骤4修改配置。
修改配置文件(注意填写当前主机所在网段)
# echo "osd pool default size = 2
osd max object name len = 256
osd max object namespace len = 64
mon_pg_warn_max_per_osd = 2000
mon clock drift allowed = 30
mon clock drift warn backoff = 30
rbd cache writethrough until flush = false
public network = 192.168.20.0/24" >> ceph.conf
步骤5安装ceph。
# ceph-deploy install wh01 wh02 wh03
注意01:可以ceph-deploy install wh01一台一台装,下载速度超慢(用国内源快),但是一定要安装完且无报错
注意02:中途如果超过300秒会报错,在对应主机上ps -ef|grep apt,如果进程任然在执行,耐心等待即可(可kill -9对应进程然后重新安装)
注意03:如一台完全安装完成可将/var/cache/apt/archives下文件复制至其他未完成主机同一目录,免除下载时间
注意04:最后重新执行一遍无报错即安装完成,对应主机上执行ceph -v可看到安装好的版本
初始化节点
步骤1创建mon集群
# cd /opt/ceph-cluster
创建mon集群
# ceph-deploy --overwrite-conf  mon create wh01 wh02 wh03
初始化mon集群
# ceph-deploy --overwrite-conf mon create-initial
注意01:此处一定要完整执行且无报错

Debug01:[ceph_deploy.mon][ERROR ] Some monitors have still not reached quorum:
[ceph_deploy.mon][ERROR ] cell02
出现这种问题通常是对应的节点中存在原来的配置,导致新部署过程中无法生成认证秘钥。此时遍历待部署的所有节点将/etc/ceph,和/var/lib/ceph下的目录清除掉,然后再部署,通常就能解决。
测试可以sudo chown cephuser:cephuser /var/run/ceph/  -R解决,因为脚本里面没有sudo没权限访问目录没法生成文件
测试ceph-deploy --overwrite-conf config push wh01 wh02 wh03
Debug02:如果出现连不上其他主机
检查SSH是否免密连上和清除主要ceph进程后再试
# sudo pkill ceph
Debug03:出现缺少目录创建即可,文件则需要卸载ceph在重装,之后重新创建ceph集群
Debug04:mon进程无法启动
移除该节点mon
# ceph mon remove wh01
ceph-deploy mon destroy wh01
清理该mon的文件
# sudo rm -rf /var/lib/ceph/mon/ceph-*
重新安装ceph-mon
# sudo apt-get remove ceph-mon -y
# sudo apt-get install ceph-mon -y
Debug05:其他异常可执行步骤2重新搭建
步骤2清除和重置集群(出现问题时按需求选择)。
如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:
# ceph-deploy purgedata wh01 wh02 wh03
# ceph-deploy forgetkeys
用下列命令可以连 Ceph 安装包一起清除:
# ceph-deploy purge wh01
如果执行了 purge ,你必须重新安装 Ceph 。
步骤3收集秘钥文件。
主节点收集其他主机秘钥,目录下会多出ceph.bootstrap-mds.keyring  ceph.client.admin.keyring  ceph.client.admin.keyring这几个文件:
# ceph-deploy gatherkeys wh02
# ceph-deploy gatherkeys wh03
创建OSD存储节点(mimic版本13.2.6)
步骤1查看各节点磁盘列表
# ceph-deploy disk list wh02 wh03
步骤2清理各节点磁盘分区表
此版本只能挂载硬盘使用,未找到挂载路径说明
注意:此操作存在数据清除风险,请确认磁盘无误后执行
# ceph-deploy disk zap wh01 /dev/sdb
# ceph-deploy disk zap wh02 /dev/sdb
# ceph-deploy disk zap wh03 /dev/sdb
步骤3创建OSD数据分区(网上旧命令已失效,更改为新命令)
注意:此操作存在数据清除风险,请确认磁盘无误后执行
# ceph-deploy osd create --data /dev/sdb wh01
# ceph-deploy osd create --data /dev/sdb wh02
# ceph-deploy osd create --data /dev/sdb wh03
步骤4将配置文件和admin**拷贝到ceph集群所有节点
# ceph-deploy --overwrite-conf admin wh01 wh02 wh03
步骤5添加对ceph.client.admin.keyring 有正确的操作权限
注意:ceph集群中每台主机都需要执行
# sudo chmod +r /etc/ceph/ceph.client.admin.keyring
步骤6查看各节点状态
# ceph -s
  cluster:
    id:     721f9f8b-2509-4292-aa11-3fd7ae123456
    health: HEALTH_HEALTHY
            no active mgr
            quorum wh01,wh02,wh03
 
  services:
    mon: 3 daemons, quorum wh01,wh02,wh03
    mgr: no daemons active
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:   
  如此处OSD为三台则集群正常
创建OSD存储节点(使用路径部署,系统自带版本10.2.11)
步骤1查看各节点磁盘列表
# ceph-deploy disk list saas01 saas02 saas03
步骤2创建挂载点
此版本可以挂载硬盘或路径使用
在三台上分别创建osd1 osd2 osd3三个路径用于osd
# 第1台
# sudo mkdir /opt/osd1
# sudo chmod 777 /opt/osd1/
# sudo chmod 777 /opt/osd1/ -R
# 第2台
# sudo mkdir /opt/osd2
# sudo chmod 777 /opt/osd2/
# sudo chmod 777 /opt/osd2/ -R
# 第3台
# sudo mkdir /opt/osd3
# sudo chmod 777 /opt/osd3/
# sudo chmod 777 /opt/osd3/ -R
步骤3创建OSD数据分区(老版本可以使用路径作为OSD)
准备OSD
# ceph-deploy osd prepare saas01:/opt/osd1 saas02:/opt/osd2 saas03:/opt/osd3
**OSD
# ceph-deploy osd activate saas01:/opt/osd1 saas02:/opt/osd2 saas03:/opt/osd3
步骤4将配置文件和admin**拷贝到ceph集群所有节点
# ceph-deploy --overwrite-conf admin wh01 wh02 wh03
步骤5添加对ceph.client.admin.keyring 有正确的操作权限
注意:ceph集群中每台主机都需要执行
# sudo chmod +r /etc/ceph/ceph.client.admin.keyring
步骤6查看各节点状态
# ceph -s
      cluster 02512aa8-cf13-40ec-9bd3-8e5eba177c67
     health HEALTH_OK
     monmap e1: 3 mons at {saas01=192.168.20.230:6789/0,saas02=192.168.20.231:6789/0,saas03=192.168.20.232:6789/0}
            election epoch 6, quorum 0,1,2 saas01,saas02,saas03
     osdmap e20: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v479: 64 pgs, 1 pools, 0 bytes data, 0 objects
            31966 MB used, 806 GB / 882 GB avail
                  64 active+clean
  如此处OSD为三台则集群正常
https://blog.csdn.net/tangwei0928/article/details/95533329
创建OSD存储节点(使用磁盘部署,系统自带版本10.2.11)
步骤1查看各节点磁盘列表
# ceph-deploy disk list saas01 saas02 saas03
步骤2创建挂载点
此版本可以挂载硬盘或路径使用
注意:此操作存在数据清除风险,请确认磁盘无误后执行
# ceph-deploy disk zap wh01:/dev/sdb wh02:/dev/sdb wh03:/dev/sdb
步骤3创建OSD数据分区(老版本可以使用路径作为OSD)
创建OSD
# ceph-deploy --overwrite-conf  osd create wh01:/dev/sdb wh02:/dev/sdb wh03:/dev/sdb
ceph-deploy osd prepare wh01:/dev/sdb wh02:/dev/sdb wh03:/dev/sdb
ceph-deploy osd activate wh01:/dev/sdb1 wh02:/dev/sdb1 wh03:/dev/sdb1如果之前装过其他版本导致失败,fdisk -l查看mapper是否之前被挂载过,删掉硬盘重新添加即可
**OSD
#   /dev/sdb1可以
删除OSD(可选)
# ceph osd crush remove osd.0
# ceph auth del osd.0
# ceph osd down osd.0
# ceph osd rm osd.0
步骤4将配置文件和admin**拷贝到ceph集群所有节点
# ceph-deploy --overwrite-conf admin wh01 wh02 wh03
步骤5添加对ceph.client.admin.keyring 有正确的操作权限
注意:ceph集群中每台主机都需要执行
# sudo chmod +r /etc/ceph/ceph.client.admin.keyring
步骤6查看各节点状态
# ceph -s
      cluster 02512aa8-cf13-40ec-9bd3-8e5eba177c67
     health HEALTH_OK
     monmap e1: 3 mons at {saas01=192.168.20.230:6789/0,saas02=192.168.20.231:6789/0,saas03=192.168.20.232:6789/0}
            election epoch 6, quorum 0,1,2 saas01,saas02,saas03
     osdmap e20: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v479: 64 pgs, 1 pools, 0 bytes data, 0 objects
            31966 MB used, 806 GB / 882 GB avail
                  64 active+clean
  如此处OSD为三台则集群正常
https://blog.csdn.net/tangwei0928/article/details/95533329

创建和使用CEPH-RBD存储
添加CEPH-RBD存储
步骤1查看OSD节点。
//查看OSD节点情况
# ceph osd tree
ID CLASS WEIGHT  TYPE NAME     STATUS REWEIGHT PRI-AFF 
-1       0.08789 root default                          
-7       0.02930     host wh01                         
 2   hdd 0.02930         osd.2     up  1.00000 1.00000 
-3       0.02930     host wh02                         
 0   hdd 0.02930         osd.0     up  1.00000 1.00000 
-5       0.02930     host wh03                         
 1   hdd 0.02930         osd.1     up  1.00000 1.00000 
步骤2创建存储池。
//创建名为ceph_rbd的存储池,pg_num为128
# ceph osd pool create ceph_rbd 128
//初始化名为ceph_rbd的存储池(10.2.11无需此步骤)
# rbd pool init ceph_rbd
注意:通常在创建pool之前,需要覆盖默认的pg_num,官方推荐:若少于5个OSD, 设置pg_num为128。5~10个OSD,设置pg_num为512。10~50个OSD,设置pg_num为4096。超过50个OSD,可以参考pgcalc计算。本文的测试环境只有3个OSD,因此设置pg_num为128。
//也可使用命令单独修改pg_num
# osd pool default pg num = 128
# osd pool default pgp num = 128
步骤3查看创建的存储池。
查看初始化的pool  
# ceph osd pool ls
步骤4在存储池中创建镜像。
//在存储池中创建镜像(size单位是mb)
# rbd create ceph_rbd/ceph_image --size 901120
注意:此处使用最大化存储空间880GB(901120/1024=880GB),请根据实际情况划分
镜像大小计算方法如下
1. 查看存储池副本数(默认3个节点存储三份)
# ceph osd pool get pool_name size
2. 设置存储池副本数(可根据情况调整副本数量)
# ceph osd pool set pool_name size 3
2. 打印存储池列表
# ceph osd lspools
分析
3台物理机,每台物理机有1块1T硬盘,物理可用空间为1*3=3T;
ceph层将每台服务器1T硬盘当成一个osd数据节点,这样global总空间可用大小便是1*3=3T(约2.73TiB);
查看pool副本数为3,故整个集群可用空间为3/3=1T(约880GiB);
pool可用大小是基于总空间大小,而且并没有定义单个pool限额,故所有pools的可用大小便是基于副本数size的总集群可用大小,这里ceph对pool的最大可用大小定义有些模糊;
bucket和用户可配置磁盘限额;
查看所有用户
# ceph auth list
创建只读用户client.docker
# ceph auth get-or-create client.docker mon 'profile rbd' osd 'profile rbd pool=ceph_rbd, profile rbd-read-only pool=ceph_image'
注意:此文档未创建账户,使用默认的admin账户,此命令按需使用
查看创建的镜像
# rbd ls ceph_rbd
查看创建的镜像详情
# rbd info ceph_rbd/ceph_image
步骤5镜像扩容和缩容(可根据情况调整)。
# 扩容(20GB)
# rbd resize --size 20480 ceph_rbd/ceph_image
# 缩容(20GB)
# rbd resize --size 20480 ceph_rbd/ceph_image --allow-shrink
注意:Ceph的块镜像设备是精简配置,在创建他们并指定大小时并不会使用物理存储空间,直到存储数据。但是它们可以通过--size指定最大容量的限制。
步骤6删除镜像(可根据情况调整)。
删除块设备镜像
# rbd rm ceph_rbd/ceph_image
可以将暂时不用的镜像移入trash
# rbd trash mv ceph_rbd/ceph_image
显示trash中的镜像
# rbd trash ls ceph_rbd
1beb76b8b4567 ceph_image
如果要恢复trash中的镜像可以执行如下命令:
# rbd trash restore ceph_rbd/1beb76b8b4567
此时trash中将不会有数据,原来的镜像已经恢复
# rbd ls ceph_rbd
ceph_image
如果要在恢复的时候重命名镜像,执行如下命令:
# rbd trash restore ceph_rbd/1beb76b8b4567 --image docker # 将镜像重命名为docker
删除trash中的镜像,需要使用镜像的ID
# rbd trash rm ceph_rbd/1beb76b8b4567
注意:
即使这个镜像存在快照,或者它自身某一个克隆正在被使用,都可以将镜像移入trash,但是不能从trash中删除。
如果想要删除,可以使用-expires-at设置延迟时间(默认为now),如果延迟时间尚未到期,则除非使用-force,否则无法删除
挂载镜像存储
步骤1挂载镜像作为Linux存储空间(可选)。
检查集群版本和可调参数版本
# ceph osd crush show-tunables
设置版本
# ceph osd crush tunables hammer
挂载至/dev/rbd0
# sudo rbd map ceph_rbd/ceph_image -p /dev/rbd0 --id admin
注意:如果出现报错sysfs write failed
rbd info ceph_rbd/ceph_image查看支持哪些
禁用特性再试试:
rbd feature disable ceph_rbd/ceph_image exclusive-lock, object-map, fast-diff, deep-flatten
查看挂载
# df -h|grep rbd
# rbd device list
# rbd showmapped
# lsblk | grep rbd
使用rbd块存储挂载至/mnt目录
[[email protected] ~]# mkfs.xfs  /dev/rbd
[[email protected] ~]# mount /dev/rbd0 /mnt
7 . 如果要卸载设备使用如下命令:
# umount  /mnt/
# rbd device unmap /dev/rbd0
相关标签: 分布式存储