美文网首页
Linux运维自动化学习笔记

Linux运维自动化学习笔记

作者: Villa_7ca5 | 来源:发表于2019-06-08 15:59 被阅读0次

    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上要定义转发规则,

    • 开启请求者做递归,否则转发请求不予进行

      recursion yes;
      
    • 第二台DNS上要有相应的域解析库内容

    • 注意:关闭dnssec功能:

      dnssec-enable no;
      dnssec-validation no;
      
    配置主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块中

    相关文章

      网友评论

          本文标题:Linux运维自动化学习笔记

          本文链接:https://www.haomeiwen.com/subject/clssxctx.html