From c73697d6b7e986432e56e80f07af2e77ec004e72 Mon Sep 17 00:00:00 2001
From: Matteo <matteo.difazio@garr.it>
Date: Mon, 20 Apr 2020 15:34:48 +0200
Subject: [PATCH] Update README.md

---
 README.md | 95 +++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 67 insertions(+), 28 deletions(-)

diff --git a/README.md b/README.md
index 2f0f4d5..b1efa75 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,10 @@
-# Configurazione HA geografica per il Database di MAAS 
+[[_TOC_]]
 
-Per realizzare una HA geografica per il DB di MAAS utilizzeremo **Stolon**: https://github.com/sorintlab/stolon
+---
+
+# Configurazione HA geografica di PostgresQL
+
+Per realizzare una HA geografica di un database PostgreSQL utilizzeremo **Stolon**: https://github.com/sorintlab/stolon
 
 ## Architettura di Stolon
 
@@ -26,7 +30,7 @@ Scegliamo **tre** nodi, uno per ogni **datacenter**, e su ognuno di questi nodi
 
 In questo esempio utilizzeremo i seguenti container: **10.3.0.244**, **10.2.0.243**, **10.2.244**.
 
-**NOTA**: i container sono disposti solamente su due datacenter, in produzione (come già detto) è consigliabile istanziare i container su tre datacenter diversi per ottenere maggiore resilienza.
+**NOTA**: i container in questo esempio sono disposti solamente su due datacenter, in produzione (come già detto) è consigliabile istanziare i container su tre datacenter diversi per ottenere maggiore resilienza e poter 'sopravvivere' al down di uno dei tre datacenter.
 
 Su ognuno di questi container procediamo in questo modo:
 
@@ -42,6 +46,13 @@ mkdir /root/etcd-scripts
 
 #### Configuriamo ETCD sul primo container (10.3.0.244)
 
+**Nota**: rispetto all'esempio riportato nella documentazione di riferimento condivisa più sopra, abbiamo aggiunto i seguenti parametri:
+
+1. ```--auto-tls --peer-auto-tls ```: guarda https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/security.md per una descrizione di questi due parametri
+2. ```--quota-backend-bytes=$((6*1024*1024*1024))```: aumentiamo a 6GB il limite sulla dimensione del database relativo ad un singolo etcd container
+3. ```--auto-compaction-retention=1```: vedi sezione di troubleshooting in fondo al documento
+4. ```--heartbeat-interval '300' --election-timeout '3000'```: vedi sezione di troubleshooting in fondo al documento
+
 ```bash
 TOKEN=token-01
 CLUSTER_STATE=new
@@ -178,23 +189,33 @@ Procediamo come di seguito:
 
 5. ```systemctl restart etcdinit```
 
-## Setup di un cluster Stolon sui MAAS Region
+## Setup di un cluster Stolon
+
+In questo esempio andremo a replicare il database PostgreSQL del servizio **MAAS** ma la procedura è valida per qualsiasi servizio che utilizzi un db PostgreSQL.
 
-Dopo aver configurato con successo un cluster ETCD in HA, possiamo configurare **Stolon** sui Region di MAAS.
+Dopo aver configurato con successo un cluster ETCD in HA, andremo a configurare **le componenti di Stolon** su:
 
-In questo esempio abbiamo installato i MAAS Region su i seguenti nodi (linux containers con ubuntu 18.04) : **10.3.0.232**, **10.2.0.232**.
+1. la macchina contentente il database da replicare 
+2. la macchina destinata a contenere la replica.
 
-Su 10.3.0.232 è installato il **DB** di MAAS (oltre al MAAS Region).
+Le **due macchine** sui cui installeremo i componenti di Stolon sono container lxc ma potrebbero benissimo anche essere bare metal.
 
-Entrambi i Region puntano al DB di MAAS e quindi a **10.3.0.232:5432**.
+I nodi in questione sono (linux containers con ubuntu 18.04) : **10.3.0.232**, **10.2.0.232**.
+
+Il nodo 10.3.0.232 è situato nel datacenter di Catania mentre 10.2.0.232 in quello di Palermo.
+
+Su 10.3.0.232 è installato il **DB** di MAAS. Inoltre, sia su 10.3.0.232 che su 10.2.0.232 sono configurati due **MAAS Region Controller**. 
+Entrambi i controller utilizzano l'unico database che è installato, come detto in precedenza, su 10.3.0.232
 
 **NOTA**: si presuppone che MAAS funzioni come ci si aspetti su entrambi i nodi
 
-Nello scenario descritto  qui sopra, MAAS ed il suo database sono già operativi ed in funzione. Bisogna quindi configurare Stolon **a partire da un database esistente**. Per fare questo, abbiamo bisogno di inizializzare un **cluster di standby** come descritto qui: https://github.com/sorintlab/stolon/blob/master/doc/standbycluster.md.
+Nello scenario descritto  qui sopra, MAAS ed il suo database sono già operativi ed in funzione. Il nostro scopo è quello di replicare il DB in esecuzione su 10.3.0.232 sul container 10.2.0.232.
+
+Bisogna quindi configurare Stolon **a partire da un database esistente**. Per fare questo, abbiamo bisogno di inizializzare un **cluster di standby** come descritto qui: https://github.com/sorintlab/stolon/blob/master/doc/standbycluster.md.
 
 Iniziamo con il **preparare entrambi i nodi** all'utilizzo di Stolon.
 
-#### Creiamo un nuovo utente ed installiamo Stolon sul MAAS Region con ip 10.3.0.232
+#### Creiamo un nuovo utente ed installiamo Stolon su 10.3.0.232
 
 1. Creaiamo un utente che verrà utilizzato per eseguire i comandi di Stolon:
 
@@ -227,9 +248,9 @@ Iniziamo con il **preparare entrambi i nodi** all'utilizzo di Stolon.
    mkdir stolon-config; mkdir stolon-log; mkdir stolon-data; chmod 0700 stolon-data
    ```
 
