DNS 서비스 구성 및 MariaDB 컴파일 및 설치

1. DNS 서버의 원리를 간략히 설명하고 마스터-슬레이브 서버를 구축

DNS 서비스의 원리

DNS 서비스는 IP 주소와 웹 사이트 도메인 이름 간의 통신을 유지합니다. 사람들이 온라인에 접속할 때 주로 웹 사이트의 도메인 이름을 통해 인터넷의 다양한 리소스에 액세스합니다. 인터넷상의 컴퓨터는 IP 주소를 사용하여 서로를 식별합니다.
DNS 서버는 도메인 이름을 IP 주소로 확인할 수 있으며,이를 현재 정방향 확인이라고합니다. 또한 DNS 서버는 IP 주소를 도메인 이름으로 확인할 수도 있는데,이를 현재 역방향 확인이라고합니다. 사람들이 웹 사이트를 방문 할 때 그것은 전방 분석입니다.
컴퓨터가 www.example.com에 액세스하는 프로세스는 다음과 같습니다.
1. 사용자의 컴퓨터는 먼저 로컬 호스트 파일과 DNS 캐시를 쿼리하여 도메인 이름 www.example.com에 대한 확인 레코드가 있는지 확인합니다. 그렇다면 분석 기록을 바탕으로 www.example.com을 직접 방문하십시오. 그렇지 않은 경우이 컴퓨터에서 설정 한 DNS 서버로 도메인 이름 확인 요청을 보냅니다.
2. DNS 서버가 요청을 수신 한 후 먼저 서버에 도메인 이름에 대한 확인 레코드가 있는지 확인합니다. 그렇다면 DNS 서버는 확인 레코드를 사용자 컴퓨터로 직접 보냅니다. 그렇지 않은 경우 DNS 서버는이 확인 요청을 루트 도메인 이름 서버로 보냅니다.
3. DNS 서버에서 쿼리 요청을 수신 한 루트 도메인 이름 서버는 웹 사이트 도메인 이름의 첫 번째 수준 도메인 이름, 즉 .com에 해당하는 도메인 이름 서버의 IP 주소를 DNS 서버로 보냅니다.
4. .com 도메인 이름 서버의 IP 주소를 수신 한 후 DNS 서버는 .com 도메인 이름 서버에 www.example.com의 IP 주소를 쿼리합니다. .com 도메인 이름 서버는 웹 사이트 도메인 이름의 두 번째 수준 도메인 이름, 즉 example.com에 해당하는 도메인 이름 서버의 IP 주소를 DNS 서버로 보냅니다.
5. example.com 도메인 이름 서버의 IP 주소를 수신 한 DNS 서버는 example.com 도메인 이름 서버에 쿼리 요청을 보냅니다. example.com 도메인 이름 서버는 www.example.com 도메인 이름의 서버 IP 주소를 DNS 서버로 보냅니다.
6. DNS 서버는 www.example.com 도메인 이름에 해당하는 IP 주소를받은 후이 정보를 사용자의 컴퓨터로 보냅니다.
7. 사용자 컴퓨터는 www.example.com 도메인 이름에 해당하는 IP 주소를받은 후 해당 서버에 직접 액세스하여이 도메인 이름의 DNS 캐시를 생성합니다.

처음으로 웹 사이트의 도메인 이름을 확인할 때 두 가지 쿼리 방법이 사용되었습니다.
재귀 쿼리 : 사용자 컴퓨터가 호스트 파일, 로컬 DNS 캐시 및 DNS 서버를 순차적으로 쿼리합니다.
반복 쿼리 : DNS 서버가 루트 도메인 이름 서버, 첫 번째 수준 도메인 이름 서버, 두 번째 수준 도메인 이름 서버, 세 번째 수준 도메인 이름 서버 및 더 많은 도메인 이름을 차례로 쿼리하는 프로세스입니다.

DNS 마스터-슬레이브 서버 구축

DNS 마스터 및 슬레이브 서버를 구축하고 테스트하려면 4 개의 가상 머신이 필요합니다.

  • DNS 마스터 서버
  • DNS 슬레이브 서버
  • 웹 서버
  • 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