Linux运维自动化学习笔记

2019-06-08  本文已影响0人  Villa_7ca5

1、详细叙述ansible的工作原理

ansible工作原理图1 ansible工作原理图2

以上是两张ansible工作原理图,两张图基本都是在架构图的基本上进行的拓展。从上面的图上可以了解到:

1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;
2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条[命令],我们可以称之为ad-hoc;
3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。

2、使用ansible在多台机器上添加用户

ansible 用户创建
当然,在 ansible 里可以用很多方法创建用户,例如:

ansible test -m shell -a 'useradd apple'
说明: 这个相当在远程主机中用 shell 命令创建用户,一般不推荐

其实,ansilbe 提供了一个 user 模块,用于创建和管理用户。
ansible 官方的user 模块的说明文档。

例如,创建一个有登录shell 的用户,用户名是 apple:
ansible test -m user -a 'name=apple shell=/bin/bash home=/home/apple state=present'
说明:
name 指定创建的用户名
shell 指定用户登录时获得的shell
home 为用户创建 HOME 目录
state 指定是创建还是删除用户,当 state=absent 时,为删除用户

如果需要在多台远程主机中创建用户

如果需要在多台远程主机中创建用户,只需将所有主机添加到一个主机组,再执行一遍上面的命令就可以了
ansible apps -m user -a 'name=apple shell=/bin/bash home=/home/apple/ state=present'
将所有要操作的远程主机添加到主机组 apps 中。

3、用ansible-playbook编译安装nginx服务

一、Ansible-server安装

安装方式:

1、从Ansible项目的GitHub源码库提取出来安装,运行Ansible不需root 权限,也不依赖于其他软件,没有后台进程运行,不需要数据库支撑。

2、使用yum安装,需要有合适的yum源,对于RHEL、CentOS的官方yum源中没有 Ansible安装包,这就需要先安装支持第三方的yum仓库组件,最常用的有EPEL、 Remi、RPMForge等。可国内速度较快的高质量yum源网易 163(http://mirrors.163.com)、阿里源(https://opsx.alibaba.com/mirror
注:这里实验使用的是默认的centos7自带的源,并使用yum直接安装

二、使用yum安装ansible

1、安装ansible yum –y install ansible
2、检查ansible版本: ansible –version

三、设置节点授权的ssh密钥

1、在Ansible服务端生成密钥 ssh-keygen
2、使用ssh-copy-id命令来复制Ansible公钥到节点web1和web2
1)复制Ansible公钥到节点web1 ssh-copy-id -i root@192.168.152.159
2)复制Ansible公钥到节点web2 ssh-copy-id -i root@192.168.152.160

四、配置Ansible定义文件

1、编辑ansible配置文件 vi /etc/ansible/hosts
注:将需要ansible自动化的节点IP添加到这里
2、测试在ansible服务端运行命令(在互相能ping通的情况下)
ansible -m ping 'web-servers'

五、执行shell命令

1)查看ansible节点运行时间(uptime) 
ansible -m command -a "uptime" 'web-servers'
2)查看节点内核版本(uname -r)
ansible -m command -a "uname -r" 'web-servers'
注:以上操作部署已完成ansible服务搭建

六、批量部署nginx服务器