-#### Creaiamo un nuovo utente ed installiamo Stolon sul MAAS Region con ip 10.2.0.232
+#### Creaiamo un nuovo utente ed installiamo Stolon su 10.2.0.232
 
-**NOTA**: questo è il region su cui non è installato il DB
+**NOTA**: questo è il container su cui non è installato il DB e su cui vogliamo installare la replica
 
 1. Creaiamo un utente che verrà utilizzato per eseguire i comandi di Stolon:
 
@@ -268,7 +289,7 @@ Iniziamo con il **preparare entrambi i nodi** all'utilizzo di Stolon.
    apt install postgresql-10
    ```
 
-#### Prepariamo il DB di MAAS ad essere replicato da Stolon (10.3.0.232)
+#### Prepariamo il DB attualmente in esecuzione ad essere replicato da Stolon (10.3.0.232)
 
 1. Creiamo un Superuser ed un Replication user in Postgresql (Stolon utilizzerà questi utenti per la replica):
 
@@ -280,14 +301,15 @@ Iniziamo con il **preparare entrambi i nodi** all'utilizzo di Stolon.
 2. Modifichiamo pg_hba:
 
    ```bash
-   add: host replication repluser 0.0.0.0/0 md5, remove any other replication type entries in the file
+   add: host replication repluser 0.0.0.0/0 md5
    ```
+   **Importante**: rimuovere ogni altra replication entry in pg_hba ad eccezione di quella appena inserita
 
 #### Inizializziamo il cluster Stolon di standby su **10.2.0.232**
 
-Inizializziamo il **cluster Stolon di standby** sul **Region** dove non è presente il database di MAAS e creiamo la replica del DB.
+Inizializziamo il **cluster Stolon di standby** sul container dove non è presente il database di MAAS e creiamo la replica del DB.
 
-1. Stoppiamo PostgreSQL:
+1. Stoppiamo PostgreSQL se in esecuzione:
 
    ```bash
    #quando lanciamo il keeper, Stolon lancerà un processo PostgreSQL.
