保持两个或多个数据库同步的最佳方法是什么?

保持两个或多个数据库同步的最佳方法是什么?

我有两个 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 隧道。

答案1

因为你是在 SF 上问这个问题,而不是数据库我会给你一个不复制数据库的答案。

你想复制一个DNS

官方的说法是对等 DNS 或可能提升为主要 DNS 的辅助 DNS。

无论如何,您的主 DNS 都必须将更改推送至对等/辅助 DNS。

这是通过第 7 层的 DNS 协议完成的。因此无需复制数据库。

答案2

在查看答案并在谷歌上搜索问题后,最简单的方法是使用 rsync 创建一个 mariaDB 集群

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]"
....

答案3

您可以尝试 percona xtraDB
我实际上正在使用它来同步来自 open-xchange 服务器的数据库

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

答案4

使用 mariadb 复制。不要想太多。“MySQL [mariadb] 复制已被证明非常强大且非常适合,即使在对等程度较差的 ISP 之间的跨大西洋连接上也是如此。其他 PowerDNS 用户使用 Oracle 复制,效果也非常好。”https://doc.powerdns.com/md/authoritative/modes-of-operation/

相关内容