最近几天学习通过ceph-ansible安装ceph,为了解ceph的最新特性,选择了安装ceph的最新稳定版octopus。结果安装过程没有预想的顺利,遇到一些坑,这里记录并分享一下。

环境说明

本次是通过ceph-ansible来安装ceph,操作系统和ceph-ansible的版本如下:

  • 操作系统:centos 7.9.2009
  • ceph-ansible: stable-5.0分支

本次安装使用3台服务器,每台2块磁盘、2张网卡,主要安装ceph核心组件:monitor、osd。

服务器的配置如下:

hostname 网卡IP地址 部署组件 资源配置
ceph1 eth0: 10.211.55.120
eth1: 192.168.55.101
mon、osd 2核2G 3块磁盘
ceph2 eth0: 10.211.55.121
eth1: 192.168.55.102
mon、osd 2核2G 3块磁盘
ceph3 eth0: 10.211.55.122
eth1: 192.168.55.103
mon、osd 2核2G 3块磁盘

安装步骤

服务器初始化

1、安装基础软件包

1
yum install -y net-tools rsync vim git python-pip python-netaddr

2、修改系统配置

  • 禁用selinux
1
2
3
4
5
6
7
# disable selinux
setenforce 0
sed -i -e 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

# stop firewalld
systemctl stop firewalld
systemctl disable firewalld
  • 配置DNS服务器,禁用NetworkManager
1
2
3
4
5
6
7
8
# disable network manager
systemctl stop NetworkManager
systemctl disable NetworkManager

cat > /etc/resolv.conf << DNS
nameserver 114.114.114.114
nameserver 223.5.5.5
DNS
  • 设置系统时区
1
2
# set timezone
timedatectl set-timezone Asia/Shanghai
  • 配置/etc/hosts文件
1
2
3
4
5
6
7
# setup hosts file
cat > /etc/hosts << HOSTS
127.0.0.1  localhost
192.168.55.101 ceph1 ceph1
192.168.55.102 ceph2 ceph2
192.168.55.103 ceph3 ceph3
HOSTS

3、配置ssh无密码访问

修改三台服务器的ssh配置,如下:

1
2
3
4
5
6
sed -e 's/^#PermitRootLogin .*$/PermitRootLogin yes/g' \
    -e 's/^PasswordAuthentication .*$/PasswordAuthentication yes/g' \
    -e 's/^#UseDNS .*/UseDNS no/g' \
    -e 's/^GSSAPIAuthentication .*/GSSAPIAuthentication no/g' \
    -i /etc/ssh/sshd_config
systemctl restart sshd

接着生成ssh密钥对,并拷贝到三台服务器上,如下:

1
2
3
4
5
6
7
# 生成密钥对
mkdir .ssh
ssh-keygen -t rsa -P '' -f .ssh/id_rsa
cp .ssh/id_rsa.pub .ssh/authorized_keys
scp -r .ssh root@192.168.55.101:/root/
scp -r .ssh root@192.168.55.102:/root/
scp -r .ssh root@192.168.55.103:/root/

最后,为减少安装耗时,可以将yum的源配置为国内常用的,如aliyun、163的源。

安装并配置ansible

使用ceph-ansible安装ceph时,经常遇到的一个问题是ansible的版本和ceph-ansible要求的版本不一致。 为了解决这个问题,我先将ceph-ansible clone到本地,然后通过pip来安装ansible,而不是yum进行安装。

1
2
3
4
5
git clone https://github.com/ceph/ceph-ansible.git
cd ceph-ansible
git checkout stable-5.0  # stable-5.0对应的ceph版本是octopus
# 然后安装ansible
pip3 install -r requirements.txt

注意:上面使用的是pip3,而不是pip;使用pip后面会遇到问题

为了加快安装速度,可以使用国内的pypi源。下面以aliyun的pypi为例,说明下配置。具体如下:

1
2
3
4
5
6
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF

