Ubuntu16.04上搭建ceph Luminous版本集群

一、集群状况概述

本文旨在基于Ubuntu16.04版本搭建ceph的3节点集群,并在其上部署RADOS块设备,cephFS以及基于rgw的对象存储功能,先介绍整个集群的一些基本配置。

概述
宿主机Ubuntu16.04 , 8G内存, 150G硬盘, 4核i5 6300
虚拟化给予KVM搭建虚拟环境,用libvirt进行虚拟机管理
ceph版本luminous 12.2.12
集群节点系统镜像CentOS-7-x86_64-Minimal-1810.iso
集群节点资源配置1cpu, 1G MEM, 20G DISK(分为sda装系统和sdb专门做OSD存储)

集群结构

admin节点node
ip:192.168.122.122
0
node1 mon
ip:192.168.122.123
0
node2 osd
ip:192.168.122.124
0
node3 osd
ip:192.168.122.125
0
client 客户机
ip:192.168.122.120
0

二、部署集群

虚拟机的安装可以参考基于KVM的虚拟机环境搭建

2.1 安装集群前的准备工作

  1. 安装常用工具
yum install net-tools -y
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y yum-plugin-priorities
yum install -y yum-utils 
  1. 配置ceph镜像源
touch /etc/yum.repos.d/ceph.repo
vi /etc/yum.repos.d/ceph.repo

在文件中写入,这里配置的是luminous版本
在这里插入图片描述
如果下载出错,可以考虑配置国内的镜像站

  1. 更新镜像源
yum update -y
  1. 网络配置

官方文档建议在集群中使用两个网络,一个用于集群与用户数据交互的公用网络,一个用于节点之间连接的集群网络。本文中的虚拟机只配置了一块网卡eth0,所以就将公用网络和集群网络公享。先将网络配置为静态ip,
修改DNS

vi /etc/sysconfig/network

在这里插入图片描述
修改静态ip

vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改配置为

#BOOTPROTO="dhcp"  //这一行需要注释掉
BOOTPROTO="static"
NM_CONTROLLED=no
IPADDR=192.168.122.122 //IP 和原先IP一样也可
NETMASK=255.255.255.0
GATEWAY=192.168.122.1

修改hosts文件建立ip地址到主机名的映射

vi /etc/hosts
192.168.122.122 node
192.168.122.123 node1
192.168.122.124 node2
192.168.122.125 node3
192.168.122.120 ceph-client

关闭防火墙

firewall-cmd --zone=public --add-service=ceph-mon --permanent
firewall-cmd --zone=public --add-service=ceph --permanent
firewall-cmd --reload
iptables -A INPUT -i eth0 -p tcp -s 192.168.122.0/24 -d 192.168.122.254 -j ACCEPT
iptables-save 
sudo setenforce 0

最后一条指令只是暂时禁用SELinux,如果要永久禁用,需要修改SELinux为permissive

vi /etc/selinux/config

重启网络服务

service network restart
  1. 安装时钟服务,官方建议安装,保证集群内各节点的时间同步,避免出现问题
yum install -y ntp ntpdate ntp-doc

如果还是出现时间不同步的警告,可查看各monitor的ntpd服务是否开启,开启后再检查
6. 创建ceph用户
由于ceph这一用户名已经被ceph使用,官方建议不要以此建立用户,在虚拟机上创建用户并配置其免密登录,方便之后管理节点ssh登录集群节点。

useradd -g root -m cephD -d /home/cephD
passwd cephD   #设置密码
echo "cephD ALL=(ALL)NOPASSWD: ALL" | sudo tee /etc/sudoers.d/cephD
chmod 0440 /etc/sudoers.d/cephD

2.2 ceph-deploy部署ceph集群

集群其余节点的克隆可参考克隆虚拟机节点注意集群中的节点与admin节点不同的是,除了系统镜像安装的磁盘镜像sda外,还额外配置了一块专门作为OSD的vdb盘,官方也是建议两者分开。
克隆完成后,libvirt管理的虚拟机为,其中的centos7.0-01是admin节点,centos7.0是客户机(客户机不必创建ceph用户)。
在这里插入图片描述

  1. 在admin节点node上安装ceph-deploy工具
    ceph-deploy是ceph快速部署的工具,通过远程ssh登录到集群的节点上控制节点完成相应的动作。
yum install -y ceph-deploy
  1. 切换到cephD用户并创建集群目录
su - cephD
mkdir ~/my-cluster;
cd ~/my-cluster;
  1. 配置ssh登录
    生成ssh秘钥并分发到集群各节点以及用户机
