Ir para o conteúdo

Instalação

Nota

Recordamos que a mudança para root nas máquinas Debian deve ser feita com o seguinte comando:

1
su -

As instruções indicadas nesta página devem ser seguidas para a instalação de todos os nós do cluster PostgreSQL.

Definições dos sistemas

Ligação à máquina

Por predefinição, existem duas contas nas appliances virtuais: uma conta de utilizador e uma conta de superutilizador.

  • Conta de utilizador
    • Identificador : systancia
    • Palavra-passe: systnci
  • Conta de superutilizador
    • Identificador : root
    • Palavra-passe: systnci

Ligue-se à máquina em modo consola.

Nota

A disposição predefinida do teclado é QWERTY.

Modificação da disposição do teclado

Pode alterar a disposição do teclado com a linha de comandos seguinte:

1
dpkg-reconfigure keyboard-configuration

Aparece um menu que lhe permite escolher outra disposição de teclado.

Utilize depois a linha de comandos seguinte para aplicar e guardar as definições:

1
setupcon -k --save

As definições entram em vigor imediatamente após a execução deste comando.

Configuração da rede

A appliance virtual pode não receber uma configuração de rede ao arrancar, pelos seguintes motivos:

  • O nome da interface de rede não é ens192: a appliance está configurada para DHCP apenas na interface ens192
  • Não está disponível nenhum servidor DHCP

Para verificar o nome da interface de rede, o seu estado e os endereços IP atribuídos, execute o seguinte comando como root:

1
ip -br a | grep -ve "^lo"
Exemplo

Após a execução do comando, é apresentada a seguinte resposta:

1
ens192      UP      10.100.0.51/24

O nome da interface de rede no exemplo é ens192, a interface está ativa e tem o endereço IP 10.100.0.51/24.

Se o nome for diferente de ens192 ou se o comando não devolver nenhuma configuração de rede, terá de configurar a rede manualmente com os seguintes comandos:

1
2
ip address add IP_ADDRESS/SUBNET dev DEV_NAME
ip route add default via GATEWAY

Substitua:

  • IP_ADDRESS pelo endereço IP da máquina
  • SUBNET pela sub-rede
  • DEV_NAME nome da interface de rede obtida anteriormente
  • GATEWAY pelo gateway de rede
Exemplo

Para configurar o nó PostgreSQL com as seguintes informações:

  • Endereço IP: 10.100.0.51
  • Sub-rede: /24 ou 255.255.255.0
  • Nome da interface de rede: eth0
  • Gateway de rede: 10.100.0.254

Os comandos são os seguintes:

1
2
ip address add 10.100.0.51/24 dev eth0
ip route add default via 10.100.0.254

Nota

Esta configuração de rede é temporária, pelo que qualquer reinício do servidor irá restabelecer as definições manuais efetuadas com os comandos ip address e ip route.
A configuração permanente será realizada pelo utilitário de configuração do cluster PostgreSQL.

No entanto, graças a esta configuração de rede, já pode aceder ao nó PostgreSQL por SSH.

Modificação do fuso horário

Por predefinição, a appliance virtual está configurada no fuso horário Europe/Paris.

Para alterar este fuso horário, utilize primeiro o comando seguinte para obter a sintaxe dos fusos horários disponíveis:

1
timedatectl list-timezones

Utilize em seguida a linha de comandos seguinte:

1
timedatectl set-timezone your_time_zone
Exemplo

Para definir o fuso horário para Londres, deve executar-se o comando seguinte:

1
timedatectl set-timezone Europe/London

Verifique o fuso horário do servidor com a linha de comandos seguinte:

1
timedatectl

Configuração de um servidor de tempo NTP

Perigo

Recomenda-se vivamente configurar um servidor de tempo para manter o relógio do sistema atualizado: qualquer diferença horária entre os nós PostgreSQL pode provocar instabilidade, ou mesmo deixar o cluster fora de serviço.

