江南才子 发表于 2021-6-30 16:28:14

域名系统DNS 二进制、源码编译MYSQL5.7

1、域名系统    DNS

1.1    名字解析介绍和DNS

  当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记
  忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是“不可能完成的任务”。那么如何解决这
  一难题呢?我们可以给每个网络设备起一个友好的名称,如:www.magedu.org,这种由文字组成的名
  称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称
  转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要
  功能,利用名称解析服务可以实现主机和IP的解耦,即:当主机IP变化时,只需要修改名称服务即可,
  用户仍可以通过原有的名称进行访问而不受影响。
  实现此服务的方法是多样的。如下面所述:
  本地名称解析配置文件:hosts
  Linux: /etc/hosts
  windows: %WINDIR%/system32/drivers/etc/hosts
  122.10.117.2 www.magedu.org
  93.46.8.89 www.google.com
  DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互
  映射的一个分布式数据库,能够使人更方便地访问互联网
  基于C/S架构,服务器端:53/udp, 53/tcp
  BIND:Bekerley Internet Name Domain,由 ISC (www.isc.org)提供的DNS软件实现DNS域名结构

1.2    DNS工作原理


[*]用户访问指定的域名时,将该请求发送给本地域名服务器,本地域名服务器先查看本机DNS缓存,看是否存在域名对应的ip地址缓存,如果存在相关记录则直接返回查询到的ip地址给用户。
[*]如果本地缓存没有该记录,则本地域名服务器把请求发送给系统设置的根域名服务器,然后根域服务器再返回被本地域名服务器一个查询域(根域的一级子域)的主域名服务器地址。
[*]本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该记录,则返回相关的下级(根域二级子域)域名服务器的地址
[*]重复上一步的查询,直到找到正确的记录,用户通过获取到的ip地址进行访问,同时本地域名服务器把返回的结果保存到缓存,供下次访问使用。

1.3DNS查询类型


[*]递归查询: 最终结果,负责到底
[*]迭代查询:最好结果,不负责到底

1.4解析类型


[*]FQDN ---> IP正向解析
[*]IP ---> FQDN 反向解析

1.5完整的查询请求经过的流程

Client --> hosts文件 --> Client DNS Service Local cache --> DNS Server(recursion递归) --> DNS Server Cache --> DNS iteration(迭代) --> 根 --> 顶级域名DNS --> 二级域名DNS...
1.6    配置DNS主从服务器

1.6.1    环境准备

需要4台主机
DNS主服务器: 10.0.0.8
DNS从服务器: 10.0.0.18
Web服务器:   10.0.0.7
DNS客户端:10.0.0.6

关闭Selinux
关闭防火墙
时间同步
1.6.2    配置步骤

  1.6.2.1    主DNS服务端配置

