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在多台机器上添加用户