1 准备实验环境
1.1 基础环境
- 操作系统:CentOS 7.6, 需要 4 个节点(1 monitor + 3 osd node)或者 6 个节点(3 monitor +3 osd node), 当然 monitor 也可以部署在 osd node 上。
- ceph版本:Luminous(12.2.11),使用 centos 官方 storage repo 里的版本
- ansible 版本: 2.6.16 (可使用 virtualenv 和 pip 安装, 版本必须与 ceph-ansible 要求匹配)
- ceph-ansible 版本: 3.2.15 (直接在 github 上 下载相应的版本)
- 集群网络(cluster network): 192.168.122.0/24, 用于集群内数据同步及存储管理
- 服务网络(public network) : 10.0.122.0/24, 用于客户端读写数据
1.2 准备节点
准备 7 ceph个集群节点,3个 monitor 节点,3 个 osd 节点,1 个 admin 节点,每个节点双网卡,ip配置如下
节点 cluster ip public ip
--------------------------------------
mon-11 192.168.122.11 10.0.122.11
mon-12 192.168.122.12 10.0.122.12
mon-13 192.168.122.13 10.0.122.13
osd-21 192.168.122.21 10.0.122.21
osd-22 192.168.122.22 10.0.122.22
osd-23 192.168.122.23 10.0.122.23
admin-node 192.168.122.100 10.0.122.100
--------------------------------------
admin-node 做部署节点,安装 ansible 和 ceph-ansible
在 admin-node 节点上配置 /etc/hosts
192.168.122.11 mon-11
192.168.122.12 mon-12
192.168.122.13 mon-13
192.168.122.21 osd-21
192.168.122.22 osd-22
192.168.122.23 osd-23
在 admin-node 配置与 6 个ceph节点的 ssh 免密登录,例如:
# ssh-keygen
# ssh-copy-id root@mon-11
禁用 firewalld
# systemctl stop firewalld
# systemctl disable firewalld
禁用 selinux,重使其生效
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# reboot
1.3 准备磁盘
以下是一个 osd 节点上的磁盘列表, 其中 vda 是操作系统所在的盘。
sda 8:0 0 100G 0 disk
sdb 8:16 0 100G 0 disk
sdc 8:32 0 100G 0 disk
sdd 8:48 0 20G 0 disk
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 39G 0 part
├─centos-root 253:0 0 35G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
ceph luminous 已经支持 bluestore 作为后端,但是我们这次还是使用 filestore。 其中 sda、sdb、sdc 作为 osd 盘,每块盘 100G, sdd 做 journal 盘,大小 20G
1.4 获取软件包
所有的集群节点上上,安装如下软件:
# yum install centos-release-luminous-* epel-release -y
安装完成以后,刷新源索引
# yum repolist
1.5 获取ansible 和 ceph-ansible
在 admin-node 上进行如下操作
安装 anible
$ pip install ansible==2.6.16
获取 ceph-ansible 并解压
$ git clone https://github.com/ceph/ceph-ansible.git
或者
$ wget https://codeload.github.com/ceph/ceph-ansible/zip/v3.2.15
创建 ansible_hosts 文件, 复制到 ceph-ansible 文件夹
[ceph:children]
mons
osds
[mons]
mon-11
mon-12
mon-13
[osds]
osd-21
osd-22
osd-23
2 配置 ceph-ansible
打开解压后的ceph-ansible
# cp site.yml.sample site.yml
编辑 site.yml 文件, 更改开头的目标节点组,只保留 mons 和 osds
---
# Defines deployment design and assigns role to server groups
- hosts:
- mons
- osds
# - mdss
# - agents
# - mgrs
# - rgws
# - nfss
# - restapis
# - rbdmirrors
# - clients
# - iscsigws
# - iscsi-gws # for backward compatibility only!
打开 group_vars 目录, 拷贝模板文件
# cd group_vars
# cp all.yml.sample all.yml
# cp mons.yml.sample mons.yml
# cp osds.yml.sample osds.yml
编辑 all.yml 文件, 我只做了如下更改,也许不用改这么多。另外 monitor 节点必须用 public ip,因为要面向客户端提供服务。
# Inventory host group variables
mon_group_name: mons
osd_group_name: osds
############
# PACKAGES #
############
centos_package_dependencies:
- python-pycurl
- epel-release
- python-setuptools
- libselinux-python
upgrade_ceph_packages: False
#ceph_use_distro_backports: false # DEBIAN ONLY
###########
# INSTALL #
###########
#ceph_repository_type: dummy
ceph_origin: distro
## Monitor options
monitor_interface: eth1
#monitor_address: 0.0.0.0
monitor_address_block: 10.0.122.0/24
## OSD options
journal_size: 3072 # OSD journal size in MB
#block_db_size: -1 # block db size in bytes for the ceph-volume lvm batch. -1 means use the default of 'as big as possible'.
public_network: 10.0.122.0/24
cluster_network: 192.168.122.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
编辑 osds.yml 文件,里面有几种情景,我们用的是情景二 non-collocated,也就是日志和数据存放在不同的磁盘上。
---
# Variables here are applicable to all host groups NOT roles
osd_scenario: non-collocated
devices:
- /dev/sda
- /dev/sdb
- /dev/sdc
dedicated_devices:
- /dev/sdd
- /dev/sdd
- /dev/sdd
# 这样配置的后果就是,/dev/sdd 上会新生成三个分区 /dev/sdd1、/dev/sdd2、/dev/sdd3,
# 分别作为 /dev/sda, /dev/sdb, /dev/sdc 的journal 分区。
因为我们只是简单的实验集群,所以不需要对 mons.yml 做特殊配置,保持默认就可以了。
3 开始部署
退回到 ceph-ansible 目录,开始部署,等待部署完成。
# ansible-playbook site.yml -u root -i ./ansible_hosts
部署完成后,登录一个 mon节点, 查看集群状态和 osd daemon 分布
# ceph -w
# ceph osd tree