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
osd_group_name: osds
mds_group_name: mdss
client_group_name: clients
mgr_group_name: mgrs
configure_firewall: false
ceph_origin: repository
ceph_repository: community
ceph_mirror: http://mirrors.163.com/ceph ceph_stable_release: octopus
ceph_version_num: 15 ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"
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
osd_objectstore: bluestore
osd_auto_discovery: true
dashboard_enabled: false
|
复制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"
|
指明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设备自动发现的时候,将这些设备排除在外。
|