逻辑卷管理
逻辑卷主要用来扩展磁盘空间(在不影响用户正常使用的情况下)
创建逻辑卷既可以使用硬盘也可以使用分区
centos6 划分分区的单位是柱面,centos7划分分区的单位是扇区
把设备变成物理卷实际上就是贴个标签
某个卷组是多个物理卷的组合
pvs/pvdisplay 用来查看物理卷
pvcreate /dev/sdax /dev/sdb 把sdb硬盘和 sdax分区制作成物理卷
blkid 查看每个分区的UUID和文件系统类型
lsblk 查看系统上所有硬盘的相关信息(比如新添加一块硬盘,还没安装文件系统,只能用lsblk查看)
pe (物理区域) 指定多少个pe组成一个逻辑卷
pe有点像组成文件的一个个块
块设备通过打标签变成物理卷,多个物理卷合成卷组,卷组的一部分
称为逻辑卷。这是他们之间的大概关系
创建完逻辑卷就相当于之前学过的分区,随后就安装文件系统,挂载之后就可以使用了
pv 管理
vg管理
逻辑卷管理
lvcreate -n mysql -L 1.5G
创建逻辑卷 命名为mysql,大小为1.5G (只是约等于1.5G 因为必须是pe的整数倍)
扩展和缩减逻辑卷
创建逻辑卷示例
跨主机迁移卷组
lvm快照
lvm使用示例
vgcreate -s 16M vg0 /dev/sdax
创建卷组vg0 指定每个pe大小16M 并且把/dev/sdax 物理卷添加到卷组里面
vgextend vg0 /dev/sdb
把/dev/sdb物理卷追加到vgo卷组里
mkfs.xfs /dev/vg0/mysql
为vg0卷组里的mysql逻辑卷安装文件系统
注意 :在扩展逻辑卷的时候,不仅要扩展逻辑卷本身,还要扩展逻辑卷对应的文件系统
lvextend -l +100%free /dev/vg0/mysql
对mysql逻辑卷扩展 ,向它所属的卷组索要剩余的全部空间
df 查看的是已经安装文件系统的分区的大小,对于没有安装文件系统的df看不到
lvextend -r -l +100%free /dev/vg0/mysql
在扩展逻辑卷空间的同时,也扩展了文件系统大小(不用区分ext文件系统还是xfs文件系统)
xfs文件系统只能扩展 不能缩减,而ext系列的二者都可以
缩减逻辑卷(离线)
先对数据备份(利用tar打包)
先取消挂载
进行文件系统检查(e2fsck只能检查ext系列的)
fsck -f /dev/vg0/xxx
先缩减文件系统
resize2fs /dev/vg0/xxx 1G
lvreduce -L 1G /dev/vg0/xxx
再缩减逻辑卷
再重新挂载 mount -a
lvrename vg0 xxx xx
逻辑卷改名
lvrename 卷组名 老名 新名
卷组改名
vgrename 卷组名 新卷组名
lvm快照
逻辑卷的快照和逻辑卷在同一个卷组里面
快照里面只放逻辑卷原始的修改过的文件
当逻辑卷里的一个文件被修改多次,快照里面只放做快照时的版本,而逻辑卷里面只放最新的版本,中间的版本丢失了。逻辑卷里面新建一个文件的时候,快照里面是没有的
一旦做快照,会影响逻辑卷的效率,因为一旦逻辑卷某个文件修改了,此文件被修改之前的版本会被推送到逻辑卷的快照里面。所以在工作中不常用,一般用在测试环境当中
快照不能取代备份,因为是实际工作中,备份的作用是想一旦服务器坏了,在远程服务器上还有一份,如果是快照,它还是存在于卷组里面,服务器坏了,起不到备份的作用
lvcreate -s -n snapshot-mysql2 -L 100m /dev/vg1/mysql2
对/dev/vg1/mysql2做快照,命名为mysql2-snapshot 大小为100m
删除PV
1 vgdisplay 查看空间
2 pvmove /dev/sdc
3 vgreduce vg1 /dev/sdc
4 pvremove /dev/sdc
5 删除此硬盘
xfs逻辑卷的快照及还原
touch /data/mysql/f{1,2,3}
lvcreate -s -n mysql2_snapshot -L 100m /dev/vg1/mysql2
mkdir /mnt/snap
mount /dev/vg1/mysql2_snapshot /mnt/snap
mount -o nouuid,ro /dev/vg1/mysql2_snapshot /mnt/snap
中间修改数据
还原过程
umount /mnt/snap/
umount /data/mysql/
lvconvert --merge /dev/vg1/mysql2_snapshot
mount -a
ext4 逻辑卷的快照及还原
lvcreate -s -n binlog-snapshot -p r -L 100m /dev/vg1/binlog
mount /dev/vg1/mysql2_snapshot /mnt/snap
osi
物理层定义了 物理设备连接的规范(物理层发送的是一大堆的0101)
数据链路层对数据进行格式化(指定0101组合起来表示什么)
数据链路层还定义每个物理设备的独一无二的物理地址(mac地址)
网络层实现了路由的功能,支持逻辑寻址(ip)
传输层的功能是传输数据
物理层的传输单位是比特
数据链路层的传输单位是帧
网络层的传输单位是数据包
传输层的传输单位网段
三种通讯方式
单播
单播 :目标机器是一台机器,其他机器能否收到取决于采用什么拓扑结构(如果是总线拓扑,那么其他都能收到)
广播
广播:目标是所有机器
如果过多,会造成不良影响
组播
组播:目标是一部分机器
单工 : 单向
半双工:轮流双向
全双工:同时双向
网络线缆和接口
双绞线两两一组(不是随便分组),目的是抵消电磁干扰
utp(非屏蔽式双绞线)
按照t568b线序制作
帧
当广播的时候,帧的目标地址6个字节(48位比特全是1 用来表示广播)
六个字节的第一个字节的最低位 如果是1 表示多播(组播)
六个字节的第一个字节的最低位是0 ,表示单播
mac地址
hub和switch
通过集线器连接的多台主机,当某一台主机给另外一台主机发送信息的时候,由于集线器并不知道目标机器在哪里,所以只能都发一遍 ,称为泛洪(flood)
集线器是半双工,工作在物理层,中继器是信号放大器,集线器就相当于
多端口的集线器
网卡工作在数据链路层
当一台主机发送数据报文,如果另一台主机同时也发送数据报文且发生冲突了,那么我们认为他们在一个冲突域里面
多个集线器连接起来,构成一个大规模的冲突域。
当一台主机向外发送广播,如果另一台主机收到了广播,那么我们认为他们在同一个广播域里面
交换机和网桥原理相似
交换机里面有张表格 存放交换机各端口和连接交换机设备的mac地址
当交换机收到一个数据包的时候,把发送数据报文的设备的mac地址和
接收的端口建立一个对应关系,当它查看目标地址的时候,会去查看表格,如果表格里面没有记录目标mac地址对应的端口,那么会继续到处转发。
当一个数据包经过交换机的时候,如果目标mac地址在表格中存在,那么
就不会再继续转发,而是按照表格中记录的对应关系定向转发
交换机有隔离冲突域的功能,但是无法隔断广播
交换机和网桥工作在数据链路层 交换机根据发送过来的数据包的源mac地址在表格中记录和交换机上端口的对应关系, 根据目标mac地址来查询
表格进而判断是否到处转发还是定向发送
交换机是全双工
ethtool 网卡名 可以用来查看网卡的相关信息
路由器
当路由器收到广播的时候,会果断抛弃,所以可以隔断广播
被路由器隔断的就算是一个网段
并不是路由器里才有路由表
一般的路由器工作在网络层
现实当中,路由器和交换机越发的模糊(功能集成)
路由器的功能就是依靠路由表把数据包从一个网段转发到另一个网段
vlan (虚拟的局域网)
利用vlan 可以把一个大的广播域划分成多个小规模的广播域
即在不使用路由器的前提下能够模拟出路由器的功能
多个小规模的广播域类似多个网段并且他们彼此被隔离开
当前实验情景是:s1和s2交换机相连接,连接s1的四台主机被划分为
两个vlan A和B在10vlan C和D在20vlan 连接s2的四台主机同样被划分成两个vlan E和F在10vlan G和H在20vlan ,那么A B E F 是在同一个广播域里面的,C D G H同理 。
现在有一个问题, 当A发送广播的时候,E F也应该收到(在同一个广播域),B发送广播, G H 也应该收到,如果单独为他们设置线路的话,它浪费成本,所以选择共用一条线路,即为trunk(图中加粗的红线)
trunk线的两端是trunk端口
同时又伴随一个问题,当一个数据报文从s1经过trunk线路的时候,s2怎么知道应该转发给哪个vlan 此时需要在帧里面添加一个标识,用来指定是哪个vlan
多个vlan(网段) 之间通信 还是需要路由器
一个vlan 就是一个广播域 也是一个逻辑网段
vlan 属于数据链路层
基本的网络架构
虚拟机的仅主机模式
在物理机上安装的多台虚拟机之间可以通讯 以及他们和物理机之间都可以彼此通讯
桥接:相当于把物理机以及物理机上的虚拟机都连接到局域网里面的交换机上,这样凡是连接到局域网交换机的无论是虚拟机还是物理机都可以彼此通讯
tcp报头
服务器一般是固定端口
客户端一般是随机的端口
/etc/services 记录了常用服务使用的端口号
lsof -i :端口号 可以查询端口号正在被哪个进程使用
tcp序列号和确认号
ack =1 表示对方发送的0包 已收到 也可以理解成 希望对方下次发送编号为1的包
小写的ack是确认包的编号
大写的ACK是标记位
tcp三次握手
SYN=1表示要发送报文请求通讯 ACK=1表示已确认收到对方的包,
第二个SYN=1表示服务器发送的通讯请求,第二个ACK是确认服务器发送过来的通讯请求(即第二个SYN)
sync板连接和accept全连接
三次握手在还没建立连接之前 同时发送第一次请求的客户端个数不能超过syns queue队列的个数
当syns queue队列满了 那么来自客户端的请求将被拒绝
当建立连接之后,之前占用syns queue 的客户端将被清除(状态发生改变了)
通过查看/proc/sys/net/ipv4/tcp_max_syn_backlog 可以知道syns queue的大小
当建立连接之后,客户端会被放入accept queue里面,之后会通过调用
accept 来为客户端提供服务,如果迟迟没有调用accept 那么当accept queue 被占满之后,同样也无法为正常来访问的客户端提供服务
stp(生成树协议)
交换机的生成树协议在默认情况下会禁用某条线路,让数据包走唯一的
线路 ,当唯一的线路出现故障的时候,会自动恢复被禁用的线路,之所以这么做,是为了避免回环,出现广播风暴 ,还能容错
四次挥手
服务器和客户端都可以发起断开请求
FIN=1 表示客户端发起断开请求 ACK=1 表示客户端发送的断开请求服务器已收到
但是服务器并没有立即断开
当服务器主动发起断开请求的时候,客户端之所以等待一段时间是因为
在第一次确认客户端断开请求之后,可能还要发送一些数据,而这些数据可能由于选择的路由不恰当,导致数据在服务器发送断开请求之后才到,如果不等待的话,那么数据就无法收到了。
当客户端发起断开请求时,如果此时服务器也发起了断开请求,那么立刻就断开了 这种情况就不在是标准的四次挥手
在服务器确认断开请求之后,客户端会处于等待状态,如果服务器迟迟不发断开请求,客户端会持续占用内存,这种连接被称为孤儿连接
tcp超时重传
tcpdump -i 网卡 -nn 协议
arp : ip > mac (用广播查找mac)交换机根据mac就能找到对应的主机进行通讯
arp缓存表里面记录了 通讯过的ip和mac
网关就是路由器接口的ip 如果在同一个网站,直接arp广播就可以了
在跨越多个网段通讯的时候,源ip和目标ip是一直不变的 ,而mac地址是一直在变化的。
icmp 判断网络状态
ip(v4) 报头
标识用来区分多个被分割的小数据包是否是一个整体 ,片偏移是指当多个小数据包组成一个完整的数据包的时候,他们彼此组织的顺序 标志位有三位,第一位没用 ,后两位是DF(don't fragment) 和 MF (more fragment) 当DF为 1 ,此包是一个完整包,
DF=0 此包是一个小数据包 MF=0 ,表示是最后一个小包,MF=1,表示后面还有小数据包
ip地址分类:
网段个数(网络个数):2^可变网络id位
0.0.0.0 (特殊地址) 127开头的表示回环地址
主机数:2^主机id位-2
网络id=子网掩码和ip 相与 (0与任何数相与都为0, 1与任何数相与结果为任何数)
为什么减2? 例如 10.0.0.0 表示10这个网段 10.255.255.255表示
10这个网段里面的广播地址。
A: 192.168.37.7/24
B:192.168.36.6/16
A---> B
1 192.168.37.0 (A自己的ip和A子网掩码相与)
2 192.168.36.0 (用A的子网掩码和B相与)
A认为和B不在同一个网段,那么会找网关进行转发
B --- > A
1 192.168.0.0 (B自己的ip和B子网掩码与)
2 192.168.0.0 (A的ip和B的子网掩码与)
B 认为和A在同一网段,就不会再找网管,而是直接arp广播查找
按照 A B C D 这种方式分配地址,有个问题,要不造成一个网段里面地址浪费,或者一个网段里面地址不够 。
因此出现了自定义指定网络位数,主机位数
10.0.0.0/8 表示10.0.0.0的前八位时候网络id
网络id有几位其实就是有几个1 其他都为0
子网掩码的八位
判断主机是否在同一个网段:网络id是否相同,用自己的ip和自己的netmask相与,再用自己的netmask 和对方的ip相与 ,判断网络id是否相同,进而判断是否是一个网段
划分子网
子网数=2^网络id向主机id借位的个数
10.0.0.0/8 给32个省,每个省分配独立的子网。
1 每个省的子网络的netmask ?
分给32个省,相当于划分32个子网,根据划分子网的公式,即网络id需要向主机id借5位,即10.0.0.0的网络id变成13位,10.0.0.0 的第二个0转换成二进制的话 是这样的,
00000 000 前5个0从原来的主机位变成网络id位,总共有32种变化从00000--> 11111 (实现了划分32个子网)原来子网掩码是255.0.0.0 由于从主机位借了5位,那么第二个0的二进制变成这样 11111 000 在把这个二进制转换成10进制 是248 ,那么用10进制来表示的话就是255.248.0.0
2 每个省的子网络主机有多少?
根据公式 主机数=2^主机id位
2^19 -2
3 最小的子网络的网络id?
在从主机id位借的5位时,由于是可变的,那么这5位2进制最小就是5个0 也就是10.00000 000 .0.0 /13 10进制表示就是10.0.0.0/13 这就是最小的子网络的网络id
4 最大的子网络的ip范围
最大的子网络 即可变的5位全为1
在最大的子网络的最小ip
10.11111 000.0.1
转换成10进制 10.248.0.1
最大的子网络的最大ip
10.11111 111.255.254
10.255.255.254
将第10个子网划分给河南省,河南省再次分配18个子网给地级市使用
原来的10.0.0.0/8 网络id 向主机id借5位,那么这5位要表示第10个,应该是用01001来 表示 ,10.01001.xx.xx 这是仅仅表示河南省 ,在河南省里面继续划分18个子网 还要继续向主机id借位,借4位能够划分16个子网 不够,所以需要借5位,这5位是河南省各地级市使用的网段
那么每个市的netmask ?
由于在原来基础上借了10位 ,所以总共是18位1(二进制)即255.255.11000000.0 转换成10进制
255.255.192.0
每个市的主机数
2^14 -2
最大或者最小的子网 :其实就是让网络id向主机id借位的二进制数 最大或者最小即可
最小的子网的网络id
10.72.0.0/18
最大的子网的ip范围
10.79.192.1-10.79.255.254/18
合并子网
主机id位向网络id借位 把临近主机id位的网络id位转换成2进制,尝试先从一位开始借,尝试借最少的位数然后让他们的网络id 一样就合并子网成功了,后面不一样的就当做主机id即可
跨网络通信
路由 :一个数据包从某台主机发送到另外一台远程主机的寻找路径的过程
路由功能的实现是依赖路由表的 (路由表可以理解为地图)
主机路由:到指定主机的路由
网络路由:到某个网段的路由
默认路由:到未知网络 (没有明确规定的),就走默认路由
优先级:主机路由>网络路由> 默认路由
centos6 重启网络服务 service network restart
centos 6 网卡配置 相关命令
上述的这些命令都是临时的
ip addr 也能实现和ifconfig 相似的功能
ifconfig 查看已经激活的网卡相关设置
ifconfig eth0 down 禁用etho网卡 (数据链路层以及链路层以上的都被down)
ifconfig -a 查看所有网卡(包括被禁用的)但是被禁用以后网卡没有地址
ifconfig etho0 up 启动etho0网卡
ifdown eth0 也是禁用网卡 (在网络层的down)
ifconfig eth0 0.0.0.0 清空eth0网卡的地址
ifconfig eth1:xxx ip/xx
给eth1 网卡增加一个地址
ifconfig eth1:xx down 删除添加的地址
route -n 查看路由表
当两台在同一个网段的主机被放在被路由器隔开的两个网络里面,他们是无法通讯的 ,因为他们彼此在逻辑上判断在同一个网段,所以不会转发给网关,会直接arp广播,由于物理上他们并不在一个网段,所以找不到,无法通讯
网关和主机上的某一个ip必须在同一个网段(要不然无意义)
网关: 下一个路由器临近我的接口的ip
路由表里面,和路由器直接相连的网段的相关信息不用配置
route add -net xxxxx/xxx gw xxx
添加到指定网段的路由信息
route del -net xxxx/xxx gw xx
删除指定路由
两台主机即使在同一个网段,没有路由表也无法通讯
lo网卡没有路由,不会与外面通讯
路由表里面 如果 dest 是0.0.0.0 那么表示默认路由,当其他都不符合的时候,走默认路由
route add default gw xxxx 添加默认路由
网卡的配置文件
/etc/sysconfig/network-scripts/ifcfg-xxx
bootproto 是指ip是手动配置(none/static) 还是 动态获取(dhcp)
prefix 表示前多少位是网络id
onboot=yes 表示网卡是启用 onboot=no 禁用网卡
centos6 service network restart 重启网络服务 会读取网卡的配置文件
centos7 systemctl restart network 重启网络服务
ip地址是全局的(只要是数据包到达主机,那么主机上的任何一个网卡配置的ip地址都可以做回应)
与路由器直连网段的路由记录是自动生成的
路由器不需要配置网关,它是根据路由表工作
A到B 添加路由 route add -net 172.16.0.0/16 gw 10.0.0.2/8
注意 接口可以不用写,它会自动补全
B到A 添加路由 route add -net 192.168.37.0/24 gw 10.0.0.1
注意:R1和R2 是用linux模拟的,并不是真正的路由器
当A去ping R2的时候,发现ping不通,经过检查发现问题出现在R1这里,数据包能够到达R1的0接口,但是在R1的1接口发现没有数据包,说明
数据包被抛弃了,这是由于linux默认没有开启路由功能,当发现数据包不是发给自己的时候,默认情况下把数据包丢弃。因此需要手动开启linux的路由功能
临时开启路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
centos6 禁用防火墙
chkconfig iptables off
service iptables stop
traceroute/tracepath/mtr 查看经过的路由器
当所有的未知网络都在路由器的一侧的时候,可以配置成默认路由
netstat 和 ss 都可以用来查看网络中的链接情况
netstat -ntul 用来查看监听的端口
lsof -i :6000 查看6000端口正在被谁使用
netstat -i 查看接口的数据情况
ip a 等价于 ip addr
ip addr add xxxx/xx dev eth1
为 eth1 添加一个地址
ip addr del 4.4.4.4/24 dev eth1
把eth1上的4.4.4.4的ip地址删掉
ip addr flush dev eth1
把eth1 上的所有地址统统删除
添加一个ip地址,如果scope 的参数是global 说明只要是发送到主机的数据包,此主机的任何一个网卡的ip都可以响应
如果scope的参数是link 那么只有从对应接口传来的数据包才进行处理
如果scope的参数是host 那么只有在主机上访问,被设置为host的ip才进行响应 ,外来的数据包不响应
默认加的都是global
在 centos 7上 修改网卡eth1的名字
首先禁用网卡
ip link set eth1 down
ip link set eth1 name ens33
把eth1 更改为 ens33
ip route 查看路由
ip route add xxx/xx via xxx
添加路由 via 后面指定网关
ip route del xxx/xx via xxx
删除路由
ip route add defaulf via xxx 添加默认路由
ip route del default via xxx 删默认路由
ss 常见组合 ss -nta
ss -nt 查看正在连接状态的ip和port
在生产中发现无法上网,如何排错?
先通过route -n 查看路由信息
ping 下 自己的网关 如果不通,通过ip addr 查看自己的网卡是否启用
也有可能是路由表出了问题,例如添加了两条默认路由记录。如果网关没问题,可以尝试ping 另一个网段的主机,ping 不通 ,说明路由器出了问题 ,能够ping通,查看是否dns出现问题
主机名修改在 /etc/sysconfig/network
在文件中修改之后不会立即生效
需要执行hostname xx 才会生效
/etc/hosts 这个文件的功能类似dns
在名字和ip之间做对应关系
建立把修改的主机名和127.0.0.1做对应关系
/etc/hosts 此文件的优先级比dns高
也可以修改让dns的优先级高于/etc/hosts文件
对于centos7
在 /etc/nsswitch.conf里面 有一行
hosts 默认是 files dns
改成dns files 这样dns优先级就高于/etc/hosts了
/etc/resolv.conf 是dns的配置文件
在文件里面有search localdomain
这一行的功能是 在ping 的时候
不想加域名,它能够帮你自动添加,
在网卡的配置文件里面添加一行
DOMAIN=XXXX
重启网络服务之后,/etc/resolv.conf里面的search 就变成xxxxx
当你ping 的时候, ping www 帮你自动补全 xxxxx
之前设置的关于route的都是临时性质的,要想长久保存,需要写配置文件/etc/sysconfig/network-scripts/route-iface
格式: xxxx/xx (目标网络) via xxx (网关)
重启网络服务 生效
上面设置也是临时的
要想在某块网卡上绑定一个ip,重启之后希望继续生效 可以在/etc/sysconfig/network-scripts目录下新建一个网卡配置文件 命名为被绑定网卡:别名
文件里面重要的一行
DEVICE=网卡名:别名 此名字要和文件的名字一致, 其余的和普通网卡配置一致即可
当你想要一块物理网卡既自动获取ip ,又要手动配置 ,那么自动获取那一行一定要写在网卡的主配置文件里面
在centos6里面 建议把 NetworkManager 服务停止 使用network 服务替代
chkconfig NetworkManager off
下次开机不在启动NetManager服务