Bacula Services’ High Availability, Clustering and Replication

Bacula Services’ High Availability, Clustering and Replication

With failover and load balancing capabilities, Bacula Enterprise allows organizations to minimize downtime, ensuring operational continuity even in the event of hardware, software, or other unforeseen failures. Additionally, its distributed and scalable architecture provides redundancy and resilience, enabling quick recovery of critical systems and data. With the ability to create highly available environments, Bacula Enterprise stands out as a reliable solution for companies seeking effective and consistent data asset protection.

To implement a high-availability architecture for Bacula, it is necessary to consider all services that can be a single point of failure, as follows.

  1. Stored backup jobs
  2. Storage Daemon
  3. Director and Catalog

That said, let’s evaluate possible features to provide more disaster resilience for each of the components.

Backup Jobs

Bacula’s backup jobs are stored on disks, tapes, and cloud storage, always written by a Storage Daemon. This way, protection against loss or failures involves one or more of the following methods.

Physical Protections

For disks, RAID6 protection for backup volumes is the most recommended and common in the market, supporting tolerance for up to two disks with failures. For tapes, some tape libraries have the “mirroring” functionality, which allows simultaneous recording on two tapes with identical content. For the cloud, protections from each provider and object storage replication, including multi-region, can be used. All of this without prejudice to other possible techniques.

Copy and Clone Features

Through Bacula, you can configure jobs of the Copy type to run sequentially after the backup job is completed or Clone jobs that run simultaneously (Job Run Directive). This way, copies between devices of the same Storage Daemon (e.g., disk to tape) and between devices of different Storage Daemons allow data restoration in case of loss of one of the backup media.

Storage Daemon

A Bacula Director can virtually manage an infinite number of Storage Daemons as backup storage backends. These storage units can be used independently or grouped for load balancing and failover purposes through a Bacula Storage Group. In this case, multiple Storages can be separated by commas for use by the Pool or backup Job, and different load balancing policies can be used, as shown in the configuration examples below, in text and via Bweb (Figure 1).

Pool {
   ...
   Storage = File4, File5, File6
   StorageGroupPolicy = LeastUsed
   ...
}

Figure 1. Storage Group Configuration in Bacula’s Pool Resource (Bweb).

Director and Catalog

For this topic, there are two architecture models that can be used: a multi-master (or multi-Director) and a Director master-standby.

Multi-Director

In this architecture, multiple Directors are implemented, typically in different locations. Storage and File Daemons, if desired, can be managed by more than one Director. This architecture can typically be used by banks, where data centers are fully replicated. In this architecture, each Director has its own Catalog, which can eventually be shared among administrators.

However, administration can be more labor-intensive, as more than one instance of the backup system needs to be managed.

Director Master-Standby

In this mode, at any given time, only one instance of the Director should be active. Inactive Director replicas are installed and receive periodic replicas of configurations. In case of a disaster with the primary Director, one of the inactive Directors takes over to resume backup and restoration jobs.

As shown in Figure 2, Bacula’s PostgreSQL Catalog can follow the same Master-Standby logic as the Director’s machines or can have a separate set of machines with external access. 

Figure 2. PostgreSQL Master-Standby Replication

Regardless of the model adopted, here are examples of Admin Jobs for Director replication and PostgreSQL configuration for Bacula’s Catalog replication.

Replicating Director Configurations
Setting up the bacula user’s SSH key on Linux – Primary Director:
mkdir /opt/bacula/working/.ssh/
chown -R bacula /opt/bacula
sudo -u bacula ssh-keygen -t rsa
cat /opt/bacula/working/.ssh/id_rsa.pub # save contents for later.
Setting up the bacula user’s SSH key on Linux – Secondary Director:
mkdir /opt/bacula/working/.ssh/
chown -R bacula /opt/bacula
touch /opt/bacula/working/.ssh/authorized_keys
chmod -R 750 /opt/bacula/working/.ssh/
vi /opt/bacula/working/.ssh/authorized_keys

Open the content of rsa_id.pub from the primary machine /opt/bacula/working/.ssh/id_rsa.pub and paste it into the file /opt/bacula/working/.ssh/authorized_keys. Save and exit.

Ref.: https://www.hostinger.com.br/tutoriais/como-configurar-chaves-ssh

