我有两个 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/