两种Ansible批量部署nginx服务器方式
方式一:yum安装nginx,使用的是epel-release源
方式二:使用nginx.tar压缩包解压安装nginx
1、在/root/目录下创建Ansible YAML文件 vi nginx.yaml
注释:
第1行表示该文件是YAML文件,非必须
第2行定义该playbook针对的目标主机,all表示针对所有主机
第3行定义该playbook所有的tasks集合,比如下面我们定义的3个task
第4行定义一个task的名称,非必须,建议根据task实际任务命名
第5行定义一个状态的action,比如这里使用yum模块实现Nginx软件包的安装
第6行到第9行使用template模板去管理/etc/nginx/nginx.conf文件,owner group定义该文件的属主以及属组,使用validate参数指文件生成后使用nginx -t -c %s命令去做Nginx文件语法验证,notify是触发handler状态,如果同步后,文件 的MD5值有变化会触发ReStart Nginx Service这个handler
第10行到第12行是定义一个handler状态让Nginx服务重启,handler的名称是 ReStart Nginx Service
注:书写yaml文件时,注意左对齐,同级别应在同一列下,并且不能使用Tab键,可以使用空格(随便空格几个都行,但是同一级别必须对齐)
2、检测YAML文件
ansible-playbook nginx.yaml --syntax-check nginx.yaml
3、查看YAML文件任务列表
ansible-playbook nginx.yaml --list-task
4、查看针对哪些主机做操作
ansible-playbook nginx.yaml --list-hosts
5、给两个节点安装epel-release源
ansible web-servers -m shell -a 'yum -y install epel-release' -i /etc/ansible/hosts
6、给两个节点安装nginx
ansible web-servers -m shell -a 'yum -y install nginx' -i /etc/ansible/hosts
7、编辑本地nginx.conf.j2文件
(因为本地没有安装nginx所以没有这个文件需要从节点拷贝到当前/root/下再修改,并以这个修改过的模板来下发给节点)
 注:根据实际情况要求修改(我这里使用的默认)
8、确认信息是否正确
ansible-playbook -i /etc/ansible/hosts nginx.yaml -f 2
9、这样我们就完成了 3台机器的Nginx安装部署,下面需要对主机的Nginx服务进行核查,并且确认生成后nginx.conf中的worker_processes参数的值是否正确,执行命令:
ansible -i /etc/ansible/hosts all -m shell -a 'netstat -utpln |grep 80' -f 2
10、验证:浏览器访问两个节点IP
Web1:http://192.168.152.159
Web2:http://192.168.152.160
注:nginx自动化部署完成!

4、描述域名劫持的解决方法

遇到dns被劫持,让dns服务提供者解决这个问题,是比较矛盾的;因为,劫持者,最有可能的就是他们;另外一种最直接的解决办法就是换用其他dns。
更换dns服务器的方法非常简单,在“设置”-“网络连接”中找到宽带上网的连接,打开网络连接属性,选择Interner 协议(TCP/IP)的属性页里,不要选择自动获取DNS,而要选择“使用下面的DNS服务器地址”,如下图所示,完成后重新连接上网,就可以摆脱服务商对我们的DNS劫持。

更换dns服务器

5、描述DNS的递归查询

(1)递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。
如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
客户机和服务器之间的查询是递归查询
是递归查询告诉客户机IP

(2)迭代查询
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
服务器之间的查询是迭代查询

6、DNS工作原理详细解析

DNS 的介绍

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

DNS介绍
DNS 的过程

关于DNS的获取流程:DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。

具体过程如下:

①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如
http://www.baidu.com/, 并将这个主机名传送给DNS应用的客户端
③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)
④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址
⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接

7、DNS区域转发与全局转发区别与实现方法

如果客户端向DNS服务器发起的解析请求内容不在本服务器上,那么可以设置DNS转发,将解析请求转发到其他DNS服务器。DNS转发分两种情况,一种是只要本地没有解析内容的都转发到指定的DNS服务器上这种转发叫(全局转发),另一种是进行匹配转发,只要解析请求符合定义的某个域,就把该请求转发到指定的DNS服务器上这种转发叫(区域转发):

