说明:主要是参考
http://docs.ceph.org.cn/start/这个快速安装步骤来进行的,当然也参考了很多网上的其他教程。由于对Linux系统的不熟悉,很多时间都是花在研究Linux命令上。
1 准备环境:
IP | hostname | 操作系统 | 磁盘空间 | 安装模块 |
172.16.131.180 | admin-node | CentOS 7.2 | 50G | ceph-deploy,ceph-client |
172.16.131.181 | node1 | CentOS 7.2 | 50G | mon1,osd1,mds,radosgw |
172.16.131.182 | node2 | CentOS 7.2 | 50G | osd0,mon2 |
172.16.131.183 | node3 | CentOS 7.2 | 50G | osd1,mon3 |
说明:
a 磁带空间尽量大一点,用VMware安装时不用立即分配所有磁带空间,如果磁盘不够再扩容就麻烦了。前段时间尝试编译ceph,编译完后好像占用了100G,扩容都扩了2次,用ceph-deploy部署不会占那么多空间,但磁盘大一点没坏处。
b 我使用的是两台物理机上的VMware各安装2台CentOS虚拟机,这4台要互相能访问,所有网络连接均使用桥接网络。
1.1 安装CentOS 7
安装ISO:CentOS-7-x86_64-DVD-1511.iso,大小:4,329,570,304 字节,MD5:C875B0F1DABDA14F00A3E261D241F63E。
SOFTWARE SELECTION选择GNOME Desktop,默认为Minimal Install,这里选其他也可以,不过安装带界面的有些操作方便些。
INSTALLATION DESTINATION没有要求,参考网上进行配置,或者自动配置。
修改root密码,为了后面方便操作和演示,设置为root,由于密码太弱了,需要点两次Done才能完成。
然后等待安装完成,安装完成后自动重启,依次输入1,2,q,yes来完成安装。
只先安装一台虚拟机,把需要统一配置的都配置好,然后用VMware克隆功能克隆出其他三台。
使用命令
cat /etc/centos-release或
cat /etc/redhat-release查看操作系统版本为“CentOS Linux release 7.2.1511 (Core)”,使用命令
uname -r查看内核发行版本为“3.10.0-327.el7.x86_64”。
1.2 统一配置
sudo vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
sudo systemctl restart network
ip addr或
ifconfig
ping www.baidu.com
b 安装红帽包管理工具(RPM)和包管理器优先级包:分别执行以下命令进行安装。yum安装会从网上下载rpm包,有可能会下载超时,若超时可以多执行几次。安装完成后,同样的,也可以多执行几次命令,直到所有安装项提示“Nothing to do”,确保所有安装项成功安装。
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
sudo yum install yum-plugin-priorities
说明:执行时如果报错“Another app is currently holding the yum lock; waiting for it to exit...”,执行
sudo rm -f /var/run/yum.pid命令解决,后面的部署步骤用yum来安装程序时可能会报这个错,用同样的方法解决。
c 安装NTP:使用以下命令安装NTP,安装NTP的目的是同步时间,否则每个节点时间若不同步,ceph的状态可能出现HEALTH_WARN,而不是HEALTH_OK。注意,安装过程需要输入y进行确认,也可以加上-y参数自动安装。因为不熟悉Linux,所以我选择不自动安装,先观察观察命令窗口都输出了什么,然后再安装。
sudo yum install ntp ntpdate ntp-doc
d 增加ceph用户:使用以下命令增加用户、修改密码和赋予sudo权限,创建的用户名为test,密码为Test123。官网说的是"ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。",所以提前创建好用户test,并以test部署ceph。
sudo useradd -d /home/test -m test
sudo passwd test
echo "test ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/test
sudo chmod 0440 /etc/sudoers.d/test
sudo vim /etc/hosts
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo visudo
h 关闭SELINUX:用以下命令打开配置文件,将“SELINUX=enforcing”修改为“SELINUX=disabled”(或者用命令行
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config设置),重启生效。或者用命令
sudo setenforce 0临时关闭,用命令
sestatus -v可查看SELINUX状态。
sudo vim /etc/selinux/config
1.3 克隆虚拟机并单独设置
a 配置IP和hostname:1.2的配置都做好后,就可以克隆出另外3台虚拟机。一共4台虚拟机,然后按照1.准备环境的说明进行单独配置,主要配置IP和hostname,使用以下命令修改hostname和查看hostname。由于1.2中配置了固定IP,所以可能需要进入到虚拟机里配置IP和hostname。
hostnamectl set-hostname node2
hostname
b 允许无密码 SSH 登录:在admin-node机器上登录test用户,然后输入
ssh-keygen生成SSH密钥对,要求输入的地方直接回车即可。然后用以下命令将公钥拷贝到其他机器。然后可以使用
ssh test@node1命令测试能否无密码登录到node1机器。
ssh-copy-id test@node1
ssh-copy-id test@node2
ssh-copy-id test@node3
然后
sudo vim ~/.ssh/config修改config文件,内容如下。这样可以直接使用命令
ssh node1登录到node1机器,而不用指定用户名,对于scp也有效。这样ceph-deploy就能用所建的用户名登录ceph节点,而无需每次执行ceph-deploy都要指定--username {username}。
Host node1
Hostname node1
User test
Host node2
Hostname node2
Host node3
Hostname node3
User test
c 配置ntp同步时间:有两种方式,一种是使用
sudo ntpdate -u cn.pool.ntp.org手动同步的方式,可以将命令写到
/etc/rc.d/rc.local里实现系统启动自动同步,同时编辑
/etc/crontab文件,添加计划任务,实现循环同步的功能,但是注意开启crontab服务,默认是没开启的。另一种方式,是开启ntpd服务,让ntpd服务去同步。这里,我选择第二种方式。
ntp在1.2中就已经统一安装了,但是每台机器都需要允许开机自启和启动ntpd服务,分别执行命令
sudo systemctl enable ntpd和
sudo systemctl start ntpd来完成。可用命令
systemctl is-enabled ntpd和
systemctl status ntpd来查询是否允许自启和运行状态,注意后一个命令输出中也有是否允许自启的状态。
这里我配置node1作为ntp同步时钟服务器,同时node1同步网络时间,其他机器作为客户端来同步node1的时钟。另外,其他机器也选用与node1相同的网络时钟服务器作为备选同步服务器,这样,当node1宕机后,其他机器也能继续与网络时钟保持同步。
在node1机器上用命令
sudo vim /etc/ntp.conf编辑ntp.conf文件,主要修改内容如下,红框里的为修改的内容,然后用命令
sudo systemctl restart ntpd重启ntpd。
其他机器同样的修改ntp.conf文件,主要修改内容如下,然后用命令
sudo systemctl restart ntpd重启ntpd。可使用命令
ntpq -p和
ntpstat查看同步结果,或者用命令
watch ntpq -p查看实时结果。
说明:
a 在使用ntpdate手动同步时间时,如果报错“ntpdate[12568]: the NTP socket is in use,exiting”,是因为ntpd服务正在运行,可用命令
sudo systemctl stop ntpd停止ntpd服务,再次手动同步即可。如果需要,可用命令
sudo systemctl disable ntpd禁止开机启动。
b 使用ntpstat命令查看时间同步状态,这个一般需要5-10分钟后才能成功连接和同步。所以,服务器启动后需要稍等下。
c 当server与client之间的时间误差过大时(可能是1000秒),处于对修改时间可能对系统和应用带来不可预知的问题,ntp将停止时间同步!所以如果发现ntp启动之后时间并不进行同步时,应该考虑到可能是时间差过大引起的,此时需要先手动进行时间同步!
d ntp服务默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置
/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加SYNC_HWCLOCK=yes,就可以让硬件时间与系统时间一起同步。也可以通过
sudo hwclock -w命令来手动同步BIOS和系统时间。
2 安装ceph-deploy
admin-node机器上执行
sudo vim /etc/yum.repos.d/ceph.repo创建一个软件包源,内容如下:
[ceph-noarch]
name=Ceph noarch packages
baseurl=
http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=
https://download.ceph.com/keys/release.asc
baseurl的具体路径可打开
http://download.ceph.com/查看,根据日期选择需要的版本。
http://download.ceph.com/rpm-jewel/el7/noarch为目前最新的一个版本。
然后在admin-node机器上用语句
sudo yum update && sudo yum install ceph-deploy更新软件库和安装ceph-deploy。
安装完成后,执行
ceph-deploy --version命令查看ceph-deploy的版本,我这里是“1.5.37”。至此,ceph-deploy完装完成。
说明:
a 要更新所有的软件库,我这里显示一共要更新666MB,1277个包,所以要等很久才能完成。
b 如果下载rpm包因为超时失败(如下图),可能是因为网络环境原因或者网站原因,可以多试几次或者根据官网的说法,换一个镜像服务器重新安装。
3 安装ceph
a 在admin-node执行
mkdir ~/my-cluster、
cd ~/my-cluster,创建my-cluster目录并进入。
b 创建集群:执行语句
ceph-deploy new node1,在当前目录下用 ls 和 cat 检查 ceph-deploy 的输出,应该有一个 ceph 配置文件、一个 monitor 密钥环和一个日志文件。node1作为初始的monitor记录在ceph.conf文件中。
c 修改ceph.conf文件:添加以下内容。mon_clock_drift_allowed是mon之间允许的最大时差,默认为0.05s,如果时差大于了这个值,ceph状态会显示HEALTH_WARN,这里修改到1s。
osd pool default size = 2
public network = 172.16.131.0/24
mon_clock_drift_allowed = 1
d 安装ceph:执行语句
ceph-deploy install admin-node node1 node2 node3为4台机器安装上ceph。
在admin-node安装时会报如下错误,因为在安装ceph-deploy时手动创建了ceph.repo文件,安装ceph时,因为ceph.repo文件存在了,创建ceph软件包源时,指定保存的名字为/etc/yum.repos.d/ceph.repo.rpmnew,导致安装时找不到ceph节点。用命令
sudo rm /etc/yum.repos.d/ceph.repo删除重试即可。仔细看看这两个文件,其实/etc/yum.repos.d/ceph.repo.rpmnew的内容已经包含了/etc/yum.repos.d/ceph.repo的内容。
安装过程中,下载rpm包又超时了(如下图),我测试这么多次,每次都必超时失败。但是在主机外面又能成功下载rpm包,不知道到底是什么原因。而且这里重新安装也不行,因为要执行命令sudo yum clean all清除缓存,重新安装还是要失败。
我用的是配置本地源的方法来解决,手动下载yum安装时下载超时的rpm包,然后放到/home/test/ceph-cache,修改/etc/yum.repos.d/ceph.repo中[Ceph]节点下的baseurl=file:///home/test/ceph-cache,然后再重新安装。安装过程中提示找不到什么,就手动下载什么,然后放到/home/test/ceph-cache目录。CentOS之间拷贝目录可用命令
scp -r root@admin-node:/home/test/ceph-cache/ root@node1:/home/test/ceph-cache/来进行。
下载的网络路径为
http://download.ceph.com/rpm-jewel/el7/x86_64/,最终需要的文件如下,共18个文件。都是10.2.6版本的,如果有更新的版本,ceph-deploy安装时应该会使用新版本,那么可以先下载下列文件对应的更新版本。
ceph-cache
│ ceph-10.2.6-0.el7.x86_64.rpm
│ ceph-base-10.2.6-0.el7.x86_64.rpm
│ ceph-common-10.2.6-0.el7.x86_64.rpm
│ ceph-mds-10.2.6-0.el7.x86_64.rpm
│ ceph-mon-10.2.6-0.el7.x86_64.rpm
│ ceph-osd-10.2.6-0.el7.x86_64.rpm
│ ceph-radosgw-10.2.6-0.el7.x86_64.rpm
│ ceph-selinux-10.2.6-0.el7.x86_64.rpm
│ libcephfs1-10.2.6-0.el7.x86_64.rpm
│ librados2-10.2.6-0.el7.x86_64.rpm
│ libradosstriper1-10.2.6-0.el7.x86_64.rpm
│ librbd1-10.2.6-0.el7.x86_64.rpm
│ librgw2-10.2.6-0.el7.x86_64.rpm
│ python-cephfs-10.2.6-0.el7.x86_64.rpm
│ python-rados-10.2.6-0.el7.x86_64.rpm
│ python-rbd-10.2.6-0.el7.x86_64.rpm
│
└─repodata
26a6a287b786be782c72a4d73deebe1c9099459469a581ca8365b7efe8b1afa6-primary.sqlite.bz2
repomd.xml
按照官网的说法,可以使用镜像服务器来安装,把ceph.repo包中的
http://download.ceph.com/替换为
http://eu.ceph.com/,但是我尝试了多次,依然安装失败。还是得配置本地源才行,一路畅通,很顺利的安装完成。其他方法,比如配置yum代理,或者CentOS操作系统代理上网的方式来解决,都可以研究一下。
安装完成后,执行
ceph -v查看ceph的版本,我这边输出的是“ceph version 10.2.6 (656b5b63ed7c43bd014bcafd81b001959d5f089f)”。
等4台CentOS 7都安装好ceph后,准备工作就全部完成,下面就该正式部署ceph集群了。
4 部署ceph
a 配置初始 monitor(s)、并收集所有密钥:在admin-node上执行
ceph-deploy mon create-initial,操作完成后,会生成以下4个密钥文件和如下的输出,如图中所示,node1对应的monitor服务名为
ceph-mon@node1
,并且允许开机启动,之后要操作monitor服务就可以使用此服务名。如果新建其他monitor,服务名需将node1改为对应的机器名。
此时在node1机器的/etc/ceph/
目录下生成了
ceph.client.admin.keyring
和
ceph.conf
文件,但是注意ceph.client.admin.keyring
权限不足,后续ceph操作无法正常进行,会报错“auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin: (2) No such file or directory
”、“ERROR: missing keyring,cannot use cephx for authentication
”、“initialization error (2) No such file or directory
”。因此需在node1机器上执行
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
修改权限,注意了,ceph-deploy的后续操作可能会再次在各个节点重新生成此文件,当报相应的错时,记得用此命令在各个节点修改权限。
ceph.bootstrap-mds.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-rgw.keyring
ceph.client.admin.keyring
b
添加osd:在node2和node3上新建两个目录用于osd,用以下命令来新建,注意要赋予权限给新建的目录,否则后续操作会报错。
ssh node2
sudo mkdir /var/local/osd0
sudo chmod 777 /var/local/osd0/
exit
ssh node3
sudo mkdir /var/local/osd1
sudo chmod 777 /var/local/osd1/
exit
然后执行以下语句来准备和激活osd。
ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
以下是node2添加的输出,注意服务名是
ceph-osd@0
,而node3的osd服务名为
ceph-osd@1
,其他osd的服务名为osd的id号。可用命令
ceph osd tree
查看osd所在机器名和id。这里要注意与monitor服务名中@后的区别,monitor服务名中@后为机器名,而osd服务名中@后为id,因为一台机器只有部署一个monitor,而一台机器可以部署多个osd,下面我会进行演示。
c 拷贝配置文件和admin密钥:用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 ceph 节点,这样每次执行 ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 。还要记得修改admin密钥的的权限,不然执行ceph操作都要报错。
ceph-deploy admin admin-node node1 node2 node3
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
d 进程和服务:用命令
ps -ef | grep ceph或
ps aux | grep ceph可查看各个节点运行的ceph进程,如下图。注意命令行后面都带有id参数。然后用语句
systemctl is-enabled ceph-mon@node1分别查看各个进程服务是否自启,记得这三个节点分别是monitor、osd0和ods1,服务名分别是
ceph-mon@node1、
ceph-osd@0和
ceph-osd@1。若没有自启,可用语句
sudo systemctl enable ceph-mon@node1来开启自启。
然后重启所有机器,观察重启后,ceph相关的服务和进程是否有自启,ceph的状态是否正常。我这里测试重启后,osd的服务都没有自动启动,也没有相关进程,用
systemctl is-enabled ceph-osd@0发现是disabled,然后用
sudo systemctl enable ceph-osd@0开启自启,再次重启,一切OK。
至此,ceph的快速部署基本完成,下面可以开始一些简单操作。
5 ceph简单操作
以上搭建了个简单的ceph环境,这个步骤就来实际操作和验证下,主要还是根据网方文档来进行。
5.1 扩展集群(扩容)
现在ceph只有一个monnitor,在node1上节点上。下面将在在 node1 上添加一个 OSD 守护进程和一个元数据服务器。然后分别在 node2 和 node3 上添加 Ceph Monitor ,以形成 Monitors 的法定人数。
a 添加osd:依次执行以下命令,在node1机器创建osd目录并且赋予权限。
ssh node1
sudo mkdir /var/local/osd2
sudo chmod 777 /var/local/osd2/
exit
然后执行以下命令准备和激活新添加的osd。注意观察输出,如下,此osd的服务就是
ceph-osd@2。此时,可以再用
ceph -s观察下ceph状态是不是为HEALTH_OK,然后再重启node1观察此osd服务是有自启,若没有,按照以上步骤进行修改,此处不再赘述。
ceph-deploy osd prepare node1:/var/local/osd2
ceph-deploy osd activate node1:/var/local/osd2
b 添加元数据服务器:在node1上添加一个元数据服务器,语句如下,观察服务名为
ceph-mds@node1。然后看看此服务有没有启动,会不会自启,之后添加的服务都都可以测试一下,后面也就不再赘述。
ceph-deploy mds create node1
ceph-deploy rgw create node1
d 添加 MONITORS
:在node2和node3上分别添加一个monitor,语句如下。此处官网的语句为
ceph-deploy mon add node2 node3,但要报错,只能逐一添加。添加后的monitor服务名分别为
ceph-mon@node2
和
ceph-mon2node2
。可以用语句
ceph quorum_status --format json-pretty
查询法定人数状态。注意,执行以下语句后,ceph-deploy又要把/etc/ceph/ceph.client.admin.keyring
拷贝到node2和node3,此文件又没有权限了,所以又得用
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
来赋予权限。
ceph-deploy mon add node2
ceph-deploy mon add node3
5.2 存入/检出对象数据
a 创建存储池:用语句
ceph osd pool create data 8创建名为data的存储池。
echo {Test-data} > testfile.txt
rados put test-object-1 testfile.txt --pool=data
然后用语句
rm testfile.txt删除testfile.txt,再用语句ll确认文件确实被删除,然后用语句
rados get test-object-1 testfile.txt --pool=data可以检出对象,再用ll确认文件被检出了,再配合cat命令可查看文件内容。
5.3 块设备
现在我们在admin-node上挂一个块设备来测试一下,这样admin-node也算是ceph-client。注意,ceph-client也是要装ceph的,也需要/etc/ceph/ceph.client.admin.keyring。但是admin-node之前已经装了ceph,这里就可以不用再装ceph,如果是新安装的CentOS,则需要安装ceph。
a 用以下语句创建一个块设备 image 、把 image 映射为块设备、然后创建文件系统。注意,官网创建的块设备语句然后进行映射在此版本会报错,具体解释可看看
http://www.itnpc.com/news/web/146518034576588.html。然用命令
sudo fdisk /dev/rbd0 -l可看到此块设备的详细信息,如下图。
rbd create foo --size 4096 --image-format 2 --image-feature layering
rbd map foo --name client.admin
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
sudo mkdir /mnt/ceph-block-device
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
然后可用
sudo umount /mnt/ceph-block-device/命令将挂载的目录卸载,注意,卸载前要先退出此目录,否则会报错“umount: /mnt/ceph-block-device: target is busy.”。
说明:如果客户端需要重启,需要将挂载目录先卸载,重启之后再重新挂载,否则系统在重启的过程中会被卡在"Umounting file system"这个操作上。
5.4 文件系统
ceph osd pool create cephfs_data 8
ceph osd pool create cephfs_Metadata 8
ceph fs new cephfs cephfs_Metadata cephfs_data
c 以内核驱动的方式挂载:挂载语句如下。同样的,可以上传一个文件测试一下,如下图。然后使用
sudo umount /mnt/mycephfs/来卸载。注意,卸载前要先退出此目录,否则会报错“umount: /mnt/mycephfs: target is busy.”。
mkdir /mnt/mycephfs
sudo mount -t ceph node1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret
d 用户空间文件系统( FUSE )
:需要使用ceph-fuse来挂载,挂载前要先用语句
sudo yum install -y ceph-fuse安装ceph-fuse。注意,安装前,要先修改/etc/yum.repos.d/ceph.repo中[Ceph]节点下的baseurl=
http://download.ceph.com/rpm-jewel/el7/x86_64/,因为前面使用本地源的方法安装的ceph,而本地没有ceph-fuse的rpm。或者将相应的ceph-fuse的rpm包下载下来,放到/home/test/ceph-cache
也是可以的。
然后使用以下语句进行挂载,同样的测试上传一个文件,再用
df -h查看挂载详细信息。然后同样可用
sudo umount /home/test/mycephfs/命令卸载。官网说的用命令
fusermount -u /home/test/mycephfs来卸载,但是要报错“fusermount: entry for /home/test/mycephfs not found in /etc/mtab”,原因未知。
sudo mkdir ~/mycephfs
sudo ceph-fuse -k ./ceph.client.admin.keyring -m node1:6789 ~/mycephfs
5.5 对象网关
现在试着把7480改为80端口。
在
/etc/ceph/ceph.conf文件里添加如下内容,然后用语句
sudo systemctl restart ceph-radosgw@rgw.node1重启rgw服务。注意,官网使用的是语句
sudo systemctl restart ceph-radosgw.service来重启,但是报错,服务名应该是
ceph-radosgw@rgw.node1,翻回去看看5.1的c步骤就知道了。
[client.rgw.node1]
rgw_frontends = "civetweb port=80"
现在就可以用
http://node1/这访问rgw。
6 服务名
在这里列出所有的服务名,方便对服务进行操作。
模块\机器名 | node1 | node2 | node3 |
monitor | ceph-mon@node1 | ceph-mon@node2 | ceph-mon@node3 |
osd | ceph-osd@2 | ceph-osd@0 | ceph-osd@1 |
mds | ceph-mds@node1 | N/A | N/A |
radosgw | ceph-radosgw@rgw.node1 | N/A | N/A |
7 ceph状态查询
ceph的实际简单操作就算完成了,这一步用命令来查询ceph状态,主要是备注下。
ceph -s:查看ceph状态
ceph -w:持续监控ceph信息
ceph health detail:ceph状态的详细信息
ceph osd stat:osd信息
ceph osd crush tree:显示osd crush信息
:monitor法定人数状态
ceph mon stat
:monitor状态
ceph mds stat
:mds状态
ceph fs ls
:fs列表
ceph osd pool ls
/
ceph osd lspools
:存储池列表
rados -p data ls
:存储池中对象列表
原文链接:https://www.f2er.com/centos/378195.html