一、准备工作
测试环境:vmware workstation15制作centos7虚拟机四台,分别命名为admin、node01、node02、node03.....(可安装一台,其他克隆即可)。
四台机器,一台admin,其他三台为node01,node02和node03。node01、node02和node03均为两块硬盘,一块安装系统,另一块做为osd。
测试环境都为一块网卡一个网络(实际环境分公共网络public network和集群网络cluster network)。
0、最小化安装centos7,配置网络连通性。(实际环境除了osd节点mon节点需要至少两块网卡)
# vi /etc/sysconfig/network-scripts/ifcfg-ens*BOOTPROTO=noneONBOOT=yesIPADDR=192.168.129.131NETMASK=255.255.255.0GATEWAY=192.168.129.2DNS1=8.8.8.81、关闭防火墙墙
#systemctl stop firewalld#systemctl disable firewalld2、关闭selinux
# setenforce 0#vi /etc/selinux/config修改SELINUX=disabledSELINUX=disabled或者直接运行以下#sed -i 's/=enforcing/=disabled/' /etc/selinux/config3、设置时区,安装ntp时间同步
设置时区# timedatectl set-timezone Asia/Shanghai安装ntp。
#yum install ntp时间同步对于整个集群十分重要,建议在集群中单独设置一台ntp server,其他节点从该ntp server同步时间。
如admin设置为ntp server,其他从admin同步时间admin:
#vi /etc/ntp.conf#设置允许同步的网络restrict 192.168.129.0 mask 255.255.255.0 nomodify notrap#设置上游时间服务器,修改server,不需要的前面加#号注释掉server cn.ntp.org.cn iburstnode端:
#vi /etc/ntp.confserver admin_ip iburst#systemctl start ntpd #开启ntp#systemctl enable ntpd #设置开机启动#ntpq -p #查看ntp同步情况4、设置hostname
hostnamectl set-hostname adminhostnamectl set-hostname node01hostnamectl set-hostname node02hostnamectl set-hostname node035、编辑/etc/hosts
vi /etc/hosts添加解析192.168.129.130 admin192.168.129.131 node01192.168.129.132 node02192.168.129.133 node03并传到其他节点去#scp /etc/hosts admin:/etc/#scp /etc/hosts node01:/etc/#scp /etc/hosts node02:/etc/#scp /etc/hosts node03:/etc/6、用户ssh免认证
#ssh-keygenssh-copy-id root@adminssh-copy-id root@node01ssh-copy-id root@node02ssh-copy-id root@node03如果要全部相互免认证,则# vi ~/.ssh/configHost *StrictHostKeyChecking no# cd ~/.sshscp authorized_keys config id_rsa admin:~/.ssh/scp authorized_keys config id_rsa node01:~/.ssh/scp authorized_keys config id_rsa node02:~/.ssh/scp authorized_keys config id_rsa node03:~/.ssh/7、添加repo源,选择安装rpm-nautilus版本
# yum -y install epel-release yum-plugin-priorities https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm#sed -i -e "s/enabled=1/enabled=1\npriority=1/g" /etc/yum.repos.d/ceph.repo添加完毕查看/etc/yum.repos.d/ceph.repo,看版本是否正确,如有必要如加快速度可修改源,如在教育网可使用清华的源。
# more /etc/yum.repos.d/ceph.repo
#vi /etc/yum.repos.d/ceph.repo
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-nautilus/el7/$basearch
8、更新系统
如果必要给yum添加代理#vi /etc/yum.confproxy=http://proxyip:portproxy_username=nameproxy_password=passwd#yum update –y9、各节点安装ceph
#yum -y install ceph ceph-radosgw查看版本[root@node01 ~]# ceph -vceph version 14.2.0 (3a54b2b6d167d4a2a19e003a705696d4fe619afc) nautilus (stable)二、mon配置
整个集群都从一台mon节点开始。Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。实际环境一般需要三个mon来保证冗余和高可靠性。
1、登录到node01,查看ceph目录是否已经生成
# ls /etc/cephrbdmap2、生成ceph配置文件
#touch /etc/ceph/ceph.conf3、执行uuidgen命令,得到一个唯一的标识,作为ceph集群的ID
#uuidgen62d31c7d-780f-40c3-9180-dbe1f7c5d5084、手动配置ceph.conf
#vi /etc/ceph/ceph.conf[global]
fsid = 62d31c7d-780f-40c3-9180-dbe1f7c5d508mon initial members = node01mon host = 192.168.129.131public network = 192.168.129.0/24auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024#设置副本数osd pool default size = 3#设置最小副本数osd pool default min size = 2osd pool default pg num = 333osd pool default pgp num = 333osd crush chooseleaf type = 1osd_mkfs_type = xfsmax mds = 5mds max file size = 100000000000000mds cache size = 1000000#设置osd节点down后900s,把此osd节点逐出ceph集群,把之前映射到此节点的数据映射到其他节点。mon osd down out interval = 900[mon]#把时钟偏移设置成0.5s,默认是0.05s,由于ceph集群中存在异构PC,导致时钟偏移总是大于0.05s,为了方便同步直接把时钟偏移设置成0.5smon clock drift allowed = .505、为集群创建密钥环、并生成监视器密钥。
#ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'6、生成管理员密钥环,生成 client.admin 用户并加入密钥环。
#sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'7、生成一个引导-osd密钥环,生成一个client.bootstrap-osd用户并将用户添加到密钥环中
#sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'8、将生成的密钥添加到ceph.mon.keyring
#sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring#sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring9、使用主机名、主机IP地址(ES)和FSID生成monmap。把它保存成/tmp/monmap
monmaptool --create --add node01 192.168.129.131 --fsid 62d31c7d-780f-40c3-9180-dbe1f7c5d508 /tmp/monmap10、创建一个默认的数据目录
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node0111、修改ceph.mon.keyring属主和属组为ceph
chown ceph.ceph /tmp/ceph.mon.keyring12、初始化mon
sudo -u ceph ceph-mon --mkfs -i node01 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring*初始化完毕查看/var/lib/ceph/mon/ceph-node01下是否生成文件,如果没有生成则是文件夹权限问题,需要将文件夹属主改成ceph,以及ceph.mon.keyring属主问题。
13、为了防止重新被安装创建一个空的done文件
sudo touch /var/lib/ceph/mon/ceph-node01/done14、启动mon
#systemctl start ceph-mon@node0115、查看状态
# systemctl status ceph-mon@node0116、设置开机启动
# systemctl enable ceph-mon@node0117、查看集群情况
[root@node01 ~]# ceph -s cluster: id: 62d31c7d-780f-40c3-9180-dbe1f7c5d508 health: HEALTH_WARN 1 monitors have not enabled msgr2 services: mon: 1 daemons, quorum node01 (age 29m) mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:*存在health告警,启用了msgr2后会消失。# ceph mon enable-msgr2然后重启服务# systemctl restart ceph-mon@node0118、将/etc/ceph下文件拷贝到其他集群主机
# scp /etc/ceph/* root@node02:/etc/ceph/# scp /etc/ceph/* root@node03:/etc/ceph/# scp /etc/ceph/* root@admin:/etc/ceph/拷贝过去以后其他节点也就可以执行ceph -s查看集群情况了。第一次安装如果出现key错误就重新开始。
添加其他mon
1、登录新监视器主机创建默认目录ssh node02sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node022、在临时目录获取监视器密钥环
# ceph auth get mon. -o /tmp/ceph.mon.keyring3、获取监视器运行图
# ceph mon getmap -o /tmp/ceph.mon.map4、修改ceph.mon.keyring属主和属组为ceph
chown ceph.ceph /tmp/ceph.mon.keyring5、初始化mon
sudo -u ceph ceph-mon --mkfs -i node02 --monmap /tmp/ceph.mon.map --keyring /tmp/ceph.mon.keyring6、为了防止重新被安装创建一个空的done文件
# sudo touch /var/lib/ceph/mon/ceph-node02/done7、启动服务,它会自动加入集群
# systemctl start ceph-mon@node02# systemctl status ceph-mon@node02# systemctl enable ceph-mon@node029、查看集群
ceph -s如存在警告1 monitors have not enabled msgr2,则:
# ceph mon stat会看到node01没有启用v2,登录到node01上运行:# ceph mon enable-msgr2然后重启服务# systemctl restart ceph-mon@node01如果因添加node2导致集群出差,需要到node01去先修改配置,再从步骤1开始添加新的mon,node01步骤如下:
# systemctl stop ceph-mon@node01# monmaptool /tmp/monmap --rm node02# ceph-mon -i node01 --inject-monmap /tmp/monmap# systemctl start ceph-mon@node01
三、配置OSD
Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。一般至少需要3个osd来保证冗余和可靠性。准备磁盘,如sdb。
精简型1、BLUESTORE方式# ssh node01# ls /dev/sd*#sudo ceph-volume lvm create --data /dev/sdb#sudo ceph-volume lvm list显示osd.num,num后面会用到。# systemctl start ceph-osd@0# systemctl status ceph-osd@0# systemctl enable ceph-osd@0
node2、node3上也创建
其他节点需要提前导出/var/lib/ceph/bootstrap-osd/ceph.keyring,或从node01上拷贝。#ssh node02# ls /dev/sd*# ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring#sudo ceph-volume lvm create --data /dev/sdb#sudo ceph-volume lvm list显示osd.num,num后面会用到。# systemctl start ceph-osd@1# systemctl status ceph-osd@1# systemctl enable ceph-osd@1[root@admin ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.05576 root default-3 0.01859 host node01 0 hdd 0.01859 osd.0 up 1.00000 1.00000-5 0.01859 host node02 1 hdd 0.01859 osd.1 up 1.00000 1.00000-7 0.01859 host node03 2 hdd 0.01859 osd.2 up 1.00000 1.00000精简型2、FILESTORE方式
按照官方说明BLUESTORE方式效率比FILESTORE方式效率更高,对SSD优化良好
四、安装mgr
在admin上:1、创建认证key#ceph auth get-or-create mgr.admin mon 'allow profile mgr' osd 'allow *' mds 'allow *'2、创建目录#sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-admin/3、导出key到指定目录# ceph auth get mgr.admin -o /var/lib/ceph/mgr/ceph-admin/keyring4、启动服务# systemctl start ceph-mgr@admin# systemctl status ceph-mgr@admin# systemctl enable ceph-mgr@admin[root@admin ~]# ceph -s cluster: id: 0affd701-e929-48e8-809d-c8295395ebaa health: HEALTH_OK services: mon: 3 daemons, quorum node01,node02,node03 (age 7m) mgr: admin(active, since 103s) osd: 3 osds: 3 up (since 23m), 3 in (since 23m) data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 42 GiB / 45 GiB avail pgs:在其他节点上安装mgr:#ceph auth get-or-create mgr.$name mon 'allow profile mgr' osd 'allow *' mds 'allow *'#sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-$name/# ceph auth get mgr.$name -o /var/lib/ceph/mgr/ceph-$name/keyring# systemctl start ceph-mgr@$name# systemctl status ceph-mgr@$name# systemctl enable ceph-mgr@$name如在node01上安装后:[root@node01 ~]# ceph -s cluster: id: 0affd701-e929-48e8-809d-c8295395ebaa health: HEALTH_OK services: mon: 3 daemons, quorum node01,node02,node03 (age 10m) mgr: admin(active, since 4m), standbys: node01 osd: 3 osds: 3 up (since 26m), 3 in (since 26m) data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 42 GiB / 45 GiB avail
mgr安装完毕后会看到存储信息。集群基础就算安装完毕。
整个手动安装过程容易出错的有两种情况:一、文件或文件夹权限是root而不是ceph;二、认证密钥不一致,keyring要和ceph auth list中的一样。
五、块设备使用
在使用ceph块设备时要用到rbd工具,需要rbd池,默认没有rbd池,要手工在osd中创建# ceph osd lspools# ceph osd pool create rbd 128# ceph osd lspools #再次查看# rbd pool init rbd #初始化rbd pool创建一个10G的盘disk01# rbd create disk01 --size 10G --image-feature layering查看# rbd ls -l映射到本地# sudo rbd map disk01/dev/rbd0 #映射成了rbd0,现在就可以像使用本地硬盘一样使用了# rbd showmapped #查看映射情况# sudo mkfs.xfs /dev/rbd0 #格式化该硬盘# sudo mount /dev/rbd0 /mnt #挂载硬盘# df -kh #查看挂载情况/dev/rbd0 10G 33M 10G 1% /mnt六、文件系统使用
首先配置MDS1、创建目录# sudo -u ceph mkdir /var/lib/ceph/mds/ceph-node012、生成mds.node01密钥#ceph auth get-or-create mds.node01 osd "allow rwx" mds "allow" mon "allow profile mds"3、导出mds密钥#ceph auth get mds.node01 -o /var/lib/ceph/mds/ceph-node01/keyring4、在ceph.conf中添加配置
[mds.{id}]host = {id}5、启动服务
systemctl start ceph-mds@node01systemctl status ceph-mds@node01systemctl enable ceph-mds@node01创建池
#ceph osd pool create cephfs_data 128 #ceph osd pool create cephfs_metadata 128 #ceph fs new cephfs cephfs_metadata cephfs_data #ceph fs ls #ceph mds stat客户端mount cephFS,我们在admin上测试
#yum -y install ceph-fuse#ssh node01 "sudo ceph-authtool -p /etc/ceph/ceph.client.admin.keyring" > admin.key #chmod 600 admin.key#mount -t ceph node01:6789:/ /mnt -o name=admin,secretfile=admin.key # df -hT #查看挂载情况