https://blog.csdn.net/u012359453/article/details/79978574
前言 Ceph 是一个高性能、可靠、可扩展的开源存储平台。它是一个自由的分布式存储系统,提供了对象、块和文件级存储的接口,并可以不受单点故障的影响而运行。上周调研了CEPH文件集群的优劣性,准备做一个实际搭建的性能测试,在物理机上虚了多个ubuntu出来,模拟多台物理机集群,参考网络资源,搭建起来的,但是有遇到一些错误,可能对于接触过linux的人来说都不算很严重的难题,这里做个记录。本文参考:https://linux.cn/article-8182-1.html, 但遇到了一些错误,记录搭建与解决错误是本文的主旨,错误处理在最后一节。
前提 1:5个安装了 Ubuntu 16.04 的服务器节点 2:所有节点上的 root 权限 (可选前提,如果配置osd为逻辑分区,需要在linux机器上挂一块逻辑分区,供格式化osd使用) 3:osd机器上sdb空闲分区
配置所有节点 配置5个节点来准备安装CEPH集群软件,所以你必须拥有root权限,在5台机器上都安装ssh-server。 1,创建cephuser用户,统一用户名和密码(tip:在所有节点都运行如下指令),
useradd -m -s /bin/bash cephuser passwd cephuser 1 2 创建完新用户后,我们需要给 cephuser 配置无密码的 sudo 权限。这意味着 cephuser可以不先输入密码而获取到 sudo 权限运行:
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser chmod 0440 /etc/sudoers.d/cephuser sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers 1 2 3 2,安装 NTP 来同步所有节点的日期和时间。先运行 ntpdate 命令通过 NTP 设置日期。我们将使用 US 池的 NTP 服务器。然后开启并使 NTP 服务在开机时启动。
sudo apt-get install -y ntp ntpdate ntp-doc ntpdate 0.us.pool.ntp.org hwclock --systohc systemctl enable ntp systemctl start ntp 1 2 3 4 5 6 3,如果你和我一样在虚拟机里面搭建集群,那么附加运行:
sudo apt-get install -y open-vm-tools 1 因为ceph-deploy等需要python环境,所以安装python环境,和依赖包parted:
sudo apt-get install -y python python-pip parted 1 4,编辑hosts文件(vi /etc/hosts):
# ceph-admin 192.168.40.16 mlv1-VirtualBox # ceph-mon1 192.168.40.97 mlv2-VirtualBox # ceph-osd1 192.168.40.106 mlv4-VirtualBox # ceph-osd2 192.168.40.100 mlv6-VirtualBox # ceph-gateway (client) 192.168.40.95 mlv3-VirtualBox 1 2 3 4 5 6 7 8 9 10 11 这里hostname最好和你集群机器的主机名一样,我就因为不一样在ssh安装ceph到其他节点的时候报错了。
配置SSH服务器 这一步的目的是配置admin节点,完成admin节点无密码访问其他节点,首先登录到ceph-admin节点:
ssh root@mlv1-VirtualBox su - cephuser 1 2 管理节点用来安装配置所有集群节点,所以 ceph-admin 上的用户必须有不使用密码连接到所有节点的权限。我们需要为 ‘ceph-admin’ 节点的 cephuser 用户配置无密码 SSH 登录权限。 1, 生成密钥:
ssh-keygen # 提示输入密码的时候请回车,让密码为空 1 2 2,为 ssh 创建一个配置文件
vim ~/.ssh/config 1 我的配置文件如下:
Host ceph-admin Hostname mlv1-VirtualBox User cephuser
Host mon1 Hostname mlv2-VirtualBox User cephuser
Host ceph-osd1 Hostname mlv4-VirtualBox User cephuser
Host ceph-osd2 Hostname mlv6-VirtualBox User cephuser
Host ceph-client Hostname mlv3-VirtualBox User cephuser 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 保存退出,并赋予文件权限,接着通过 ssh-copy-id 命令增加密钥到所有节点。
chmod 644 ~/.ssh/config ssh-keyscan ceph-osd1 ceph-osd2 ceph-client mon1 >> ~/.ssh/known_hosts ssh-copy-id ceph-osd1 ssh-copy-id ceph-osd2 ssh-copy-id mon1 1 2 3 4 5 当请求输入密码时输入你的 cephuser 密码,完成以上配置之后admin节点就可以访问集群别的机器了,顺带截个图:
Ubuntu 防火墙配置 出于安全原因,我们需要在服务器打开防火墙。我们更愿使用 Ufw(不复杂防火墙)来保护系统,这是 Ubuntu 默认的防火墙。在这一步,我们在所有节点开启 ufw,然后打开 ceph-admin、ceph-mon 和 ceph-osd 需要使用的端口。 1,admin节点(安装ufw包)
ssh root@ceph-admin sudo apt-get install -y ufw # 打开 80,2003 和 4505-4506 端口,然后重启防火墙,开机启动。 sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 2003/tcp sudo ufw allow 4505:4506/tcp sudo ufw enable 1 2 3 4 5 6 7 8 9 2,其他节点防火墙配置
ssh ceph-osd1 sudo apt-get install -y ufw sudo ufw allow 22/tcp sudo ufw allow 6800:7300/tcp sudo ufw enable 1 2 3 4 5 这里列举osd1的配置,其他节点完全一样。
配置OSD节点 在我的osd上,我在虚拟机上分配了一个逻辑分区sdb,供ceph存数据使用,从 ceph-admin 节点,登录到所有 OSD 节点,然后格式化 /dev/sdb 分区为 XFS 文件系统,在osd的两个机器上运行如下指令:
# 检查分区表 sudo fdisk -l /dev/sdb # 格式化/dev/sdb 分区为 XFS 文件系统,使用 parted 命令创建一个 GPT 分区表。 sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100% sudo mkfs.xfs -f /dev/sdb # 查看成果 # 显示磁盘可用大小 sudo fdisk -s /dev/sdb # 显示sdb文件系统格式,现在应该是xfs sudo blkid -o value -s TYPE /dev/sdb 1 2 3 4 5 6 7 8 9 10 创建CEPH集群 回到admin节点
ssh root@ceph-admin su - cephuser 1 2 1,用 pip 命令在 ceph-admin 节点安装 ceph-deploy.
sudo pip install ceph-deploy 1 2,使用ceph-deploy创建新集群
# 创建一个配置文件目录 mkdir cluster cd cluster # ceph-deploy 命令通过定义监控节点 mon1 创建一个新集群。 # 命令将在集群目录生成 Ceph 集群配置文件 ceph.conf ceph-deploy new mon1 1 2 3 4 5 6 接下来我们需要更改生成的配置文件
vi ceph.conf 1 在 [global] 块下,粘贴下面的配置。
# 我们的ip地址 public network = 192.168.40.0/24 # 默认备份数 2 osd pool default size = 2 1 2 3 4 保存文件并退出编辑器,如果这里出现了错误,请查看本文最后一节。
3,安装 Ceph 到所有节点 现在用一个命令从 ceph-admin 节点安装 Ceph 到所有节点
ceph-deploy install ceph-admin ceph-osd1 ceph-osd2 mon1 1 2 命令将自动安装 Ceph 到所有节点:mon1、osd1-3 和 ceph-admin - 安装将花一些时间,建议更换ceph安装源,执行如下指令:
export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/debian-jewel export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc 1 2 现在到 mon1 节点部署监控节点,这一步也很可能报错,报错请查看最后一节。
ceph-deploy mon create-initial 1 2 命令将创建一个监控密钥,用 ceph 命令检查密钥。
ceph-deploy gatherkeys mon1 1 2 增加 OSD 到集群
在所有节点上安装了 Ceph 之后,现在我们可以增加 OSD 守护进程到该集群。OSD 守护进程将在磁盘 /dev/sdb 分区上创建数据和日志 。 检查所有 osd 节点的 /dev/sdb 磁盘可用性,应该看到是xfs格式可用磁盘。
ceph-deploy disk list ceph-osd1 ceph-osd2 1 下面,在所有 OSD 节点上用 zap 选项删除该分区表,这个命令将删除所有 Ceph OSD 节点的 /dev/sdb 上的数据。
ceph-deploy disk zap ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb 1 现在准备所有 OSD 节点,请确保结果没有报错。
ceph-deploy osd prepare ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb 1 2 当你看到log里面有:host ceph-osd2 is now ready forosd use。那么可以进行激活了,激活之前我们查看一下osd的sdb分区:
我们激活data分区就行(如果命令报错就activate sdb):
ceph-deploy osd activate ceph-osd1:/dev/sdb1 ceph-osd2:/dev/sdb1 1 2 接下来,部署管理密钥到所有关联节点。
ceph-deploy admin ceph-admin mon1 ceph-osd1 ceph-osd2 1 2 在所有节点运行下面的命令,改变密钥文件权限。
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring 1 2 Ceph 集群在 Ubuntu 16.04 已经创建完成。
测试集群 看看ceph运行状态:
# 登录到任何节点 ssh mon1 sudo ceph health sudo ceph -s 1 2 3 4 5 截图
配置网关 1,安装ceph对象网关 我们之前配置了client节点,这里我们把gateway配置到client节点,在你的管理节点的工作目录下,给 Ceph 对象网关节点安装Ceph对象所需的软件包:
ceph-deploy install --rgw ceph-client 1 ceph-common 包是它的一个依赖性,所以 ceph-deploy 也将安装这个包。 ceph 的命令行工具就会为管理员准备好。为了让你的 Ceph 对象网关节点成为管理节点,可以在管理节点的工作目录下执行以下命令:
ceph-deploy admin ceph-client 1 2 2,新建网关实例 在你的管理节点的工作目录下,使用命令在 Ceph 对象网关节点上新建一个 Ceph对象网关实例:
ceph-deploy rgw create ceph-client 1 在网关服务成功运行后,你可以使用未经授权的请求来访问端口 7480 ,你可以在局域网里http://{client的ip}:7480,我这里是:http://192.168.40.95:7480/,网页内容如下:
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>anonymous</ID> <DisplayName/> </Owner> <Buckets/> </ListAllMyBucketsResult> 1 2 3 4 5 6 7 Swift 访问实例 1,新建一个 SWIFT 用户 如果你想要使用这种方式访问集群,你需要新建一个 Swift 子用户。创建 Swift 用户包括两个步骤。第一步是创建用户。第二步是创建 secret key。 登录到client主机上,执行上诉两步:
sudo radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full 1 输出如下:
{ "user_id": "testuser", "display_name": "First User", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "testuser:swift", "permissions": "full-control" } ], "keys": [ { "user": "testuser", "access_key": "UYAHFPMQH1HRGB6EG5N5", "secret_key": "DfjtneOIoVMDKsnEpPQ2YWpq3OlqO1FCJPwBYAKe" } ], "swift_keys": [ { "user": "testuser:swift", "secret_key": "0F2SWrRDNLL7skx4XLs9VagENv1XDjyNPTPjIGNw" } ], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "temp_url_keys": [] } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 新建 secret key:
sudo radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret 1 2 输出如下:
{ "user_id": "testuser", "display_name": "First User", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "testuser:swift", "permissions": "full-control" } ], "keys": [ { "user": "testuser", "access_key": "UYAHFPMQH1HRGB6EG5N5", "secret_key": "DfjtneOIoVMDKsnEpPQ2YWpq3OlqO1FCJPwBYAKe" } ], "swift_keys": [ { "user": "testuser:swift", "secret_key": "lYPpmXg7UN2WNBRc3ftsChrruJaAMWuNdFyrygAl" } ], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "temp_url_keys": [] } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 2,测试 SWIFT 访问 在任何局域网机器上安装swift环境:
sudo apt-get install python-setuptools sudo easy_install pip sudo pip install --upgrade setuptools sudo pip install --upgrade python-swiftclient 1 2 3 4 执行下面的命令验证 swift 访问:
swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list 1 我的执行命令如下:
swift -A http://192.168.40.95:7480/auth -U testuser:swift -K 'lYPpmXg7UN2WNBRc3ftsChrruJaAMWuNdFyrygAl' list 1 2 如果成功的话,应该没输出,但是要是失败一定会报错,swift搭好了之后,我写了python脚本,做了测试,测试文档和脚本文件见地址:https://github.com/JakeRed/CephSwiftTest
错误处理 1, 对硬盘进行格式化: # mkfs.xfs /dev/sdb1, 系统显示:
mkfs.xfs error: command not found. 1 因为系统缺少xfs的部分包,安装解决:
apt-get -y install xfsprogs 1 2,安装集群时候,log显示:
Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi' E: Sub-process returned an error code 1 2 系统libappstream3版本老久,解决:
sudo pkill -KILL appstreamcli
wget -P /tmp https://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64.deb https://launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64.deb
sudo dpkg -i /tmp/appstream_0.9.4-1ubuntu1_amd64.deb /tmp/libappstream3_0.9.4-1ubuntu1_amd64.deb 1 2 3 4 5 3,install安装缓慢,前期vpn解决,后期换源:
export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/debian-jewel
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc 1 2 3 4,在执行安装激活的时候报如下错误:
[ceph_deploy][ERROR ] ExecutableNotFound: Could not locate executable 'ceph-volume' make sure it is installed and available on ......... 1 这个是因为ceph-Deploy的版本高了,需要卸载高版本,安装低版本(admin节点):
pip uninstall ceph-deploy
1 2 3 然后下载1.5版本的gz文件,这里我下载的地址: https://pypi.python.org/pypi/ceph-deploy/1.5.39
然后编译执行setup.py文件。
wget https://files.pythonhosted.org/packages/63/59/c2752952b7867faa2d63ba47c47da96e2f43f5124029975b579020df3665/ceph-deploy-1.5.39.tar.gz
tar -zxvf ceph-deploy-1.5.39.tar.gz
python setup.py build
python setup.py install 1 2 3 4 5 6 7 好像如下方法也能解决:
pip install ceph-deploy==1.5.39 1 2 5.问题:
[mlv4-VirtualBox][WARNIN] ceph_disk.main.FilesystemTypeError: Cannot discover filesystem type: device /dev/sdb: Line is truncated: [mlv4-VirtualBox][ERROR ] RuntimeError: command returned non-zero exit status: 1 [ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /dev/sdb 1 2 3 首先查看系统状态,我的情况是prepare 之后,已经activate 状态了,可以通过ceph-deploy disk list ceph-osd1 ceph-osd2 查看状态,如果非activate,可以将sdb的用户权限给ceph:
sudo chown ceph:ceph /dev/sdb, 1 我的问题其实是发现sdb 激活报错,但是 sdb1 也就是 data部分,可以激活,通过:
ceph-deploy osd activate ceph-osd1:/dev/sdb1 ceph-osd2:/dev/sdb1 1 解决问题。
6.问题:
cephuser@mlv1-VirtualBox:~/cluster$ ceph osd tree 2018-04-11 14:41:40.987041 7f1e42a57700 -1 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 2018-04-11 14:41:40.987511 7f1e42a57700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication 2018-04-11 14:41:40.987619 7f1e42a57700 0 librados: client.admin initialization error (2) No such file or directory Error connecting to cluster: ObjectNotFound 1 一般这个问题不会出现,但是出现了最简单的解决方法就是把之前cluster下的key文件(所有文件),cp到每一个节点的/etc/ceph文件夹下解决。
7.gateway搭建之后 auth怎么都不过,没找到具体原因,但重装是个好办法,作用于每一个节点安装:
ceph-deploy purge <ceph-node1> [<ceph-node2>] ceph-deploy purgedata <ceph-node1> [<ceph-node2>] 1 2 8.在删除了所有文件之后,集群还占有空间,没及时释放。
官方的解释说,文件对象删除之后,并不会立刻执行GC机制,这个GC机制是可配置的,配置项如下:
"rgw_gc_max_objs": "521", "rgw_gc_obj_min_wait": "1200", "rgw_gc_processor_max_time": "600", "rgw_gc_processor_period": "600", 1 2 3 4
———————————————— 版权声明:本文为CSDN博主「Must_Do_Kaihong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u012359453/article/details/79978574
|
请发表评论