2021-8-2

1.DNS服务器

1.1 DNS服务器原理

简述:DNS服务器原理

DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与ip地址的解析服务

DNS的四个域:

# 分为四个域
1. 根域: "."    (IPV4根名称服务器:全球有13台根服务器,美国10个,荷兰,日本,瑞典各一台)
2. 顶级域: .com(商业机构).cn(中国).edu(教育).gov(政府).mil(军事).net(网络).org(非营利).int(国际)in-addr.arpa(反向域)特殊
3. 二级域:如.baidu.com等等
4. 子域:比如,mail.example.com和calendar.example.com是example.com的两个子域,而example.com则是顶级域.com的子域

DNS服务工作过程:

1. 当DNS客户机要查询程序中名称时,会先查询本地DNS服务器来解析该名称,发送消息包括:[FQDN指定的域名;查询类型;域名的指定类型];
2. DNS服务器,始终应指定为Internet类别,并且指定的查询类型用于通过该名称搜索地址资源记录;
3. DNS查询以各种不同方式进行解析,客户机有时也可通过从以前查询获得的缓存信息就地应答查询;
4. 客户机自己也可尝试联系其他的DNS服务器来解析名称;
# 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询

DNS和Internet域:

互联网域名系统由名称注册机构负责维护分配由组织和国家/地区的顶级域在Internet上进行管理,这些域名按照国际标准3166

资源记录:

1. DNS数据库中包含的资源记录(RR,resource record),每个RR标识数据库中的特定资源;
2. 我们在建立DNS服务器时,经常会用到SOA,NS,A之类的记录,在维护DNS服务器时,会用到MX,CNAME记录;

常见RR标识:

说明 时间ttl 类型 数据
起始授权机构 互联网 默认值60分钟 SOA 所有者名称,主DNS名称,序列号,刷新,重试间隔,过期时间,最小ttl
主机 互联网 记录特定ttl A 所有者名称,主机IP地址
名称服务器 互联网 记录特定ttl NS 所有者名称,名称服务器DNS名称
邮件交换器 互联网 记录特定ttl MX 所有者名称
别名 互联网 记录特定ttl CNAME 所有者名称

1.2 搭建实现智能DNS

实践:搭建并实现智能DNS。

利用view实现智能DNS:

view - 视图,将ACL和区域数据库实现对应关系,以实现智能DNS
1. 一个bind服务器可以定义多个view,每个view中可以定义一个或多个zone;
2. 每个view用来匹配一组客户端;
3. 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;

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

1.2.1 前提概要

目的:搭建DNS主从服务器架构,实现DNS服务冗余
环境要求:
1.DNS主服务器和WEB服务器1:10.0.0.8/24,172.16.0.8/16
2.WEB服务器2:10.0.0.7/24
3.WEB服务器3:172.16.0.7/16
4.DNS客户端1:10.0.0.6/24
5.DNS客户端2:172.16.0.6/16
前提准备:
1.关闭SElinux
2.关闭防火墙
3.时间同步

