ipvsadm
1、准备
三台虚拟机、需要ipvsadm、keepalived、arptables安装包 linux7.6自带、别的不清楚。
现有问题:用1做调度器 服务端是server2、server3。 怎样让真实主机 去访问一个虚拟ip能分配到server2、server3
方法: linux的内核管理,加上策略 在server2、server3上,让虚拟ip不能输出、不能让别的主机缓存。 #自己去看,查资料,我也得学习、得会把大概意思讲解出来(面试用) arptables程序包策略管理 本次运用。
本次用到相关知识:七层模型、ARP协议、VIP协议、keepalived双组访问
-ipvsadm 与 -arptables
在server1上 安装ipvsadm 并添加虚拟ip
[root@server1 ~]
[root@server1 ~]
[root@server1 ~]
[root@server1 ~]
在server2、server3和server1 上下载httpd并开启、同样加上相同的虚拟ip 过程略!!!
问题出现了:在同一个…(一个专业术语,大概意思是在一个网域中) ,同一个虚拟ip你怎样确保你访问的是调度器server1???) 概率都是一样的,第一次到server3上去它就不回来了(牵扯七层或四层模型),要你的server1调度器有什么用,还占用成本。
解决办法:使用arptables(涉及ARP协议) arptables是ARP工具之一
arptables简介
arptables是用户空间工具,用来管理 linux内核中的ARP规则表.这些规则用来 检查ARP帧.arptables类似于iptables,但没有那么复杂.iptables工作于ip层, 用于对ip包进行管理.arptables工作与arp协议层,用于对arp数据帧进行管理. arptables可以像iptables那样对arp数据帧进行各种规则设置,可以ACCEPT, DROP等.
server2和server3上安装arptables
server2和server3
yum install arptables -y
[root@server2 ~]
[root@server2 ~]
[root@server3 ~]
[root@server3 ~]
[root@server3 ~]
[root@server2 ~]
[root@server2 ~]
[root@server2 ~]
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A INPUT -j DROP -d 172.25.111.100
-A OUTPUT -j mangle -s 172.25.111.100 --mangle-ip-s 172.25.111.2
server3同上
[root@server1 ~]
[root@server1 ~]
-A -t 172.25.111.100:80 -s rr
-a -t 172.25.111.100:80 -r 172.25.111.2:80 -g -w 1
-a -t 172.25.111.100:80 -r 172.25.111.3:80 -g -w 1
[root@server1 ~]
ip_vs_rr 12600 1
ip_vs 145497 3 ip_vs_rr
nf_conntrack 133095 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
修改httpd发布页 server1、3 同理
[root@server2 ~]
server2
-keepalived
[root@server1 ~]
[root@server1 ~]
[root@server1 keepalived]
a.out keepalived.conf
[root@server1 keepalived]
[root@server1 keepalived]
[root@server1 keepalived]
[root@server1 keepalived]
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@server1 keepalived]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:2d:76:d8 brd ff:ff:ff:ff:ff:ff
inet 172.25.111.1/24 brd 172.25.111.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe2d:76d8/64 scope link
valid_lft forever preferred_lft forever
关闭其中一个 httpd
[root@foundation111 Desktop]
server2
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
curl: (7) Failed to connect to 172.25.111.100 port 80: Connection refused
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
curl: (7) Failed to connect to 172.25.111.100 port 80: Connection refused
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
curl: (7) Failed to connect to 172.25.111.100 port 80: Connection refused
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
server3
[root@foundation111 Desktop]
server3
结果比较顺畅的让server3 接管服务
现有问题如果 调度器server1 没了(在有另一台备用时,能否接管调度) server4
[root@server4 ~]
[root@server4 ~]
[root@server1 keepalived]
[root@server4 keepalived]
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 162
priority 50
[root@server4 keepalived]
[root@server4 keepalived]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:38:d0:05 brd ff:ff:ff:ff:ff:ff
inet 172.25.111.4/24 brd 172.25.111.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.111.100/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe38:d0:05/64 scope link
valid_lft forever preferred_lft forever
[root@server4 keepalived]
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.111.100:80 rr
-> 172.25.111.2:80 Route 1 0 0
-> 172.25.111.3:80 Route 1 0 0
You have new mail in /var/spool/mail/root
把server1 down掉看效果
[root@server1 keepalived]
[root@foundation111 Desktop]
? (172.25.111.100) at 52:54:00:38:d0:05 [ether] on br0
接管很平滑 很快的
server1修好了(重启),他又将调度权给争夺回来
-haproxy:基本启用-调度器、调度算法、日志设置、网页管理账户设置、关键字(.****结尾的)、给你专用的接口、黑白名单及其重定向、读写分离。 #都要改配置文件 /etc/haproxy/haproxy.cfg
前提:关掉keepalived、ipvsadm 、在以上的基础上实验完成,server2、server3 的arptables得保留,httpd服务开启
a、基本启用-调度器
systemctl stop keepalived yum install -y haproxy.x86_64 cd /etc/haproxy vim haproxy.cfg #修改配置文件 systemctl start haproxy.service systemctl status haproxy.service 可以在浏览器上查看:http://172.25.111.1/status
b、调度算法
重启服务 测试 一直是server2 类似于ip哈希算法
c、日志设置
[root@server1 haproxy]
$ModLoad imudp
$UDPServerRun 514
*.info;mail.none;authpriv.none;cron.none;local2.none /var/log/messages
local7.* /var/log/boot.log
local2.* /var/log/haproxy.log
[root@server1 haproxy]
[root@server1 haproxy]
Sep 25 17:07:50 localhost haproxy[4833]: Proxy main started.
Sep 25 17:07:50 localhost haproxy[4833]: Proxy app started.
d、网页管理账户认证
重启 测试
e、关键字(.****结尾的)给你专用的接口
重启 在server3上
[root@server3 ~]
[root@server3 html]
[root@server3 html]
[root@server3 images]
vim.jpg
f、黑白名单及其重定向
重启 测试
g、读写分离
在server2和server3上都要下载php 网页上的写是上传过程,是动态的。需要用到php
[root@server3 html]
[root@server3 html]
images index.html index.php upload upload_file.php
[root@server3 html]
[root@server3 html]
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
server2同上 然后都要重新启动httpd服务
在浏览器上访问http://172.25.111.1/index.php
测试结果 server3上有 server2上没有
|