Ceph
Este documento visa apresentar o sistema de armazenamento definido por
software Ceph, seu processo de configuração, uso e operação.
Atualizado em: 28 de dezembro de 2023
Revision: 2eff6816c1336be443c62ed7695669bf8b94687f
Conteúdo
Lista de Abreviaturas 11
I Teoria e Conceitos Básicos 12
1 Introdução 13
1.1 Componentes básicos . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 CRUSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 Mapas de Metadados . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4 Pools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.5 Placement Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6 Redes do Ceph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.7 Fluxo básico do Ceph . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2 Uso e comandos básicos 37
2.1 ceph-volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
II Formas de implantação 44
3 Formas de implantação 45
4 Deploy manual 46
5 ceph-ansible 63
5.1 Deploy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2 Remoção do cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3 Atualização do cluster . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6 Cephadm 69
6.1 Deploy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
III Dashboard e orchestrator 80
2
7 Dashboard 81
7.1 Chamadas para a API do MGR . . . . . . . . . . . . . . . . . . . . . 83
8 Orchestrator 101
IV Formas de consumo e operações 103
9 Operações com pools 104
10 Operações com blocos 114
11 Operações com OSDs 117
11.1 Detecção e correção de falhas . . . . . . . . . . . . . . . . . . . . . 117
11.2 Detectando OSDs lentos . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.3 Manutenção de OSDs . . . . . . . . . . . . . . . . . . . . . . . . . . 121
12 Operações com crush map e rules 123
12.1 Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12.2 Tipos e Buckets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12.3 Regras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12.4 Afinidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
13 CephFS 135
14 Gerenciando usuários 139
14.1 Gerenciando usuários com acesso ao cluster . . . . . . . . . . . . . 139
14.1.1 Utilizando namespaces . . . . . . . . . . . . . . . . . . . . . . 141
14.2 Gerenciando usuários do dashboard . . . . . . . . . . . . . . . . . . 142
14.3 Gerenciando usuários do RGW . . . . . . . . . . . . . . . . . . . . . 149
15 iSCSI 157
15.1 Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
15.1.1 Clientes Windows . . . . . . . . . . . . . . . . . . . . . . . . . 162
15.1.2 Clientes Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
3
V Conceitos avançados e processos do Ceph 175
16 BlueStore 176
17 Bucket policies 179
17.1 Limitações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
18 Ceph scrub 181
19 Compressão de dados 186
20 Deduplicação de dados 188
21 Snapshots 190
22 Configurações 196
22.1 Configurações importantes . . . . . . . . . . . . . . . . . . . . . . . 197
VI Dicas e truques 199
23 Alterando configurações dinamicamente 200
24 Resolvendo o warning de mon is allowing insecure global_id reclaim 201
25 Alterar redes do Ceph 201
26 Operações básicas com OSDs 202
26.1 Detecção e correção de falhas em OSDs . . . . . . . . . . . . . . . 202
26.2 Detectando OSDs lentos . . . . . . . . . . . . . . . . . . . . . . . . . 204
26.3 Verificando o mapeamento dos OSDs com discos físicos . . . . . . 206
27 Coletando informações sobre falhas 209
28 Boas práticas no uso do RadosGW 210
28.1 Boas práticas na criação de usuários . . . . . . . . . . . . . . . . . 210
28.2 Boas práticas na criação de buckets . . . . . . . . . . . . . . . . . . 210
29 Criar VM usando RBD como backend 211
4
Lista de Figuras
1 Layers básicos do Ceph . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Acesso ao RADOS através do librados . . . . . . . . . . . . . . . . . 15
3 Armazenamento em blocos com KRDB . . . . . . . . . . . . . . . . 18
4 Armazenamento em blocos com librbd . . . . . . . . . . . . . . . . 19
5 Armazenamento em objetos com librgw . . . . . . . . . . . . . . . 20
6 Uso de PGs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7 Redes usadas no Ceph . . . . . . . . . . . . . . . . . . . . . . . . . . 33
8 Fluxo Básico de Escrita . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9 Fluxo Básico de Leitura/Escrita . . . . . . . . . . . . . . . . . . . . . 35
10 Fluxo Básico de Recuperação de Falhas . . . . . . . . . . . . . . . . 36
11 Fluxo Básico de Recuperação de Falhas . . . . . . . . . . . . . . . . 36
12 Acessando o host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
13 Pacotes a serem instalados no host . . . . . . . . . . . . . . . . . . 48
14 Diretório criado no host . . . . . . . . . . . . . . . . . . . . . . . . . 48
15 fsid gerado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
16 Criar chaves do MON . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
17 Criar chaves do admin . . . . . . . . . . . . . . . . . . . . . . . . . . 49
18 Criar chaves dos OSDs . . . . . . . . . . . . . . . . . . . . . . . . . . 50
19 Importar as chaves criadas . . . . . . . . . . . . . . . . . . . . . . . 50
20 Alterar o dono do arquivo . . . . . . . . . . . . . . . . . . . . . . . . 50
21 Criando o mapa do MON . . . . . . . . . . . . . . . . . . . . . . . . 51
22 Criar o diretório padrão do MON . . . . . . . . . . . . . . . . . . . . 51
23 Populando o serviço do MON . . . . . . . . . . . . . . . . . . . . . . 51
24 Arquivo de configuração . . . . . . . . . . . . . . . . . . . . . . . . . 52
25 Habilitando e iniciando o serviço do MON . . . . . . . . . . . . . . 52
26 Configurando o firewall . . . . . . . . . . . . . . . . . . . . . . . . . 52
27 MON rodando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5
28 Criando o diretório padrão do MGR . . . . . . . . . . . . . . . . . . 53
29 Criando a chave de autenticação do MGR . . . . . . . . . . . . . . . 54
30 Ativar o MGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
31 Habilitar os serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
32 Instalando os pacotes do OSD . . . . . . . . . . . . . . . . . . . . . 55
33 Copiando os arquivos necessários para o OSD . . . . . . . . . . . . 56
34 Criando o volume do OSD . . . . . . . . . . . . . . . . . . . . . . . . 57
35 Listar todos os volumes do cluster . . . . . . . . . . . . . . . . . . . 58
36 Ativar o OSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
37 Verificar o estado do cluster . . . . . . . . . . . . . . . . . . . . . . . 59
38 Instalar os pacotes do MDS . . . . . . . . . . . . . . . . . . . . . . . 60
39 Copiar os arquivos necessários para o MDS . . . . . . . . . . . . . 60
40 Criar o diretório padrão do MDS . . . . . . . . . . . . . . . . . . . . 61
41 Criar as chaves de autenticação do MDS . . . . . . . . . . . . . . . 61
42 Importando as chaves do MDS para o cluster . . . . . . . . . . . . . 61
43 Iniciando o MDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
44 Checando o estado do cluster . . . . . . . . . . . . . . . . . . . . . . 62
45 Finalização do deploy do Ceph . . . . . . . . . . . . . . . . . . . . . 67
46 Baixando o script do cephadm . . . . . . . . . . . . . . . . . . . . . 69
47 Tornando o script executável . . . . . . . . . . . . . . . . . . . . . . 69
48 Adicionando os pacotes da versão desejada do Ceph . . . . . . . . 70
49 Verificando a instalação do cephadm . . . . . . . . . . . . . . . . . 70
50 Adicionando o pacote ceph-common . . . . . . . . . . . . . . . . . 70
51 Instalando o cephadm via repositórios da distribuição . . . . . . . 71
52 Realizando o deploy inicial do cluster . . . . . . . . . . . . . . . . . . 73
53 Containeres criados por padrão no bootstrap . . . . . . . . . . . . . 74
54 Informações do cluster criado inicialmente no bootstrap . . . . . . 74
55 Copiando a chave para os demais hosts . . . . . . . . . . . . . . . . 75
56 Adicionando novos hosts . . . . . . . . . . . . . . . . . . . . . . . . . 75
6
57 Listando os novos hosts . . . . . . . . . . . . . . . . . . . . . . . . . 76
58 Adicionando os MONs . . . . . . . . . . . . . . . . . . . . . . . . . . 77
59 Adicionando os OSDs . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
60 Listando os discos disponíveis para usar como OSDs . . . . . . . . 78
61 Criando os OSDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
62 Dashboard do Ceph . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
63 Acessando a API do dashboard . . . . . . . . . . . . . . . . . . . . . 84
64 Documentação da API do manager . . . . . . . . . . . . . . . . . . . 84
65 Habilitar a escrita parcial em um pool erasure code . . . . . . . . . 105
66 Listando pools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
67 Criando novo pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
68 Criando novo pool replicado . . . . . . . . . . . . . . . . . . . . . . 110
69 Criando novo pool com erasure code . . . . . . . . . . . . . . . . . . 111
70 Editando pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
71 Editando pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
72 Criando imagem em pool erasure code . . . . . . . . . . . . . . . . . 114
73 Hierarquia de buckets do Ceph . . . . . . . . . . . . . . . . . . . . . 126
74 Acessando a tela de gerencia de usuários . . . . . . . . . . . . . . . 145
75 Listando todos os usuários . . . . . . . . . . . . . . . . . . . . . . . 145
76 Selecionando usuário específico . . . . . . . . . . . . . . . . . . . . 146
77 Verificando detalhes de um usuário específico . . . . . . . . . . . . 146
78 Criando novo usuário . . . . . . . . . . . . . . . . . . . . . . . . . . 146
79 Especificando detalhes do novo usuário . . . . . . . . . . . . . . . 147
80 Editando usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
81 Editando usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
82 Removendo usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
83 Confirmando remoção do usuário . . . . . . . . . . . . . . . . . . . 149
84 Listando usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
85 Listando detalhes do usuário . . . . . . . . . . . . . . . . . . . . . . 151
7
86 Criando novo usuário . . . . . . . . . . . . . . . . . . . . . . . . . . 151
87 Especificando detalhes do novo usuário . . . . . . . . . . . . . . . 152
88 Selecionando usuário “pai” . . . . . . . . . . . . . . . . . . . . . . . 153
89 Criando subusuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
90 Especificando detalhes do subusuário . . . . . . . . . . . . . . . . . 154
91 Selecionando usuário para editar . . . . . . . . . . . . . . . . . . . 154
92 Editando usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
93 Removendo usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
94 Confirmando remoção do usuário . . . . . . . . . . . . . . . . . . . 156
95 Acessando os targets iSCSI . . . . . . . . . . . . . . . . . . . . . . . . 157
96 Criando novo target iSCSI . . . . . . . . . . . . . . . . . . . . . . . . 158
97 Detalhes na criação de um novo target iSCSI . . . . . . . . . . . . . 158
98 Exemplo de configuração parcial de um novo target iSCSI . . . . . 159
99 Adicionando Initiator . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
100 Target criado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
101 Instalando o Multipath-IO . . . . . . . . . . . . . . . . . . . . . . . . 163
102 Configurações atuais do Multipath-IO . . . . . . . . . . . . . . . . . 163
103 Alterando as configurações do Multipath-IO . . . . . . . . . . . . . 164
104 Habilitando o multipath no programa MPIO . . . . . . . . . . . . . 164
105 Utilizando o programa iSCSI Initiator no Windows . . . . . . . . . . 165
106 Acessando configurações do iSCSI Initiator . . . . . . . . . . . . . . 165
107 Copiando o Initiator Name . . . . . . . . . . . . . . . . . . . . . . . 166
108 Quick Connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
109 Confirme a conexão . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
110 Habilitando o multipath no initiator . . . . . . . . . . . . . . . . . . 168
111 Adicionando um dos gateways na conexão . . . . . . . . . . . . . . 169
112 Acessando devices disponíveis . . . . . . . . . . . . . . . . . . . . . 170
113 Detalhes do device disponível . . . . . . . . . . . . . . . . . . . . . . 171
114 Formatando o novo device . . . . . . . . . . . . . . . . . . . . . . . . 172
8
115 Device formatado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
116 Agora o device pode ser utilizado como um disco qualquer . . . . 173
117 Criando o snapshot do pool . . . . . . . . . . . . . . . . . . . . . . . 190
118 Listando as snapshots do pool . . . . . . . . . . . . . . . . . . . . . . 190
119 Removendo uma snapshot do pool . . . . . . . . . . . . . . . . . . . 191
120 Revertendo o estado do objeto para a snapshot . . . . . . . . . . . 191
121 Criando snapshots da imagem . . . . . . . . . . . . . . . . . . . . . 192
122 Listando as snapshots da imagem . . . . . . . . . . . . . . . . . . . 192
123 Revertendo a snapshot da imagem . . . . . . . . . . . . . . . . . . . 192
124 Removendo a snapshot da imagem . . . . . . . . . . . . . . . . . . 193
125 Detalhes do pool com snapshots sendo removidas . . . . . . . . . 193
126 Detalhes do pool após a snapshot ter sido removida . . . . . . . . 193
127 Removendo todas as snapshots da imagem . . . . . . . . . . . . . 194
128 Protegendo a snapshot . . . . . . . . . . . . . . . . . . . . . . . . . . 194
129 Removendo a proteção da snapshot . . . . . . . . . . . . . . . . . . 195
130 Obtendo o tamanho real da snapshot . . . . . . . . . . . . . . . . . 195
131 Alterando dinamicamente a configuração mon_osd_down_out_i
nterval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
132 Alterando dinamicamente a configuração mon_max_pg_per_osd . 198
133 Obtendo informações sobre a configuração . . . . . . . . . . . . . 200
134 Listando os OSDs e seus hosts . . . . . . . . . . . . . . . . . . . . . 207
135 Link simbólico do OSD . . . . . . . . . . . . . . . . . . . . . . . . . . 207
136 Encontrando o dispositivo físico pelo link simbólico do OSD . . . . 208
137 Listando os OSDs do host e seus discos físicos associados . . . . . 208
138 Criando o pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
139 Criando a imagem RBD . . . . . . . . . . . . . . . . . . . . . . . . . 212
140 Criando o usuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
141 Arquivo secret.xml no host KVM . . . . . . . . . . . . . . . . . . . . 213
142 Definindo a chave no libvirt . . . . . . . . . . . . . . . . . . . . . . . 213
9
143 Definindo a autenticação no secret do libvirt . . . . . . . . . . . . . 213
144 Criando uma VM sem storage . . . . . . . . . . . . . . . . . . . . . . 214
145 Criando uma VM normalmente . . . . . . . . . . . . . . . . . . . . . 214
146 Editando o XML da VM . . . . . . . . . . . . . . . . . . . . . . . . . . 215
147 Iniciando a instalação da VM . . . . . . . . . . . . . . . . . . . . . . 216
148 Continuando a instalação da VM . . . . . . . . . . . . . . . . . . . . 217
149 Mapeando a imagem localmente . . . . . . . . . . . . . . . . . . . . 217
150 Criando a VM usando a imagem mapeada localmente . . . . . . . 218
151 Finalizar a criação da VM usando a imagem mapeada localmente 218
10
Lista de Abreviaturas
CephFS Ceph Filesystem
CLI Command Line Interface
CRUSH Controlled Replication Under Scalable
Hashing ou Replicação Controlada Sobre
Hash Escalável
MDS Ceph Metadata Server
MGR Ceph Manager
MON Ceph Monitor
OSD Object Storage Devices
PG Placement Group
RADOS Reliable Autonomic Distributed Object Store
RBD Rados Block Device
RGW RADOS Gateway
S3 Simple Storage System
11
Parte I
Teoria e Conceitos Básicos
O presente capítulo se destina a descrever a teoria e conceitos básicos sobre o
sistema de armazenamento definido por software SDS Ceph.
12
1. Introdução
Ceph é um sistema de armazenamento definido por software open-source,
criado por Sage Weil em 2007 em sua tese de doutorado. O sistema Ceph visa
disponibilizar armazenamento distribuído com alta escalabilidade, confiabili-
dade e desempenho, sem a necessidade de hardware ou sistemas de rede es-
pecializados.
Sistemas Ceph possuem funções de autogerenciamento e recuperação para
automatizar o gerenciamento dos dados, como distribuição, redistribuição e
replicação dos dados, assim como detecção e recuperação de falhas. O sistema
não possui um ponto único de falha, uma vez que os dados são distribuídos e
gerenciados por agentes autônomos que estão em constante interação.
O Ceph possui interfaces que suportam três tipos de modos de dados, cha-
mados de gateways, podendo ser arquivos, blocos ou objetos. De forma breve,
o armazenamento usando arquivos organiza os dados em uma hierarquia de
arquivos e diretórios (como um sistema de arquivos comum). O armazena-
mento de blocos é utilizado para entregar blocos de armazenamento via rede
através do protocolo RBD. O armazenamento de objetos trabalha os dados
como objetos com o padrão S3.
Aqui é importante ressaltar que os gateways do Ceph emulam essas três
formas de armazenamento, porém, internamente, o Ceph sempre armazena
os dados no formato de objetos
1
.).
1.1. Componentes básicos
A Figura 1 exibe a estrutura básica do Ceph.
1
Não confundir com objetos do protocolo S3, aqui estamos falando da implementação pró-
pria do Ceph de objetos, chamados de Rados Objects
13