Create an Admin Job that Executes a Script to copy configurations to the secondary environment (Run Script Before Job):
Job={
  Type=Admin
  ...
  scp -i /opt/bacula/working/.ssh/id_rsa.pub -r /opt/bacula/etc/conf.d/Director/ bacula@<ip>://opt/bacula/etc/conf.d/
  scp -i /opt/bacula/working/.ssh/id_rsa.pub -r /opt/bacula/etc/bacula-dir.conf bacula@<ip>://opt/bacula/etc
}
PostgreSQL Master-Standby Catalog Replication
On the Primary Node:
# Create a user

 with replication permissions. Set a password.
sudo -u postgres createuser -U postgres repuser -P -c 5 --replication

mkdir /var/lib/pgsql/data/archive
chown -R postgres /var/lib/pgsql/data/archive/
# Add connection permission for the secondary node. Passive IP of the cluster
echo "host replication all 10.146.19.65/24 md5" >> /var/lib/pgsql/data/pg_hba.conf

vi /var/lib/pgsql/data/postgresql.conf
++
listen_addresses = '*' # it might already be configured
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/data/archive/%f && cp %p /var/lib/pgsql/data/archive/%f'
:x!
service postgresql reload # if it doesn't work, restart - which causes downtime

firewall-cmd --permanent --zone=public --add-port=5432/tcp
service firewalld restart
On the Secondary Node:
sudo service postgresql stop
mv /var/lib/pgsql/data /var/lib/pgsql/data.old
# Copy the primary's database (primary IP) to the secondary
sudo -u postgres pg_basebackup -h 10.145.19.35 -D /var/lib/pgsql/data -U repuser -v -P -X stream
# repuser password - VkR5#64%#n2H
vi /var/lib/pgsql/data/postgresql.conf
# Add:
hot_standby = on
promote_trigger_file = '/tmp/postgresql.trigger.5432'
restore_command = 'cp /var/lib/pgsql/data/archive/%f %p'
recovery_target_timeline = 'latest'
archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/data/archive %r'

#####
sudo -u postgres touch /var/lib/pgsql/data/standby.signal
service postgresql start
# Check the postgresql logs in /var/lib/pgsql/data/log to verify the replication status.

Ref.: https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby

Leave a Reply

Alta Disponibilidade, Clusterização e Replicação dos Serviços do Bacula

Alta Disponibilidade, Clusterização e Replicação dos Serviços do Bacula

Com recursos de failover e balanceamento de carga, o Bacula Enterprise permite que as organizações minimizem o tempo de inatividade, assegurando a continuidade das operações mesmo em caso de falhas de hardware, software ou outros eventos imprevistos. Além disso, sua arquitetura distribuída e escalável proporciona redundância e resiliência, permitindo a recuperação rápida de sistemas e dados críticos. Com a capacidade de criar ambientes altamente disponíveis, o Bacula Enterprise se destaca como uma solução confiável para empresas que buscam proteger seus ativos de dados de forma eficaz e constante.

Para implementarmos uma arquitetura de alta disponibilidade do Bacula, é necessário ter em mente todos os serviços que podem um ponto único de falha, como segue.

  1. Jobs de backups armazenados
  2. Storage Daemon
  3. Director (gerenciador) e Catálogo

Isto posto, vamos avaliar as possíveis funcionalidades para prover mais resiliência a desastres para cada um dos componentes.

Jobs de Backup

Os jobs de backup do Bacula ficam armazenados em discos, fitas e storage de nuvem, sempre gravados por um Storage Daemon. Dessa maneira, a proteção contra perda ou falhas passa por um ou mais dos seguintes métodos.

Proteções Físicas

Para disco a proteção de RAID6 para os volumes de backup é o mais recomendado e comum do mercado, suportando a tolerância de até dois disco com falhas. Para fitas, algumas fitotecas possuem a funcionalidade de “espelhamento” que permite a gravação simultânea em duas fitas com igual conteúdo. Para nuvem, proteções de cada provedor e replicação de storage de objetos, inclusive multi-região, podem ser utilizados. Tudo isso sem prejuízo de outras técnicas possíveis.

Funcionalidades do Cópia e Clone

Através do Bacula é possível configurar jobs do tipo Copy sequencialmente após o Job de backup terminado ou jobs de Clone que executam de maneira simultânea (Diretiva Run do Job). Dessa maneira, cópias entre dispositivos do mesmo Storage Daemon (ex.: disco para fita) e entre dispositivos de Storage Daemons diferentes permite a restauração dos dados em caso de perda de uma das mídias de backup.

Storage Daemon