As etapas necessárias estão descritas na página de configuração NTP (a configuração é equivalente à dos servidores Mediation Controller do CyberElements Bastion).

Criação de uma PKI para gerar os certificados dos nós PostgreSQL

Informação

Esta secção é opcional se já dispuser de uma PKI com a qual tenha podido gerar os certificados indicados nos pré-requisitos.
Esta secção apresenta as várias etapas de criação de uma PKI e dos certificados necessários para o cluster PostgreSQL. Tenha em conta que não será indicado como renová-los, uma vez que a renovação de um certificado implica voltar a criá-lo.

Ignorar esta etapa

Atenção!

O procedimento descrito foi validado numa máquina Debian 12 com o pacote openssl. No entanto, qualquer máquina que disponha de uma versão recente do OpenSSL (a versão validada é 3.0.17) poderá concluir o procedimento. Exceto no Windows ou MacOS, onde os comandos do sistema terão de ser adaptados.

Definição de variáveis e personalizações

Esta secção fornece diversos comandos e ficheiros de configuração que utilizam variáveis que podem ser modificadas.
A tabela abaixo resume todos os valores e permite defini-los para que possa modificá-los diretamente nos comandos apresentados nesta página.

Valor Variável Definição
PSQL_IP Endereço IP virtual do cluster PostgreSQL.
PSQL_NAME Nome curto (não o FQDN) associado ao endereço IP virtual do cluster PostgreSQL.
PSQL_1_IP Endereço IP do nó n.º 1 do cluster PostgreSQL.
PSQL_1_NAME Nome curto (não o FQDN) do nó n.º 1 do cluster PostgreSQL.
PSQL_2_IP Endereço IP do nó n.º 2 do cluster PostgreSQL.
PSQL_2_NAME Nome curto (não o FQDN) do nó n.º 2 do cluster PostgreSQL.
PSQL_3_IP Endereço IP do nó n.º 3 do cluster PostgreSQL.
PSQL_3_NAME Nome curto (não o FQDN) do nó n.º 3 do cluster PostgreSQL.
CA_ROOT_NAME Nome atribuído à autoridade de certificação (CA) raiz da PKI.

Preparação

As ações seguintes serão realizadas num novo diretório, a fim de reunir todos os ficheiros novos num único diretório. Pode utilizar-se qualquer diretório, mas o seu acesso deve ser limitado o mais possível. *Ligue-se ao nó PostgreSQL n.º 1 como root e execute os seguintes comandos:

1
2
3
mkdir /root/psql-certificates/
chmod 600 /root/psql-certificates/
cd /root/psql-certificates/

Criação da autoridade de certificação raiz

Execute o seguinte comando para criar uma nova CA raiz. Será-lhe pedida uma palavra-passe para proteger a CA:

1
openssl req -x509 -newkey rsa:4096 -days 3650 -sha512 -keyout CA_ROOT_NAME.key -out CA_ROOT_NAME.crt -subj "/CN=CA_ROOT_NAME" -extensions v3_ca -addext "subjectKeyIdentifier=hash" -addext "authorityKeyIdentifier=keyid:always,issuer:always" -addext "basicConstraints=critical,CA:true" -addext "keyUsage=critical,digitalSignature,cRLSign,keyCertSign"

Substitua CA_ROOT_NAME pelo nome da CA raiz se não o tiver personalizado aqui.

Criação dos certificados

Os comandos necessários para gerar os certificados dos nós PostgreSQL são os seguintes:

1
2
3
openssl genrsa -out PSQL_1_NAME.key 4096
openssl req -new -key PSQL_1_NAME.key -out PSQL_1_NAME.csr -subj "/CN=PSQL_1_NAME"
openssl x509 -req -in PSQL_1_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_1_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_1_NAME,IP:PSQL_IP,IP:PSQL_1_IP")

Substitua CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP e PSQL_1_NAME se não os tiver personalizado aqui.

