我准备创建一个需要 DNS 服务器的新网站。它可能有超过 10,000 个区域,随着规模的扩大,区域文件也会越来越多。问题是,您认为哪种 DNS 服务器软件更高效:mydns
哪个使用 mysql 来存储数据,bind
哪个使用平面文件?这些 DNS 服务器如何处理负载平衡,以便我们可以在多台服务器之间平衡负载,避免任何一台服务器过载?
答案1
在我看来,BIND 更好。它易于配置,除非升级软件,否则无需重新启动 BIND。您应该查看 BIND 的 rndc 命令。Rndc 允许您重新加载单个区域,同时保持 BIND 运行。如果您编辑了区域文件,rndc 将立即发布更改。
BIND 完全有可能依靠数据库运行。您需要在 ./configure 步骤中指定一些步骤。
我有一些很好的说明,但它们是俄语的。我会尝试写一个小行动计划。
- 假定 MySQL 服务器已经安装并配置。
- 从网站下载 mysql-bind 项目http://mysql-bind.sourceforge.net/(这里我们需要两个文件:mysqldb.c 和 mysqldb.h)。
跳转到下载文件的文件夹进行解压:
cd ~/下载/tar -xzf mysql-bind.tar.gz
跳转到端口并下载源代码bind9(您的mysql-bind版本是为该服务设计的)。虽然不编译!
cd /usr/ports/dns/bind9 进行提取
将下载的 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/
跳转到包含源 (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()
;。
- 添加头文件 #include
安装绑定:
cd /usr/ports/dns/bind 执行 make install
为每个区域创建其表mysql:
创建表 table_name(name varchar(255)默认 NULL,ttl int(11)默认 NULL,rdtype varchar(255)默认 NULL,rdata varchar(255)默认 NULL)TYPE=MyISAM;
为区域创建必要的记录:
插入表名值('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');
在named.conf文件中规定正确的区域:
区域“smol.website.ru”{类型主;通知否;数据库“mysqldb数据库名称表名称mysql_ip_address登录密码”;};
- 要特别注意,最后一行应该指定用户名和密码。信息以未加密的形式存储,这当然很危险!因此有两种方法:作为一些技巧,将代码保存在编码代码中,或者在数据库中创建用户登录“绑定”和传递“绑定”,并将其置于特权选择中。
- 我为我的英语不好而道歉。希望这能有所帮助。
- 该说明是为 freebsd 编写的,对于 Linux 应该类似
答案2
http://mysql-bind.sourceforge.net/将为您添加的每个区域创建表,如果您要托管超过 100k 个区域,那就真的很糟糕了。