LVS的DR模式和keepalived 高可用性

用keepalived高可用LVS-dr模型
目的:当一台代理服务器挂了后实现ip漂移由另外一台机器提供负载均衡功能 实现高可用性
为避免受影响 所有的虚拟机都需要关闭selinux 和防火墙

环境:四台虚拟机
RS1 :192.168.100.243
RS2 :192.168.100.244
Director1:192.168.100. 242
Director2:192.168.100.246
1 RS1
rpm -q httpd 查看是否安装了httpd
如果没有安装则 yum install httpd

echo "<h1>  RS1  </h1>"> /var/www/html/index.html 区别于RS2 

2 RS2
rpm -q httpd 查看是否安装了httpd
如果没有安装则 yum install httpd

echo "<h1>  RS2  </h1>"> /var/www/html/index.html

3 D1
yum install ipvsadm –y
ip addr add 192.168.100.88/32 dev ens37 配置vip
ip addr list
用别的主机ping 192.168.100.88

4 在RS1 上编写脚本
vim set.sh
! /bin/bash
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_annouce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
esac
chmod +x set.sh
bash set.sh start
cat /proc/sys/net/ipv4/conf/all/arp_ignore
1
scp set.sh 192.168.100.244:/root/ 传输 文件到RS2

在RS2 上
bash set.sh start
cat /proc/sys/net/ipv4/conf/all/arp_ignore
1

5 在RS1和RS2上都执行
ifconfig lo:0 192.168.100.88 netmask 255.255.255.255 broadcast 192.168.100.88 up 配置vip在回环网卡上
route add -host 192.168.100.88 dev lo:0 添加路由

6 D1 上
ipvsadm -A -t 192.168.100.88:80 -s rr
ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.243 -g -w 1
ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.244 -g -w 2
ipvsadm –L –n 查看规则
用别的客户端 curl http://192.168.100.88
ipvsadm –C 清空规则
ip addr del 192.168.100.88/32 dev ens37 删除ip
ip a

7 准备D2 在D2上
yum install ipvsadm
ip addr add 192.168.100.88/32 dev eth1
ipvsadm -A -t 192.168.100.88:80 -s rr
ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.243 -g -w 1
ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.244 -g -w 2
ipvsadm –L –n
用别的客户端 curl http://192.168.100.88
ipvsadm -C
ip addr del 192.168.100.88/32 dev eth1

让两个director拥有sorry server (D1和D2)
(1)
yum install httpd -y
vim /var/www/html/index.html

<h1> under maitenance D1  </h1>

(2)
yum install httpd -y
vim /var/www/html/index.html

<h1> under maitenance D2  </h1>

8 D1上
yum install keepalived -y 安装
cd /etc/keepalived
vim keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalive@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_mt {
script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
interval 1
weight -2

}

vrrp_instance VI_1 {
state MASTER
interface ens37
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass ab7492f2e028
}
virtual_ipaddress {
192.168.100.88/32 dev ens37
}
track_script {
chk_mt
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

virtual_server 192.168.100.88 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
protocol TCP

real_server 192.168.100.243 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.100.244 80 {
weight 2
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

9 vim notify.sh

#!/bin/bash
vip=192.168.100.88
contact=‘root@localhost’
notify() {
mailsubject=“hostname to be $1: $vip floating”
mailbody=“date ‘+%F %H:%M:%S’: vrrp transition, hostname changed to be $1”

echo $mailbody | mail -s "$mailsubject" $contact

}
case “$1” in
master)
notify master
exit 0
;;
backup)
notify backup
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo ‘Usage: basename $0 {master|backup|fault}’
exit 1
;;
esac
chmod +x notify.sh
systemctl restart keepalived
11 scp notify.sh 192.168.100.246:/etc/keepalived/

12 在D2上配置
vim /etc/keepalived/keepalive.conf
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalive@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_mt {
script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
interval 1
weight -2

}

vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass ab7492f2e028
}
virtual_ipaddress {
192.168.100.88/32 dev eth1
}
track_script {
chk_mt
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

virtual_server 192.168.100.88 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
protocol TCP
real_server 192.168.100.243 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.100.244 80 {
weight 2
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
13 用浏览器访问 192.168100.88
或者是用其他的虚拟机
curl 192.168100.88
14 让D1挂了,看D2能否运行
在D1 上
cd /etc/keepalived
touch down

猜你喜欢

转载自blog.csdn.net/qq_42635996/article/details/82890209