Um Director do Bacula pode administrar virtualmente infinitos Storage Daemons como back-end de armazenamento do backup. Esses armazenamentos podem ser utilizados de maneira independente ou agrupados para fins de balanceamento de carga e fail-over através de um Storage Group do Bacula. Neste caso, múltiplos Storages podem ser separados por vírgulas para uso pelo Pool ou Job de backup, e diferentes políticas de balanceamento podem ser utilizadas, como nos exemplos de configuração a seguir, pelo texto e pelo Bweb (Figura 1).

Pool {
   ...
   Storage = File4, File5, File6
   StorageGroupPolicy = LeastUsed
   ...
}

Figura 1. Configuração do Storage Group no recurso Pool do Bacula (Bweb).

Director (gerenciador) e Catálogo

Para este tópico existem dois modelos de arquitetura que podem ser utilizados: uma multi-master (ou multi-Director), e outra de Director master-standby.

Multi-Director

Nessa arquitetura múltiplos Directors são implementados, tipicamente em sítios distintos. Os Storage e File Daemons, se desejados, podem ser manipulados por mais de um Director. Essa arquitetura pode ser tipicamente utilizada por bancos, nos quais os data center são inteiramente replicados. Nessa arquitetura cada Director possui seu próprio Catálogo, que eventualmente pode ter o acesso compartilhado entre os gerenciadores.

A administração no entanto pode ser mais trabalhosa, na medida que mais de uma encarnação do sistema de backup precisa ser administrada.

Director Master-Standby

Nessa modalidade, em um mesmo tempo, apenas uma instância do Director deve estar ativa. Replicas inativas do Director são instaladas e recebem réplicas periódicas das configurações. Em caso de desastre do Director principal, um dos Directors inativos assume para a retomada dos jobs de backup e restauração.

Conforme exibido na Figura 2, o Catálogo PostgreSQL do Bacula pode seguir a mesma lógica Master-Standby das máquinas dos Directors ou pode ter um conjunto de máquinas à parte com acesso externo.

Figura 2. Replicação Master-Standby do PostgreSQL

Seja como for o modelo adotado, seguem exemplos de Jobs Admin para réplica do Director e configuração do PostgreSQL para a réplica do Catálogo do Bacula.

Réplica das Configurações do Director
Configurar chave ssh usuário bacula no Linux – Director Primário:
mkdir /opt/bacula/working/.ssh/
chown -R bacula /opt/bacula
sudo -u bacula ssh-keygen -t rsa
cat /opt/bacula/working/.ssh/id_rsa.pub # save contents for later.
Configurar chave ssh usuário bacula no Linux – Director Secundário:
mkdir /opt/bacula/working/.ssh/
chown -R bacula /opt/bacula
touch /opt/bacula/working/.ssh/authorized_keys
chmod -R 750 /opt/bacula/working/.ssh/
vi /opt/bacula/working/.ssh/authorized_keys

Abra o conteúdo de rsa_id.pub da máquina primária /opt/bacula/working/.ssh/id_rsa.pub e cole no arquivo /opt/bacula/working/.ssh/authorized_keys. Salve e saia.

Ref.: https://www.hostinger.com.br/tutoriais/como-configurar-chaves-ssh

Criar Job Admin que Executa Script copia das configurações para ambiente secundário (Run Script Before Job):
Job={
  Type=Admin
  ...
  scp -i /opt/bacula/working/.ssh/id_rsa.pub -r /opt/bacula/etc/conf.d/Director/ bacula@<ip>://opt/bacula/etc/conf.d/
  scp -i /opt/bacula/working/.ssh/id_rsa.pub -r /opt/bacula/etc/bacula-dir.conf bacula@<ip>://opt/bacula/etc
}
Réplica do Catálogo PostgreSQL Master-Standby
No nó Primário:
# Crie um usuário com permissões de réplica. Definir senha.
sudo -u postgres createuser -U postgres repuser -P -c 5 --replication

mkdir /var/lib/pgsql/data/archive
chown -R postgres /var/lib/pgsql/data/archive/
# Add permissão conexão nó secundário. IP do passivo do cluster
echo "host replication all 10.146.19.65/24 md5" >> /var/lib/pgsql/data/pg_hba.conf

vi /var/lib/pgsql/data/postgresql.conf
++
listen_addresses = '*' # talvez já esteja configurado
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/data/archive/%f && cp %p /var/lib/pgsql/data/archive/%f'
:x!
service postgresql reload # se não funcionar, restart - que causa indisponibilidade

