集群:
集群 目的: 提高性能、降低成本、提高可扩展性、增强可靠性
HPC | 高性能计算集群 | 反复进行一个计算,一般用于科研等需要精算的领域 |
LB | 负载均衡集群 | 多台机器提供一个服务,一个访问可以给后面多个服务器中任意一个,实现平衡负载 用 LVS、HAproxy、nginx 等软件实现 |
HA | 高可用集群 | 做备份,主服务器出问题后,备用服务器将会顶替上 用 Keepalived 等软件实现 |
ext4/xfs 本地文件系统
只查看本机的对磁盘的写操作,不会查看其他设备对磁盘的操作
gtf 全局文件系统
需要额外操作,可以查看其他设备的磁盘操作
iscsi和nfs的区别
iscsi 适合HA(高可用集群),不适合LB(负载均衡集群)
而适合做LB的,是nfs共享
主要原因是:iscsi共享的磁盘一般都是格式化为ext4或者xfs等本地文件类型,致使多个客户端挂载后,进行添加或者修改文件,客户端之间没有关联,如果要进行同步需要解除挂载
而nfs可以实时同步各个客户端创建修改的的所有内容,可以理解为每个客户端都是以nfsnobody的身份远程服务端,然后对共享的文件夹进行操作
特例问题:(iscsi使用的是正常的本地文件系统格式化的)
1. 如果对同一个文件进行操作,会出现什么情况
iscis: 每个服务器修改的文件互相不影响,也是说,C1客户端修改了w文件,C2客户端的w文件并不会有改动,那么也就说C1和C2同时修改w文件,两者没有任何冲突,可以理解为修改的是两个不同的文件
NFS: 如果同时修改,先进入文档的没有问题,后进入文档的客户端会vim出现一个提示界面,告诉你该文件正在被改动
2. 对于iscsi使用相同的iqn和不同的iqn都可以实现不会有影响
3. 对于iscsi,如果想实现文件同步,只需要 解除挂载、登出iscsi,再重新登陆挂载 即可,其数据是覆盖的,不过可能出现bug,建议登出后过一点时间再登陆,建议不要这么操作。
nfs共享目录
具体查看我写的关于nfs服务的blog 不过还是要强调一个点,如果想制作支持客户端读写操作的nfs共享,不单单需要在配置文件中写上rw
而且必须给目录赋权,客户端通过nfs对共享目录操作的时候,使用服务端的用户是nfsnobody
所以我们可以用: setfacl -m -u:nfsnobody:rwx 共享的目录
Linux服务器的不同网段通信
1. 开启服务器的路由转发功能
sysctl -a 查看所有内核设置的信息
修改内核配置文件/etc/sysctl.conf
net.ipv4.ip_forward = 1
然后用命令 sysctl -p ,让内核读取配置文件并且显示出来
2. 网关设置
查看设备的默认网关 route -n
临时配置网关: route add default gw 网关设备IP
删除网关: route del default gw 网关设备IP
永久修改网关信息,修改配置文件
网络间通讯,同网段在网络中可以直接通信,不同网段要经过网关才可以连通,如果要相互通信需要两个设备都设置好网关,具体网络知识参考我关于网络的总结
负载均衡 LB 的常用术语 | ||
Director Server | 调度服务器,分发服务器 | 连接客户端和真实服务器,按照配置将请求分发给多个服务器 |
Real Server | 真实服务器 | 提供相应服务 |
VIP | 虚拟IP地址 | 配置子调度服务器的一个网卡上的一个IP,用于和公网的客户端设备连接的网卡,客户端访问的IP |
RIP | 真实IP地址 | 真实服务器的内网IP地址 |
DIP | 调度器IP | 配置子调度服务器的一个网卡上的一个IP,用于和内网的真实服务器,真实服务器连接的IP |
LB的调度算法: | ||
rr | 轮询(Round Robin) | 将请求平均分发到每个真实服务器中 |
wrr | 加权轮询(Weighted Round Robin) | 将请求按照权值的多少进行分发,即一个权值为3,一个权值为1,分发的时候4个请求,就会一个分发到3个,一个分发到1个 |
lc | 最少连接(Least Connections) | |
wlc | 加权最少连接(Weighted Least Connections) |
LB的工作模式:
NAT:通过网络的地址转换技术来实现,LVS服务器同时完成路由功能,所有数据的传递都是经过LVS
主要用于: 服务器的ip都是私网地址,LVS服务器有外网IP和私网IP
弊端: LVS服务器压力太大,其性能直接决定了整个服务的性能,一旦LVS服务器出现故障全部服务全部崩溃
优点: 只需要一个公网IP,适用于小规模集群
客户端发出请求
客户端 ---外网---> LVS分发服务器(具有路由功能) ---内网---> 服务器 ---内网---> 后端存储设备
服务端响应
客户端 <---外网--- LVS分发服务器(具有路由功能) <---内网--- 服务器 <---内网--- 后端存储设备
DR:通过路由技术实现发布,返回数据的时候不经过LVS服务器,在请求后客户端和服务端建立1对1连接,进行数据传递(常用)
主要用于: 服务器的ip都有一个公网地址 ,LVS也有公网IP,这时候所有设备都能直接连接外网
优点: 综合性能高,可拓展性强,LVS服务器的压力也不会太大
不足: 每个服务器都需要一个公网IP,费用较高
客户端发出请求
客户端 ---外网---> 路由 ---内网---> LVS分发服务器(不需要路由功能) ---内网---> 服务器 ---内网---> 后端存储设备
服务端响应
客户端 <---外网--- 路由 <---内网--- 服务器 <---内网--- 后端存储设备
TUN:通过隧道实现(较少),
主要用于:分发服务器和真实服务器不在同一个网段
客户端发出请求
客户端 ---外网---> 路由 ---外网---> LVS分发服务器(不需要路由功能) ---外网---> 路由 ---内网---> 服务器 ---内网---> 后端存储设备
服务端响应
客户端 <---外网--- 路由 <---内网--- 服务器 <---内网--- 后端存储设备
建立配置LB集群ipvsad命令:
装包 yum install -y ipvsadm
配置文件:/etc/sysconfig/ipvsadm-config
存储文件:/etc/sysconfig/ipvsadm
具体LVS配置使用命令ipvsadm
直接加在命令后面即可实现具体功能 | |
-Ln | 查看ipvs的配置信息 |
-Ln --stats | 查看年ipvs服务器的数据包分发情况 |
-Sn | 保存所有配置 |
-C | 清除所有配置 |
-Z | 清除数据包分发数据的记录信息 |
用于指定该命令要实现什么功能 | |
-A | 添加LVS服务 |
-D | 删除LVS服务 |
-E | 修改LVS服务的设置信息 |
-a | 添加真实服务器 |
-d | 删除虚拟服务器 |
用于指定各个模块的具体作用 | ||
-t | 设置VIP | 后面跟着lvs服务中连接客户端的虚拟ip和端口号 |
-s | 指定负载调度算法 | 后面跟着各个算法简称 |
-r | 指定真实服务器的地址 | 后面跟着一个具体的服务器的IP和端口号 |
-w | 设置权限 | 后面跟着具体权限值,不写默认为1 |
-m | 使用NAT模式 | |
-g | 使用DR模式 | 不写默认为DR模式 |
-i | 使用TUN模式 |
常用功能:
查看当前配置信息
ipvsadm -Ln
创建一个LVS服务(其中端口号是根据要实现的服务来填写的,如80是http服务)
ipvsadm -A -t 连接客户端的VIP:端口号 -s 算法
ipvsadm -A -t 201.11.55.10:80 -s wrr
删除一个LVS服务
ipvsadm -D -t 连接客户端的VIP:端口号 -s 算法
ipvsadm -D -t 201.11.55.10:80 -s wrr
修改一个LVS服务
ipvsadm -E -t 连接客户端的VIP:端口号 -s 算法
ipvsadm -E -t 201.11.55.10:80 -s lc
给LVS服务,添加真实提供服务的服务器
ipvsadm -a -t 连接客户端的VIP:端口号 -r 真实服务器的RIP -具体工作模块 -w 权重
ipvsadm -a -t 201.11.55.10:80 -r 172.25.0.10:80 -m
ipvsadm -a -t 201.11.55.10:80 -r 172.25.0.11:80 -m -w 2
修改某个LVS服务下的某个真实提供服务的服务器的配置
ipvsadm -e -t 连接客户端的VIP:端口号 -r 真实服务器的RIP -具体工作模块 -w 权重
ipvsadm -e -t 201.11.55.10:80 -r 172.25.0.10:80 -m -w 3
删除某个LVS服务下的某个真实提供服务的服务器的配置
ipvsadm -d -t 连接客户端的VIP:端口号 -r 真实服务器的RIP
ipvsadm -d -t 201.11.55.10:80 -r 172.25.0.11:80
保存配置信息(把数据保存到存储文件中),重新启动保存配置
ipvsadm -Sn > /etc/sysconfig/ipvsadm
或者修改配置文件/etc/sysconfig/ipvsadm-config,让关闭ipvs的时候保存
IPVS_SAVE_ON_STOP="yes"
实时查看ipvs的请求分发的数据包的信息( -n 后面的数值是每隔多少秒刷新数据)
watch -n 1 ipvsadm -Ln --stats
不能启动ipvsadm服务,查看的时候这服务也是停止的,不过可以设置开机自启,如果想开机自动开启服务需要设置保存后设置这命令 systemctl enable ipvsadm
LVS/NAT
1. 配置分发服务器,创建集群
创建一个LVS服务:ipvsadm -A -t VIP:80 -s rr
给LVS服务,添加真实提供服务的服务器:ipvsadm -a -t VIP:80 -r RIP:80 -m
2. 在真实的web服务器上配置web网页的http服务
LVS/DR集群构建
1. 配置分发服务器,在其网卡上设置VIP
ifconfig eth0:1 预备设置的VIP
2. 创建集群
使用 ipvsadm 命令创建 具体和NAT一样,不过添加真实服务器的时候要把 -m 改称 -g
3. 修改真实服务器的内核参数(只能用覆盖的方法写入,vim不可以修改,即使是root身份)
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
放入/etc/rc.local可以开机自动执行(需要赋予执行权限,这文件是一链接,源文件是/etc/rc.d/rc.local,用ll查看链接的时候权限一定是777,不过这是假的,我们要查看源文件的权限,不过赋权可以赋予给链接,实际赋予权限给的是源文件)
也可以修改内核配置文件/etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
4. 在真实服务器的lo网络回路接口中绑定vip地址
ifconfig lo:1 预备设置的VIP/32
5. 运行web网页的HTTP服务
DR的具体理论
DR模型最大的特点:一个是VIP是配在DIP网卡上的一个虚拟网卡,同样VIP也会配在真实服务器的lo环路网卡上的一个虚拟网卡上,另一个是客户端、调度器、服务器都是在同一个网段上的。就这两个特点进行分析
第一个特点存在分析:
为什么这么设计呢,因为整个原理存在一个最大的问题:客户端发送请求的数据包头是 CIP ----> VIP ,他接受数据包的时候其包头必须是 VIP ----> CIP ,所以如果数据包发给调度器VIP就要配在调度器上,可是如果想返回数据的时候不经过调度器,服务器也就要拥有VIP,一个网段里面怎么能有多个IP地址,这是最大的难题,这就需要修改内核参数来实现。
为了让一个网段存在多个VIP,我们势必要将几个VIP设置在没有网卡接口的lo网卡上,可是怎么让VIP在没有接口的情况下通信,这又是一个问题,而DR模型就是解决这两个问题实现了LB负载均衡
其理论思路是:客户端访问VIP,然后调度器把数据包按照自身策略分发给某个服务器,然后该服务器的lo回环网卡上的VIP的虚拟网卡,通过RIP所在网卡以VIP身份发送数据包。
请求: CIP ----> VIP == DIP ---> RIP
返回数据: RIP代替VIP ----> CIP
那么第一个问题出现了,怎么才能让RIP所在网卡帮助lo以VIP身份发送,这就要修改内核参数arp_announce
第二个问题,怎么让一个网络中存在多个VIP,这就要修改内核参数arp_ignore
第二个特点存在分析:
为什么必须全部都在一个网段里面呢?在这里有个网络方面的知识:兄弟网卡必须是同网段才算,而只有兄弟网卡才能相互帮助,进行代理收发等操作。所以上面的一个操作让RIP所在网卡以VIP身份发送数据包,必须要让RIP和VIP是兄弟网。
在公司中,做LVS/DR有两种情况,第一个大公司有钱,每个服务器给每个IP都配置一个公网IP,这样服务发布出去就可以有用;第二个正常公司,在公网和内网链接的路由器上配置一个NAT(这是路由功能,不是LVS/NAT),让VIP映射成一个公网再传递出去,这样性价比高,不过比第一种还是性能差点。
内核参数
可以用命令查看内核参数:sysctl -a
内核配置文件 /etc/sysctl.conf 把查看到的内核参数中想修改的部分修改完写进去
用命令 sysctl -p 查看在配置文件中再加做的修改
网络方面的内核参数的名字一般是 net.ipv4.conf.………………
也可以修改/proc/sys/net/ipv4/的具体文件的内容不过只能用echo,而且只是临时的配置
arp_ignore 代表是否恢复ARP广播 0 回应虽有ARP广播
1 只回应入站网咖的IP的广播
arp_announce 0 网卡接口只以自己接口的IP发送和接收包
2 网卡可以帮兄弟网卡收发数据包,也就是让一个网卡接口可以以别的同网段的网卡的IP进行收发数据包