1.2.2 实现步骤

  1. DNS服务器的网卡配置

    #配置两个IP地址
    #eth0:10.0.0.8/24
    #eth1:172.16.0.8/16
    
  2. 主DNS服务器配置文件实现view

    [root@centos8 ~]# yum -y install bind
    [root@centos8 ~]# vim /etc/named.conf
    #在文件前加下面代码块
    acl beijingnet {
        10.0.0.0/24;
    };
    acl shanghainet {
        172.16.0.0/16;
    }
    acl othernet {
        any;
    };
    #注释掉下面配置
    // listen-on port 53 { 127.0.0.1; };
    // allow-query { localhost; };
    
    #创建view
    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";
    
  3. 实现区域配置文件

    [root@centos8 ~]# vim /etc/named.rfc1912.zones.bj
    zone "." IN {
        type hint;
        file "named.ca";
    };
    zone "hong.org" {
        type master;
        file "hong.org.zone.bj";
    };
    [root@centos8 ~]# vim /etc/named.rfc1912.zones.sh
    zone "." IN {
        type hint;
        file "named.ca";
    };
    zone "hong.org" {
        type master;
        file "hong.org.zone.sh";
    };
    [root@centos8 ~]# vim /etc/named.rfc1912.zones.other
    zone "hong.org" IN {
        type master;
        file "hong.org.zone.other";
    };
    

    给配置文件授权:

    [root@centos8 ~]# chgrp named /etc/named.rfc1912.zones.bj
    [root@centos8 ~]# chgrp named /etc/named.rfc1912.zones.sh
    [root@centos8 ~]# chgrp named /etc/named.rfc1912.zones.other
    
  4. 创建区域数据库文件

    [root@centos8 ~]# vim /var/named/hong.org.zone.bj
    $TTL 1D
    @ IN SOA master admin.hong.org. (
    		2021081017;serial
    		1D ; refresh
    		1H ; retry
    		1W ; expire
    		3H ); minimum
    		NS master
    master    A    10.0.0.8
    websrv    A    10.0.0.7
    www    CNAME    websrv
    
    [root@centos8 ~]# vim /var/named/hong.org.zone.sh
    $TTL 1D
    @ IN SOA master admin.hong.org. (
    		2021081017;serial
    		1D ; refresh
    		1H ; retry
    		1W ; expire
    		3H ); minimum
    		NS master
    master    A    10.0.0.8
    websrv    A    172.16.0.7
    www    CNAME    websrv
    
    [root@centos8 ~]# vim /var/named/hong.org.zone.other
    $TTL 1D
    @ IN SOA master admin.hong.org. (
    		2021081017;serial
    		1D ; refresh
    		1H ; retry
    		1W ; expire
    		3H ); minimum
    		NS master
    master    A    10.0.0.8
    websrv    A    127.0.0.1
    www    CNAME    websrv
    

    文件授权:

    [root@centos8 ~]# chgrp named /etc/hong.org.zone.bj
    [root@centos8 ~]# chgrp named /etc/hong.org.zone.sh
    [root@centos8 ~]# chgrp named /etc/hong.org.zone.other
    

    重启服务:
    [root@centos8 ~]# systemctl start named #第一次启动服务
    [root@centos8 ~]# rndc reload #不是第一次启动服务

  5. 实现位于不同区域的三个WEB服务器

    #分别在三台主机上安装http服务
    #在web服务器1:10.0.0.8/24实现
    [root@centos8 ~]# yum install httpd
    [root@centos8 ~]# echo www.hong.org in other > /var/www/html/index.html
    [root@centos8 ~]# systemctl start httpd
    
    #在web服务器2:10.0.0.7/16实现
    [root@centos7 ~]# yum install httpd
    [root@centos7 ~]# echo www.hong.org in BEIJING > /var/www/html/index.html
    [root@centos7 ~]# systemctl start httpd
    
    #在web服务器3:172.16.0.7/16实现
    [root@centos7 ~]# yum install httpd
    [root@centos7 ~]# echo www.hong.org in Shanghai > /var/www/html/index.html
    [root@centos7 ~]# systemctl start httpd
    
  6. 客户端测试

    # 分别在三台主机上访问
    # DNS客户端1:10.0.0.6/24 实现,确保DNS指向10.0.0.8
    [root@centos6 ~]# curl www.hong.org
    www.hong.org in BEIJING
    
    # DNS客户端2:172.16.0.6/16 实现,确保DNS指向172.16.0.8
    [root@centos6 ~]# curl www.hong.org
    www.hong.org in Shanghai
    
    # DNS客户端3:10.0.0.8 实现,确保DNS指向127.0.0.1
    [root@centos6 ~]# curl www.hong.org
    www.hong.org in other
    
2.MySQL数据库

2.1 mysql数据类型

简述:mysql数据库类型

2.1.1数值类型

# 类型 -- 大小 -- 用途 -- 范围
TINYINT -- 1 byte -- 小整数值 -- (-128,127) 
SMALLINT -- 2 bytes -- 大整数值 --(-32767,32767) 
MEDIUMINT -- 3 bytes -- 大整数值 -- 
INT INTEGER -- 4 bytes -- 大整数值 --
BIGINT -- 8 bytes -- 极大整数值 -- 
FLOAT  -- 4 bytes -- 单精度,浮点数值 --
DOUBLE -- 8 bytes -- 双精度,浮点数值 --
DECIMAL -- 依赖M和D值 -- 小数值 --

2.1.2日期和时间类型

# 类型 -- 大小 -- 用途 -- 格式 -- 范围
DATE -- 3 bytes -- 日期值 -- YYYY-MM-DD -- 1000-01-01/9999/12/31
TIME -- 3 bytes -- 时间值或持续时间 -- HH:MM:SS -- '-838:59:59'/'838:59:59'
YEAR -- 1 byte -- 年份值 -- YYYY -- 1901/2155
DATETIME -- 8 bytes -- 混合日期和时间值 -- YYYY-MM-DD HH:MM:SS -- '1000-01-01 00:00:00/9999-12-31 23:59:59'
TIMESTAMP -- 4 byte -- 混合日期和时间值,时间戳 YYYYMMDD HHMMSS -- '1970-01-01 00:00:00/2038'

2.1.3字符串类型

# 类型 -- 用途 -- 大小
CHAR -- 定长字符串 -- 0-255 bytes
VARCHAR -- 变长字符串 -- 0-65535 bytes
TINYBLOB -- 不超过255个字符的二进制字符串 -- 0-255 bytes
TINYTEXT -- 短文本字符串 -- 	0-255 bytes
BLOB -- 二进制形式的长文本数据 --  0-65535 bytes
TEXT -- 长文本数据 -- 0-65535 bytes
MEDIUMBLOB -- 二进制形式的中等长度文本数据 -- 0-16777215 bytes
MEDIUMTEXT -- 中等长度文本数据 -- 	0-16777215 bytes
LONGBLOG -- 二进制形式极大文本数据 -- 0-4294967295 bytes
LONGTEXT -- 极大文本数据 -- 0-4294967295 bytes

