N35-张同学-第十二周作业

1、讲述dhcp服务的原理

原理:四次握手过程(如图)(同一广播域内) 如果不在一个广播域 需要dhcp中继

1.客户端发discover广播---------寻找dhcp服务器

2.dhcp服务器响应请求offer单播————把包含ip地址、dns、网关、子网掩码的信息回传客户端

3.客户端 发request请求广播报文------------因为可能有多个dhcp服务器,需要确定哪一个

4.Dhcp服务器ack应答单播

2、用ansible安装nginx服务

1、准备三台虚拟机
 master:192.168.242.3----安装ansible
  agent1:192.168.242.2
  agent2:192.168.242.1

2、mster对agent无密钥登陆:
     #ssh-keygen   &&三个回车   # ssh-copy-id root@192.168.242.2  && 输入yes和密码
ps: ssh-keygen -t rsa #使用rsa加密,加密方式选 rsa|dsa均可以,默认dsa

3、安装ansible
看一下可不可以yum安装# yum list | grep ansible# yum install -y ansible# ansible --version
    ansible 2.4.2.0
4、 添加ansible客户机组,命令:
#vim /etc/ansible/hosts
    [test-servers]
    10.0.0.21
    10.0.0.22
5、不用启动直接可以用# ansible webservers -m command -a 'date'
-m mode:什么模块
command是模块
-a
nginx简单部署:

1、master上nginx安装测试(因为我需要nginx.conf)
#systemctl stop firewalld && setenforce 0
#yum install -y epel-release
#yum install -y nginx
#vim /etc/nginx/nginx.conf
修改:user root
          root /root/index.html
#echo nocho > /root/index.html
#systemctl start nginx
#curl localhost
    nocho

nginx测试成功

2、编写playbook
[root@four yaml]# pwd
/etc/ansible/yaml   ----##我的yaml文件位置,可变
[root@four yaml]# cat nginx.yaml

  • hosts: all
      tasks:
          - name: Extended Nginx  ---##任务名
            yum: name=epel-release state=present  ---##调用的模块
          - name: Install Nginx Package
            yum: name=nginx state=present
          - name:  Access Path
            copy: src=/root/index.html dest=/root/
          - name: Copy Nginx.conf
            template: src=/root/nginx.conf.j2 dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 validate='nginx -t -c %s'
            notify:
                 - Restart Nginx Service
      handlers:
          - name: Restart Nginx Service
            service: name=nginx state=restarted

3、检查以下playbook的语法是否正确# ansible-playbook -i /etc/ansible/hosts /etc/ansible/yaml/nginx.yaml --syntax-check
playbook: /etc/ansible/yaml/nginx.yaml

4、任务列表# ansible-playbook -i /etc/ansible/hosts /etc/ansible/yaml/nginx.yaml --list-task
5、执行任务的主机# ansible-playbook -i /etc/ansible/hosts /etc/ansible/yaml/nginx.yaml --list-hosts
6、执行剧本# ansible-playbook -i /etc/ansible/hosts /etc/ansible/yaml/nginx.yaml

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

内容:
1、ansible的作用以及工作结构
2、ansible的安装以及使用
3、ansible的playbook使用

一、ansible的作用以及工作结构
1、ansible简介:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2、ansible的架构:连接其他主机默认使用ssh协议
二、ansible的安装以及常用模块使用
1、ansible无服务器端,使用时直接运行命令即可,同时不需要在被管控主机上安装任何客户端,因此ansible是一个十分轻量级的工具,可以在epel源进行安装,ansible已经被红帽收购,相信不久会被收入base源
配置好epel源后直接yum安装ansible

复制代码
1
2 [root@php ~]# yum info ansible
3 Loaded plugins: fastestmirror, refresh-packagekit, security
4 Loading mirror speeds from cached hostfile
5 base | 4.0 kB 00:00 ...
6 epel | 4.3 kB 00:00
7 epel/primary_db | 5.7 MB 00:00
8 Available Packages
9 Name : ansible
10 Arch : noarch
11 Version : 1.9.2
12 Release : 1.el6
13 Size : 1.7 M
14 Repo : epel
15 Summary : SSH-based configuration management, deployment, and task execution system
16 URL : http://ansible.com
17 License : GPLv3
18 Description :
19 : Ansible is a radically simple model-driven configuration management,
20 : multi-node deployment, and remote task execution system. Ansible works
21 : over SSH and does not require any software or daemons to be installed
22 : on remote nodes. Extension modules can be written in any language and
23 : are transferred to managed machines automatically.
24 [root@php ~]# yum install ansible
复制代码

