标签:定向 efault exec rem 释放 edit art central 其他
DHCP:
全称:Dynamic Host Configuration Protocol 动态主机配置协议
DHCP配置内容:
IP/Netmask
Gateway
DNS Server
bootp: boot protocol --> dhcp 动态指派IP,永久有效
租约:即使用期限,DHCP服务器为客户端分配IP后,客户端使用IP地址是有期限的
2hours:假如租约期限为2小时
50%: 1hours --> 2hours 过了一个小时之后就要续租
50%:1hours --> 2hours 续租后又过了一个小时,就再续租,如果不用的时候,地址会自动被释放
75%: 0.5hours --> 2hours
87.5%: 0.25hours --> 2hours
dhcp discover 如果租约快要到期一直无法续租就要提前广播寻找DHCP服务器
RARP:(Reverse Address Resolution Protocol),是一种网络协议,互联网工程任务组(IETF)在RFC903中描述了RARP。RARP使用与ARP相同的报头结构,作用与ARP相反。 RARP用于将MAC地址转换为IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTP或DHCP所取代。
DHCP的工作流程:
比如客户端刚开机,那么客户端关机的时候地址是被释放的了。所以客户端开机后要重新做地址获取。地址获取是通过RARP协议获取的,所以客户端广播请求DHCP服务为其分配一个IP地址。分以一下4个步骤,都是以广播的方式进行的
1、Client: dhcp discover:客户端发送广播寻找DHCP服务器
2、Server: dhcp offer:(IP/netmask, gw) DHCP服务器端收到广播报文后会做出响应,提供与客户端MAC匹配的IP/network,gw
3、Client:dhcp request 客户端选择DHCP服务器提供的IP后,要发出一个广播说采用了哪个IP。假如采用了DHCP服务器1的提供的IP,那么这台服务器就要在地址池中删除这次被采用的地 址。而没有被采用的IP,DHCP服务器会回收过来
(有两种情况:1:多台DHCP服务器同时响应客户端的广播请求为客户端提供IP,2:客户端MAC相匹配的IP已经被占用)
4、Server: dhcp ack DHCP 被选定地址的服务器确认
续租:是以单播的方式
Client: dhcp request 客户端直接给DHCP服务器发送请求采用续租的地址
Server: dhcp ack 服务器端响应,
Server: dhcp nak DHCP服务器拒绝续租,如果DHCP服务器拒绝续租,有可能DHCP服务器上的地址范围被修改了,客户端请求续租的地址不在此范围内
假如公司的网络做了两个区域,一个区域是财务,另一个区域是技术部门,彼此之间使用路由器链接。在财务部门的网络区域中提供了一台DHCP服务器,所以财务部门获取IP地址是没有问题。但技术部门如何获取IP地址?由于路由器是广播报文的屏障,所以财务部门这边的DHCP服务器是无法收到技术部门的客户端发送的广播。那么如何才能让DHCP服务器为技术部门的客户端分配地址呢?由于DHCP协议是可以被中继的,但是需要路由器开启中继功能,即路由器在右侧网络接口上安装一个提供DHCP服务的程序,这里成为A,监听在某个接口上接收技术部门客户端的请求并分配地址。所以技术部门的客户端广播的时候是路由器的A是可以接收到广播报文的。但路由器是没有DHCP功能的,所以路由器在收到报文后会定向单播给财务部门的DHCP服务器,DHCP服务器收到路由器的报文后,会定向把响应报文定向单播给路由器,路由器接收响应报文后再有A把此报文广播给技术部门的客户端。技术部门的客户端接收到IP地址后会再广播一个request,路由器接会把这个广播报文封装后再次单播给DHCO服务器。DHCP服务器接收到报文后再次单播给路由器,路由器A再次广播给技术部门的客户端。
问题:
1、DHCP服务器本身有地址,同时DHCP服务器自己的地址是不能动态分配的。
2、DHCP服务器应该跟财务部门一体。首先先满足财务部门客户端的需求,才能提供其他网络提供DHCP服务。
为每一个网络提供地址服务的功能称为作用域。所谓作用域就是能够为哪些网络提供地址池列表,从而能够完成地址分配。首先保证本地作用域,才能为其他网络提供。
Linux DHCP协议的实现程序:dhcp, dnsmasq
dnsmasq既可以配置成DNS转发器又可以作为DHCP server使用
# yum info dnsmasq
Dnsmasq is lightweight, easy to configure DNS forwarder and DHCP server.
: It is designed to provide DNS and, optionally, DHCP, to a small network.
: It can serve the names of local machines which are not in the global
: DNS. The DHCP server integrates with the DNS server and allows machines
: with DHCP-allocated addresses to appear in the DNS with names configured
: either in each host or in a central configuration file. Dnsmasq supports
: static and dynamic DHCP leases and BOOTP for network booting of diskless
: machines.
Linux也可以充当DHCP中继器
# yum install dhcp //提供了两个守护进程,dhcp服务器和dhcp中继器,且二者取其一
/etc/dhcp/dhcpd.conf //配置文件
/etc/dhcp/dhcpd6.conf
/etc/dhcp/scripts
/etc/dhcp/scripts/README.scripts
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/usr/bin/omshell
/usr/lib/systemd/system/dhcpd.service
/usr/lib/systemd/system/dhcpd6.service
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcpd --> /etc/rc.d/init.d/dhcpd(centos6) //启动进程
/usr/sbin/dhcrelay --> /etc/rc.d/init.d/dhcrelay //中继器不需要配置文件
# cat /etc/dhcp/dhcpd.conf //是一个空文件
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example //这里有一个模板
# see dhcpd.conf(5) man page
#
# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf //把模板copy过来用
# vim /etc/dhcp/dhcpd.conf
在dhcpd.conf配置文件中:如果定义了多个option,那么范围最小的option优先级最高
subnet { //每一个subnet用来定义一个子网,在windows中叫作用域,所以地址池就是在子网中定义的,每一个地址再分配是,额外的属性如网关、DNS服务器等都
... //通过option指定,而option既可以放在subnet之外也可以放在subnet之内,如果option放在subnet之外,则全局有效,对每一个subnet都有效。
}
host { //固定分配给某一个主机的保留地址,有些主机来请求IP地址,都期望使用固定地址,这个地址不在地址池中,而是额外保留给某个主机使用
...
}
share-network { //超级作用域,把多个对应的地址网段在同一个池中进行同一分配
#option指明除了地址和掩码以外分配的其他属性,既可以定义在全局位置,也可以定义在subnet中
option domain-name "example.org"; //搜索域,比如在主机上#ping www,这时候是不通的,如果在此处定义了搜索域,他会在www后面自动补全的
option domain-name-servers ns1.example.org, ns2.example.org; //域名服务器,如果是域名,则需要先把域名转换成IP地址,再分配给客户端,因为客户端本来就没有域名服务器指向,没办法解析
#全局配置选项
default-lease-time 600; //默认租约期限,单位是秒钟,比如改为1天86400,后面必须是分号结尾
max-lease-time 7200; //最大租约期限
log-facility local7; //日志
subnet 10.152.187.0 netmask 255.255.255.0 { //先满足本子网,在服务其他网段。这里是为10.152.187.0分配IP地址,注意:这里的这里定义的网络一定是配置文件的当前主机所在的网络
range 10.152.187.120 10.152.187.130; //指明起始地址和结束地址,叫地址池,这里一共定义了10个地址
}
对本机的dhcpd.conf进行修改
option domain-name "dongshi.com"; option domain-name-servers 8.8.8.8; default-lease-time 86400; max-lease-time 86400;
log-facility local7;
subnet 192.168.184.0 netmask 255.255.255.0 {
range 192.168.184.130 192.168.184.160;
}
:.,$s/^[^#]/#/g //然后把后面的不以#开头的内容加上#号
# systemctl start dhcpd // 启动
监听在udp的67号端口
在另外一个主机上进行测试
# dhclient -d //用另一个主机以工作于前台的方式动态获取地址,dhclient进程只能启动一次
此时绑定的192.168.184.130是可以登录的,监听在68号端口上
如何知道DHCP服务器把地址分配给哪个主机?
# cat /var/lib/dhcpd/dhcpd.leases //记录了DHCP的租约位置
# The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-4.2.5 server-duid "\000\001\000\001#\260\371l\000\014)\316\370\004"; lease 192.168.184.130 { //130地址被分配到MAC地址是最下面一行的主机 starts 6 2018/12/22 13:41:57; //租约的起始时间 ends 0 2018/12/23 13:41:57; //租约的到期时间 cltt 6 2018/12/22 13:41:57; binding state active; next binding state free; rewind binding state free; hardware ethernet 00:0c:29:67:09:fe; //被分到IP地址的主机的MAC地址 } lease 192.168.184.145 { starts 6 2018/12/22 13:47:32; ends 0 2018/12/23 13:47:32; cltt 6 2018/12/22 13:47:32; binding state active; next binding state free; rewind binding state free; hardware ethernet 00:0c:29:cf:00:6b; }
在node2上查看绑定的地址
在node3上查看绑定的地址
如何分配网关呢?
# vim dhcpd.conf //编辑配置文件指定网关
option domain-name "dongshi.com"; option domain-name-servers 8.8.8.8; option routers 192.168.184.141; //添加此行,放在这里是全局使用,如果有subnet的话,也可以把option放在指定的subnet中,一般routers都是定义在subnet中
# systemctl restart dhcpd
再在node2上查看网关,依然没有,因为dhclient功能有限,所以在设置node2网络采用内部网关通道,自定义下的VMnet2
其它配置选项:
filename: 指明引导文件名称;
next-server:提供引导文件的服务器IP地址;
filename "pxelinux.0";
next-server 172.16.100.67;
PXE:preboot execute environment, Intel
dhcp, tftp, file server(yum repository)
CentOS 6 PXE:
yum -y install syslinux tftp-server
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/
cp /media/cdrom/isolinux/{boot.cfg,vesamenu.c32,splash.png} /var/lib/tftp/boot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default/
CentOS 7 PXE:
yum -y install syslinux tftp-server
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
创建/var/lib/tftpboot/pxelinux.cfg/default
内容类似如下:
default menu.c32
prompt 5
timeout 30
MENU TITLE CentOS 7 PXE Menu
LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg
Ansible:
运维工作:系统安装(物理机、虚拟机)--> 程序包安装、配置、服务启动 --> 批量操作 --> 程序发布 --> 监控
OS Provisioning:
物理机:PXE、Cobbler
虚拟机:Image Templates
Configration:
puppet (ruby)
saltstack (python)
chef
cfengine
Command and Control:
fabric
预发布验正:
新版本的代码先发布到服务器(跟线上环境配置完全相同,只是未接入到调度器);
程序发布:
不能影响用户体验;
系统不能停机;
不能导致系统故障或造成系统完全不可用;
灰度发布:
发布路径:
/webapp/tuangou-1.1
/web/app/tuangou
/webapp/tuangou-1.2
在调度器上下线一批主机(maintanance) --> 关闭服务 --> 部署新版本的应用程序 --> 启动服务 --> 在调度器上启用这一批服务器;
自动化灰度发布:脚本、发布平台;
运维工具的分类:
agent: puppet, func
agentless: ansible, fabric
ssh
ansible:
模块化,调用特定的模块,完成特定的任务;
基于Python语言实现,由Paramiko、PyYAML和Jinja2三个关键模块;
部署简单,agentless;
主从模式
支持自定义模块
支持Playbook
幂等性:
配置文件:
/etc/ansible/ansible.cfg
/etc/ansible/hosts
http://172.16.0.1/centos7.cfg
回顾:pxe, ansible
pxe:
网卡支持网络引导;
dhcp, filename, next-server
tftp-server
pxelinux.0
vmlinuz, initrd.img
menu.c32
pxelinux.cfg/default
system-config-kickstart
ksvalidator
ansible:
os provision:
物理机:pxe, cobbler
虚拟机:image file template
configuration:
程序包管理、用户管理、配置文件、服务管理、cron任务等等;
puppet, saltstack, chef, cfengine
task exec
command and control
func, fabric
程序发布:灰度模型
agent
agentless:
ssh服务;
ansible:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
args:
key=value
注意:command模块要执行命令无须为key=value格式,而是直接给出要执行的命令即可;
常用模块:
command
-a ‘COMMAND‘
user
-a ‘name= state={present|absent} system= uid=‘
group
-a ‘name= gid= state= system=‘
cron
-a ‘name= minute= hour= day= month= weekday= job= user= state=‘
copy
-a ‘dest= src= mode= owner= group=‘
file
-a ‘path= mode= owner= group= state={directory|link|present|absent} src=‘
ping
没有参数
yum
-a ‘name= state={present|latest|absent}‘
service
-a ‘name= state={started|stopped|restarted} enabled=‘
shell
-a ‘COMMAND‘
script
-a ‘/path/to/script‘
setup
playbook的核心元素:
tasks: 任务
variables: 变量
templates: 模板
handlers: 处理器
roles: 角色
变量:
facts
--extra-vars "name=value name=value"
role定义
Inventory中的变量:
主机变量
hostname name=value name=value
组变量
[groupname:vars]
name=value
name=value
Inventory的高级用法:
Playbook:
- host:
vars:
remote_user:
tasks:
-
-
-
variables:
-
-
-
handlers:
-
-
- host:
- host:
"ansible_distribution_major_version": "7",
nginx.conf
worker_processes {{ ansible_processor_cores * ansible_processor_count - 1 }};
实战:用ansible playbook完成配置keepalived的集群;
博客:ansible的用法;
标签:定向 efault exec rem 释放 edit art central 其他
原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/10162905.html