■河南 刘京义
Ceph 的基本架构包括上层应用接口,基础库LIBRADOS 和基础存储系统RADOS 等,对于RADOS 来说,是一个由具有自我修复,自我管理的智能存储节点组成的可靠的自动化的分布的对象存储,是所有客户端接口使用和部署的基础。
RADOS 包括OSD(即Object StorageDevice,提供数据实体存储资源),Monitor(维护整个Ceph 集群中各个节点的心跳信息,维持整个集群的全局状态),MDS(即 Ceph Metadata Server,文件系统元数据服务节点,支持多台机器分布的部署,以实现系统的高可用性)等组件。
对于基础库LIBRADOS来说,可以让应用通过C、C++、Java、Python 和PHP 等工具直接连接到RADOS 的仓库。严格来说,除了底层RADOS 之上所有内容,包括LIBRADOS、RADOSGW、RBD 以及Ceph FS,都是Ceph 客户端接口。
对 于RADOSGW、RBD 以及Ceph FS 来说,都是根据LIBRADOS 提供的多编程语言接口开发。所以它们之间是一个阶梯级过渡的关系。
RADOSGW是Ceph 对存储网关,是底层基于Librados向客户端提供RESTful 接口的对象存储接口。
RBD 是可靠的,使用Linux 内核用户和QEMU/KVM驱动的全局分布的块设备,在一个Ceph 的集群中,Ceph的块设备支持自动精简配置,调整大小和存储数据。Ceph 的块设备可以充分利用RADOS功能,实现如快照,复制和数据一致性等。
Ceph 的RADOS 块设备通过RADOS协议与内核模块或librbd 的库进行交互。Ceph FS 是一个和Posix 兼容分布式文件系统,使用Linux内核用户并支持FUSE,使用Ceph 存储集群来存储数据。
Ceph存储集群从客户端接收文件,每个文件都会被客户端切分成一个或多个对象,然后将这些对象进行分组,再根据一定的策略存储到集群的OSD节点中,Ceph的核心RADOS通常是由少量的负责集群管理的Monitor进程和大量的负责数据存储的OSD进程构成,采用无中心节点的分布式架构,对数据进行分块多份存储。具有良好的扩展性和高可用性。
Ceph分布式文件系统提供了多种客户端,包括对象存储接口、块存储接口以及文件系统接口,具有广泛的适用性,并且客户端和存储数据的OSD设备直接进行数据交互,大大提高了数据的存取性能。Ceph作为分布式文件系统,能够在维护POSIX兼容性的同时加入了复制和容错功能。从其发展来看,Ceph不仅仅是一个文件系统,还是一个有企业级功能的对象存储生态环境。
接下来以简单的实例,来说明如何搭建Ceph分布式存储。这里使用了四台主机,分别安装了CentOS 7.X系统,其IP从172.16.1.101到172.16.1.104,一台作为管理节点使用,名称为“server1”,两台作为数据存储节点,名称分别为“server2” 和“server3”。一台作为客户端使用。名称为“cephClient”。在管理主机上执行“hostnamectl set-hostname server1”命令,修改其主机名称。
执行“useradd cephuser”,“echo"cephuser" |passwd--stdin cephuser”命令,创建名为“cephuser”的账户,其密码为“cephuser”,用来管理主节点。
执行“cat <
执行“echo"cephuser ALL=(root)NOPASSWD:ALL" >>/etc/sudoers.d/cephuser”,“chmod 0440/etc/sudoers.d/cephuser”命令,赋予“cephuser”用户Root权限,使其能以Root权限运行所有命令。在其他的主机上分别执行以上命令,执行同样的操作,来配置基础的环境参数。
注意,对于客户端主机来说,不需要创建专用账户,使用“root”账户即可。
在“server1”上执行“yum -y install ntp ntpdate”命令,安装NTP组件,将“server1”作为时间服务器使用。
执行“sed -i'/^server/s/^/#/g'/etc/ntp.conf”,“sed -i '25aserver 127.127.1.0 fudge 127.127.1.0 stratum 8'/etc/ntp.conf”命令,配置NTP参数。执行“systemctl start ntpd”,“systemctl enable ntpd”命令,重启并激活NTP服务。
执行“netstat -utpln|grep 123”命令,查看NTP服务端口开启状态。
在其他主机上执行“yum -y install ntpdate”,“/usr/sbin/ntpdate 172.16.1.101”,“echo "/usr/sbin/ntpdate 172.16.1.101" >>/etc/rc.local”,“chmod +x/etc/rc.local”命令,根据“server1”来同步时间,并在开机时自动加载时间同步命令,并为其设置执行权限。
在“server1”上执行“yum -y install yum-utils”命令,来安装YUM的管理工具。执行“yum-config-manager--add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/”命令,来配置YUM管理器,添加指定的源。
执行“ls/etc/yum.repos.d/”命令,查看对应的源信息。
执行“yum -y install epel-release--nogpgcheck”命令,来安装对应的源,并且不检查公钥。
执行“cat <
输入“[Ceph]”,“name=Ceph packages for $basearch”,“baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/$basearch”,“enabled=1”,“gpgcheck=0”,“type=rpmmd”,“gpgkey=https://mirrors.163.com/ceph/keys/release.asc”,“priority=1”,“[Cephnoarch]”,“name=Ceph noarch packages”,“baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch”,“enabled=1”,“gpgcheck=0”,“type=rpmmd”,“gpgkey=https://mirrors.163.com/ceph/keys/release.asc”,“priority=1”,“[cephsource]”,“name=Ceph source packages”,“baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS”,“enabled=1”,“gpgcheck=0”,“type=rpmmd”,“gpgkey=https://mirrors.163.com/ceph/keys/release.asc”,“priority=1”,“END”行。
在其他主机上分别执行以上命令,来配置源信息。
在“server1”上执行“su -cephuser”,“mkdir cephdata”,“cd cephdata”命令,切换到“cephuser”账户环境,并在其家目录中创建对应的目录,这样更便于管理。
在该目录中执行“sudo yum -y install ceph-deploy”,“sudo yum -y install ceph–nogpgcheck”命令,安装Ceph主程序和管理工具。
最后,健全农业科学技术的推广体系,发展技术市场和中介服务体系,避免农业科技与农业生产脱节的现象。加强农科教相互协作,推进农业科研、教育、推广体系“三位一体”建设,充分形成农业科学教育系统的整体优势。
如果安装出现异常,可以执行“sudo rm -rt/etc/yum.repos.d/centos.repo”,“sudo/etc/yum.repos.d/bak/*/etc/yum.repos.d/”命令,使用epel源执行安装即可。之后在“server2”和“server3”上分别执行以上命令,所不同的是还要执行“sudo yum -y install deltarpm”命令,来安装“deltarpm”工具,避免出现启动失败的情况。在客户端主机上执行“yum-y install yum-pluginpriorities”。“yum -y install ceph ceph-radosgw--nogpgcheck”命令,安装YUM优先级插件,Ceph主程序和Ceph连接的网关程序。
在“server1”上进入Ceph安装目录,执行“sshkeygen -t rsa”命令,生成所需的秘钥对。执行“ssh-copy-id cephuser@server1”,“ssh-copyid cephuser@server2”,“ssh-copy-id cephuser@server3”,“ssh-copy-id root@cephclient”命令,将公钥复制到所有的主机上。执行“cat <
输入“Host server1”,“Hostname server1”,“User cephuser”,“Host server2”,“Hostname server2”,“User cephuser”,“Host server3”,“Hostname server31”,“User cephuser”,“END”行,添加对应的主机和账户名称。执行“chmod 644/home/cephuser/.ssh/config”命令,为该配置文件合适的权限。执行“ceph-deploy new server2 server3”命令,对数据节点进行初始化操作。如果出错的话,可以在对应的数据节点上执行“yum -y install epel-release”,“rpm -e epel-release”,“rpm -qa epel-release”命令,安装对应的epel源,之后进行安装。
如果依然出错,可以根据出错提示信息,执行“rpm -ivh/varcache/yum/x86_4/7/xxx.rpm”命令,来执行对应的安装操作,其中的“xxx”为具体的文件名称。之后在管理节点执行初始化操作,就可以顺利安装了。注意,如果在配置过程中出现问题,需要重新创建集群或重新安装Ceph,可以执行“ceph-deploy purge server2 server3”,“cephdeploy purgedata server2 server3”,“ceph-deploy forgetkeys &&rm ceph.*”命令,将Ceph集群中的数据全部清除。
在“server1”上执行“cat <
对于数据节点来说,其配置文件位于“/etc/ceph/”目录中,会自动从管理节点同步配置信息。
执行“ssh cephuser@server2”命令,连接到指定的数据节点。执行“sudo fdisk/dev/sdb”。“sudo partx -a/dev/sdb”命令,对指定的磁盘进行分区处理。执行“sudo mkfs -t xfs/dev/sdb1”命令,创建所需的分区。执行“sudo mkdir/var/local/osd0”命令,挂载OSD存储路径。执行“sudo vi/etc/fstab”命令,输入“/dev/sdb1/var/local/osd0 xfs defaults 0 0”行,保存对应的文件系统信息。
在“server1”上执行“ceph-deploy osd prepare server2:/var/local/osd0 server3:/var/local/osd1”命令,针对数据节点初始创建OSD节点,并指定节点存储文件位置。对于OSD节点来说,其“/var/local/osd*/”存储数据实体的目录权限必须为777,并且属主和属组必须为“ceph”。执行“chmod +r/home/cephuser/cephdata/ceph.client.admin.keyring”命令,针对管理客户端的Key文件设置读取权限。
执行“ceph-deploy osd activate server2:/var/local/osd0 server3:/var/local/osd1”命令,激活两个OSD节点。在数据节点上执行“netstat -utpln”命令,会显示和OSD相关的端口信息。执行“ceph-deploy admin server2 server3”命令,将管理密钥复制到数据节点。
执行“sudo cp/home/cephuser/cephdata/ceph.client.admin.keyring/etc/ceph/”,“sudo cp/home/cephuser/cephdata/ceph.conf/etc/ceph/”命令,将管理Key文件和Ceph主配置文件复制到指定目录。
在“server1”上执行“ceph-deploy install ceph-client”命令,针对客户端主机安装Ceph客户端程序。
执行“ceph-deploy admin cephclient”命令,将管理密钥推动给客户端。
执行“ssh root@cephclient”,“chmod +r/etc/ceph/ceph.client.admin.keyring”,“exit”命令,远程连接客户端,针对密钥文件文件配置读取权限。
执行“ceph osd pool create cephfs_data 128”命令,创建数据存储池,其中的“128”为块的数量。
执行“ceph osd pool create cephfs_metadata 128”命令,创建元数据存储池。
执行“ceph fs new cephfs cephfs_data cephfs_metadata”命令,创建文件系统。
执行“ceph fs ls”命令,查看文件系统。
执行“ssh root@cephclient”,“mkdir/mnt/ceph”命令,远程连接客户端,创建所需目录。
执行“grep key/etc/ceph/ceph.client.admin.keyring |awk '{print$3}' >>/etc/ceph/admin.secret”命令,生成一个Key。
执行“cat/etc/ceph/admin.secret”命令,显示该Key的内容。
执行“mount -t ceph 172.16.1.102:6789:/ /mnt/ceph/ -o name=admin,secretfile=/etc/ceph/admin.secret”命令,挂载“server2”的MON进程,并指定Key文件。
执行“df -hT |grep ceph”命令,显示目标分区信息。进入“/mnt/ceph”目录,执行“touch {1..10}.file”命令,创建所需的文件。
执行“dd if=/dev/zero of=/mnt/ceph/1.file bs=1G count=1”命令,将“/dev/zero”中的无限输入写到“1.file”文件中。
执行“df -hT |grep ceph”命令,显示写入信息。执行“mkdir/mnt/ceph1”,“mount -t ceph 172.16.1.103:6789:/ /mnt/ceph1/ -o name=admin,secretfile=/etc/ceph/admin.secret”,“df -hT |grep ceph”命令,在“server3”节点上执行类似的操作。
网络安全和信息化2020年2期