firewall-cmd --permanent --zone=public --add-port=5432/tcp
service firewalld restart
No nó Secundário:
sudo service postgresql stop
mv /var/lib/pgsql/data /var/lib/pgsql/data.old
# Copiar a base do primário (IP do primário) para o secundário
sudo -u postgres pg_basebackup -h 10.145.19.35 -D /var/lib/pgsql/data -U repuser -v -P -X stream
# senha repuser - VkR5#64%#n2H
vi /var/lib/pgsql/data/postgresql.conf
# Acrescentar:
hot_standby = on
promote_trigger_file = '/tmp/postgresql.trigger.5432'
restore_command = 'cp /var/lib/pgsql/data/archive/%f %p'
recovery_target_timeline = 'latest'
archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/data/archive %r'

#####
sudo -u postgres touch /var/lib/pgsql/data/standby.signal
service postgresql start
# Consulte os logs do postgresql em /var/lib/pgsql/data/log para verificar o status da replicação.

Ref.: https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby

Leave a Reply

Alta Disponibilidad, Cluster y Replicación de Servicios Bacula

Alta Disponibilidad, Cluster y Replicación de Servicios Bacula

Con recursos de conmutación por error y equilibrio de carga, Bacula Enterprise permite a las organizaciones minimizar el tiempo de inactividad, asegurando la continuidad de las operaciones incluso en caso de fallas de hardware, software u otros eventos imprevistos. Además, su arquitectura distribuida y escalable proporciona redundancia y resiliencia, permitiendo la recuperación rápida de sistemas y datos críticos. Con la capacidad de crear entornos altamente disponibles, Bacula Enterprise se destaca como una solución confiable para empresas que buscan proteger sus activos de datos de manera efectiva y constante.

Para implementar una arquitectura de alta disponibilidad de Bacula, es necesario tener en cuenta todos los servicios que pueden ser un punto único de falla, como se indica a continuación.

  1. Trabajos de copia de seguridad almacenados
  2. Storage Daemon
  3. Director (gestor) y Catálogo

Dicho esto, evaluaremos las posibles funcionalidades para proporcionar más resiliencia ante desastres para cada uno de los componentes.

Trabajos de Copia de Seguridad

Los trabajos de copia de seguridad de Bacula se almacenan en discos, cintas y almacenamiento en la nube, siempre grabados por un Storage Daemon. De esta manera, la protección contra pérdidas o fallas pasa por uno o más de los siguientes métodos.

Protecciones Físicas

Para los discos, la protección RAID6 para los volúmenes de copia de seguridad es la más recomendada y común en el mercado, admitiendo la tolerancia de hasta dos discos con fallas. Para las cintas, algunas bibliotecas de cintas tienen la funcionalidad de “espejo” que permite la grabación simultánea en dos cintas con contenido idéntico. Para la nube, se pueden utilizar las protecciones proporcionadas por cada proveedor y la replicación de almacenamiento de objetos, incluso en múltiples regiones. Todo esto sin perjuicio de otras técnicas posibles.

Funcionalidades de Copia y Clonación

A través de Bacula, es posible configurar trabajos del tipo Copia secuencialmente después de que se complete el trabajo de copia de seguridad o trabajos de Clonación que se ejecutan de manera simultánea (Directiva Run del Trabajo). De esta manera, las copias entre dispositivos del mismo Storage Daemon (por ejemplo, disco a cinta) y entre dispositivos de diferentes Storage Daemons permiten la restauración de datos en caso de pérdida de uno de los medios de copia de seguridad.

Storage Daemon

Un Director de Bacula puede administrar virtualmente un número infinito de Storage Daemons como almacenamiento en el backend de copia de seguridad. Estos almacenes pueden utilizarse de forma independiente o agruparse para fines de equilibrio de carga y conmutación por error a través de un Grupo de Almacenamiento de Bacula. En este caso, múltiples Almacenamientos pueden separarse por comas para su uso en el Pool o Trabajo de copia de seguridad, y pueden utilizarse diferentes políticas de equilibrio de carga, como se muestra en los ejemplos de configuración a continuación, mediante texto y Bweb (Figura 1).

Pool {
   ...
   Almacenamiento = File4, File5, File6
   PolíticaGrupoAlmacenamiento = MenosUtilizado
   ...
}

Figura 1. Configuración del Grupo de Almacenamiento en el recurso Pool de Bacula (Bweb).

Director (gestor) y Catálogo

Para este tema, existen dos modelos de arquitectura que pueden utilizarse: uno multi-master (o multi-Director) y otro de Director principal-standby.

Multi-Director

En esta arquitectura, se implementan múltiples Directores, generalmente en sitios diferentes. Los Storage y File Daemons, si se desean, pueden ser gestionados por más de un Director. Esta arquitectura se puede utilizar típicamente en bancos, donde los centros de datos se replican por completo. En esta arquitectura, cada Director tiene su propio Catálogo, que eventualmente puede compartirse entre los administradores.

