centos7 ceph 集群部署

ceph

一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统

一、Ceph必备组件

OSD(Object Storage Device)

Ceph OSD守护进程(Ceph OSD)的功能是存储数据.处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向Ceph Monitors提供一些监控信息。当Ceph存储集群设定为有2个副本时,至少需要2个OSD守护进程,集群才能达到active+clean状态(Ceph默认有3个副本,但你可以调整副本数)。

MON(Monitor)

Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、OSD图、归置组(PG)图、和CRUSH图。Ceph保存着发生在Monitors 、OSD和PG上的每一次状态变更的历史信息(称为Epoch,Epoch 是一个通用的实时的图表库,用于构建漂亮、平滑和高性能的可视化图形图表。)。

MDS(Ceph MetaData Server)

Ceph元数据服务器(MDS)为Ceph文件系统存储元数据(也就是说,Ceph块设备和Ceph对象存储不使用MDS)。元数据服务器使得POSIX文件系统的用户们,可以在不对Ceph存储集群造成负担的前提下,执行诸如ls、find等基本命令。MDS能够控制Client和OSD的交互,还可以管理限额控制、目录和文件的创建与删除,以及访问控制权限等。

PG (placement group)

PG (放置组)是 OSD之上的一层逻辑,可视其为一个逻辑概念。Ceph 把对象OBJECT映射到PG中。
从名字可理解PG是一个放置策略组,很多个对象一起组团,然后再存入OSD 中,用来方便定位和追踪对象。

因为一个拥有数百万对象的系统,不可能在对象这一级追踪位置。可以把 PG 看做一个对象集合,该集合里的所有对象都具有相同的放置策略:对象的副本都分布在相同的OSD列表上。

PG 减少了各对象存入对应 OSD 时的元数据数量,更多的 PG 使得均衡更好。PG有主从之分,对于多副本而言,一个PG的主从副本分布在不同的OSD上;一个对象只能属于一个PG,一个PG包含很多个对象,一个PG对应于一个OSD列表,PG的所有对象对存放在对应的OSD列表上。

Pool存储池

Pool 是一个抽象的存储池,它是 PG 之上的一层逻辑。所有的对象都必须存在存储池中。存储池管理着归置组数量、副本数量、和存储池规则集。要往存储池里存数据,用户必须通过认证、且权限合适,存储池可做快照。
如果把整个 Ceph 存储系统看做是一个数据库的话,那么 Pool 的角色可以看做是数据表。用户可能需要根据不同的需求把对象存储在不同的存储池中。 一个 Pool 由多个 PG 构成,一个 PG 只能属于一个Pool。同一个 Pool 中的 PG 具有相同的类型,比如,如 Pool 为副本类型,则 Pool 中所有的 PG 都是多副本的。

PGP (Placement Group for Placemen)

PGP是PG的归置组,PGP 起到对 PG 进行归置的作用,PGP的取值应该与PG相同,在PG的值增大的同时,也要增大PGP的值以保持二者的值相同。 当一个 Pool 的 PG 增大后,Ceph 并不会开始进行 rebalancing,只有在 PGP 的值增大后, PG才会开始迁移至其他的OSD上,并且开始 rebalancing。

二、部署

1、环境

环境
node0 192.168.0.47 osd,mds,admin,monitor
node1 192.168.0.33 osd,mds
node2 192.168.0.37 osd,mds
node3 192.168.0.59 client

2、Hosts及防火墙设置

node0、node1、node2节点进行如下配置:
#添加hosts解析;
cat >/etc/hosts<<EOF
127.0.0.1 localhost localhost.localdomain
192.168.0.47 node0
192.168.0.33 node1
192.168.0.37 node2
EOF
#临时关闭selinux和防火墙;
sed -i '/SELINUX/s/enforcing/disabled/g'  /etc/sysconfig/selinux
setenforce  0
systemctl   stop     firewalld.service
systemctl   disable   firewalld.service
sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config ;setenforce 0
#同步节点时间;
yum install ntpdate -y
ntpdate  pool.ntp.org
#修改对应节点主机名;
hostname `cat /etc/hosts |grep $(ifconfig|grep broadcast|awk '{print $2}'|grep -E '192.168')|awk '{print $2}'`;su

