Commit 5e03c61acad1f5f219ac3cc386dd67707d0cc503

Authored by Marcelo Linhares Castro
1 parent 68e8e4bc
Exists in master

Docs

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 +
docs/sei-banco.md 0 → 100644
@@ -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 +
docs/sei-politica-backup.md 0 → 100644
@@ -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 -