Commit 5e03c61acad1f5f219ac3cc386dd67707d0cc503
1 parent
68e8e4bc
Exists in
master
Docs
Showing
5 changed files
with
206 additions
and
206 deletions
Show diff stats
README.md
1 | # SEI | 1 | # SEI |
2 | 2 | ||
3 | [Conteiner](#conteiner-de-aplicacao-para-o-sei) | 3 | [Conteiner](#conteiner-de-aplicacao-para-o-sei) |
4 | + | ||
4 | [Base de Dados e Backup](#base-de-dados-do-seimp) | 5 | [Base de Dados e Backup](#base-de-dados-do-seimp) |
5 | 6 | ||
6 | 7 | ||
@@ -27,12 +28,11 @@ Os módulos são (e devem estar respectivamente com o seguinte nome): | @@ -27,12 +28,11 @@ Os módulos são (e devem estar respectivamente com o seguinte nome): | ||
27 | Por favor sugerir correções e melhorias. | 28 | Por favor sugerir correções e melhorias. |
28 | 29 | ||
29 | 30 | ||
30 | - | ||
31 | - | ||
32 | ## Base de Dados do SEIMP | 31 | ## Base de Dados do SEIMP |
33 | -[Banco de Dados](sei-banco) | 32 | +[Banco de Dados](docs/sei-banco.md) |
34 | 33 | ||
35 | 34 | ||
36 | ## Backup do SEIMP | 35 | ## Backup do SEIMP |
37 | 36 | ||
38 | -[Política de Backup](sei-politica-backup) | 37 | +[Política de Backup](docs/sei-politica-backup.md) |
38 | + |
@@ -0,0 +1,182 @@ | @@ -0,0 +1,182 @@ | ||
1 | +# Banco de Dados | ||
2 | + | ||
3 | +A base de dados do SEI deve ser vista a partir da união do banco de dados e dos arquivos anexos que ficam em filesystem. | ||
4 | + | ||
5 | +Neste documento vamos denominar: | ||
6 | +- bd: banco de dados do SEI em mysql | ||
7 | +- arquivos anexos: arquivos de conteúdo diverso, binário ou não, que o SEI permite que seja feito o upload por seus usuários | ||
8 | +- base de dados: união entre bd e arquivos anexos | ||
9 | + | ||
10 | +O BD possui diversas informações estruturais e funcionais do sistema SEI, enquanto os arquivos anexos são documentos diversos que são subidos até a aplicação via upload. | ||
11 | + | ||
12 | + | ||
13 | +## Requisitos | ||
14 | + | ||
15 | +Tanto o banco de dados quanto o filesystem com os arquivos anexos possuem os seguintes requisitos: | ||
16 | + | ||
17 | +- não é permitido, em caso de crash ou problemas, a perda de informações | ||
18 | +- a principal ação deve estar na guarda e backup dos dados e logs binários do banco e arquivos anexos para garantir perda zero de informação | ||
19 | +- a segunda principal ação deve estar relacionada a disponibilidade do serviço | ||
20 | +- velocidade aceitável de leitura e escrita para a carga requerida do Ministério do Planejamento | ||
21 | + * 300 transações / segundo | ||
22 | + * 1.4 GB de crescimento / dia do BD | ||
23 | + * 11 GB / dia de crescimento da base de dados | ||
24 | +- deve-se permitir, em caso de necessidade, recuperar os dados na forma point in time recovery, podendo voltar até 1 ano atrás da posição atual | ||
25 | +- portanto os logs binários devem ser mantidos pelo período de pelo menos 1 ano | ||
26 | + | ||
27 | +## Profissional Necessário | ||
28 | + | ||
29 | +O profissional necessário para manter a solução deverá ter os conhecimentos em mysql server 5.7. | ||
30 | + | ||
31 | +Dentre as suas competências deverão constar, no mínimo: | ||
32 | +- instalação / sustentação de mysql server 5.7 em ambiente produtivo | ||
33 | +- implementação de réplica em log binário (master/slave) | ||
34 | +- tuning da base de dados de acordo com o ambiente e expectativas do cliente | ||
35 | +- recuperação de desastres do mysql server | ||
36 | +- point in time recovery de base de dados | ||
37 | +- geração e otimização de dumps | ||
38 | +- análise de logs com relatórios objetivos apontando gargalos e melhorias na infraestrutura | ||
39 | +- médio conhecimento em linux | ||
40 | + | ||
41 | +## Necessidades Específicas para a Base do SEI | ||
42 | + | ||
43 | +O profissional responsável pela base deverá constantemente: | ||
44 | +- garantir que a réplica esteja há menos de 5 segundos do master | ||
45 | +- garantir que a rotina de rsync dos arquivos anexos esteja a menos de 3 minutos dos arquivos de produção | ||
46 | +- garantir a disponibilidade de 99% da base de dados master (considerando dias úteis) | ||
47 | +- informar a DTI sobre qualquer erro ou situação que possa comprometer o ambiente | ||
48 | +- informar imediatamente a DTI sobre qualquer indisponibilidade ou lentidão | ||
49 | + | ||
50 | + | ||
51 | +## Tecnologias | ||
52 | + | ||
53 | +Atualmente o banco de dados é mysql 5.7 com uma réplica também em mysql 5.7. | ||
54 | +Para os arquivos anexos, estamos usando Storage - EMC, com NFS ativado para leitura e escrita dos dados | ||
55 | + | ||
56 | +## Arquitetura | ||
57 | + | ||
58 | +- Arquivos Anexos: | ||
59 | + * 192.x.x.x | ||
60 | + * diretório NFS: /SEI_PROD_xx | ||
61 | + | ||
62 | +- Mysql Master | ||
63 | + * 192.x.x.x | ||
64 | + * servidor físico com 24 cores e 64GB | ||
65 | + * servidor compartilhado com o PDCMP | ||
66 | + * data do mysql: /dados_banco/mysql/data | ||
67 | + * logs binários do mysql: /dados_banco/mysql/binlog | ||
68 | + | ||
69 | +- Mysql Slave - Virtual | ||
70 | + * 192.x.x.x | ||
71 | + * servidor virtual 8 cores e 11GB | ||
72 | + * data do mysql: /dados_banco/mysql/data | ||
73 | + * logs binários do mysql: /dados_banco/mysql/binlog | ||
74 | + | ||
75 | + | ||
76 | +- Mysql Slave - Física | ||
77 | + * 192.x.x.x | ||
78 | + * servidor físico 8 cores e 32GB | ||
79 | + * data do mysql: /replica_bd/mysql/data | ||
80 | + * logs binários do mysql: /replica_bd/mysql/binlog | ||
81 | + * diretório para backup - dumps: /replica_bd/backup/dumps (aponta para Storage VNX) | ||
82 | + * diretório para backup - logs binários: /replica_bd/backup/logbinarios (aponta para Storage VNX) | ||
83 | + | ||
84 | + | ||
85 | +## Rotinas | ||
86 | + | ||
87 | +Para garantir a guarda das informações, inclusive a reconstrução da base de dados em caso de crash, foram implementadas as seguintes ações: | ||
88 | + | ||
89 | +- réplica nativa do mysql usando um master e um slave | ||
90 | +- logs binários independentes do master e slave | ||
91 | +- para os arquivos anexos há quatro rsync rodando, replicando todo o filesystem do diretório de origem para o diretório de backup | ||
92 | +- toda terça e sábado roda um crontab que tira o dump da réplica e salva no diretório de backup | ||
93 | + | ||
94 | +### Rotina dos arquivos anexos | ||
95 | + | ||
96 | +- crontab agendado no root | ||
97 | + * crontab que roda de 5 em 5 segundos copiando todos os arquivos anexos do diretório de prododução para os diretórios de backup (note o flock para impedir a execução ao mesmo tempo de várias instâncias da rotina) | ||
98 | + | ||
99 | +``` | ||
100 | +0 0,7,21 * * * flock -n lock_file_prod -c "/root/scripts/copia_prod_replica.sh" | ||
101 | +0 1,8,22 * * * flock -n lock_file_prod_to_ibm -c "/root/scripts/copia_prod_to_ibm.sh" | ||
102 | +* * * * * flock -n lock_file_prod_dodia -c "/root/scripts/copia_prod_replica_dodia.sh" | ||
103 | +* * * * * flock -n lock_file_prod_to_ibm_dodia -c "/root/scripts/copia_prod_to_ibm_dodia.sh" | ||
104 | +* * * * * flock -n lock_file_replica_dodia -c "/root/scripts/copia_replica_sei_anexos_dodia.sh" | ||
105 | +0 1,8,22 * * * flock -n lock_file_replica -c "/root/scripts/copia_replica_sei_anexos.sh" | ||
106 | +19 9,12,16,21,22,23 * * * flock -n lock_file_bin -c "/copia_sei/scripts/sei_bkp_binlogs.sh" | ||
107 | + | ||
108 | +``` | ||
109 | + | ||
110 | +* conteúdo do copia_prod_replica_dodia.sh | ||
111 | + | ||
112 | +``` | ||
113 | + | ||
114 | +#!/bin/bash | ||
115 | + | ||
116 | +#pegar ano mês e dia | ||
117 | + | ||
118 | +PATTERN=$(date +%Y/%m/%d) | ||
119 | + | ||
120 | +for i in $(seq 1 10) | ||
121 | +do | ||
122 | + | ||
123 | + if [ -d "/SEI_PROD/sei_anexos/$PATTERN" ]; then | ||
124 | + | ||
125 | + if [ ! -d "/SEI_REPLICA/sei_anexos/$PATTERN" ]; then | ||
126 | + mkdir -p /SEI_REPLICA/sei_anexos/$PATTERN | ||
127 | + #echo "criei /tmp/dst/$PATTERN" | ||
128 | + fi | ||
129 | + | ||
130 | + #echo $PATTERN | ||
131 | + rsync -a /SEI_PROD/sei_anexos/$PATTERN/* /SEI_REPLICA/sei_anexos/$PATTERN/ | ||
132 | + | ||
133 | + fi | ||
134 | + | ||
135 | +sleep 5 | ||
136 | + | ||
137 | +done | ||
138 | +``` | ||
139 | + | ||
140 | +### Rotina do Dump da Base | ||
141 | + | ||
142 | +- crontab | ||
143 | + | ||
144 | +``` | ||
145 | +0 0 * * 3,6 /copia_sei/scripts/sei_bkp_bd.sh | ||
146 | +``` | ||
147 | + | ||
148 | +- arquivo sei_bkp_bd.sh | ||
149 | + | ||
150 | +``` | ||
151 | +#!/bin/bash | ||
152 | + | ||
153 | +#vUSER="USERNAME" | ||
154 | +vPASS="<<password>>" | ||
155 | +DATA=$(date +%Y-%m-%d-%H.%M.%S) | ||
156 | + | ||
157 | +echo "" >> /copia_sei/scripts/result.log | ||
158 | +echo "Parando Réplica: $DATA" >> /copia_sei/scripts/result.log | ||
159 | + | ||
160 | +mysqladmin stop-slave -u$vUSER -p$vPASS | ||
161 | + | ||
162 | +echo "Réplica parada. Iniciando Dump" >> /copia_sei/scripts/result.log | ||
163 | + | ||
164 | +mysqldump -u$vUSER -p$vPASS --master-data=2 --max_allowed_packet=500M --databases sei sip > /copia_sei/dumps_base/dmp_$DATA.dump | ||
165 | + | ||
166 | +echo "Dump feito. Restartando Slave" >> /copia_sei/scripts/result.log | ||
167 | + | ||
168 | +mysqladmin start-slave -u$vUSER -p$vPASS | ||
169 | + | ||
170 | +echo "Slave Restartado. $(date +%Y-%m-%d-%H.%M.%S)" >> /copia_sei/scripts/result.log | ||
171 | +``` | ||
172 | + | ||
173 | +## Rotacionamento dos dumps e Logs | ||
174 | + | ||
175 | +O rotacionamento dos logs binários ainda não foi implementado. | ||
176 | + | ||
177 | +É feito manualmente. | ||
178 | + | ||
179 | +Deve-se tomar o cuidado de rotacionar apenas o que já foi armazenado pelo netbackup e teve a guarda armazenada em fita. | ||
180 | + | ||
181 | +Poderá, no futuro, implementar rotina automática para rotacionamento. | ||
182 | + |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# Política de Backup SEI | ||
2 | + | ||
3 | +## Target | ||
4 | + | ||
5 | +- VM 10.209.8.160 (réplica do SEI) | ||
6 | + Diretório: /copia_sei | ||
7 | + | ||
8 | + Nesse diretório contém os arquivos anexos, bem como o dump e os logs binários | ||
9 | + | ||
10 | +## Periodicidade | ||
11 | + | ||
12 | +- Full Mensal - último dia do mês - cópia do diretório dados (dump da base + arquivos anexos) | ||
13 | +- Diferencial Incremental Diário | ||
14 | + | ||
15 | +## Retenção | ||
16 | +- 5 anos | ||
17 | + | ||
18 | +## Janela | ||
19 | + | ||
20 | +- 0h às 04h da manhã | ||
0 | \ No newline at end of file | 21 | \ No newline at end of file |
politica-backup.md
@@ -1,20 +0,0 @@ | @@ -1,20 +0,0 @@ | ||
1 | -# Política de Backup SEI | ||
2 | - | ||
3 | -## Target | ||
4 | - | ||
5 | -- VM 10.209.8.160 (réplica do SEI) | ||
6 | - Diretório: /copia_sei | ||
7 | - | ||
8 | - Nesse diretório contém os arquivos anexos, bem como o dump e os logs binários | ||
9 | - | ||
10 | -## Periodicidade | ||
11 | - | ||
12 | -- Full Mensal - último dia do mês - cópia do diretório dados (dump da base + arquivos anexos) | ||
13 | -- Diferencial Incremental Diário | ||
14 | - | ||
15 | -## Retenção | ||
16 | -- 5 anos | ||
17 | - | ||
18 | -## Janela | ||
19 | - | ||
20 | -- 0h às 04h da manhã | ||
21 | \ No newline at end of file | 0 | \ No newline at end of file |
sei-banco.md
@@ -1,182 +0,0 @@ | @@ -1,182 +0,0 @@ | ||
1 | -# Banco de Dados | ||
2 | - | ||
3 | -A base de dados do SEI deve ser vista a partir da união do banco de dados e dos arquivos anexos que ficam em filesystem. | ||
4 | - | ||
5 | -Neste documento vamos denominar: | ||
6 | -- bd: banco de dados do SEI em mysql | ||
7 | -- arquivos anexos: arquivos de conteúdo diverso, binário ou não, que o SEI permite que seja feito o upload por seus usuários | ||
8 | -- base de dados: união entre bd e arquivos anexos | ||
9 | - | ||
10 | -O BD possui diversas informações estruturais e funcionais do sistema SEI, enquanto os arquivos anexos são documentos diversos que são subidos até a aplicação via upload. | ||
11 | - | ||
12 | - | ||
13 | -## Requisitos | ||
14 | - | ||
15 | -Tanto o banco de dados quanto o filesystem com os arquivos anexos possuem os seguintes requisitos: | ||
16 | - | ||
17 | -- não é permitido, em caso de crash ou problemas, a perda de informações | ||
18 | -- a principal ação deve estar na guarda e backup dos dados e logs binários do banco e arquivos anexos para garantir perda zero de informação | ||
19 | -- a segunda principal ação deve estar relacionada a disponibilidade do serviço | ||
20 | -- velocidade aceitável de leitura e escrita para a carga requerida do Ministério do Planejamento | ||
21 | - * 300 transações / segundo | ||
22 | - * 1.4 GB de crescimento / dia do BD | ||
23 | - * 11 GB / dia de crescimento da base de dados | ||
24 | -- deve-se permitir, em caso de necessidade, recuperar os dados na forma point in time recovery, podendo voltar até 1 ano atrás da posição atual | ||
25 | -- portanto os logs binários devem ser mantidos pelo período de pelo menos 1 ano | ||
26 | - | ||
27 | -## Profissional Necessário | ||
28 | - | ||
29 | -O profissional necessário para manter a solução deverá ter os conhecimentos em mysql server 5.7. | ||
30 | - | ||
31 | -Dentre as suas competências deverão constar, no mínimo: | ||
32 | -- instalação / sustentação de mysql server 5.7 em ambiente produtivo | ||
33 | -- implementação de réplica em log binário (master/slave) | ||
34 | -- tuning da base de dados de acordo com o ambiente e expectativas do cliente | ||
35 | -- recuperação de desastres do mysql server | ||
36 | -- point in time recovery de base de dados | ||
37 | -- geração e otimização de dumps | ||
38 | -- análise de logs com relatórios objetivos apontando gargalos e melhorias na infraestrutura | ||
39 | -- médio conhecimento em linux | ||
40 | - | ||
41 | -## Necessidades Específicas para a Base do SEI | ||
42 | - | ||
43 | -O profissional responsável pela base deverá constantemente: | ||
44 | -- garantir que a réplica esteja há menos de 5 segundos do master | ||
45 | -- garantir que a rotina de rsync dos arquivos anexos esteja a menos de 3 minutos dos arquivos de produção | ||
46 | -- garantir a disponibilidade de 99% da base de dados master (considerando dias úteis) | ||
47 | -- informar a DTI sobre qualquer erro ou situação que possa comprometer o ambiente | ||
48 | -- informar imediatamente a DTI sobre qualquer indisponibilidade ou lentidão | ||
49 | - | ||
50 | - | ||
51 | -## Tecnologias | ||
52 | - | ||
53 | -Atualmente o banco de dados é mysql 5.7 com uma réplica também em mysql 5.7. | ||
54 | -Para os arquivos anexos, estamos usando Storage - EMC, com NFS ativado para leitura e escrita dos dados | ||
55 | - | ||
56 | -## Arquitetura | ||
57 | - | ||
58 | -- Arquivos Anexos: | ||
59 | - * 192.x.x.x | ||
60 | - * diretório NFS: /SEI_PROD_xx | ||
61 | - | ||
62 | -- Mysql Master | ||
63 | - * 192.x.x.x | ||
64 | - * servidor físico com 24 cores e 64GB | ||
65 | - * servidor compartilhado com o PDCMP | ||
66 | - * data do mysql: /dados_banco/mysql/data | ||
67 | - * logs binários do mysql: /dados_banco/mysql/binlog | ||
68 | - | ||
69 | -- Mysql Slave - Virtual | ||
70 | - * 192.x.x.x | ||
71 | - * servidor virtual 8 cores e 11GB | ||
72 | - * data do mysql: /dados_banco/mysql/data | ||
73 | - * logs binários do mysql: /dados_banco/mysql/binlog | ||
74 | - | ||
75 | - | ||
76 | -- Mysql Slave - Física | ||
77 | - * 192.x.x.x | ||
78 | - * servidor físico 8 cores e 32GB | ||
79 | - * data do mysql: /replica_bd/mysql/data | ||
80 | - * logs binários do mysql: /replica_bd/mysql/binlog | ||
81 | - * diretório para backup - dumps: /replica_bd/backup/dumps (aponta para Storage VNX) | ||
82 | - * diretório para backup - logs binários: /replica_bd/backup/logbinarios (aponta para Storage VNX) | ||
83 | - | ||
84 | - | ||
85 | -## Rotinas | ||
86 | - | ||
87 | -Para garantir a guarda das informações, inclusive a reconstrução da base de dados em caso de crash, foram implementadas as seguintes ações: | ||
88 | - | ||
89 | -- réplica nativa do mysql usando um master e um slave | ||
90 | -- logs binários independentes do master e slave | ||
91 | -- para os arquivos anexos há quatro rsync rodando, replicando todo o filesystem do diretório de origem para o diretório de backup | ||
92 | -- toda terça e sábado roda um crontab que tira o dump da réplica e salva no diretório de backup | ||
93 | - | ||
94 | -### Rotina dos arquivos anexos | ||
95 | - | ||
96 | -- crontab agendado no root | ||
97 | - * crontab que roda de 5 em 5 segundos copiando todos os arquivos anexos do diretório de prododução para os diretórios de backup (note o flock para impedir a execução ao mesmo tempo de várias instâncias da rotina) | ||
98 | - | ||
99 | -``` | ||
100 | -0 0,7,21 * * * flock -n lock_file_prod -c "/root/scripts/copia_prod_replica.sh" | ||
101 | -0 1,8,22 * * * flock -n lock_file_prod_to_ibm -c "/root/scripts/copia_prod_to_ibm.sh" | ||
102 | -* * * * * flock -n lock_file_prod_dodia -c "/root/scripts/copia_prod_replica_dodia.sh" | ||
103 | -* * * * * flock -n lock_file_prod_to_ibm_dodia -c "/root/scripts/copia_prod_to_ibm_dodia.sh" | ||
104 | -* * * * * flock -n lock_file_replica_dodia -c "/root/scripts/copia_replica_sei_anexos_dodia.sh" | ||
105 | -0 1,8,22 * * * flock -n lock_file_replica -c "/root/scripts/copia_replica_sei_anexos.sh" | ||
106 | -19 9,12,16,21,22,23 * * * flock -n lock_file_bin -c "/copia_sei/scripts/sei_bkp_binlogs.sh" | ||
107 | - | ||
108 | -``` | ||
109 | - | ||
110 | -* conteúdo do copia_prod_replica_dodia.sh | ||
111 | - | ||
112 | -``` | ||
113 | - | ||
114 | -#!/bin/bash | ||
115 | - | ||
116 | -#pegar ano mês e dia | ||
117 | - | ||
118 | -PATTERN=$(date +%Y/%m/%d) | ||
119 | - | ||
120 | -for i in $(seq 1 10) | ||
121 | -do | ||
122 | - | ||
123 | - if [ -d "/SEI_PROD/sei_anexos/$PATTERN" ]; then | ||
124 | - | ||
125 | - if [ ! -d "/SEI_REPLICA/sei_anexos/$PATTERN" ]; then | ||
126 | - mkdir -p /SEI_REPLICA/sei_anexos/$PATTERN | ||
127 | - #echo "criei /tmp/dst/$PATTERN" | ||
128 | - fi | ||
129 | - | ||
130 | - #echo $PATTERN | ||
131 | - rsync -a /SEI_PROD/sei_anexos/$PATTERN/* /SEI_REPLICA/sei_anexos/$PATTERN/ | ||
132 | - | ||
133 | - fi | ||
134 | - | ||
135 | -sleep 5 | ||
136 | - | ||
137 | -done | ||
138 | -``` | ||
139 | - | ||
140 | -### Rotina do Dump da Base | ||
141 | - | ||
142 | -- crontab | ||
143 | - | ||
144 | -``` | ||
145 | -0 0 * * 3,6 /copia_sei/scripts/sei_bkp_bd.sh | ||
146 | -``` | ||
147 | - | ||
148 | -- arquivo sei_bkp_bd.sh | ||
149 | - | ||
150 | -``` | ||
151 | -#!/bin/bash | ||
152 | - | ||
153 | -#vUSER="USERNAME" | ||
154 | -vPASS="<<password>>" | ||
155 | -DATA=$(date +%Y-%m-%d-%H.%M.%S) | ||
156 | - | ||
157 | -echo "" >> /copia_sei/scripts/result.log | ||
158 | -echo "Parando Réplica: $DATA" >> /copia_sei/scripts/result.log | ||
159 | - | ||
160 | -mysqladmin stop-slave -u$vUSER -p$vPASS | ||
161 | - | ||
162 | -echo "Réplica parada. Iniciando Dump" >> /copia_sei/scripts/result.log | ||
163 | - | ||
164 | -mysqldump -u$vUSER -p$vPASS --master-data=2 --max_allowed_packet=500M --databases sei sip > /copia_sei/dumps_base/dmp_$DATA.dump | ||
165 | - | ||
166 | -echo "Dump feito. Restartando Slave" >> /copia_sei/scripts/result.log | ||
167 | - | ||
168 | -mysqladmin start-slave -u$vUSER -p$vPASS | ||
169 | - | ||
170 | -echo "Slave Restartado. $(date +%Y-%m-%d-%H.%M.%S)" >> /copia_sei/scripts/result.log | ||
171 | -``` | ||
172 | - | ||
173 | -## Rotacionamento dos dumps e Logs | ||
174 | - | ||
175 | -O rotacionamento dos logs binários ainda não foi implementado. | ||
176 | - | ||
177 | -É feito manualmente. | ||
178 | - | ||
179 | -Deve-se tomar o cuidado de rotacionar apenas o que já foi armazenado pelo netbackup e teve a guarda armazenada em fita. | ||
180 | - | ||
181 | -Poderá, no futuro, implementar rotina automática para rotacionamento. | ||
182 | - |