ceph-ansible 5.0

ceph-ansible 5.0

优势:需要部署的节点数量越多,ceph-ansible的效率就越高

版本信息:

ceph-ansible:5.0.5 ceph 15.2.11

os:centos 7.9.2009

kernel version : 5.4.116-1.el7.elrepo

集群拓扑
ceph-admin 192.168.200.120 192.168.100.120
ceph-node01 192.168.200.121 192.168.100.121
ceph-node02 192.168.200.122 192.168.100.122
ceph-node03 192.168.200.123 192.168.100.123
ceph-node04 lb01 192.168.200.124 192.168.100.124
ceph-node05 lb02 192.168.200.125 192.168.100.125
ceph-admin 192.168.200.126 192.168.100.126
Prerequisites
  • 本文档适用于创建具有mon、mgr、mds、osds四类进程的Ceph集群,如需启用nfs-ganesha、rgw、rbd-mirror等其他功能的Ceph集群,请参阅ceph-ansible github仓库中的示例文件说明,或在集群创建完成之后,手动进行配置。
  • ceph-ansible项目的版本号与Ceph版本有依赖关系,ceph-ansible 4.0用于创建Ceph N版本的集群,ceph-ansible 5.0用于创建Ceph O版的集群,以此类推。
  • 部分Ceph功能依赖于新版内核的特性,在部署之前请将内核升级至最新的Long Term版本,升级内核请参阅另外一篇文档
  • 在ceph-admin节点上,配置好对其他所有节点的免密登录,所有节点关闭防火墙和SELinux
  • 所有节点配置好EPEL源

在ceph-admin节点上安装ansible,admin节点可以是任意能连接到目标集群的节点,并且按照ansible的要求,需要配置免密登录至目标集群的所有节点。

1
2
3
4
5
6
yum install ansible python-netaddr unzip PyYAMLpython36-six.noarch  python36-PyYAML.x86_64 -y
# python-netaddr是一个用来处理IP地址的Python模块
yum update -y
# 在7.7上 ,ceph-volume命令会出错


在所有节点上安装如下Python模块

1
2
3
4
5
yum install python3-pip -y
pip3 install pecan
pip3 install werkzeug
pip3 install pyyaml
# 在所有mgr节点上安装必须的python 3 模块

在ceph-admin节点上获取ceph-ansible项目文件

1
2
3
4
wget https://github.com/ceph/ceph-ansible/archive/refs/tags/v5.0.5.zip
# 可能需要科学上网,或者使用迅雷下载
unzip ceph-ansible-5.0.5.zip -d /usr/local/
cd /usr/local/ceph-ansible-5.0.5

group_vars目录

Ceph集群的配置将通过使用ceph-ansible提供的ansible变量来设置。所有这些选项及其默认值都定义在ceph-ansible项目根部的group_vars/目录中。在group_vars/目录里面有很多Ansible配置文件的样本,通过文件名与每种Ceph守护进程相关。例如,osds.yml.sample包含了OSD守护进程的所有默认配置。all.yml.sample文件是一个特殊的group_vars文件,适用于集群中的所有主机。

all.yml文件中定义的配置,作用于集群中的所有进程类型上,在安装过程中,所有进程的安装步骤都可以使用

其他类似于osd.yml的文件,只适用于特定的进程组,只作用于特定进程的安装过程;例如osd.yml只适用于与osd相关的配置

重点来看all.yml文件中的配置

all.yml文件

cd至group_vars目录

1
cd /usr/local/ceph-ansible-5.0.5/group_vars/

group_vars目录下创建all.yml文件,内容如下

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
mon_group_name: mons
# 在Inventory文件(ansible的hosts文件),要安装mon组件的主机是在哪个资产组内,上面这个例子指的就是在[mons]组内
# 以下同理
osd_group_name: osds
# rgw_group_name: rgws
mds_group_name: mdss
# nfs_group_name: nfss
# rbdmirror_group_name: rbdmirrors
client_group_name: clients
# iscsi_gw_group_name: iscsigws
mgr_group_name: mgrs
# rgwloadbalancer_group_name: rgwloadbalancers
configure_firewall: false
# 是否自动配置防火墙,如果设置为true,ceph-ansible会自动去配置集群内组件相互通信所需的防火墙规则
# 这一步建议手动做
ceph_origin: repository
# 自动配置源
# 设置为distro表示不自动配置源
# 设置为local表示从本地计算机——即ceph-admin节点去复制ceph二进制文件分发至其他节点
ceph_repository: community
# 表示使用ceph社区的版本,ceph-ansible可以安装rhcs等厂家发行的版本
# 此处只安装社区的版本,如果指定了此参数,需要设置ceph_stable_release和cepph_mirror
ceph_mirror: http://mirrors.163.com/ceph
ceph_stable_release: octopus
# yum源如果提示404,编辑下面这个文件定制yum源baseurl的路径
# 编辑此文件/usr/local/ceph-ansible-5.0.5/roles/ceph-common/tasks/installs/redhat_community_repository.yml

# 删除ceph_stable_release这个变量,将自定义路径输入,效果具体如下:
# baseurl: "{{ ceph_mirror }}/rpm-15.2.9/el{{ ansible_distribution_major_version }}/noarch"
#

# 要部署哪个ceph版本
ceph_version_num: 15
ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"
# 两个{{}}表示使用ansible变量
ceph_stable_key: http://mirrors.163.com/ceph/keys/release.asc
ip_version: ipv4
monitor_interface: ens33
public_network: 192.168.200.0/24
cluster_network: 192.168.100.0/24
monitor_address_block: 192.168.200.0/24
cephx: true
copy_admin_key: true
# 将'copy_admin_key'设置为'true'会将管理员密钥复制到[clients]主机中的/etc/ceph/目录下

