lvs+keepalived+httpd同机器部署
背景
两台机器做lvs+keepalived高可用,且提供服务的httpd也在这两台机器上,变态级节省资源。
一、安装并做httpd区分机器页面
两台都做
yum -y install keepalived httpd ipvsadm
A机
echo 11111 >> /var/www/html/index.html
systemctl start httpd && systemctl enable httpd
B机
echo 222222 >> /var/www/html/index.html
systemctl start httpd && systemctl enable httpd
二、做realserver命令
两台都做
vim /etc/init.d/realserver
#!/bin/bash
#description : start realserver
SNS_VIP=192.168.1.160 #定义了一个VIP变量,必须跟真实服务在一个网段
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up #增加一个本地路由 lo:0
/sbin/route add -host $SNS_VIP dev lo:0
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
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
service realserver start(写进开机启动命令)
三、打标签(写进开机启动命令,/etc/rc.d/rc.local加执行权限)
A机器
iptables -t mangle -I PREROUTING -d 192.168.1.160 -p tcp -m tcp --dport 80 -m mac ! --mac-source 00:0c:29:25:4e:ef -j MARK --set-mark 0x3
对应vip B机mac地址 标记3
B机器
iptables -t mangle -I PREROUTING -d 192.168.1.160 -p tcp -m tcp --dport 80 -m mac ! --mac-source 00:0c:29:1e:83:3b -j MARK --set-mark 0x4
对应vip A机mac地址 标记4
四、keepalived配置文件
A机
global_defs {
router_id LVS_DEVELA
}
vrrp_instance VI_1 {
state MASTER
interface ens33 #注意修改
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.160
}
}
virtual_server fwmark 3 80 { #注意改动
delay_loop 6
lb_algo rr
lb_kind DR #使用LVSDR模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.70 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.71 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
systemctl start keepalived.service && systemctl enable keepalived.service
B机
global_defs {
router_id LVS_DEVELB
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.160
}
}
virtual_server fwmark 4 80 { #注意改动
delay_loop 6
lb_algo rr
lb_kind DR #使用LVSDR模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.70 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.71 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
systemctl start keepalived.service && systemctl enable keepalived.service
五、查看
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.160:80 rr
-> 192.168.1.70:80 Route 1 0 1
-> 192.168.1.71:80 Route 1 0 0