web-dev-qa-db-ja.com

2つ以上のデータベースの同期を維持するための最良の方法は?

2つのPowerDNSサーバーがあり、mariaDBにネイティブに保存されるようにゾーンレコードを構成しました。これら2つのデータベースを同期するための最良の方法は何でしょうか?

注:

後で5台のサーバーを使用するようにこれをスケーリングしたいと思います。現在、データはDNSサーバー1に追加され、DNSサーバー1からDNSサーバー2にのみコピーされます。DNSサーバーがさらにある場合は、DNSサーバー1がダウンした場合に、DNSサーバー2で作成されたコンテンツが必要になります。 DNSサーバー3などにサービスを提供し、DNS 1が再び起動すると、DNSサーバー2と同期します。

同期されないテーブルも1つあります。それは、PowerDNSがサーバーのIPアドレスなどを格納するために使用するテーブルです。

私のサーバーはmariaDBにローカルでしかアクセスできないため、リモートコンピューターがmariaDBにアクセスするには、トンネルをsshする必要があります。

2
Donno

データベースではなくSFでこれを求めているので、データベースを複製しない答えを示します。

[〜#〜] dns [〜#〜]を複製したい。

その公式の意味は、プライマリに昇格する可能性のあるピアDNSまたはセカンダリDNSのいずれかです。

いずれの場合も、メインDNSは変更をピア/セカンダリにプッシュする必要があります。

これは、レイヤー7のDNSプロトコルを使用して行われます。したがって、データベースを複製する必要はありません。

2
Nils

回答を確認して問題をグーグルした後の最も簡単な方法は、rsyncを使用してmariaDBクラスターを作成することでした。

MariaDB10.2.8セットアップ手順を使用したUbuntu16.04.03:

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     |
        +--------------------+-------+  

2番目のノードで/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を停止し、クラスターで2番目のノードを開始します

    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
Donno

Mariadbレプリケーションを使用します。考えすぎないでください。 「MySQL [mariadb]レプリケーションは、ピアリングの悪いISP間の大西洋横断接続でも、非常に堅牢で適切であることが証明されています。他のPowerDNSユーザーは、Oracleレプリケーションを採用しています。これも非常にうまく機能します。」 https://doc.powerdns.com/md/authoritative/modes-of-operation/

0
Mark Wagner

PerconaxtraDBを試すことができます
私は実際にそれを使用してopen-xchangeサーバーからデータベースを同期しています

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

0
Angel Porlan