# ceph_iscsi_config_dev: true
# nfs_ganesha_stable: true
# nfs
# nfs_file_gw: true
# 是否启用通过NFS的形式来访问CephFS的功能,将此项设置为true依赖于mds角色,即必须启用mds安装
# nfs_obj_gw: true
# 是否启用通过NFS的形式来访问RGW的功能,将此项设置为true依赖于rgws角色,即必须启用rgw安装

# 自定义的ceph配置选项可以写在这里
# ceph_conf_overrides:
# global:
# osd_pool_default_size: 3
# mon:
# mon_allow_pool_delete: true


# osd相关的配置
osd_objectstore: bluestore
# filestore bluestore SeaStore
# SeaStore面向全NVMe场景设计
# 对象存储引擎,如有必要可以将其更改为filestore
osd_auto_discovery: true
# 是否启用OSD设备自动发现,如果这个选项设置为true,将不再需要填写osds.yml中的device设置
# 因为ceph-ansible将会使用ansible_devices发现的所有可用的块设备
# 不必担心会将系统盘也给做成OSD,ceph-ansible将检测所有块设备,已有分区表的设备将不会被使用
# 与之相关的还有另外一个配置项osd_auto_discovery_exclude,用于设置一个规则来排除指定的设备
# 例如rbd*表示所有rbd开头的设备将不会被自动创建为osd


dashboard_enabled: false
# 这一步如果不设置为false,默认启动的grafana容器将会到github下载必须的json文件,需科学上网
#
# rgw相关的配置
# radosgw_frontend_type: beast
# 使用什么实现来作为RGW的前端,beast表示使用Boost.Beast库来作为前端web服务器,以及使用
# Boost.Asio库来进行异步网络i/o,此实现于Mimic版本中引入
# 当前共有两个实现,beast和civetweb
# 端口默认是8080

# radosgw_interface: ens33
# radosgw_address_block: 192.168.200.0/24

#
# radosgw_civetweb_port: 8080
# 设置civetweb的端口

# cephx,是否启用cephx认证功能


# dashboard
# dashboard_enabled: false
# dashboard_protocol: http
# dashboard_admin_user_ro: false
# dashboard_port: 8443
# dashboard_admin_user: admin
# dashboard_admin_password: 123456
# grafana_admin_user: admin
# grafana_admin_password: 123456
# dashboard_grafana_api_no_ssl_verify: True
# dashboard_rgw_api_user_id: ceph-dashboard
# dashboard_rgw_api_no_ssl_verify: True
# prometheus和grafana
# docker_pull_timeout: 600s
# grafana_datasource: Dashboard
# grafana_dashboards_path: "/etc/grafana/dashboards/ceph-dashboard"
# grafana_dashboard_version: nautilus
# grafana_dashboard_files:
# - ceph-cluster.json
# - cephfs-overview.json
# - host-details.json
# - hosts-overview.json
# - osd-device-details.json
# - osds-overview.json
# - pool-detail.json
# - pool-overview.json
# - radosgw-detail.json
# - radosgw-overview.json
# - rbd-overview.json
# grafana_plugins:
# - vonage-status-panel
# - grafana-piechart-panel
# node_exporter_container_image: "prom/node-exporter:v0.17.0"
# node_exporter_port: 9100
# grafana_container_image: "grafana/grafana:5.4.3"
# grafana_allow_embedding: True
# grafana_port: 3000
# prometheus_container_image: "prom/prometheus:v2.7.2"
# prometheus_data_dir: /var/lib/prometheus
# prometheus_conf_dir: /etc/prometheus
# prometheus_port: 9092
# alertmanager_container_image: "prom/alertmanager:v0.16.2"
# alertmanager_container_memory: 4
# alertmanager_data_dir: /var/lib/alertmanager
# alertmanager_conf_dir: /etc/alertmanager
# alertmanager_port: 9093

复制mon、osd、mgr、mds的yml文件

1
2
# 在group_vars目录下执行
for i in {mons,osds,mgrs,mdss};do cp $i.yml.sample $i.yml;done

group_vars的上一级目录,即ceph-ansible项目的根目录下,新建一个hosts文件,作为ansible的资产清单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mons]
192.168.200.121
192.168.200.122
192.168.200.123
[mgrs]
192.168.200.121
192.168.200.122
192.168.200.123
[mdss]
192.168.200.121
192.168.200.122
192.168.200.123
[osds]
192.168.200.121
192.168.200.122
192.168.200.123
192.168.200.124
192.168.200.125
[clients]
192.168.200.126

如果不需要单独指明db和wal设备,那么现在已经开始部署了,如果需要,请参照下文的参考。

在ceph-ansible的根目录下,执行如下命令,开始部署过程

1
2
cp site.yml.sample site.yml
ansible-playbook -i hosts site.yml

单独指明DB和WAL设备

指明block-db设备

编辑group_vars/osds.yml,添加

1
2
3
dedicated_devices:
- /dev/sdg
# 会自动平均分配这个设备上的所有空间给host上的osd

编辑group_vars/all.yml,添加

1
2
osd_auto_discovery_exclude: "dm-*|loop*|md*|rbd*|sdg"
# 如果有多个设备,在此处全部写上,表示在做osd设备自动发现的时候,将这些设备排除在外。
指明block-wal设备
1
2
bluestore_wal_devices:
- /dev/nvme0n1

编辑group_vars/all.yml,添加

1
2
osd_auto_discovery_exclude: "dm-*|loop*|md*|rbd*|nvme0n1"
# 如果有多个设备,在此处全部写上,表示在做osd设备自动发现的时候,将这些设备排除在外。

ceph-ansible 5.0
http://anximin.github.io/2021/07/23/Linux_ceph_ansible_5.0/
作者
Sylar
发布于
2021年7月23日
许可协议