DNS 服务器 bind 和 mydns 哪个更好?

DNS 服务器 bind 和 mydns 哪个更好?

我准备创建一个需要 DNS 服务器的新网站。它可能有超过 10,000 个区域,随着规模的扩大,区域文件也会越来越多。问题是,您认为哪种 DNS 服务器软件更高效:mydns哪个使用 mysql 来存储数据,bind哪个使用平面文件?这些 DNS 服务器如何处理负载平衡,以便我们可以在多台服务器之间平衡负载,避免任何一台服务器过载?

答案1

在我看来,BIND 更好。它易于配置,除非升级软件,否则无需重新启动 BIND。您应该查看 BIND 的 rndc 命令。Rndc 允许您重新加载单个区域,同时保持 BIND 运行。如果您编辑了区域文件,rndc 将立即发布更改。

BIND 完全有可能依靠数据库运行。您需要在 ./configure 步骤中指定一些步骤。

我有一些很好的说明,但它们是俄语的。我会尝试写一个小行动计划。

  1. 假定 MySQL 服务器已经安装并配置。
  2. 从网站下载 mysql-bind 项目http://mysql-bind.sourceforge.net/(这里我们需要两个文件:mysqldb.c 和 mysqldb.h)。
  3. 跳转到下载文件的文件夹进行解压:

    cd ~/下载/tar -xzf mysql-bind.tar.gz

  4. 跳转到端口并下载源代码bind9(您的mysql-bind版本是为该服务设计的)。虽然不编译!

    cd /usr/ports/dns/bind9 进行提取

  5. 将下载的 mysql-bind 文件复制到 bind 的源中:

    cp ~/downloads/mysqldb.c /usr/ports/dns/bind9/work/bind-xxx/bin/named/ cp ~/downloads/mysqldb.h /usr/ports/dns/bind9/work/bind-xxx/bin/named/include/named/

  6. 跳转到包含源 (work/bind-xxx) 的文件夹并进行以下更改: a) 文件 bin/named/Makefile.in 内容如下:

    DBDRIVER_OBJS = mysqldb.@O@ DBDRIVER_SRCS = mysqldb.c

    运行命令mysql_config -cflags并将输出写入变量DBDRIVER_INCLUDES(例如DBDRIVER_INCLUDES = -I/usr/local/include/mysql -fno-strict-aliasing -pipe:)

    运行命令mysql_config -libs并将输出写入变量DBDRIVER_LIBS (例如DBDRIVER_LIBS = -L/usr/local/lib/mysql-lmysqlclient-lz-lcrypt-lm:)

    b)在文件中bin/named/main.c

    • 添加头文件 #include<named/mysqldb.h>
    • 在函数内部,在行前setup()添加一个调用。mysqldb_init()ns_server_create()
    • 在函数内部cleanup(),在后面添加 mysqldb_clear() ns_server_destroy();。
  7. 安装绑定:

    cd /usr/ports/dns/bind 执行 make install

  8. 为每个区域创建其表mysql:

    创建表 table_name(name varchar(255)默认 NULL,ttl int(11)默认 NULL,rdtype varchar(255)默认 NULL,rdata varchar(255)默认 NULL)TYPE=MyISAM;

  9. 为区域创建必要的记录:

    插入表名值('mydomain.com',259200,'SOA','mydomain.com. webmaster.mydomain.com. 2008092901 28800 7200 86400 28800'); 插入表名值('mydomain.com',259200,'NS','ns0.mydomain.com.'); 插入表名值('mydomain.com',259200,'NS','ns1.mydomain.com.'); 插入表名值('mydomain.com',259200,'MX','10 mail.mydomain.com.');插入表名值('w0.mydomain.com',259200,'A','192.168.1.1'); 插入表名值('w1.mydomain.com',259200,'A','192.168.1.2');

  10. 在named.conf文件中规定正确的区域:

    区域“smol.website.ru”{类型主;通知否;数据库“mysqldb数据库名称表名称mysql_ip_address登录密码”;};

  11. 要特别注意,最后一行应该指定用户名和密码。信息以未加密的形式存储,这当然很危险!因此有两种方法:作为一些技巧,将代码保存在编码代码中,或者在数据库中创建用户登录“绑定”和传递“绑定”,并将其置于特权选择中。
  12. 我为我的英语不好而道歉。希望这能有所帮助。
  13. 该说明是为 freebsd 编写的,对于 Linux 应该类似

答案2

http://mysql-bind.sourceforge.net/将为您添加的每个区域创建表,如果您要托管超过 100k 个区域,那就真的很糟糕了。

相关内容