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 实现步骤
-
DNS服务器的网卡配置
#配置两个IP地址 #eth0:10.0.0.8/24 #eth1:172.16.0.8/16
-
主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";
-
实现区域配置文件
[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
-
创建区域数据库文件
[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 #不是第一次启动服务 -
实现位于不同区域的三个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
-
客户端测试
# 分别在三台主机上访问 # 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.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;