Назад | Перейти на главную страницу

Лучший способ синхронизировать две или более базы данных?

У меня есть два сервера PowerDNS, и я настроил записи зоны, которые изначально хранятся в mariaDB. Как лучше всего синхронизировать эти две базы данных?

Примечание :

Я хотел бы масштабировать это, чтобы использовать 5 серверов позже. В настоящее время данные будут добавлены на DNS-сервер 1 и будут скопированы только с DNS-сервера 1 на DNS-сервер 2. Если у меня будет больше DNS-серверов, я бы хотел, чтобы DNS-сервер 1 вышел из строя, тогда контент, созданный на DNS-сервере 2, будет обслуживать DNS-сервер 3 и так далее, и когда DNS 1 снова заработает, он будет синхронизироваться с DNS-сервером 2.

Также существует одна таблица, которая не будет синхронизироваться: это таблица, которую PowerDNS использует для хранения IP-адреса сервера и так далее.

Мой сервер может получить доступ к mariaDB только локально, поэтому для доступа удаленного компьютера к mariaDB потребуется туннель ssh.

Поскольку вы спрашиваете об этом в SF, а не в база данных Я дам вам ответ, который не копирует базу данных.

Вы хотите воспроизвести DNS.

Официальным средством для этого является либо одноранговый DNS, либо вторичный DNS, который может быть повышен до первичного.

В любом случае ваш основной DNS должен подталкивать изменения к одноранговому / вторичному серверу.

Это делается с помощью протокола DNS на уровне 7. Таким образом, нет необходимости реплицировать базы данных.

Самый простой способ после просмотра ответов и поиска проблемы в 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]"
....

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

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

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