@@ -343,43 +365,57 @@ Inizializziamo il **cluster Stolon di standby** sul **Region** dove non è prese
    ```bash
    bin/stolonctl --cluster-name maas-test-cluster --store-backend etcdv3 --store-endpoints  http://10.3.0.244:2379,http://10.2.0.243:2379,http://10.2.0.244:2379 status
 
-Se tutto è andato a buon fine, ora sul MAAS Region dove prima non c'era nessun db abbiamo configurato una replica del DB di MAAS e che è in costante sincronizzazione (async replication).
+Se tutto è andato a buon fine, ora su 10.2.0.232 dove prima non c'era nessun db abbiamo configurato una replica del DB di MAAS che è in costante sincronizzazione (async replication).
+
+Ci siamo quasi, quello che ci resta da fare ora è:
 
-#### Migriamo i MAAS Regions sul cluster Stolon
+1. Stoppare brevemente i nostri servizi in modo tale che non venga più scritto nulla di nuovo all'interno del database
+2. Creare una replica su 10.3.0.232 a partire dalla replica presente su 10.2.0.232
+3. Far puntare entrambi i region controller allo stolon proxy
+4. Avviare nuovamente i servizi
 
-1. Stoppiamo il region su 10.2.0.232:
+#### Stoppiamo i MAAS Region controller
+
+1. Stoppiamo il region controller su 10.2.0.232:
 
    ```bash
    exit; systemctl stop maas-regiond
    ```
-2. Stoppiamo il region su 10.3.0.232:
+2. Stoppiamo il region controller su 10.3.0.232:
 
    ```bash
    exit; systemctl stop maas-regiond
    ```
+   
+Come risultato di queste operazioni non viene effettuata più nessuna nuova scrittura nel database.
+
+####  Creiamo una istanza PostgreSQL gestita da Stolon anche su 10.3.0.232
 
-3. Stoppiamo PostgreSQL su 10.3.0.232:
+1. Stoppiamo PostgreSQL su 10.3.0.232:
 
    ```bash
    exit; systemctl stop postgresql; su stolonsu; cd ~/stolon
    ```
 
-4. Lanciamo **Keeper** su 10.3.0.232:
+2. Lanciamo **Keeper** su 10.3.0.232:
 
    ```bash
    #verrà creata una copia del db presente su 10.2.0.232 e verrà tenuta in sync da Stolon
    bin/stolon-keeper --cluster-name maas-test-cluster --store-backend etcdv3 --store-endpoints  http://10.3.0.244:2379,http://10.2.0.243:2379,http://10.2.0.244:2379 --pg-su-username stolonsu --pg-su-password 12@st0l0nsu#$ --pg-repl-username repluser --pg-repl-password 12@r3plus3r#$ --pg-listen-address=10.3.0.232 --pg-port 5432 --uid maas_ct1 --data-dir /home/stolonsu/stolon-data --pg-bin-path /usr/lib/postgresql/10/bin/ > ../stolon-log/keeper.log 2>&1 &
-
-5. Lanciamo **Sentinel** su 10.3.0.232:
+   ```
+   
+3. Lanciamo **Sentinel** su 10.3.0.232:
 
    ```bash
     bin/stolon-sentinel --cluster-name maas-test-cluster --store-backend etcdv3 --store-endpoints http://10.3.0.244:2379,http://10.2.0.243:2379,http://10.2.0.244:2379 > ../stolon-log/sentinel.log 2>&1 &
-
+   ```
+   
 6. Lanciamo **Proxy** su 10.3.0.232:
 
    ```bash
     bin/stolon-proxy --cluster-name maas-test-cluster --port 25432 --store-backend etcdv3 --store-endpoints http://10.3.0.244:2379,http://10.2.0.243:2379,http://10.2.0.244:2379 > ../stolon-log/proxy.log 2>&1 &
-
+    ```
+    
 7. Promuoviamo il cluster Stolon di standby a cluster di ruolo Master (indifferente se da 10.3.0.232 o da 10.2.0.232)
 
    ```bash
@@ -389,11 +425,14 @@ Se tutto è andato a buon fine, ora sul MAAS Region dove prima non c'era nessun
    bin/stolonctl --cluster-name maas-test-cluster --store-backend etcdv3 --store-endpoints  http://10.3.0.244:2379,http://10.2.0.243:2379,http://10.2.0.244:2379 update --patch '{ "standbyConfig": null }'
    ```
 
+
+#### Facciamo puntare entrambi i frontend (maas region controllers) al relativo stolon proxy + restart dei servizi (region controllers)
+
 8. Modifichiamo **regiond.conf** su 10.3.0.232
 
    ```bash
     exit;
-    #puntiamo al proxy di Stolon
+    #puntiamo al proxy locale di Stolon
     vi /etc/maas/regiond.confg --> db_host=localhost db_port=25432
     systemctl restart maas-regiond
    ```
@@ -402,7 +441,7 @@ Se tutto è andato a buon fine, ora sul MAAS Region dove prima non c'era nessun
 
    ```bash
     exit;
-    #puntiamo al proxy di Stolon
+    #puntiamo al proxy locale di Stolon
     vi /etc/maas/regiond.confg --> db_host=localhost db_port=25432
     systemctl restart maas-regiond
    ```
-- 
GitLab