#yum install bind -y
#vim /etc/named.conf
#注释掉下面两行
options {
//    listen-on port 53 { 127.0.0.1; };
//    allow-query   { localhost; };

#只允许从服务器进行区域传输
    allow-transfer { 10.0.0.18;};

#vim /etc/named.rfc1912.zones
#加上这段
zone "magedu.org" IN {
    type master;
    file "magedu.org.zone";
};

#cp -p /var/named/named.localhost /var/named/magedu.org.zone
#如果没有 -p ,需要改权限, chgrp named magedu.org.zone
#ll /var/named/magedu.org.zone
-rw-r----- 1 root named 152 May 28 04:49 /var/named/magedu.org.zone

#vim /var/named/magedu.org.zone
$TTL 1D
@   IN SOAmaster admin.magedu.org. (
                  1   ; serial
                  1D; refresh
                  1H; retry
                  1W; expire
                  3H )    ; minimum
      NSmaster
      NSslave
masterA   10.0.0.8
slave   A   10.0.0.18
www   INCNAME   websrv
websrvINA       10.0.0.8
websrvINA       10.0.0.18


#systemctl start named            #第一次启动服务
#rndc reload                     #不是第一次启动服务  1.6.2.2    从DNS服务器配置

#yum -y install bind
#vim /etc/named.conf
#注释掉下面两行
//    listen-on port 53 { 127.0.0.1; };
//    allow-query   { localhost; };
    allow-transfer { none;};

#vim /etc/named.rfc1912.zones
#加上这段
zone "magedu.org" IN {
    type slave;
    masters { 10.0.0.8;};
    file "slaves/magedu.org.slave";                                                                  };
   
#systemctl status named                #第一次启动
#rndc reload                           #不是第一次启动
server reload successful
#ls /var/named/slaves/magedu.org.slave   #查看区域数据库文件是否生成
/var/named/slaves/magedu.org.slave  1.6.2.3    客户端测试主从DNS服务架构

#vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1="10.0.0.8"
DNS2="10.0.0.18"
#cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.8
nameserver 10.0.0.18

#验证DNS服务器是否可以查询
#yum -y install bind-utils Dig
#dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42729
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.magedu.org.            IN    A

;; ANSWER SECTION:
www.magedu.org.      86400    IN    CNAME    websrv.magedu.org.
websrv.magedu.org.    86400    IN    A    10.0.0.18
websrv.magedu.org.    86400    IN    A    10.0.0.8

;; AUTHORITY SECTION:
magedu.org.      86400    IN    NS    master.magedu.org.
magedu.org.      86400    IN    NS    slave.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.    86400    IN    A    10.0.0.8
slave.magedu.org.    86400    IN    A    10.0.0.18

;; Query time: 0 msec
;; SERVER: 10.0.0.8#53(10.0.0.8)
;; WHEN: Tue Jun 22 22:48:55 CST 2021
;; MSG SIZErcvd: 169

#在主服务器上停止DNS服务
#systemctl stop named

#验证辅DNS服务器仍然可以查询
#dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 31645
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.magedu.org.            IN    A

;; AUTHORITY SECTION:
magedu.org.      10800    IN    SOA    master.magedu.org. admin.magedu.org. 1 86400 3600 604800 10800

;; Query time: 1 msec
;; SERVER: 10.0.0.18#53(10.0.0.18)
;; WHEN: Tue Jun 22 23:03:01 CST 2021
;; MSG SIZErcvd: 92
2、智能DNS相关技术

2.1    bind中ACL

  ACL:把一个或多个地址归并为一个集合,并通过一个统一的名称调用
  注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面
  格式:
acl acl_name {
    ip;
    net/prelen;
    ……
};

#范例
acl bjnet {
    172.16.0.0/16;
    10.10.10.10;
};
2.2    bind有四个内置的acl


[*]none                没有一个主机
[*]any                  任意主机
[*]localhost          本机
[*]localnet             本机的IP同掩码运算后得到的网络地址

2.3   访问控制的指令


[*]allow-query { };                允许查询的主机,白名单
[*]allow-transfer { };             允许区域传送的主机,白名单
[*]allow-recursion { };         允许递归的主机,建议全局使用
[*]allow-update { };               允许更新区域数据库中的内容

2.4    view视图

2.4.1    视图:将ACL和区域数据库实现对应关系,以实现智能DNS


[*]一个bind服务器可定义多个view,每个view中可定义一个或多个zone
[*]每个view用来匹配一组客户端
[*]多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
  注意:

[*]一旦启用了view,所有的zone都只能定义在view中
[*]仅在允许递归请求的客户端所在view中定义根区域
[*]客户端请求到达时,是自上而下检查每个view所服务的客户端列表

2.4.2   view 格式

view VIEW_NAME {
      match_clients { bjnet ; };
      zone "magedu.org" {
            type master;
            file "magedu.org.zone.bj";
      };
      include "/etc/named.rfc1912.zones";
};

view VIEW_NAME {
      match_clinets { shnet; };
      zone "magedu.org" {
            type master;
            file "magedu.org.zone.sh";
      };
      include "/etc/named.rfc1912.zones"
};
2.5    实例: 利用view实现智能 DNS

2.5.1    DNS服务器的网卡配置

#配置两个IP地址
#ens33: 10.0.0.8/24
#ens37: 192.168.233.8/24
#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:69:25:9d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::9c5c:b7f5:f8c5:58b2/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:69:25:a7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.233.8/24 brd 192.168.233.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::50f2:1900:61d2:93d5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
2.5.2    主DNS服务端配置文件实现view

#vim /etc/named.conf
# 在文件最前面加下面行
acl bjnet {
    192.168.233.0/24;
    };

acl shnet {
    10.0.0.0/24;
};

acl othernet {
    any;
};

#注释掉下面两行
//listen-on port 53 { 127.0.0.1; };
//allow-query   { localhost; };

#创建view
viewbjview {                                                                                                                     
      match-clients {bjnet;};
    include "/etc/named.rfc1912.zones.bj";
};
   
viewshview {
      match-clients {shnet;};
    include "/etc/named.rfc1912.zones.sh";
};

viewotherview {
      match-clients {othernet;};
    include "/etc/named.rfc1912.zones.other";   
};
2.5.3    实现区域配置文件

#cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
#chgrp named /etc/named.rfc1912.zones.bj

#cp -p /etc/named.rfc1912.zones.bj /etc/named.rfc1912.zones.sh
#cp -p /etc/named.rfc1912.zones.bj /etc/named.rfc1912.zones.other
#ll /etc/named.rfc1912.zones*
-rw-r----- 1 root named 1096 Jun 22 21:35 /etc/named.rfc1912.zones
-rw-r----- 1 root named 1208 Jun 26 23:13 /etc/named.rfc1912.zones.bj
-rw-r----- 1 root named 1208 Jun 26 23:13 /etc/named.rfc1912.zones.other
-rw-r----- 1 root named 1208 Jun 26 23:13 /etc/named.rfc1912.zones.sh

#vim /etc/named.rfc1912.zones.bj
zone "." IN {
    type hint;
    file "named.ca";
};

zone "magedu.org" {
    type master;
    file "magedu.org.zone.bj";                                                                                                      
};

#vim /etc/named.rfc1912.zones.sh
zone "." IN {
    type hint;
    file "named.ca";
};

zone "magedu.org" {
    type master;
    file "magedu.org.zone.sh";                                                                                                      
};

#vim /etc/named.rfc1912.zones.other
zone "." IN {
    type hint;
    file "named.ca";
};

zone "magedu.org" {
    type master;
    file "magedu.org.zone.other";                                                                                                   
};
2.5.4    创建区域数据库文件

#vim magedu.org.zone.bj

$TTL1D
@   INSOA   master admin    (
                        2021062701;
                        1D;
                        1H;
                        1W;
                        3H );
    NSmaster
masterA   10.0.0.8
www   A   10.0.0.100      

#vim magedu.org.zone.sh

$TTL1D
@   INSOA   master admin    (
                        2021062701;
                        1D;
                        1H;
                        1W;
                        3H );
    NSmaster
masterA   10.0.0.8
www   A   192.168.233.100

#vim magedu.org.zone.other

$TTL1D
@   INSOA   master admin    (
                        2021062701;
                        1D;
                        1H;
                        1W;
                        3H );
    NSmaster
masterA   10.0.0.8
www   A   127.0.0.1   

#systemctl stauts named
#rndc reload
2.5.5    客户端验证

#yum -y install bind-utils
#host www.magedu.org 10.0.0.8
Using domain server:
Name: 10.0.0.8
Address: 10.0.0.8#53
Aliases:

www.magedu.org has address 192.168.233.100

#host www.magedu.org 192.168.233.8
Using domain server:
Name: 192.168.233.8
Address: 192.168.233.8#53
Aliases:

www.magedu.org has address 10.0.0.100
#host www.magedu.org 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

www.magedu.org has address 127.0.0.1
3、编译、二进制安装MYSQL5.7

3.1    通用二进制格式安装 MYSQL

3.3.1    创建用户

#groupadd -r -g 306 mysql
#useradd -r -g 306 -u 306 -d /data/mysql mysql
3.3.2    安装相关包

#yum -y install libaio numactl-libs
3.3.3    准备二进制程序文件

#wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz

# 二进制安装文件必须解压到/usr/local
#tar xf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
#cd /usr/local/
#ln -s mysql-5.7.33-linux-glibc2.12-x86_64/ mysql
#chown -R root.root /usr/local/mysql
3.3.4    配置环境变量

#echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
#. /etc/profile.d/mysql.sh
3.3.5    准备配置文件

#vim /etc/my.cnf


datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid


socket=/data/mysql/mysql.sock
3.3.6    生成数据库文件,并提前root密码

#mysqld --initialize --user=mysql --datadir=/data/mysql
#grep password /data/mysql/mysql.log
或者
#awk '/temporary password/{print $NF}' /data/mysql/mysql.log
-mYNGF8YiqJg
3.3.7    准备服务脚本和启动

#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld
#service mysqld start
Starting MySQL. SUCCESS!         
3.3.8    修改口令 ,并测试登录

#mysqladmin -uroot -p'-mYNGF8YiqJg' password 123.com
#mysql -uroot -p123.com
mysql: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database         |
+--------------------+
| information_schema |
| mysql            |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
3.3.9    设置开机启动

#vim /etc/rc.local
#添加下面内容
/etc/init.d/mysqld start
#chmod +x /etc/rc.local
3.2    源码编译安装MYSQL5.7

3.2.1    安装相关依赖包

#yum -y install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
3.2.2    创建用户和数据目录

#useradd -r -s /sbin/nologin -d /data/mysql mysql
#mkdir /data/mysql
#chown mysql.mysql /data/mysql/
3.3.3    下载并解压缩源码包

#wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-boost-5.7.31.tar.gz
#tar zxvf mysql-boost-5.7.31.tar.gz
#cd mysql-5.7.31/
3.3.4    源码编译安装MYSQL5.7

#cmake -DCMAKE_INSTALL_PREFIX=/app/mysql -DMYSQL_DATADIR=/data/mysql/ -DSYSCONFDIR=/etc/ -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost
#make && make install
页: [1]
查看完整版本: 域名系统DNS 二进制、源码编译MYSQL5.7