1、简述DNS服务器原理,并搭建主从服务器

DNS服务的原理

DNS服务负责维护IP地址和网站域名的对应关系。人们上网时主要通过网站的域名访问互联网的各种资源。互联网中的计算机是通过IP地址识别彼此的身份。
DNS服务器可以将域名解析为IP地址,此时称为正向解析。除此之外DNS服务器也可以将IP地址解析为域名,此时称为反向解析。当人们访问访问网站时,进行的是正向解析。
某台电脑访问www.example.com的流程如下:
1、用户的电脑首先查询本地的hosts文件和dns缓存是否有www.example.com这个域名的解析记录。如果有,就直接根据解析记录访问www.example.com。如果没有就会向此电脑设置的DNS服务器发出解析域名的请求。
2、DNS服务器收到请求后先查看本服务器是否有该域名的解析记录。如果有,DNS服务器就直接将解析记录发送给用户电脑。如果没有,DNS服务器会将这个解析请求发送给根域名服务器。
3、根域名服务器收到DNS服务器的查询请求后,将该网站域名中的一级域名即.com对应的域名服务器的IP地址发送给DNS服务器。
4、DNS服务器收到.com域名服务器的IP地址后,向.com域名服务器查询www.example.com的IP地址。.com域名服务器将该网站域名的二级域名即example.com对应的域名服务器的IP地址发送给DNS服务器。
5、DNS服务器收到example.com域名服务器的IP地址后,向example.com域名服务器发送查询请求。example.com域名服务器将www.example.com域名的服务器IP地址发送给DNS服务器。
6、DNS服务器收到www.example.com域名对应的IP地址后,将此信息发送到用户电脑。
7、用户电脑收到www.example.com域名对应的IP地址后,直接访问对应服务器,并且产生此域名的dns缓存。

在首次解析一个网站的域名时,使用了两种查询方式。
递归查询:用户电脑依次查询hosts文件、本地dns缓存、DNS服务器。
迭代查询:DNS服务器依次查询根域名服务器、一级域名服务器、二级域名服务器、三级域名服务器乃至更多级别的域名的过程。

搭建DNS主从服务器

搭建并且测试DNS主从服务器需要四台虚拟机

  • DNS主服务器
  • DNS从服务器
  • Web服务器
  • DNS客户端

每台虚拟机都要提前完成以下两点配置

  1. 关闭防火墙firewslld服务
  2. 关闭SELinux
# 1、配置主DNS服务端# 安装bind软件yum install -y bind # 编辑配置文件sed -i 's/listen-on port 53 { 127.0.0.1; };/#listen-on port 53 { 127.0.0.1; };/' /etc/named.confsed -i 's/allow-query     { localhost; };/#allow-query     { localhost; };/' /etc/named.confsed -i '21a \\tallow-transfer {192.168.0.51;};' /etc/named.confsed -i '$a \zone "example.com" IN { \    type master; \    file  "example.com.zone"; \};' /etc/named.rfc1912.zones  cat > /var/named/example.com.zone << EOF\$TTL 1D@   IN SOA  master admin.example.com. (                10  ; serial                                    1D  ; refresh                                    1H  ; retry                                    1W  ; expire                                    3H )    ; minimum                        NS   master            NS   slavemaster      A    192.168.0.12      slave       A    192.168.0.51www         A    192.168.0.50EOF# 检查配置文件是否存在问题named-checkconf && echo "config OK"# 启动dns服务systemctl start named# 2、配置从DNS服务端yum install bind -ysed -i 's/listen-on port 53 { 127.0.0.1; };/#listen-on port 53 { 127.0.0.1; };/' /etc/named.confsed -i 's/allow-query     { localhost; };/#allow-query     { localhost; };/' /etc/named.confsed -i '21a \\tallow-transfer {none;};' /etc/named.confsed -i '$a \zone "example.com" IN { \    type slave; \    masters {192.168.0.12;}; \    file  "slaves/example.com.slave"; \};' /etc/named.rfc1912.zones systemctl start named# 检查配置是否正确ls  /var/named/slaves/example.com.slave# 3、配置Web服务器yum install -y httpd echo www.example.com  > /var/www/html/index.htmlsystemctl start httpd# 4、配置客户端进行测试# 设置dns服务器的IP地址cat > /etc/resolv.conf  << EOFnameserver 192.168.0.12nameserver 192.168.0.51EOF# 测试DNS服务器的配置curl www.example.com# 也可以使用ping命令进行测试ping www.example.com# 让DNS主服务器停止DNS服务,再次使用客户端进行测试curl www.example.com