1
2
3
openssl genrsa -out PSQL_2_NAME.key 4096
openssl req -new -key PSQL_2_NAME.key -out PSQL_2_NAME.csr -subj "/CN=PSQL_2_NAME"
openssl x509 -req -in PSQL_2_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_2_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_2_NAME,IP:PSQL_IP,IP:PSQL_2_IP")

Substitua CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP e PSQL_2_NAME se não os tiver personalizado aqui.

1
2
3
openssl genrsa -out PSQL_3_NAME.key 4096
openssl req -new -key PSQL_3_NAME.key -out PSQL_3_NAME.csr -subj "/CN=PSQL_3_NAME"
openssl x509 -req -in PSQL_3_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_3_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_3_NAME,IP:PSQL_IP,IP:PSQL_3_IP")

Substitua CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP e PSQL_3_NAME se não os tiver personalizado aqui.

O primeiro comando cria uma nova chave, o segundo gera um ficheiro de pedido de assinatura de certificado CSR e o terceiro cria o próprio certificado.

Falta apenas converter o certificado para P12, o que exigirá que defina uma palavra-passe:

1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_1_NAME.key -in PSQL_1_NAME.crt -out PSQL_1_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_2_NAME.key -in PSQL_2_NAME.crt -out PSQL_2_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_3_NAME.key -in PSQL_3_NAME.crt -out PSQL_3_NAME.p12

Os ficheiros necessários para instalar o cluster PostgreSQL encontram-se aqui (substitua as variáveis CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME e PSQL_3_NAME pelos valores que selecionou anteriormente):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certificado da CA raiz
  • /root/psql-certificates/PSQL_1_NAME.p12: certificado do nó PostgreSQL n.º 1
  • /root/psql-certificates/PSQL_2_NAME.p12: certificado do nó PostgreSQL n.º 2
  • /root/psql-certificates/PSQL_3_NAME.p12: certificado do nó PostgreSQL n.º 3

Instalação de um cluster PostgreSQL

Informação

As etapas seguintes devem ser realizadas nos três nós PostgreSQL.

Preparação para a configuração do cluster PostgreSQL

É necessário estabelecer uma ligação SFTP ou SCP para enviar para a appliance:

  • O certificado da autoridade de certificação que assinou os certificados dos nós PostgreSQL
  • O certificado do nó PostgreSQL em formato P12

Tenha em conta que as ligações SFTP ou SCP não podem ser iniciadas com a conta root. Além disso, os ficheiros podem simplesmente ser colocados em /home/systancia/.

É necessário mover estes ficheiros para um novo diretório:

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_?_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/ROOT_CA_NAME.crt /etc/ssl/certs/cleanroom/

Substitua:

  • PSQL_?_NAME pelo nome do certificado destinado ao nó PostgreSQL que está a ser instalado
  • ROOT_CA_NAME pelo nome do certificado da autoridade de certificação raiz
1
2
3
mkdir /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/PSQL_1_NAME.p12 /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Os comandos acima devem ter sido personalizados de acordo com os parâmetros de personalização.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_2_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Os comandos acima devem ter sido personalizados de acordo com os parâmetros de personalização.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_3_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Os comandos acima devem ter sido personalizados de acordo com os parâmetros de personalização.

Configuração do nó PostgreSQL

Para iniciar a inicialização da configuração do nó, devem ser executados os seguintes comandos:

1
2
cd /etc/ssl/certs/cleanroom/
ConfigureSystanciaVault.py