ssh-keygen
ssh-copy-id cephD@node1
ssh-copy-id cephD@node2
ssh-copy-id cephD@node3
ssh-copy-id cephD@ceph-client

修改ssh配置文件,方便之后直接以自定义的hostname登录到相应节点

touch ~/.ssh/config;
vi ~/.ssh/config
Host node1
    Hostname node1
    User cephD
Host node2
    Hostname node2
    User cephD
Host node3
    Hostname node3
    User cephD
Host ceph-cient
    Hostname ceph-client
    User root

这一步正确完成之后,节点之间是可以相互ping通的,也可以从admin节点ssh登录到其他节点
4. 创建集群

ceph-deploy new node1

这会创建集群,并且其monitor节点为node1,my-cluster文件夹下会生成几个文件出现no module named pkg_respources,安装setuptools和pip distribute
在这里插入图片描述
修改其中的ceph.conf文件,设置集群中pool的默认副本数为2,实际上一般设置为3更合适
如果出现“no nodule named pkg-resources"的错误,是由于系统镜像是minimal版本,而2.0以后的ceph-deploy会不兼容,此时安装python-setuptools即可

osd pool default size = 2
public_network = 192.168.122.0/24
  1. 集群安装ceph
ceph-deploy install --release luminous node node1 node2 node3 ceph-client

这种部署方式是由admin节点顺序远程访问各虚拟机完成安装,如果太慢的话,可以在一台虚拟机上安装ceph,然后克隆该虚拟机即可

yum install ceph
  1. 初始化ceph-moni服务
ceph-deploy mon create-initial

这会生成其余的keyring文件
在这里插入图片描述

  1. 将admin的秘钥配置到其它节点
ceph-deploy admin node node1 node2 node3 ceph-client

这条命令是通过ssh方式(不必额外分发ssh秘钥,此命令已包含)把keyring和ceph.conf等文件都拷贝到其余节点,以后若是多个节点的配置都变了,也可以考虑使用ssh的scp指令进行覆盖。ceph-deploy提供config push指令
如果ssh无法访问的话(提示秘钥已经变化),尝试在admin节点的cephD用户路径下的.ssh/knownhosts中删除已有的出错主机即可

  1. 安装管理服务
    从luminous版本开始,mgr从mon服务中剥离出来,需要单独安装
ceph-deploy mgr create node1 
  1. 为集群添加OSD
ceph-deploy osd create --data /dev/vdb node2
ceph-deploy osd create --data /dev/vdb node3

集群中至少需要3个osd和3个monitor(不然各种health_warn)并且貌似三个osd要跨3个节点,否则照样有degraded的状态,这里的create相当于旧版本的prepare和activate。
如果原来已在硬盘分区创建过OSD,是删除ceph集群后再新建的话需要注意,原来的lvm与volume group的配置还在,需要删除,具体见

[node4][DEBUG ] Running command: /bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring osd purge-new osd.3 --yes-i-really-mean-it
[node4][DEBUG ]  stderr: purged osd.3
[node4][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.osd][ERROR ] Failed to execute command: /usr/sbin/ceph-volume --cluster ceph lvm create --bluestore --data /dev/sdc --block.wal /dev/sdb2 --block.db /dev/sdb1
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs

修复:
node节点卸载挂载分区
[root@node4 ~]# umount /var/lib/ceph/osd/ceph-3
查看lvs

[root@node4 ~]# lvs
  LV                                             VG                                        Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  osd-block-ab4df89f-8682-4233-b683-e05c161089a4 ceph-183df03c-83fb-441c-a82e-d7b560e1a611 -wi-a----- 50.00g                                                    
  root                                           cl                                        -wi-ao---- 35.12g                                                    
  swap                                           cl                                        -wi-ao----  3.88g        

删除lv,vg,pv
[root@node4 ~]# lvremove osd-block-ab4df89f-8682-4233-b683-e05c161089a4 ceph-183df03c-83fb-441c-a82e-d7b560e1a611
  Volume group "osd-block-ab4df89f-8682-4233-b683-e05c161089a4" not found
  Cannot process volume group osd-block-ab4df89f-8682-4233-b683-e05c161089a4
Do you really want to remove active logical volume ceph-183df03c-83fb-441c-a82e-d7b560e1a611/osd-block-ab4df89f-8682-4233-b683-e05c161089a4? [y/n]: y
  Logical volume "osd-block-ab4df89f-8682-4233-b683-e05c161089a4" successfully removed
//直接这一步就行
[root@node4 ~]# vgremove  ceph-183df03c-83fb-441c-a82e-d7b560e1a611 
  Volume group "ceph-183df03c-83fb-441c-a82e-d7b560e1a611" successfully removed