2.2 编译二进制安装mysql5.7多实例

实践:通过编译、二进制安装MySQL5.7多实例

2.2.1概要

  • 准备一台Linux主机,在上面安装两个或以上mysql5.7数据库实例
  • 分别定义为3306,3307,... 供不通的应用使用

2.2.2二进制mysql安装包准备

[root@centos7 ~]# mkdir /usr/local/src/mysql-5.7
[root@centos7 ~]# cd /usr/local/src/mysql-5.7
#下载二进制包
[root@centos7 mysql-5.7]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

2.2.3环境准备

# 解压包
[root@centos7 mysql-5.7]# tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@centos7 mysql-5.7]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.26
# 配置环境变量
[root@centos7 ~]# vim /etc/profile
PATH=$PATH:/usr/local/mysql-5.7.26/bin
[root@centos7 ~]# source /etc/profile

2.2.4配置目录准备

# 配置数据目录
[root@centos7 ~]# mkdir -pv /app/mysql-5.7.26/data/{3306,3307}
# 配置日志目录
[root@centos7 ~]# mkdir -pv /app/mysql-5.7.26/log/{3306,3307}
# 配置socket目录 
[root@centos7 ~]# mkdir -p /var/lib/mysql/{3306,3307}
# 配置pid目录
[root@centos7 ~]# mkdir -p /var/run/mysqld/{3306,3307}

2.2.5用户授权

# 目录授予mysql用户权限
[root@centos7 ~]# chown -R mysql:mysql /app/mysql-5.7.26/
[root@centos7 ~]# chown -R mysql:mysql /var/lib/mysql
[root@centos7 ~]# chown -R mysql:mysql /var/run/mysqld

2.2.6配置文件准备

[root@centos7 ~]# mkdir /etc/mysql
[root@centos7 ~]# chown -R mysql:mysql /etc/mysql/
# 3306实例配置文件
[root@centos7 ~]# vim /etc/mysql/my-3306.cnf
[mysqld]
user=mysql
port=3306
datadir=/app/mysql-5.7.26/data/3306
socket=/var/lib/mysql/3306/mysql.sock
server_id=3306
symbolic-links=0
pid-file=/var/run/mysqld/3306/mysqld.pid
log-error=/app/mysql-5.7.26/log/3306/mysqld.log

[mysqld_safe]
log-error=/app/mysql-5.7.26/log/3306/mysqld.log
# 3307实例配置文件
[root@centos7 ~]# vim /etc/mysql/my-3307.cnf
[mysqld]
user=mysql
port=3307
datadir=/app/mysql-5.7.26/data/3307
socket=/var/lib/mysql/3306/mysql.sock
server_id=3307
symbolic-links=0
pid-file=/var/run/mysqld/3307/mysqld.pid
log-error=/app/mysql-5.7.26/log/3307/mysqld.log

[mysqld_safe]
log-error=/app/mysql-5.7.26/log/3307/mysqld.log

2.2.7初始化数据库

# 初始化3306库
[root@centos7 ~]# mysqld --defaults-file=/etc/mysql/my-3306.cnf --initialize --basedir=/usr/local/mysql-5.7.26/ --datadir=/app/mysql-5.7.26/data/3306
# 初始化3307库
[root@centos7 ~]# mysqld --defaults-file=/etc/mysql/my-3307.cnf --initialize --basedir=/usr/local/mysql-5.7.26/ --datadir=/app/mysql-5.7.26/data/3307

从日志文件查看随机生成的root密码,用于首次登陆数据库

# 查实例3306的初始密码
[root@centos7 ~]# cat /app/mysql-5.7.26/log/3306/mysqld.log |grep password
# 查实例3307的初始密码
[root@centos7 ~]# cat /app/mysql-5.7.26/log/3307/mysqld.log |grep password

2.2.8启动数据库服务

[root@centos7 ~]# mysqld_safe --defaults-file=/etc/mysql/my-3306.cnf&
[root@centos7 ~]# mysqld_safe --defaults-file=/etc/mysql/my-3307.cnf&
# 查看mysql进程
[root@centos7 ~]# ps -ef|grep mysqld

2.2.9本机登录验证

# 本地登录3306数据库
[root@centos7 ~]# mysql -uroot -p -S /var/lib/mysql/3306/mysql.sock
...
mysql> alter user 'root'@'localhost' identified by '3306password';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 本地登录3307数据库
[root@centos7 ~]# mysql -uroot -p -S /var/lib/mysql/3307/mysql.sock
...
mysql> alter user 'root'@'localhost' identified by '3307password';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2.2.10设置远程访问权限

# 设置3306远程权限
[root@centos7 ~]# mysql -uroot -p -S /var/lib/mysql/3306/mysql.sock
mysql> use mysql;
mysql> update user set host='%' where user='root';
mysql> flush privileges;
# 设置3307远程权限
[root@centos7 ~]# mysql -uroot -p -S /var/lib/mysql/3307/mysql.sock
mysql> use mysql;
mysql> update user set host='%' where user='root';
mysql> flush privileges;