O segundo comando inicia um utilitário que solicitará as seguintes informações:

  1. As novas palavras-passe dos utilizadores locais root e systancia
  2. O nome do nó PostgreSQL (não o FQDN)
  3. O endereço IP do nó PostgreSQL, o nome da sua interface de rede, o gateway de rede predefinido a utilizar, bem como os servidores DNS e o sufixo DNS
  4. A versão do PostgreSQL; recomendamos utilizar a versão 15
  5. A porta de acesso ao cluster PostgreSQL; recomendamos utilizar a porta 5432
  6. A palavra-passe da conta PostgreSQL utilizada para a replicação e para pg_rewind
  7. O nome e o endereço IP de um segundo nó PostgreSQL
  8. O nome e o endereço IP do último nó PostgreSQL
  9. O endereço IP virtual do cluster PostgreSQL
  10. Os endereços IP (separados por vírgulas) dos Edge Gateway do CyberElements Bastion ou de qualquer outra máquina que tenha de se ligar ao cluster
  11. O nome e a palavra-passe da conta de utilizador PostgreSQL
  12. Os endereços IP ou as redes (separados por vírgulas) autorizados a ligar-se por SSH aos nós PostgreSQL
  13. As informações de certificado do nó PostgreSQL (certificado do nó em formato P12 + certificado da CA raiz)

Após introduzir estas informações, é apresentado um resumo de tudo o que indicou antes da validação.
Após confirmar as informações fornecidas, aparece uma mensagem relativa às alterações ao ficheiro /etc/ssh/sshd_config. Selecione a opção predefinida, keep the local version currently installed.

Para aplicar a configuração, é necessário reiniciar:

1
reboot
Sugestão para acelerar a instalação dos nós PostgreSQL n.º 2 e n.º 3

Após instalar o nó PostgreSQL n.º 1, pode recuperar os parâmetros de configuração utilizados para o configurar no ficheiro /etc/cleanroom-vault.ini.

Exemplo do ficheiro /etc/cleanroom-vault.ini

 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
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Basta modificar as linhas destacadas com os valores do nó PostgreSQL que está a ser instalado, a partir do ficheiro que recuperou do nó PostgreSQL n.º 1.

Perigo

Se reutilizar o ficheiro de exemplo, terá de modificar todos os valores destacados seguintes de acordo com o seu ambiente:

 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
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Configurações adicionais para patronictl

Para poder utilizar os comandos de gestão do cluster PostgreSQL com patronictl, faltam ainda alguns comandos que devem ser executados como root no nó PostgreSQL:

1
2
3
4
sed -i "s/2380/2380, 8008/g" /etc/nftables.conf
systemctl reload nftables
cp /etc/patroni/ca.crt /usr/local/share/ca-certificates/PSQL-CA.crt
update-ca-certificates

Configurações adicionais para etcd

Para ativar a compactação e a desfragmentação automáticas da base de dados do etcd, execute os seguintes comandos como root no nó PostgreSQL:

1
2
3
4
5
6
7
apt update
apt install etcd-client
echo -e 'ETCD_AUTO_COMPACTION_MODE="periodic"\nETCD_AUTO_COMPACTION_RETENTION="1"' >> /etc/default/etcd
systemctl restart etcd
echo -e '#!/bin/bash\n\nsource /etc/default/etcd\netcdctl --endpoints=${ETCD_ADVERTISE_CLIENT_URLS}  --cert=${ETCD_CERT_FILE} --key=${ETCD_KEY_FILE} "$@"' > /usr/bin/clr_etcdctl
chmod a+x /usr/bin/clr_etcdctl
echo '0 3 * * * root clr_etcdctl defrag' > /etc/cron.d/systancia-db

Criação da base de dados default necessária para a instalação do CyberElements Bastion

Ao instalar o CyberElements Bastion, deve primeiro criar uma base de dados chamada default.
Para isso, preencha a tabela seguinte para personalizar o comando que terá de executar a partir de qualquer um dos nós do cluster PostgreSQL:

Valor Variável Definição
PSQL_VIP Endereço IP virtual do cluster PostgreSQL.
DB_USER O nome de utilizador da base de dados indicado durante a configuração do nó PostgreSQL

Comando a executar a partir de qualquer um dos nós do cluster PostgreSQL:

1
createdb -h PSQL_VIP -U DB_USER default