Best way to keep two or more databases in sync?

I have two PowerDNS servers and have configured the zone records to be natively stored in mariaDB. What would be the best way to sync these two databases?

Note :

I would like to scale this to use 5 servers later on. Currently the data would be added to DNS server 1 and would only be copied from DNS server 1 to DNS server 2. If I have more DNS servers, I would like it if DNS server 1 goes down, then content created on DNS server 2 would serve DNS server 3 and so on and when DNS 1 is up again it would sync with DNS server 2.

There is also one table which will not be synced: that is the table that PowerDNS uses to store the server IP address and so on.

My server can only access mariaDB locally so for a remote computer to access mariaDB it would have to ssh tunnel.

2
задан 23 August 2017 в 02:32
4 ответа

Бидејќи ова го прашувате на СФ, а не на базата на податоци ќе ви дадам одговор што не ја повторува базата на податоци.

Сакате да ја реплицирате ] ДНС .

Официјалното средство за тоа е или врснички ДНС или секундарен ДНС што може да се унапреди во основно.

Во секој случај, вашиот главен ДНС треба да ги поттикне промените кон врсникот / секундарниот.

Тоа е направено со DNS протокол на слој 7. Значи, нема потреба да се реплицираат бази на податоци.

2
ответ дан 3 December 2019 в 10:34

Вы можете попробовать percona xtraDB
На самом деле я использую его для синхронизации баз данных с сервера open-xchange

https://www.percona.com/software/mysql-database/percona-xtradb-cluster

0
ответ дан 3 December 2019 в 10:34

Самый простой способ после просмотра ответов и поиска проблемы в Google - создать кластер mariaDB с rsync

Ubuntu 16.04.03 с использованием MariaDB 10.2.8 Шаги установки:

sudo apt-get install curl
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
sudo apt-get update
sudo apt-get install mariadb-server
sudo apt-get install rsync
sudo systemctl start rsync.service
sudo systemctl enable rsync.service
systemctl list-unit-files |grep rsync

на первом узел редактировать / etc / mysql / conf.d / galera.cnf

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="[Cluster name]"
wsrep_cluster_address="gcomm://[node1 ip],[node2 ip]"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="[node1 ip]"
wsrep_node_name="[node1 name]"

Остановить MariaDB и запустить первый узел в кластере

    systemctl stop mysql.service
    galera_new_cluster
    systemctl status mysql.service
    mysql -u root -p -e "show status like 'wsrep_cluster_size'"

        +--------------------+-------+
        | Variable_name      | Value |
        +--------------------+-------+
        | wsrep_cluster_size | 1     |
        +--------------------+-------+  

на втором узле отредактировать /etc/mysql/conf.d/galera.cnf

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="[Cluster name]"
wsrep_cluster_address="gcomm://[node1 ip],[node2 ip]"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="[node2 ip]"
wsrep_node_name="[node2 name]"

Остановить MariaDB и запустить второй узел в кластере

    systemctl stop mysql.service
    systemctl start mysql.service
    systemctl status mysql.service
    mysql -u root -p -e "show status like 'wsrep_cluster_size'"

        +--------------------+-------+
        | Variable_name      | Value |
        +--------------------+-------+
        | wsrep_cluster_size | 2     |
        +--------------------+-------+

Чтобы добавить больше узлов в кластер, просто отредактируйте /etc/mysql/conf.d/galera.cnf следующим образом:

....
wsrep_cluster_address="gcomm://[node1 ip],[node2 ip],[node3 ip],[node4 ip],[node5 ip]"
....
1
ответ дан 3 December 2019 в 10:34

Использовать репликацию mariadb. Не зацикливайтесь на этом. «Репликация MySQL [mariadb] оказалась очень надежной и хорошо подходящей даже для трансатлантических соединений между провайдерами с плохим пирингом. Другие пользователи PowerDNS используют репликацию Oracle, которая также работает очень хорошо». https://doc.powerdns.com/md/authoritative/modes-of-operation/

0
ответ дан 3 December 2019 в 10:34

Теги

Похожие вопросы