配置DNS服务和编译安装MariaDB

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.conf
sed -i 's/allow-query     { localhost; };/#allow-query     { localhost; };/' /etc/named.conf
sed -i '21a \\tallow-transfer {192.168.0.51;};' /etc/named.conf
sed -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   slave
master      A    192.168.0.12      
slave       A    192.168.0.51
www         A    192.168.0.50
EOF

# 检查配置文件是否存在问题
named-checkconf && echo "config OK"

# 启动dns服务
systemctl start named

# 2、配置从DNS服务端

yum install bind -y

sed -i 's/listen-on port 53 { 127.0.0.1; };/#listen-on port 53 { 127.0.0.1; };/' /etc/named.conf
sed -i 's/allow-query     { localhost; };/#allow-query     { localhost; };/' /etc/named.conf
sed -i '21a \\tallow-transfer {none;};' /etc/named.conf
sed -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.html
systemctl start httpd

# 4、配置客户端进行测试

# 设置dns服务器的IP地址
cat > /etc/resolv.conf  << EOF
nameserver 192.168.0.12
nameserver 192.168.0.51
EOF

# 测试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-utils

cat > /etc/named.conf << EOF
acl 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";
EOF

echo '
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.zones

echo '
zone "example.org" {
    type master;
    file "example.org.zone.bj";
};
' > /etc/named.rfc1912.zones.bj

echo '
zone "example.org" {
    type master;
    file "example.org.zone.sh";
};
' > /etc/named.rfc1912.zones.sh

echo '
zone "example.org" {
    type master;
    file "example.org.zone.other";
};
' > /etc/named.rfc1912.zones.other

chgrp 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      master
master      A       192.168.0.12
websrv      A       192.168.0.13
www         CNAME   websrv
EOF

cat > /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      master
master      A       192.168.0.12
websrv      A       172.168.0.12
www         CNAME   websrv
EOF

cat > /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      master
master      A       192.168.0.13
websrv      A       127.0.0.1
www         CNAME   websrv
EOF

chgrp named /var/named/example.org.zone.{bj,sh,other}

named-checkconf
systemctl start named

# 2、进行测试

# 使用192.168.0.0/24网段的虚拟机进行测试
yum install -y bind-utils
echo "nameserver 192.168.0.12" > /etc/resolv.conf
dig www.example.org @192.168.0.12

# 使用172.16.0.0/16网段的虚拟机进行测试
yum install -y bind-utils
echo "nameserver 172.16.10.11" > /etc/resolv.conf
dig www.example.org @172.16.10.11

# 使用DNS网段的虚拟机进行测试
echo "nameserver 192.168.0.12" > /etc/resolv.conf
dig 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 mysql

cd mariadb-10.2.36

# 使用cmake生成makefile
cmake . \
-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

# 初始化MariaDB
cd /app/mysql
scripts/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/mysqld
chkconfig --add mysqld
service mysqld start

# 安全初始化MariaDB
mysql_secure_installation

# 使用root身份登录数据库
mysql -uroot -p

猜你喜欢

转载自blog.51cto.com/14920534/2593876