查看生成的主要文件:

复制代码
1 /etc/ansible
2 /etc/ansible/ansible.cfg #配置文件
3 /etc/ansible/hosts #主机库(host inventory)
4 /usr/bin/ansible #主程序
5 /usr/bin/ansible-doc #文档
6 /usr/bin/ansible-playbook #剧本
复制代码

ansible命令的使用方法也比较简单:
语法:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
host-pattern:host inventory文件的一个组名,可以为all
-f forks:并行处理的个数,默认为5
-m module_name:模块名,默认为command
-a args:参数
ansible-doc:
-l:查看模块列表
-s:查看相关模块参数
我们可以看到ansible支持非常多的模块:

复制代码
1 [21:20 root@centos6.8/var/ftp/pub/files]# ansible-doc -l
2 less 436
3 Copyright (C) 1984-2009 Mark Nudelman
4 less comes with NO WARRANTY, to the extent permitted by law.
5 For information about the terms of redistribution,
6 see the file named README in the less distribution.
7 Homepage: http://www.greenwoodsoftware.com/less
8 a10_server Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
9 a10_service_group Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
10 a10_virtual_server Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
11 acl Sets and retrieves file ACL information.
12 add_host add a host (and alternatively a group) to the ansible-playbook in-memory inventory
13 airbrake_deployment Notify airbrake about app deployments
14 alternatives Manages alternative programs for common commands
15 apache2_module enables/disables a module of the Apache2 webserver
16 apt Manages apt-packages
17 apt_key Add or remove an apt key
18 apt_repository Add and remove APT repositories
19 apt_rpm apt_rpm package manager
20 assemble Assembles a configuration file from fragments
21 assert Fail with custom message
22 at Schedule the execution of a command or script file via the at command.
23 authorized_key Adds or removes an SSH authorized key
24 azure create or terminate a virtual machine in azure
25 bigip_facts Collect facts from F5 BIG-IP devices
26 bigip_monitor_http Manages F5 BIG-IP LTM http monitors
27 bigip_monitor_tcp Manages F5 BIG-IP LTM tcp monitors
28 bigip_node Manages F5 BIG-IP LTM nodes
29 bigip_pool Manages F5 BIG-IP LTM pools
30 bigip_pool_member Manages F5 BIG-IP LTM pool members
31 bigpanda Notify BigPanda about deployments
32 boundary_meter Manage boundary meters
33
复制代码

注意:使用ansible-doc -s查看帮助是,一般有=号的参数都是必要的参数
Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。
具体如下:

复制代码
1 [defaults]
2 # some basic default values...
3 hostfile = /etc/ansible/hosts \指定默认hosts配置的位置
4 # library_path = /usr/share/my_modules/
5 remote_tmp = $HOME/.ansible/tmp
6 pattern = *
7 forks = 5
8 poll_interval = 15
9 sudo_user = root \远程sudo用户
10 #ask_sudo_pass = True \每次执行ansible命令是否询问ssh密码
11 #ask_pass = True \每次执行ansible命令时是否询问sudo密码
12 transport = smart
13 remote_port = 22
14 module_lang = C
15 gathering = implicit
16 host_key_checking = False \关闭第一次使用ansible连接客户端是输入命令提示
17 log_path = /var/log/ansible.log \需要时可以自行添加。chown -R root:root ansible.log
18 system_warnings = False \关闭运行ansible时系统的提示信息,一般为提示升级
19 # set plugin path directories here, separate with colons
20 action_plugins = /usr/share/ansible_plugins/action_plugins
21 callback_plugins = /usr/share/ansible_plugins/callback_plugins
22 connection_plugins = /usr/share/ansible_plugins/connection_plugins
23 lookup_plugins = /usr/share/ansible_plugins/lookup_plugins
24 vars_plugins = /usr/share/ansible_plugins/vars_plugins
25 filter_plugins = /usr/share/ansible_plugins/filter_plugins
26 fact_caching = memory
27 [accelerate]
28 accelerate_port = 5099
29 accelerate_timeout = 30
30 accelerate_connect_timeout = 5.0
31 # The daemon timeout is measured in minutes. This time is measured
32 # from the last activity to the accelerate daemon.
33 accelerate_daemon_timeout = 30
复制代码