Sin embargo, la administración puede ser más laboriosa, ya que se deben administrar más de una instancia del sistema de copia de seguridad.

Director Principal-Standby

En este modo, en un momento dado, solo una instancia del Director debe estar activa. Las réplicas inactivas del Director se instalan y reciben réplicas periódicas de las configuraciones. En caso de un desastre en el Director principal, una de las réplicas inactivas asume el control para reanudar los trabajos de copia de seguridad y restauración.

Como se muestra en la Figura 2, el Catálogo de PostgreSQL de Bacula puede seguir la misma lógica principal-standby que las máquinas de los Directores o puede tener un conjunto de máquinas separadas con acceso externo.

Figura 2. Replicación Principal-Standby de PostgreSQL

Sea cual sea el modelo adoptado, aquí hay ejemplos de Trabajos de Administración para la replicación del Director y la configuración de PostgreSQL para la replicación del Catálogo de Bacula.

Replicación de las Configuraciones del Director
Configurar la clave ssh del usuario bacula en Linux – Director Primario:
mkdir /opt/bacula/working/.

ssh/
chown -R bacula /opt/bacula
sudo -u bacula ssh-keygen -t rsa
cat /opt/bacula/working/.ssh/id_rsa.pub # guardar el contenido para más tarde.
Configurar la clave ssh del usuario bacula en Linux – Director Secundario:
mkdir /opt/bacula/working/.ssh/
chown -R bacula /opt/bacula
touch /opt/bacula/working/.ssh/authorized_keys
chmod -R 750 /opt/bacula/working/.ssh/
vi /opt/bacula/working/.ssh/authorized_keys

Abra el contenido de rsa_id.pub de la máquina primaria /opt/bacula/working/.ssh/id_rsa.pub y péguelo en el archivo /opt/bacula/working/.ssh/authorized_keys. Guarde y salga.

Ref.: https://www.hostinger.com.br/tutoriais/como-configurar-chaves-ssh

Crear un Trabajo de Administración que Ejecute un Script de copia de las configuraciones al entorno secundario (Ejecutar Script Antes del Trabajo):
Trabajo={
  Tipo=Admin
  ...
  scp -i /opt/bacula/working/.ssh/id_rsa.pub -r /opt/bacula/etc/conf.d/Director/ bacula@<ip>://opt/bacula/etc/conf.d/
  scp -i /opt/bacula/working/.ssh/id_rsa.pub -r /opt/bacula/etc/bacula-dir.conf bacula@<ip>://opt/bacula/etc
}
Replicación del Catálogo PostgreSQL Principal-Standby
En el Nodo Principal:
# Crear un usuario con permisos de replicación. Establecer una contraseña.
sudo -u postgres createuser -U postgres repuser -P -c 5 --replication

mkdir /var/lib/pgsql/data/archive
chown -R postgres /var/lib/pgsql/data/archive/
# Agregar permisos de conexión para el nodo secundario. IP pasiva del clúster
echo "host replication all 10.146.19.65/24 md5" >> /var/lib/pgsql/data/pg_hba.conf

vi /var/lib/pgsql/data/postgresql.conf
++
listen_addresses = '*' # tal vez ya esté configurado
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/data/archive/%f && cp %p /var/lib/pgsql/data/archive/%f'
:x!
service postgresql reload # si no funciona, reiniciar, lo que causa una indisponibilidad

firewall-cmd --permanent --zone=public --add-port=5432/tcp
service firewalld restart
En el Nodo Secundario:
sudo service postgresql stop
mv /var/lib/pgsql/data /var/lib/pgsql/data.old
# Copiar la base de datos desde el primario (IP del primario) al secundario
sudo -u postgres pg_basebackup -h 10.145.19.35 -D /var/lib/pgsql/data -U repuser -v -P -X stream
# contraseña repuser - VkR5#64%#n2H
vi /var/lib/pgsql/data/postgresql.conf
# Agregar:
hot_standby = on
promote_trigger_file = '/tmp/postgresql.trigger.5432'
restore_command = 'cp /var/lib/pgsql/data/archive/%f %p'
recovery_target_timeline = 'latest'
archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/data/archive %r'

#####
sudo -u postgres touch /var/lib/pgsql/data/standby.signal
service postgresql start
# Consulte los registros de postgresql en /var/lib/pgsql/data/log para verificar el estado de la replicación.

Ref.: https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby

Leave a Reply