[root@node4 ~]# pvremove /dev/sdc
  Labels on physical volume "/dev/sdc" successfully wiped.

删除/var/lib/ceph/osd/ 所有
[root@node4 ~]# rm /var/log/ceph/ceph-* -rf

删除 ceph 日志
[root@node4 ~]# rm -rf /var/lib/ceph/*

monitor1 上重置node4 的sdc分区
[root@monitor1 ceph-cluster]# ceph-deploy disk zap node4 /dev/sdc

monitor1 上重新创建osd节点
[root@monitor1 ceph-cluster]# ceph-deploy osd create node4 --bluestore --data /dev/sdc --block-db /dev/sdb1 --block-wal /dev/sdb2
  1. 检查集群状态
    至此,3节点的ceph集群搭建完毕,可以检测是否正确部署,有两种方式。
ssh node1 sudo ceph health
ssh node2 sudo ceph health
ssh node3 sudo ceph health

或者

ceph -s

在这里插入图片描述
如果ceph -s出错,可以尝试为ceph的keyring文件增加’r’属性,如果这样还不行,非要sudo ceph -s才可以的话,尝试sudo chown cephD:root /etc/ceph/*

三、扩展和使用集群

3.1 扩展集群

  1. 添加monitor
    集群的monitor至少需要一个活跃,为提高可靠性,应有奇数个的多个monitor节点工作。新增monitor节点node2,原来的monitor节点node1是leader。安装L版时2个monitor也没事,N版两个就会出警告,加到3个就好了
ceph-deploy mgr create node2
ceph-deploy mon add node2 
  1. 添加OSD
    为对应的虚拟机增加磁盘并挂载,比如在node2上再添加一个osd,挂载在新加的磁盘vdc上
ceph-deploy osd create --data /dev/vdc node2

E版之后副本数默认是3,所以至少需要3个OSD才不会出现undersize的警告,但是装了N版的之后,3个OSD也不行,需要跨3个host才行

3.2 修改集群布局

ceph集群定义了多种故障域,比如磁盘、节点、机架 ( rack) 、行 ( row) 、开关 、 电源电路、房间 、 数据中心等 。集群布局可以通过两种方式修改

  1. 编辑CRUSH map
# 获取集群map
ceph osd getcrushmap -0 crushmap.txt
# 反编译map
crushtool -d crushmap.txt -0 crushmap-decompile
# 修改集群布局
vi crushmap-decompile
# 重新编译这个新的CRUSH map
crushtool - c crushmap-decompile -0 crushmap-compiled
# 将新的CRUSH map应用到Ceph集群
ceph osd setcrushmap -i crushmap-compiled
  1. 命令行修改
    比如为集群增加机架
ceph osd crush add-bucket rackOl rack
ceph osd crush add-bucket rack02 rack

ceph osd crush move node1 rack=rackOl
ceph osd crush move node2 rack=rack02

ceph osd crush move rack01 root=default
ceph osd crush move rack02 root=default

检查新布局

ceph osd tree

注意ceph只能有一个root,如果有多个root会造成PG degraded的警告,需要crush rm掉

3.3 ceph数据管理

测试在ceph集群中的数据读写

echo "He110 Ceph" > /tmp/he11oceph
ceph osd poo1 create mytest 128 128 # 创建资源池指定其中PG的数目,默认为8
ceph osd poo1 set mytest size 2 # 设定池子副本数
rados -p mytest put obj-11 /tmp/he11oceph # 将文件存入池中并命名为obj-1
rados -p HPC_Poo1 ls # 查看池中对象
ceph osd map HPC_Poo1 obj-1 # 展示池中对象与实际OSD间的映射关系

在这里插入图片描述
注意:map指令是通过对象名和池中PG的信息哈希出对象存放的PG ID,所以即使没有此对象存在也能获得PG ID
老版本可以通过map得到的信息去对应的节点寻找/var/lib/ceph/osd/ceph-1/current,该文件夹下有实际存放的对象,但是L版我并没有找到current文件夹,貌似是与新版本开始使用bluestore作为底层的文件系统有关系?

3.4 RADOS块设备的创建与使用

块设备能够为用户提供块存储服务,本节将在ceph集群中部署块存储服务,并将其映射到之前创建好的client客户机,作为其挂载的外部磁盘。

  1. 登录集群中任意monitor节点或是admin节点,创建ceph RBD
    旧版本默认建有名为rbd的资源池,L版需要自己创建名为rbd的池子;然后创建名为myrbd1,大小为1G的块设备
ceph osd pool create rbd 100 100
rbd create myrbd1 --size 1024  # 创建RBD设备
rbd --image myrbd1 info  # 查看RBD镜像信息
  1. 前文中已建立客户机,并完成了网络配置和秘钥分发,可以直接从客户机上访问集群,从客户机上执行,将集群中的块设备映射至客户机
rbd map rbd/myrbd1  # 映射RBD设备
rbd showmapped #查看已映射的设备

如果映射不成功,出现0x38错误码,那么是由于rbd块的feature太多,而centos不支持这么多feature,需要手动配置将多余的feature关闭。详见
在这里插入图片描述
然后在RBD设备创建文件系统

fdisk -1 /dev/rbdO
mkfs.xfs /dev/rbdO
mkdir /mnt/ceph-vo11
mount /dev/rbdO /mnt/ceph-vo11

注意客户机关机后该磁盘将不再挂载,重开机需要map+mount后即可

在这里插入图片描述
然后就可以正常向该磁盘上进行读写,也可以调整ceph RBD的大小,或者进行快照或是复制,方便数据的复制和回滚,并且块设备为云平台中的虚拟机创建副本提供支持。

3.5 cephFS

cephFS需要配置mds服务才可以正常使用,至少需要一个mds节点,我们在node1上部署mds。

ceph-deploy mds create node1

但是此时ceph -s是看不到mds服务活跃的,需要创建文件系统和存储池,在admin节点创建名为mycephfs的文件系统

ceph osd pool create cephfs_data 100 100 
ceph osd pool create cephfs_metadata 100 100
ceph fs new  mycephfs cephfs_metadata cephfs_data

查看客户秘钥

cat ceph.client.admin.keyring

在这里插入图片描述
用内核驱动的方式挂载cephFS,也可通过FUSE挂载

mount -t ceph 192.168.122:123:6789:/ /mnt/mycephfs -0
name=admin , secretfi1e=[秘钥]

注意:秘钥不要输错否则错误代码为-1,ip为monitor节点的ip,输错会有110的错误
部署成功
在这里插入图片描述

3.6 ceph RADOS网关的对象存储rgw

本文在monitor节点node1上部署了rgw服务,如果有条件rgw可以使用专门的节点。部署安装rgw服务

ceph-deploy install --rgw node1
ceph-deploy rgw create node1

部署成功后,可以看到rgw服务为active,执行

ps -ef | grep ceph

也会看到rgw服务启动
关闭防火墙
rgw服务默认使用的7480端口,也可以进行修改

sudo firewall-cmd --list-all
sudo firewall-cmd --zone=public --add-port 80/tcp --permanent
sudo firewall-cmd --reload

部署成功后进行检查

curl node1:7480

在这里插入图片描述

四、结语

至此,3节点的ceph集群已经在Ubuntu16.04上搭建完成并进行了测试使用。官方文档尽量看英文的保证跟版本一致,中文的目前貌似只到10.0版本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 16.04是一种常用的Linux操作系统,而Hadoop是一个用于分布式存储和处理大规模数据的开源框架。在Ubuntu 16.04搭建伪分布式Hadoop环境可以用于学习和测试目的。 以下是搭建伪分布式Hadoop环境的步骤: 1. 安装Java:首先确保已经安装了Java Development Kit (JDK)。可以通过以下命令安装OpenJDK: ``` sudo apt-get update sudo apt-get install openjdk-8-jdk ``` 2. 下载Hadoop:从Hadoop官方网站下载最新版本的Hadoop压缩包,并解压到指定目录。可以使用以下命令进行解压: ``` tar -xzvf hadoop-x.x.x.tar.gz ``` 3. 配置环境变量:编辑`~/.bashrc`文件,并添加以下内容: ``` export HADOOP_HOME=/path/to/hadoop export PATH=$PATH:$HADOOP_HOME/bin ``` 4. 配置Hadoop:进入Hadoop的安装目录,编辑`etc/hadoop/core-site.xml`文件,添加以下内容: ``` <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> ``` 然后编辑`etc/hadoop/hdfs-site.xml`文件,添加以下内容: ``` <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> ``` 5. 格式化HDFS:运行以下命令来格式化HDFS: ``` hdfs namenode -format ``` 6. 启动Hadoop:运行以下命令启动Hadoop: ``` start-dfs.sh start-yarn.sh ``` 7. 验证Hadoop:在浏览器中访问`http://localhost:50070`,可以看到Hadoop的Web界面。 以上是在Ubuntu 16.04搭建伪分布式Hadoop环境的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值