lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑
出的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
lvs-dr:操纵封装新的MAC地址
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报
文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标
MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标
IP/PORT均保持不变
(1) Director和各RS都配置有VIP
(2) 确保前端路由器将目标IP为VIP的请求报文发往Director
在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
(3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
RIP的网关不能指向DIP,以确保响应报文不会经由Director
(4)RS和Director要在同一个物理网络
(5)请求报文要经由Director,但响应报文不经由Director,而由RS直接发往
Client
(6)不支持端口映射(端口不能修败)
(7)RS可使用大多数OS系统
lvs-tun:在原请求IP报文之外新加一个IP首部
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文
之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标
RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
(1) DIP, VIP, RIP都应该是公网地址
(2) RS的网关一般不能指向DIP
(3) 请求报文要经由Director,但响应不经由Director
(4) 不支持端口映射
(5) RS的OS须支持隧道功能
lvs-fullnat:修改请求报文的源和目标IP
lvs-fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,
RIP的网关一般不会指向DIP
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还
要将其发往Client
(3) 请求和响应报文都经由Director
(4) 支持端口映射
注意:此类型kernel默认不支持
vip:192.168.0.11
lvs:192.168.0.12
rs1:192.168.0.13
rs2:192.168.0.14
rs1,rs2安装:
yum -y install httpd
#rs1
echo server1 > /var/www/html/index.html
#rs2
echo server2 > /var/www/html/index.html
vi rs.sh
##################################
#!/bin/bash
vip=192.168.0.11
mask='255.255.255.255'
dev=lo:1
dir=/proc/sys/net/ipv4/conf/
case $1 in
start)
echo 1 > ${dir}all/arp_ignore
echo 1 > ${dir}lo/arp_ignore
echo 2 > ${dir}all/arp_announce
echo 2 > ${dir}lo/arp_announce
ifconfig $dev $vip netmask $mask #broadcast $vip up
echo 'The RS Server is Ready!'
;;
stop)
ifconfig $dev down
echo 0 > ${dir}all/arp_ignore
echo 0 > ${dir}lo/arp_ignore
echo 0 > ${dir}all/arp_announce
echo 0 > ${dir}lo/arp_announce
echo 'The RS Server is Canceled!'
;;
*)
echo "Usage:$(basename $0) start|stop"
exit 1
;;
esac
#运行
sh rs.sh start
lvs安装:
#添加vip
ifconfig eth0:1 192.168.0.11 broadcast 192.168.0.254 netmask 255.255.255.255 up
#或者
ip a a 192.168.0.11/24 dev eth0
#配置lvs规则
yum -y install ipvsadm
#使用轮询算法,便于测试
ipvsadm -A -t 192.168.0.11:80 -s rr -p
ipvsadm -a -t 192.168.0.11:80 -r 192.168.0.13
ipvsadm -a -t 192.168.0.11:80 -r 192.168.0.14
#查看
ipvsadm -Ln
脚本安装
#!/bin/bash
vip='192.168.0.11'
iface=‘lo:1'
mask='255.255.255.255'
port='80'
rs1='192.168.0.13'
rs2='192.168.0.14'
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask #broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler -p
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm -C
ifconfig $iface down
;;
*)
echo "Usage $(basename $0) start|stop“
exit 1
esac
测试:
while :;do curl 192.168.0.11;sleep 0.5;done
HA Cluster 配置准备:
(1) 各节点时间必须同步
ntp, chrony
(2) 确保iptables及selinux不会成为阻碍
(3) 各节点之间可通过主机名互相通信(对KA并非必须)
建议使用/etc/hosts文件实现
(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA
并非必须)
vip:192.168.0.10
keepalived server1:192.168.0.11
keepalived server2:192.168.0.12
real server1:192.168.0.13
real server2:192.168.0.14
1.安装keepalived
yum -y install keepalived
2.keepalived配置文件
vi /etc/keepalived/keepalived.conf
#################################################################
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka1 #主机名
vrrp_mcast_group4 224.100.100.100 #多播地址
}
vrrp_instance VI_1 {
state MASTER #从为BACKUP
interface eth0
virtual_router_id 66
priority 100 #从为80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.10/24 dev eth0 label eth0:1
}
}
#lvs配置
virtual_server 192.168.0.10 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 50 #持久连接
protocol TCP
#sorry_server 192.168.200.200 1358
real_server 192.168.0.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.0.14 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3.可添加日志
将keepalived设置自定义输出
vi /etc/sysconfig/keepalived
#修改
KEEPALIVED_OPTIONS="-D -S 6"
配置自定义输出日志
vi /etc/rsyslog.conf
#添加
local6.* /var/log/keepalived.log