免密登陆

因为ansible是基于ssh工作,所以在使用ansible之前要先给各个服务器制作ssh免密登陆

ssh免密登陆教程

用法

复制代码
1 ansible users1 -m command -a 'ls /etc/rc.local'
2 # | | | | | |
3 # | | | | | |要执行的命令
4 # | | | | |
5 # | | | | |____接命令
6 # | | | |
7 # | | | |__模块
8 # | | |
9 # | | |__
接模块
10 # | |
11 # | |____组/IP
12 # |
13 # |_____ansible
复制代码

远程执行命令模块

shell模块

1 # 在/tmp/1.txt写入hello
2 ansible users1 -m shell -a 'echo "hello" > /tmp/1.txt'
1 # 查看/tmp/1.txt文件内容
2 ansible users1 -m shell -a 'cat /tmp/1.txt'

command模块

1 ansible users1 -m command -a 'ls /etc/rc.local'

其他模块

copy模块(将本地文件拷贝到服务器)

1 ansible users1 -m copy -a 'src=/root/passwd dest=/tmp/passwd mode=0777 ownes=user group=youboy'
备注:src本地文件;dest客户端目录;修改权限mode=0777 ;用户ownes=user ;用户组group=youboy

// 指定内容写入到文件

1 ansible users1 -m copy -a 'content="hello word" dest=/tmp/test.txt mode=0777'

fetch模块(将服务器上的文件拷贝到本地)

1 ansible users1 -m fetch -a 'src=/etc/passwd dest=/tmp/passwd'
file模块

复制代码
1 //删除文件
2 ansible users1 -m file -a 'past=/tmp/passwd state=adsent'
3 //创建软连接
4 ansible users1 -m file -a 'src=/etc/passwd path=/tmp/passwd.link state=link'
5 //修改用户权限
6 ansible users1 -m file -a 'path=/tmp/passwd mode=0777 ownes=user group=youboy'
复制代码
疑问?
///服务器上的文件拷贝到其他目录

1 ansible users1 -m copy -a 'path=/etc/passwd dest=/tmp/passwd'
cron模块(计划任务)

复制代码
1 ansible users1 -m cron -a 'minute=10 hour=02 day=15 moneth=12 weekday=7 name="test" job="date > /tmp/date.txt"'
2 //使用shell模块验证计划任务
3 ansible users1 -m shell -a 'crontab -l'
4 //清除计划任务(使用ansible users1 -m cron -a name="test" state=absent''可能无效,使用全命令清除即可)
5 ansible users1 -m cron -a 'minute=10 hour=02 day=15 moneth=12 weekday=7 name="test" job="date > /tmp/date.txt" state=absent'
6 //使用shell模块验证清除的计划任务
复制代码
hostname模块(临时修改主机名)

1 ansible 192.168.1.2 -m hostname -a 'name=jiahui.com'
yum模块

1 ansible users1 -m yum -a 'name=httpd state=installed'
present 查看安装
installed 安装
latest 升级安装
absent 卸载

service模块(操作服务)

1 //启动服务
2 ansible users1 -m service -a 'name=httpd state=started'
started 启动服务
stopped 关闭服务

1 /开机自启
2 ansible users1 -m service -a 'name=httpd enabled=yes runlevel=2345'
备注:runlevel 运行级别(0123456 7个级别,如下)

1 chkconfig --list | grep httpd
2 httpd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

4、叙述dns服务的原理

什么是DNS?

  DNS(Domain Name System),域名系统,它是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

  DNS Domain Namespace,DNS域命名空间,是一种分层树状结构,其格式如下:"www.google.com",以点"."为分隔。结构如图所示:

DNS域名空间结构

  根域:绝对域名(FQDN),以点"."结尾的域名

  顶级域:用来指示某个国家/地区或组织使用的名称的类型名称,例如.com

  二级域:个人或组织在因特网上使用的注册名称,例如google.com

  子域:已注册的二级域名派生的域名,一般就是网站名,例如www.google.com

  主机名:标识网络上的特定计算机,例如h1.www.google.com

  

  DNS资源记录:(即映射关系,通常由域名管理员进行配置),常见类型如下:

  SOA:起始授权机构

  NS:名称服务器

  MX:邮件服务器

  A:IP地址(最常用,映射IP地址)

  CNAME:别名(较常用,映射到其他域名)

  

