最近几天学习通过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、修改系统配置
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
|
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的配置比较简单,直接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了。