Commit 5e03c61acad1f5f219ac3cc386dd67707d0cc503

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

Docs

README.md
1 1 # SEI
2 2  
3 3 [Conteiner](#conteiner-de-aplicacao-para-o-sei)
  4 +
4 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 28 Por favor sugerir correções e melhorias.
28 29  
29 30  
30   -
31   -
32 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 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 @@
  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 @@
  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 21 \ No newline at end of file
... ...
politica-backup.md
... ... @@ -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 0 \ No newline at end of file
sei-banco.md
... ... @@ -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   -