DNS工作原理

  当我们请求一个域名时,会通过DNS服务器将域名解析成IP访问最终的主机,那么,DNS是如何查询到域名所对应的IP并返回给我们的呢?请工作机制如图所示:

  当我们请求一个域名时,直到获取到IP地址,整个过程是如何工作的?以请求www.codecc.xyz为例:

  1、首先,我们的主机会去查找本地的hosts文件和本地DNS解析器缓存,如果hosts文件和本地DNS缓存存在www.codecc.xyz和IP的映射关系,则完成域名解析,请求该IP地址,否则进入第二步。

  2、当hosts和本地DNS解析器缓存都没有对应的网址映射关系,则会根据机器(/etc/reslove.conf)配置的本地DNS服务器进行查询,此服务器收到查询时,如果要查询的域名在本地配置区域资源或者缓存中存在映射关系,则跳到步骤9,将解析结果直接返回给客户机。

  PS:一二步骤为递归查询,其余步骤为迭代查询

  3、若本地DNS服务器不存在该域名的映射关系,就把请求发送至13台根DNS服务器。

  4、根DNS服务器会判断这个域名(.xyz)由谁来授权管理,并返回一个负责该顶级域的DNS服务器的一个IP给本地DNS服务器。

  5、本地DNS服务器收到该IP后,会再将查询请求发送至(.xyz)所在的DNS服务器。

  6、如果(.xyz)的DNS服务器无法解析该域名,就会去判断这个二级域名(codecc.xyz)的管理者,返回一个负责该二级域的DNS服务器的IP给本地DNS服务器。

  7、本地DNS服务器收到该IP后,会再次将查询请求发送至(codecc.xyz)所在的DNS服务器。

  8、(codecc.xyz)的DNS服务器会存有www.codecc.xzy的映射关系,将解析后的IP返回给本地DNS服务器

  9、本地DNS服务器根据查询到的解析IP发送给客户机,至此,DNS解析完成。

5、讲述vmlinuz、initrd.img的作用

vmlinuz自然就是内核了,initrd.img是一个小的映象,包含一个最小的linux系统。通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块,然后发现真正的root分区,挂载并执行/sbin/init... ...。
initrd.img当然是可选的了,如果没有initrd.img,内核就试图直接挂载root分区。
之所以要有initrd,那是为了启动的时候有更大的灵活性。比如,你把ext3支持编译成模块了。偏偏你的root分区又是ext3的。这下就麻烦了。因为内核需要挂载root分区之后才能加载ext3支持。但是没有ext3支持就没法挂载root分区。initrd就是用来解决这个问题的。
类似的用这个东西还可以做其他的事情,比如从usb盘启动linux也会面临上面类似的问题。用initrd就能搞定了。
甚至,我想在有些嵌入式设备里面都不需要真正的root分区,用initrd就足够搞定一切了。

主要是为了解决vmlinuz太大的问题,用initrd可以解决这个问题。否则的话在2.6的内核中启动会失败的。

mkinitrd是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去!
mkinitrd(make initial ramdisk images)

功能说明:建立要载入ramdisk的映像文件。

语  法:mkinitrd [-fv][--omit-scsi-modules][--version][--preload=<模块名称>][--with=<模块名称>][映像文件][Kernel 版本]

补充说明:mkinitrd可建立映像文件,以供Linux开机时载入ramdisk。

参  数:
-f 若指定的映像问家名称与现有文件重复,则覆盖现有的文件。
 -v  执行时显示详细的信息。
--omit-scsi-modules 不要载入SCSI模块。
--preload=<模块名称> 指定要载入的模块。
--with=<模块名称> 指定要载入的模块。
--version 显示版本信息

实例:
/sbin/mkinitrd --builtin=mptscsi --preload=usbkbd --preload=usbmouse --with=qla2xxx_conf --with=qla2xxx -f /boot/initrd-2.6.16.52.2.smp.img 2.6.16.52.2.smp

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

转载于:https://blog.51cto.com/14086421/2360629

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值