2、搭建并实现智能DNS

# 1、配置DNS服务器# 使用ip命令配置第二个ip地址ip addr add 172.16.10.11/16 dev ens37 yum install -y bind bind-utilscat > /etc/named.conf << EOFacl beijingnet {     192.168.0.0/24; }; acl shanghainet {     172.16.0.0/16; }; acl othernet {     any; }; options {    listen-on-v6 port 53 { ::1; };    directory   "/var/named";    dump-file   "/var/named/data/cache_dump.db";    statistics-file "/var/named/data/named_stats.txt";    memstatistics-file "/var/named/data/named_mem_stats.txt";    recursing-file  "/var/named/data/named.recursing";    secroots-file   "/var/named/data/named.secroots";    recursion yes;    dnssec-enable yes;    dnssec-validation yes;    bindkeys-file "/etc/named.root.key";    managed-keys-directory "/var/named/dynamic";    pid-file "/run/named/named.pid";    session-keyfile "/run/named/session.key";};logging {        channel default_debug {                file "data/named.run";                severity dynamic;        };};view beijingview {    match-clients { beijingnet; };    include "/etc/named.rfc1912.zones.bj";};view shanghaiview {    match-clients { shanghainet; };    include "/etc/named.rfc1912.zones.sh";};view otherview {    match-clients { othernet; };    include "/etc/named.rfc1912.zones.other";};include "/etc/named.root.key";EOFecho 'view beijingview {    match-clients { beijingnet; };    include "/etc/named.rfc1912.zones.bj";};view shanghaiview {    match-clients { shanghainet; };    include "/etc/named.rfc1912.zones.sh";};view otherview {    match-clients { othernet; };    include "/etc/named.rfc1912.zones.other";};include "/etc/named.root.key";' >> /etc/named.rfc1912.zonesecho 'zone "example.org" {    type master;    file "example.org.zone.bj";};' > /etc/named.rfc1912.zones.bjecho 'zone "example.org" {    type master;    file "example.org.zone.sh";};' > /etc/named.rfc1912.zones.shecho 'zone "example.org" {    type master;    file "example.org.zone.other";};' > /etc/named.rfc1912.zones.otherchgrp named /etc/named.rfc1912.zones.{bj,sh,other}cat > /var/named/example.org.zone.bj << EOF\$TTL 1D@   IN  SOA     master admin.example.org. (                        10  ;   serial                        1D  ;   refesh                        1H  ;   retry                        1W  ;   expire                        3H )    ;   minium            NS      mastermaster      A       192.168.0.12websrv      A       192.168.0.13www         CNAME   websrvEOFcat > /var/named/example.org.zone.sh << EOF\$TTL 1D@   IN  SOA     master admin.example.org. (                        10  ;   serial                        1D  ;   refesh                        1H  ;   retry                        1W  ;   expire                        3H )    ;   minium            NS      mastermaster      A       192.168.0.12websrv      A       172.168.0.12www         CNAME   websrvEOFcat > /var/named/example.org.zone.other << EOF\$TTL 1D@   IN  SOA     master admin.example.org. (                        10  ;   serial                        1D  ;   refesh                        1H  ;   retry                        1W  ;   expire                        3H )    ;   minium            NS      mastermaster      A       192.168.0.13websrv      A       127.0.0.1www         CNAME   websrvEOFchgrp named /var/named/example.org.zone.{bj,sh,other}named-checkconfsystemctl start named# 2、进行测试# 使用192.168.0.0/24网段的虚拟机进行测试yum install -y bind-utilsecho "nameserver 192.168.0.12" > /etc/resolv.confdig www.example.org @192.168.0.12# 使用172.16.0.0/16网段的虚拟机进行测试yum install -y bind-utilsecho "nameserver 172.16.10.11" > /etc/resolv.confdig www.example.org @172.16.10.11# 使用DNS网段的虚拟机进行测试echo "nameserver 192.168.0.12" > /etc/resolv.confdig www.example.org @127.0.0.1