通过上面的步骤安装好了ansible,接下来就需要对ansible进行配置了。

  • 指定安装部署的服务器信息
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# cat ceph-hosts
[mons]
ceph1
ceph2
ceph3

[osds]
ceph1
ceph2
ceph3
  • 配置主机变量
 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
44
45
46
47
48
# cat group_vars/all.yml

###########
# PACKAGE #
###########
ceph_origin: repository
ceph_repository: community
ceph_stable_release: octopus
ceph_mirror: http://mirrors.163.com/ceph
ceph_stable_key: http://mirrors.163.com/ceph/keys/release.asc
ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"

####################
# GLOBAL CONFIGS   #
####################
cephx: true
dashboard_enabled: false

####################
# MONITOR OPTIONS  #
####################
monitor_interface: eth0
monitor_address: 0.0.0.0
monitor_address_block: 10.211.55.0/24


####################
# OSD options      #
####################
journal_size: 4096
public_network: 10.211.55.0/24
cluster_network: 192.168.55.0/24
osd_mkfs_type: xfs
#osd_mkfs_options_xfs: -f -i size=2048
#osd_mount_options_xfs: noatime,largeio,inode64,swalloc
osd_objectstore: filestore

osd_scenario: collocated
devices: ['/dev/sdb', '/dev/sdc']
# set if scenario is non-collocated
##dedicated_devices: [ '/dev/sda', '/dev/sdb']

####################
# Override configs #
####################
ceph_conf_overrides:
   mon:
     mon_allow_pool_delete: true

上面的配置参数可以根据实际进行调整。

  • 配置playbook

playbook的配置比较简单,直接copy一份即可。

1
cp site.yml.sample site.yml

部署ceph

配置完成后,开始跑ansible进行部署。

1
ansible-playbook -v -i ceph-hosts site.yml

部署的过程中,可能会遇到问题,我遇到的第一个问题是ansible执行过程中报错,信息如下:

1
pkg_resources.DistributionNotFound: The 'six' distribution was not found and is required by ceph

经过一番搜索,在ceph的邮件中找到了解决办法,原来是有些包没有安装, 执行下面的命令进行修复。

1
yum -y  install python36-six.noarch  python36-PyYAML.x86_64,

修复后接着执行。ceph-ansible顺利执行完成。那我们来看看ceph的状态吧。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
ceph -s

cluster:
  id:     a61d6af4-4048-42b4-8b93-6bc94b6066de
  health: HEALTH_WARN
          Module 'restful' has failed dependency: No module named 'pecan'

services:
  mon: 3 daemons, quorum ceph2,ceph1,ceph3 (age 100s)
  mgr: ceph2(active, since 13m), standbys: ceph1, ceph3
  osd: 6 osds: 6 up (since 14s), 6 in (since 4m)

data:
  pools:   1 pools, 1 pgs
  objects: 0 objects, 0 B
  usage:   645 MiB used, 353 GiB / 354 GiB avail
  pgs:     1 active+clean

ceph的状态并不是我们期待的HEALTH_OK,从提示信息看,应该是python库中缺少了pecan模块。 于是接着搜索,再次找到了修复方法,执行如下的命令修复。

1
2
3
pip3 install pecan werkzeug

systemctl restart ceph-mon.target

通过vagrant一键生成三台虚拟机,并通过脚本完成ceph的部署。相关的脚本详见github

总体上来说通过ceph-ansible部署ceph还是比较顺利。安装完成后,本准备再安装下dashboard,安装过程中发现缺少包,暂时作罢。 ceph中由于部分功能模块是通过python编写的,python模块依赖较多,再加上社区在打包方面的投入估计也比较有限,较新版本的安装还是容易遇到问题。还是需要大家共同努力,众人拾柴火焰高。

ceph octopus初体验

初步体验发现,ceph octopus版本默认会启用pg autoscaler,会自动调整系统的pg。我创建了一个测试的pool,pg设置为128。我发现没跑几分钟,自动给我调整成32了。