要实现上面的过程,要在两台DNS上做相应的配置:
配置主DNS转发规则
(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器,在/etc/named.conf中options定义
forward first|only;
forwarders { ip;};
(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高,在 /etc/named.rfc1912.zones中定义区域信息
zone "ZONE_NAME" IN {
type forward;
forward first | only;
forwarders { ip;};
};

下面分别实现这两种转发方式,先看第一种转发:全局转发

全局转发

配主DNS配置文件/etc/named.conf
forward only;
forwarders  { 192.168.214.134; };
dnssec-enable no;
dnssec-validation no;

注意:recursion yes; 主DNS必须要开启递归查询,否则解析请求转发不出去

接收转发DNS端配置:
定义区域文件信息:vim /etc/named.rfc1912.zones
zone "abc123.com" IN {
        type master;
        file "abc123.com.zone";
};
编写区域解析库文件:vim /var/named/abc123.com.zone
$TTL 1D
@       IN      SOA       ns1.abc123.com. amin.abc123.com (
                          2018051507
                          1H
                          5M
                          7D
                          1D)

          IN      NS      ns1.abc123.com.
ns1       IN      A       192.168.214.134
www       IN      A       192.168.214.133
@         IN      A       192.168.214.133
重载DNS并测试:
rndc reload
dig测试:
[root@localhost ~]# dig www.abc123.com @192.168.214.128

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> www.abc123.com @192.168.214.128
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11968
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.abc123.com.            IN  A

;; ANSWER SECTION:
www.abc123.com.     86268   IN  A   192.168.214.133

;; AUTHORITY SECTION:
abc123.com.     86268   IN  NS  ns1.abc123.com.

;; ADDITIONAL SECTION:
ns1.abc123.com.     86268   IN  A   192.168.214.134

;; Query time: 1 msec
;; SERVER: 192.168.214.128#53(192.168.214.128)
;; WHEN: Sun May 20 02:01:31 2018
;; MSG SIZE  rcvd: 82
访问测试
[root@localhost ~]# curl http://www.abc123.com/index.html
<html>
    <body>
www.abc123.com
IP: 192.168.214.133
    </body>
</html>
[root@localhost ~]# cat /etc/resolv.conf 
nameserver 192.168.214.128
区域转发
设置区域转发要在主DNS的named.rfc.1912.zones文件中定义区域信息:
zone "abc123.com"  IN {
        type forward;
        forward only;
        forwarders { 192.168.214.134; };
};
设置后情况一下DNS缓存再重载服务:

rndc flush
rndc reload

测试访问
[root@localhost ~]# curl http://www.abc123.com/index.html
<html>
    <body>
www.abc123.com
IP: 192.168.214.133
    </body>
</html>

8、实现智能DNS

智能DNS解析根据客户机IP地址归属地区域进行区别响应,这里根据ip地址网段实现按ip地址区域解析的过程:
在DNS的主配置文件中定义ACL规则,注意,ACL规则必须定义在named.conf的最前面;
acl是根据从上到下顺序查找匹配的,acl中ip存在包含关系,应该小范围地址段先定义,大网段在后面,如果大网段在上面会使下面有包含关系的小网段不生效

acl beijing {
       192.168.214.0/24;
};

acl jiangsu {
      172.20.110.0/24;
};

acl other {
        any;
};
定义解析库文件
为每个IP地址范围定义单独的解析库文件
[root@dns-1 named]# cp gudaoyufu.com.zone   gudaoyufu.com.zone.beijing
[root@dns-1 named]# cp gudaoyufu.com.zone gudaoyufu.com.zone.jiangsu
记得修改解析库文件的属组为named
将acl与各区域解析库文件关联起来:使用view
注意:一旦采用view,必须把所以的区域信息放在view语句块中,所以named.conf中的这段内容移动到named.rfc1912.zones中
zone "." IN {
        type hint;
        file "named.ca";
};
创建view
先创建单独区域文件,在view中要指定
[root@dns-1 named]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.beijing
[root@dns-1 named]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.jiangsu
在named.rfc1912.zones.beijing单独的文件中定义如下:
zone "yufu.com" IN {
        type master;
        file "gudaoyufu.com.zone.beijing";
};
在named.rfc1912.zones.jiangsu单独的文件中定义如下:
zone "yufu.com" IN {
        type master;
        file "gudaoyufu.com.zone.jiangsu";
};
在named.conf中定义view
view beijngview {
        match-clients   {beijing;};
        include  "/etc/named.rfc1912.zones.beijing";
};

view jiangsuview {
        match-clients   {jiangsu;};
        include  "/etc/named.rfc1912.zones.jiangsu";
};

view otherview {
        match-clients   {other;};
        include  "/etc/named.rfc1912.zones";

};

这里的other就使用默认的区域文件,上面的view信息也可以直接将etc/named.rfc1912.zones.jiangsu中的内容直接写在view块中

上一篇下一篇

猜你喜欢

热点阅读