3、Ceph网络源管理

在node0管理节点上使用阿里Yum源,操作命令如下所示:

yum install wget -y
rm -rf /etc/yum.repos.d/*
cd /etc/yum.repos.d/
wget -c http://mirrors.aliyun.com/repo/Centos-7.repo
wget -c http://mirrors.aliyun.com/repo/epel-7.repo 
cat>/etc/yum.repos.d/ceph.repo<

以上,在每个节点都执行,以下,在node0节点执行即可

4、ceph-deploy管理工具

ceph-deploy是Ceph官方提供的部署工具,基于ssh远程登录其它各个节点上执行命令完成部署过程,通常在node节点上安装此工具。
ceph-deploy工具默认使用root用户SSH到各Ceph节点执行命令。为了方便,需求提前设置免密码登陆各个节点。如果ceph-deploy以某个普通用户登陆,那么这个用户必须有无密码使用sudo的权限。
yum -y install ceph-deploy
#创建Monitor服务
mkdir /etc/ceph
cd /etc/ceph/
ceph-deploy new node0
#执行如上指令会创建对应ceph的配置文件、日志文件和Monitor密钥文件:
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring
#如果想要修改守护进程数,也就是副本数,可以在ceph.conf配置文件中添加如下:
cat>>ceph.conf<<EOF
osd_pool_default_size = 2
EOF

5、Ceph软件安装

#在node0节点生成公钥和私钥;
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q
-t:指定要创建的密钥的类型;
-N:是指密码为空;
-f:id_rsa是指保存文件为~/.ssh/id_rsa和~/.ssh/id_rsa.pub;
-q:指静默模式, 不输出显示;
#将公钥拷贝至各个节点;
for i in `seq 0 2`;do ssh-copy-id -i ~/.ssh/id_rsa.pub node$i ;done
#每个节点安装Ceph
ceph-deploy install node0 node1 node2

6、 部署Monitor(监控)

#创建Monitor(监控);
ceph-deploy mon create node0
#收集keyring(密钥环)信息;
ceph-deploy gatherkeys node0
#查看生成的配置文件和秘钥;
ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-rgw.keyring  ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring  ceph.client.admin.keyring   ceph.mon.keyring
ceph.bootstrap-osd.keyring  ceph.conf  rbdmap

7、创建OSD存储节点

#分别在每个节点创建ceph存储目录:/data/,指令如下;
for i in $(seq 0 2);do ssh -l root node$i "mkdir -p /data/" ;done
#创建osd节点,命令如下:
ceph-deploy osd prepare node0:/data/ node1:/data/ node2:/data/
#在不同的主机上可以看到,对应的节点会生成文件,命令如下:
ls -l /data/
ceph_fsid fsid magic

8、激活OSD存储节点

#管理节点node0上激活各节点的osd
ceph-deploy osd activate node0:/data/ node1:/data/ node2:/data/
#如果报提示没有权限的错误,需要给三个节点的/data/读写、执行权限
for i in $(seq 0 2);do ssh -l root node$i "chmod 777 -R /data/" ;done
#然后重新执行;
ceph-deploy osd activate node0:/data/ node1:/data/ node2:/data/
激活完成后可以使用命令查看osd状态;
ceph-deploy osd list node0
#使用如下命令将配置文件和admin密钥同步到各个节点,以便各个节点使用ceph命令时无需指定Monitor地址和ceph.client.admin.keyring密钥。
#注意:还需要修改各个节点ceph.client.admin.keyring密钥的权限
ceph-deploy admin node0 node1 node2

9、检查OSD状态

ceph health
HEALTH_OK

10、部署MDS服务

ceph-deploy mds create node0 node1 node2
ceph mds stat
e4:, 3 up:standby

11、查看CEPH集群状态

#查看Ceph集群状态;
ceph -s
#查看Ceph文件系统;
ceph fs ls
No filesystems enabled

12、Ceph创建存储池

#创建存储池;
ceph osd pool create cephfs_data 128
#创建存储池元数据;
ceph osd pool create cephfs_metadata 128
#解析:参数后面的128数字为指定pg_num的值,这个值是不能自动计算的,需要手动赋予。一般来说,少于5个osd时,pg_num可以设置为128;osd在510个之间,pg_num可以设置为512;osd在1050个之间,pg_num可以设置为4096;Osd一旦超过50个,那么就得自己计算pg_num的取值,也可以借助工具pgcalc计算,网址是https://ceph.com/pgcalc/。随着osd数量的增加,正确的pg_num取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

13、创建文件系统

#创建Ceph文件系统;
ceph fs new 128 cephfs_metadata cephfs_data
#查看Ceph文件系统;
ceph fs ls
#查看MDS状态;
ceph mds stat
ceph osd pool get [存储池名称] size  //查看存储池副本数
ceph osd pool set [存储池名称] size 3  //修改存储池副本数
ceph osd lspools  //打印存储池列表
ceph osd pool create [存储池名称] [pg_num的取值]  //创建存储池
ceph osd pool rename [旧的存储池名称] [新的存储池名称]  //存储池重命名
ceph osd pool get [存储池名称] pg_num  //查看存储池的pg_num
ceph osd pool get [存储池名称] pgp_num  //查看存储池的pgp_num
ceph osd pool set [存储池名称] pg_num [pg_num的取值]  //修改存储池的pg_num值
ceph osd pool set [存储池名称] pgp_num [pgp_num的取值]  //修改存储池的pgp_num值
ceph osd pool get-quota cephfs_metadata  //查看存储池配额
quotas for pool 'cephfs_metadata':
max objects: N/A
max bytes : N/A

14、查看ceph 状态

ceph osd tree

[root@node0 ceph]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.22458 root default                                     
-2 0.07419     host node0                                   
 0 0.07419         osd.0       up  1.00000          1.00000 
-3 0.07520     host node1                                   
 1 0.07520         osd.1       up  1.00000          1.00000 
-4 0.07520     host node2                                   
 2 0.07520         osd.2       up  1.00000          1.00000 
ceph -s
    cluster 2735b13e-fc74-4eb5-9ae1-f5211c154b36
     health HEALTH_OK
     monmap e1: 1 mons at {node0=192.168.0.47:6789/0}
            election epoch 3, quorum 0 node0
      fsmap e7: 1/1/1 up {0=node2=up:active}, 2 up:standby
     osdmap e22: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v867: 320 pgs, 3 pools, 2068 bytes data, 20 objects
            23387 MB used, 207 GB / 229 GB avail
                 320 active+clean
[root@node0 ceph]# ps -ef|grep ceph
ceph      2601     1  0 16:09 ?        00:00:06 /usr/bin/ceph-mon -f --cluster ceph --id node0 --setuser ceph --setgroup ceph
ceph      3364     1  0 16:11 ?        00:00:07 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph      3724     1  0 16:11 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node0 --setuser ceph --setgroup ceph
root     19462  2020  0 17:22 pts/0    00:00:00 grep --color=auto ceph
[root@node1 ~]# ps -ef|grep ceph
ceph      2666     1  0 16:11 ?        00:00:07 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
ceph      2891     1  0 16:11 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node1 --setuser ceph --setgroup ceph
root     18201  2015  0 17:23 pts/0    00:00:00 grep --color=auto ceph

如此,ceph集群部署完毕

三、客户端挂载ceph 文件系统

方法一:内核驱动挂载

环境安装及查看key值

yum install ceph-common -y
mkdir -p /app /etc/ceph/
scp 192.168.0.47:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==

mount

mount -t ceph 192.168.0.47:6789:/ /app/ -o name=admin,secret=AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==

centos7 ceph 集群部署_第1张图片
已挂载

方法二、用户控件挂载ceph文件系统

#在客户端主机部署ceph-fuse,命令操作如下;
scp -r root@192.168.0.47:/etc/yum.repos.d/ceph.repo /etc/yum.repos.d/
yum install -y ceph-fuse
#添加客户端KEY,可以从node0节点/etc/ceph/目录拷贝;
scp 192.168.0.47:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==
#使用如下指令挂载Ceph目录即可;
[root@localhost ~]# ceph-fuse -m 192.168.0.47:6789 /app
2021-06-28 18:18:07.600287 7fba23495f00 -1 did not load config file, using default settings.
ceph-fuse[12012]: starting ceph client
2021-06-28 18:18:07.627873 7fba23495f00 -1 init, newargv = 0x56044d0326c0 newargc=11
ceph-fuse[12012]: starting fuse
[root@localhost ~]# 
[root@localhost ~]# df -Th|grep ceph
ceph-fuse               fuse.ceph-fuse  230G   23G  208G  10% /app
#注:如果需要卸载,命令如下;
fusermount -u /data

开机挂载 - 添加rc.local或fstab文件 (略)

四、Ceph添加新节点

CEPH集群配置成功之后,随着数据量不断的增长,后期如果资源池满了,作为运维人员需要向集群中增加存储节点,以应对企业数据飞速的增长。如果集群已经在运行,我们可以在集群运行时添加或删除OSD节点。
要向CEPH集群中增加一个或者多个OSD节点,要依次做如下操作:
增加Linux服务器;
创建OSD数据目录;
把硬盘挂载到数据目录;
把 OSD节点数据目录加入集群;
将OS节点加入 CRUSH Map。

1、Hosts及防火墙设置node0和node3节点进行如下配置:

#添加hosts解析;
cat >/etc/hosts<<EOF
127.0.0.1 localhost localhost.localdomain
192.168.0.47 node0
192.168.0.33 node1
192.168.0.37 node2
192.168.0.59 node3
EOF
#临时关闭selinux和防火墙;
sed -i '/SELINUX/s/enforcing/disabled/g'  /etc/sysconfig/selinux
setenforce  0
systemctl   stop     firewalld.service
systemctl   disable   firewalld.service
#同步节点时间;
yum install ntpdate -y
ntpdate  pool.ntp.org
#修改对应节点主机名;
hostname `cat /etc/hosts|grep $(ifconfig|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su

2、在node0管理节点上使用阿里Yum源,操作命令如下所示:(如果已经操作,可以忽略)

yum install wget -y
rm -rf /etc/yum.repos.d/*
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo 
cat>/etc/yum.repos.d/ceph.repo<

3、在Ceph新增节点上安装CEPH软件服务;

#在node0节点生成公钥和私钥;
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q
-t:指定要创建的密钥的类型;
-N:是指密码为空;
-f:id_rsa是指保存文件为~/.ssh/id_rsa和~/.ssh/id_rsa.pub;
-q:指静默模式, 不输出显示;
#将公钥拷贝至各个节点;
ssh-copy-id -i ~/.ssh/id_rsa.pub node3
#在新节点安装Ceph服务;
ceph-deploy install node3

4、创建OSD存储节点;

#在新增的节点创建ceph存储目录:/data/,指令如下;
ssh -l root node3 "mkdir -p /data/"
#创建osd节点,命令如下:
ceph-deploy osd prepare node3:/data/
#在新节点的主机上可以看到,对应的节点会生成文件,命令如下:
ls -l /data/
ceph_fsid fsid magic

5、激活OSD存储节点,在管理节点node0上激活新增节点的osd数据存储,命令操作如下;

ceph-deploy osd activate node3:/data/

如果报提示没有权限的错误,需要给三个节点的/data/读写、执行权限

ssh -l root node3 "chmod 777 -R /data/"

然后重新执行;

ceph-deploy osd activate node3:/data/

激活完成后可以使用命令查看osd状态;

ceph-deploy osd list node3

使用如下命令将配置文件和admin密钥同步到各个节点,以便各个节点使用ceph命令时无需指定Monitor地址和ceph.client.admin.keyring密钥。注意:还需要修改各个节点ceph.client.admin.keyring密钥的权限

ceph-deploy admin node3

6、添加新节点node3的/data/目录加入到存储池中;

ceph-deploy osd create node3:/data/

7、OSD节点部署完成之后,接下来部署MDS服务,命令操作如下;

ceph-deploy mds create node3

8、检查新增节点服务进程和端口信息,命令操作如下;

[root@node3 ~]# ps -ef|grep ceph
root     11715     2  0 Jun28 ?        00:00:00 [ceph-msgr]
root     12012     1  0 Jun28 pts/0    00:00:46 ceph-fuse -m 192.168.0.47:6789 /app
ceph     14333     1  3 20:11 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph
ceph     14707     1  0 20:12 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node3 --setuser ceph --setgroup ceph
root     14741 13302  0 20:12 pts/0    00:00:00 grep --color=auto ceph
[root@node3 ~]# netstat -tnlp|grep ceph
tcp        0      0 0.0.0.0:6800            0.0.0.0:*               LISTEN      14333/ceph-osd      
tcp        0      0 0.0.0.0:6801            0.0.0.0:*               LISTEN      14333/ceph-osd      
tcp        0      0 0.0.0.0:6802            0.0.0.0:*               LISTEN      14333/ceph-osd      
tcp        0      0 0.0.0.0:6803            0.0.0.0:*               LISTEN      14333/ceph-osd      
tcp        0      0 0.0.0.0:6804            0.0.0.0:*               LISTEN      14707/ceph-mds 

[root@node3 ~]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.31717 root default                                     
-2 0.07419     host node0                                   
 0 0.07419         osd.0       up  1.00000          1.00000 
-3 0.07520     host node1                                   
 1 0.07520         osd.1       up  1.00000          1.00000 
-4 0.07520     host node2                                   
 2 0.07520         osd.2       up  1.00000          1.00000 
-5 0.09259     host node3                                   
 3 0.09259         osd.3       up  1.00000          1.00000 

五、ceph删除节点

CEPH集群配置成功之后,随着数据量不断的增长,后期如果资源池满了,作为运维人员需要向集群中增加存储节点,以应对企业数据飞速的增长。如果集群已经在运行,我们可以在集群运行时添加或删除OSD节点。
1)将node3节点的osd.3从Crush中删除,并删除对应的OSD和AUTH,HOST,在node0管理节点上执行如下指令:
ceph osd crush rm osd.3
ceph osd rm 3
ceph auth del osd.3
ceph osd crush rm node3
ceph osd tree

[root@node0 ceph]# ceph osd crush rm osd.3 
removed item id 3 name 'osd.3' from crush map
[root@node0 ceph]# ceph osd rm 3 
Error EBUSY: osd.3 is still up; must be down before removal. 
[root@node0 ceph]# ceph auth del osd.3
updated
[root@node0 ceph]# ceph osd crush rm node3
removed item id -5 name 'node3' from crush map
[root@node0 ceph]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.22458 root default                                     
-2 0.07419     host node0                                   
 0 0.07419         osd.0       up  1.00000          1.00000 
-3 0.07520     host node1                                   
 1 0.07520         osd.1       up  1.00000          1.00000 
-4 0.07520     host node2                                   
 2 0.07520         osd.2       up  1.00000          1.00000 
 3       0 osd.3               up  1.00000          1.00000

2)根据如上指令,将故障节点和OSD从集群中删除了,同时可以停止node3节点CEPH相关的服务进程,命令操作如下:

systemctl stop ceph.target
ps -ef|grep ceph

3)卸载Ceph服务,同时将相关数据删除,命令操作如下:

yum remove ceph* -y
yum remove libcephfs* python-cephfs* -y
find / -name "*ceph*" -exec rm -rf {} \;

------------------------------------end

你可能感兴趣的:(K8S,linux常用基础技能及服务,Devops,ceph,ceph集群部署,centos,k8s)