vip
基本概念
虚拟IP即VIP,这只是一个概念而已 。主要作用,做灾备时候,做主从切换使用的。 如eth0:x ,x为0-255的任意数字,你可以在一块网卡上绑定多个别名在实际生产环境中,需要在DNS配置中把网站域名地址解析到这个VIP地址,由这个VIP对用户提供服务。如:把www.zhangcong.top解析到VIP 1.1.1.1 上。
域名dns绑定到特定的ip上,但是dns生效时间,可能并不快。
而vip呢,相当于,将某个静态的ip分配给指定的机器上,如果该机器服务挂了或它自己挂了,它应该让出vip,而其他的机器去抢夺该vip。一般就两台机器。(主从)
虽然是虚拟ip,但是,它应该也是能被路由,访问的,并不是随便的假的ip地址。需要于多分配了一个ip。假如,我们叫原来的ip叫管理ip,新增的叫vip。这样,相当于,有了两个ip,vip可以随意切换,这样,我们的服务,可以通过vip稳定的找到。机器,可以通过管理ip稳定找到。
高可用
高可用技术强调的网站、业务系统可用率,通过数字9来评估,网站几个9,例如99.9%、99.99%、99.999%。在企业生产环境中,作为运维人员如何保障网站、业务系统、数据库高可用呢?有哪些方法、有哪些软件程序可以实现呢?
1:使用SHELL编程脚本实现WEB、业务、数据库高可用。:
2:增加服务器系统的数量(WEB、DB集群),避免单点故障;
3:借助开源的高可用软件:Keepalived,Heartbeat故障自动转移
这里我们基于shell脚本实现两台nginx web故障的自动切换,当一台Nginx WEB宕机
时,能够切换至另外一台,保障用户能够正常访问
1:VIP地址同一时刻只能绑在其中一台WEB服务器;
2:VIP地址只能绑定在Nginx服务正常的机器上;
3:当Nginx服务宕机或者异常上,释放VIP,另外一台此时机器绑定VIP
方案
LVS+Keepalived高负载方案,VIP是需要绑定到realserver接口上,而Haproxy/Hearbeat/Nginx+keepalived却不用手动绑定到后端服务器接口上。这是因为LVS使用IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh),LVS是四层负载均衡,工作在传输层。LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
这样做的好处就是当提供服务的服务器宕机以后,在接管的服务器上会直接自动配置上同样的VIP提供服务。如果是使用管理IP的话,来回迁移就难以做到,而且,管理IP迁移走了,我们就只能去机房连接服务器了,VIP 的实质就是确保两台服务器有一个管理IP不动,就是随时可以连上服务器,然后增加绑定其他的VIP,这样就算VIP转移走了,也不至于服务器本身连不上,因为还有管理IP可以使用。 Linux系统给网卡配置VIP的方法常见的有两种,即别名IP(alias ip)以及辅助IP(secondary ip address)。
资源
nginx + keepalive https://blog.csdn.net/shida_csdn/article/details/80739859
二、别名IP(alias ip)
ifconfig eth0:1 192.168.40.20 netmask 255.255.255.0 up
ifconfig eth0:1 192.168.40.20/24 up # heartbeat软件默认是使用这个命令来添加的
# 查看
fconfig eth0:1
# 删除
ifconfig eth0:1 192.168.40.20 netmask 255.255.255.0 down
ifconfig eth0:1 down
# 让别名IP永久生效
# 写入到网卡配置文件可以让别名IP永久生效,名字可以为ifcfg-eth0:x,x为0-255的任意数字,IP等内容格式和ifcfg-eth0一致,或者将命令写入/etc/rc.local
注意:别名IP将被遗弃,用辅助IP替代,(why?)
三、辅助IP(secondary ip address)
辅助IP则是由Linux系统的ip命令创建和维护的,
ip addr add 创建的辅助IP,不能通过ifconfig查看。
但是通过ifconfig创建的别名IP却可以在ip addr show 命令查看。
# 1)手工配置辅助VIP的方法:
ip addr add 192.168.40.20/24 dev eth0
# keepalived 软件默认使用这个命令来添加VIP,也是heartbeat3软件采用的方案# ip add 可以查看别名和辅助IP,用ifconfig无法查到辅助IP配置情况
# 查看
# 使用辅助IP的方法配置的VIP,不能通过ifconfig查看,只能通过 ip addr 来查看
# 使用辅助IP的方法配置的VIP,可以通过ip addr 查看
ip addr
# ip addr show 、 ip addr 、 ip add 这三个命令的结果都是一样的 (备注:add是addr的简写)
# 3)手工删除辅助IP的方法
ip addr del 192.168.40.20/24 dev eth0
提示: heartbeat 和 keepalived 在启动时就是分别利用上面命令来配置VIP的。在停止时利用下面的命令来删除VIP。以上两种方式配置VIP,在高可用环境中的作用是一样的,没什么区别,只是由于当时的系统环境等历史原因,选择的配置命令方式不同。heartbeat3 版本起,不在使用别名,而是使用辅助IP提供服务,而 keepalived 软件一直都是使用的辅助IP技术。
总结:
1、从heartbeat3.0开始,创建VIP的方式为手工配置别名的方式。
2、Keepalived软件创建VIP使用的是辅助IP技术。
3、(heartbeat3.0-)手工配置别名的方式:ifconfig eth0:1 192.168.40.20 netmask 255.255.255.0 up
4、(keepalived)辅助IP的方式:ip addr add 192.168.40.20/24 dev eth0
5、VIP(虚拟IP)根物理网卡是绑定的。
6、以上总结是heartbeat和keepalived高可用软件创建VIP的区别,在配置vip的时候,避免错误。
vip切换的shell
下面两个脚本的使用场景:
机器A、B同时是活动的机器,nginx运行状态,也同时执行了下面的脚本,只有一个master机器获得了VIP,并提供对外服务。脚本都不停的尝试去ping配置的VIP,如果获得VIP机器挂了,或者主动让出了VIP,则,下面脚本,则会主动的抢夺VIP,并进入master状态。
所以,脚本主要状态:就是,nginx运行,而且能ping通vip状态。
#!/bin/bash
# vip 切换shell
while true;do
nginx_online=`ps -ef|grep nginx|grep -v grep|wc -l`
if [ $nginx_online -eq 0 ];then
ifdown ens33:1
else
ping -c 2 192.168.32.35 >/dev/null 2>&1
if [ $? -ne 0 ];then
cat>/etc/sysconfig/network-scripts/ifcfg-ens33:1<<EOL
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.32.35
NETMASK=255.255.255.0
NAME=ens33:1
DEVICE="ens33:1"
ONBOOT="yes"
EOL
ifup ens33:1
fi
fi
sleep 1
done
#!/bin/bash
cd /etc/sysconfig/network-scripts/
ip=192.168.80.200
netfile=ifcfg-ens33:1
# 如过nginx存活,则判断是否还需要激活vip。
# nginx挂了,则主动删除vip,并删除文件。
# nohup bash nginx_vip.sh &
# 两台nginx服务器节点都要执行vip脚本,在后台运行
while true
do
killall -0 nginx &> /dev/null
if [ $? -eq 0 ]
then
ping -c2 $ip &>/dev/null
if [ $? -ne 0 ]
then
cat >> $netfile <<-EOF
TYPE=ethernet
BOOTPROTO=none
ONBOOT=yes
DEVICE=ens33:1
IPADDR=$ip
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS=8.8.8.8
DNS2=114.114.114.114
EOF
ifup enss33:1
fi
else
ifdown enss33:1 &>/dev/null
rm -rf $netfile
fi
sleep 2
done