编译安装Mariadb,并且启动后可以正常登录

# 卸载系统自带的mariadb-libs包yum remove mariadb-libs -y# 下载Mariadb 10.2版本的源码文件wet https://mirrors.huaweicloud.com/mariadb/mariadb-10.2.36/source/mariadb-10.2.36.tar.gz# 验证文件的完整性,将输出内容与华为开源镜像站里对应的sha256sum.txt的内容进行对比sha256sum mariadb-10.2.36.tar.gz # 解压源码压缩文件tar -xf mariadb-10.2.36.tar.gz # 安装mariadb依赖的软件包yum install -y git gcc gcc-c++ make cmake perl \pcre-devel openssl-devel bison bison-devel libxml2-devel \libevent-devel ncurses-devel libaio-devel zlib-devel \libcurl-devel libarchive-devel boost-devel# 创建mysql用户useradd -r -s /sbin/nologin -d /usr/local/mysql -M mysqlcd mariadb-10.2.36# 使用cmake生成makefilecmake . \-DCMAKE_INSTALL_PREFIX=/app/mysql \-DMYSQL_DATADIR=/data/mysql \-DSYSCONFDIR=/etc \-DMYSQL_USER=mysql \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1  \-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \-DWITH_DEBUG=0 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0 \-DENABLED_LOCAL_INFILE=1  \-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \> /dev/null && echo OK# 编译并且安装mariadb# -j参数用于指定编译的线程数,可以提高编译速度,不能设置得太大,否则会造成虚拟机死机make -j 7 > /dev/null && make install > /dev/null && echo OK# 设置环境变量,实现直接使用mysql命令echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh && . /etc/profile.d/mysql.sh# 初始化MariaDBcd /app/mysqlscripts/mysql_install_db --datadir=/data/mysql/ --user=mysql > /dev/null && echo OK# 复制配置文件cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf# 将启动脚本复制到/etc/init.d/,实现通过chkconfig命令管理mysqld服务cp /app/mysql/support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldservice mysqld start# 安全初始化MariaDBmysql_secure_installation# 使用root身份登录数据库mysql -uroot -p

更多相关文章

  1. 服务器软件大盘点!
  2. JQuery.AJAX - 我的服务器可以返回一大块数据吗?
  3. jQuery向服务器请求数据并处理
  4. 如何使用XMLHttpRequest向服务器发送数组
  5. 使用js和ajax从django服务器检索数据
  6. 使用jQuery.ajax post函数将javascript数组中的数据传递给服务器
  7. ASP.NET下使用jQuery UI下的Dialog,服务器端按钮无响应的问题。
  8. Jquery注册服务器控件事件与判断控件的值
  9. 与symfony一起使用ajax时出现500内部服务器错误

随机推荐

  1. android 热修复之类加载机制
  2. 解读Android LOG机制的实现:c/c++域使用LO
  3. Android音频口数据通信开发;通过静态分析
  4. android json访问php webservice
  5. Android中AsyncTask的简单用法 .
  6. android app 缓存 ---- android 文件缓存
  7. 如何在Android上显示wmf的文件
  8. Android(安卓)中Message,MessageQueue,Lo
  9. 【Android增量升级系列_02】 浅谈Android
  10. Android之Weight属性源码解析