设为首页 收藏本站
查看: 1109|回复: 0

[经验分享] 基于Keepalived实现了LVS高可用及Web服务高可用包括主从模型和主主模型

[复制链接]

尚未签到

发表于 2018-12-30 10:20:49 | 显示全部楼层 |阅读模式
在这里我们要讲Keepalived的使用,在讲Keepalived之前,我们要先讲讲VRRP的使用。因为Keepalived加入VRRP功能,使得现在的Keepalived具有服务器运行检测功能与HA Cluster功能。
  一、VRRP定义
  VRRP(Virtual Routing Redundent Protocol):虚拟路由冗余协议,它是一种协议,将多态物理设备组合成一台虚拟设备。
      1、备份组中路由器的优先级
在一个备份组中,有一个主(master),多个从(slave),当主服务器(master)宕机了,从服务器就要取而代之,但是那么多从服务哪个取代呢?它有一个根据优先级的选举协议,优先级高的谁就成为主的了,或者让它工作在抢占模式下,谁反应快,谁就成为主的了。所以它是一主多从的工作机制,但是多个从平时都不上线,这就造成了资源的浪费,所以我们常见的就是一主一从,实际它是可以实现一主多从的。
VRRP优先级的取值范围为0~255(数值越大表名优先级越高),可配置的范围是1~254,优先级0为形同保留,255则是系统保留给IP地址拥有者,当路由器为IP地址拥有者时,其优先级始终为255,所以,当备份组内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
在一个物理设备上,可以配置多个组,靠组ID区别不同的组。在同一个组内,所有的工作都在同一个组内工作的。
      2VRRP工作过程
(1)路由器使用VRRP功能后,会根据优先级确定自己在备份中的角色。优先级高的为Master,低的为Backup,Master定义发送VRRP通告报文,通知备份组中的其它路由器自己工作正常。Backup则启动定时器等待通告报文的到来。
(2)在抢占模式下,当Backup收到VRRP通告的报文后,会拿自己的优先级比较通报报文中的优先级,如果大于通告报文中的优先级,则成为Master ,如果小于通告报文中的优先级,则还是Backup
(3)在非抢占模式下,只要Master路由器没有出现问题,备份组中的路由器始终保持着自己原来的状态,即使后来有的Backup有更高的优先级也不会成为Master
(4)如果Backup的定时超时后仍然没有收到Master路由器发送来的VRRP通告报文,则认为Master已经无法正常工作了,此时Backup会认为自己是Master,并对外发送VRRP通告报文,备份组内的路由会根据优先级选举出来Master,承担报文的转发功能。
  二、Keepalived定义及主要功能
  Keepalived:最初目的为ipvs提供高可用功能的,所以我们实现ipvs高可用的时候我们使用Keepalived来配置更简
  主要提供三个功能
     1、IP:对IP地址实现飘移,依赖于ARRP协议
     2、lvs:重新启用一份ipvs规则
     3、health check:健康检查
  三、配置安装Keepalived实现LVS服务的高可用
我们这里使用四台虚拟机,其中HA1和HA2当做高可用的Web服务,另外两个做成real server。这里我们要先在HA1和HA2上面安装keepalived,这个软件我们这些下载到本地了,大家配置了上官网上下载(keepalived-1.2.7-5.el5.i386.rpm)   软件包,因为安装这个包还需要解决依赖关系,所以这里我们还需要安装yum库,安装完成后我们就开始安装keepalived。
1、安装yum

我们这里用挂载光盘来安装yum库,进而安装开发环境,需要安装Development Libraries和Development Tools但是Development Tools默认都安装过了,所以我们这里安装一个就行了。安装完成后开发环境就安装成功了。


[root@localhost ~]# mkdir /mnt/cdrom    ###创建cdrom目录
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom  ###挂载光盘(当场有效,开机无效)
[root@localhost ~]# vim /etc/fstab  ###在配置文件中挂载光盘(当场无效,开机有效)
/dev/cdrom              /mnt/cdrom              ext3    defaults        0 0
[root@localhost ~]# cd /etc/yum.repos.d/  ###进入yum.repos.d目录下面
[root@localhost yum.repos.d]# vim server.repo  ###编辑server.repo
[base]
name=Server
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum groupinstall "Development Libraries"2、安装keepalived
# yum -y--nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm
# rpm -qlkeepalived   ###查看配置文件
/etc/keepalived   ###配置文件目录
/etc/keepalived/keepalived.conf    ###主配置文件
/etc/keepalived/keepalived.conf.haproxy_example   ###自己设置的主配置文件将haproxy配置成高可用功能了
/etc/keepalived/notify.sh   ###这里我们设置的脚本,网上下载是没有的。
# scpkeepalived-1.2.7-5.el5.i386.rpm node1:/root  ###把下载的软件包给前HA2发过去。

      3、查看并解释配置文件。
  
  四、配置real server
        我们需要设置IP地址与director在同一个网段内,首先我们要先关闭selinux,然后安装http服务器进行访问测试,然后编辑网页,网页编辑完成后我们就要开启服务,下来进行网页测试。
#setenforce0   ###关闭selinux
# yum installhttpd   ###安装http服务
# vim  /var/www/html/index.html  ###编辑网页
# service httpdrestart  ###开启服务

我们这里使用的是一个脚本,此脚本只需要在real server中使用就行了。
# vim start.sh###编辑脚本,脚本内容如下:

#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions
VIP=172.16.58.1
host=`/bin/hostname`
case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
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
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
;;
stop)
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
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
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
## chmod +x start.sh
# ./start.sh start
# ifconfig (显示的是只是添加的内容)

# scp start.sh172.16.58.10:/root/  ###将脚本复制到另一个real server上进行执行。五、修改主配置文件
1、修改HA1中的keepalived的配置文件
下面我们就去HA1和HA2中修改主配置文件,我们在修改主配置文件的时候首先就是要将主配置文件复制一份,然后在修改,这样避免出错后,无法修改。

! Configuration File for keepalived     ###表示注释信息,#也表是注释
global_defs {       ###这里面都是全局默认
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {    ###定义虚拟路由(可以定义多个虚拟路由组)
state MASTER     ###状态(有两种,一种MASTER另一种BACKUP)【提示:只在初始的时候定义主、从】
interface eth0    ###在哪个接口上实现配置地址和完成选举
virtual_router_id 77    ###在VI_1下面定义的虚拟ID,必须要和别的人不一样
priority 101     ###优先级
advert_int 1     ###多长时间通告一次(这里是1秒钟)
authentication {   ###认证
auth_type PASS     ###表示用字符串来认证
auth_pass password   ###生成随机串(最好是随机的)
}
virtual_ipaddress {    ###提供虚拟IP(可以是一个,也可以是多个)
172.16.58.1
}
}
virtual_server 172.16.58.1 80 {    ###定义虚拟服务器,后面是VIP,最后面是端口【提示:可以定义多个集群服务】
delay_loop 6
lb_algo wlc     ####负载均衡调度方法,rr为轮询
lb_kind DR    ###LVS的类型
nat_mask 255.255.0.0
protocol TCP   ###端口协议使用TCP
real_server 172.16.58.8 80 {    ###real server地址,端口
weight 1     ###权重
url {
path /   ###获取web服务器的根目录,直接获取主页,显示200正常,显示404等为不正常
status_code 200
}
connect_timeout 2    ###多长时间探测一次(2s),如果3s中后获取不到,则为不健康
nb_get_retry 3     ###在探测不健康的时候要尝试几次(3次)
delay_before_retry 1   ###每一次尝试之前要延迟多长时间 (1s)
}
virtual_server 172.16.58.1 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.0.0
protocol TCP
real_server 172.16.58.10 80 {
weight 1
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
2、将HA1中配置文件复制到HA2
修改好配置文件后,我们还需要将这个配置文件复制到HA2一份,不只是复制过去就行了,我们还需要修改配置文件的。


      3、开启两个HA服务
#service keepalived start   ###启动keepalived
#ip add show   ###查看网络状态  
  
4、安装ipvsadm (两个服务上都要安装)
# ip add show
# servicekeepalived restart  ###重启keepalived
# ipvsadm -L –n  ###查看每一个real server对外所提供用户请求的次数

  六、实现基于web服务的高可用集群(在HA1HA2上)
1、工作图



简述:当客户端通过路由器访问我们的服务器的时候,只能访问到我们的MASTER服务器上,当MASTER出现问题的时候,它的VIP会飘移到BACKUP上,会替代MASTER而成为MASTER的。
2、编辑网页并进行测试

# service keepalived stop    ###停止keepalived
# yum -y install httpd   ###装好web服务
# vim /var/www/html/index.html   ###编辑网页
node1    ###HA1网页内容
node2    ###HA2网页内容
# service httpd start       ###启动服务首先确保服务不会成为高可用集群的故障,我们首先要启动服务,然后进行测试。




      3、修改keepalived配置文件并设置脚本
      这里我们还需要将配置文件中的内容修改,我们修改后的内容如下:
  
! Configuration File for keepalived
global_defs {
notification_email {
linuxedu@foxmail.com
mageedu@126.com
}
notification_email_from kanotify@magedu.com
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_httpd{
script "killall -0 httpd"
interval 2
# check every 2 seconds
weight -2
# if failed, decrease 2 of the priority
fall 2
# require 2 failures for failures
rise 1
# require 1 sucesses for ok
}
vrrp_script chk_schedown {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {
interface eth0
# interface for inside_network, bound by vrrp
state MASTER
# Initial state, MASTER|BACKUP
# As soon as the other machine(s) come up,
# an election will be held and the machine
# with the highest "priority" will become MASTER.
# So the entry here doesn't matter a whole lot.
priority 101
# for electing MASTER, highest priority wins.
# to be MASTER, make 50 more than other machines.
virtual_router_id 51
# arbitary unique number 0..255
# used to differentiate multiple instances of vrrpd
# running on the same NIC (and hence same socket).
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
# optional, monitor these as well.
# go to FAULT state if any of these go down.
virtual_ipaddress {
172.16.58.1/16 dev eth0 label eth0:0
}
#addresses add|del on change to MASTER, to BACKUP.
#With the same entries on other machines,
#the opposite transition will be occuring.
#/ brd  dev  scope  label
track_script {
chk_httpd
chk_schedown
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
#vrrp_instance VI_2 {
#    interface eth0
#    state MASTER  # BACKUP for slave routers
#    priority 101  # 100 for BACKUP
#    virtual_router_id 52
#    garp_master_delay 1
#
#    authentication {
#        auth_type PASS
#        auth_pass password
#    }
#    track_interface {
#       eth0
#    }
#    virtual_ipaddress {
#        172.16.58.2/16 dev eth0 label eth0:1
#    }
#    track_script {
#        chk_httpd
#        chk_mantaince_down
#    }
#
#    notify_master "/etc/keepalived/notify.sh master eth0:1"
#    notify_backup "/etc/keepalived/notify.sh backup eth0:1"
#    notify_fault "/etc/keepalived/notify.sh fault eth0:1"
#}  
  开始的时候我就说过,我们这里自己设置的有脚本,大家如果想配置,脚本的内容如下:
  
#vim notify.sh
脚本内容如下:
#!/bin/bash
# Author: MageEdu
# description: An example of notify script
#
ifalias=${2:-eth0:0}
interface=$(echo $ifalias | awk -F: '{print $1}')
vip=$(ip addr show $interface | grep $ifalias | awk '{print $2}')
#contact='linuxedu@foxmail.com'
contact='root@localhost'
workspace=$(dirname $0)
notify() {
subject="$ip change to $1"
body="$ip change to $1 $(date '+%F %H:%M:%S')"
echo $body | mail -s "$1 transition" $contact
}
case "$1" in
master)
notify master
exit 0
;;
backup)
notify backup
/etc/rc.d/init.d/httpd restart
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: $(basename $0) {master|backup|fault}'
exit 1
;;
esac

  4、在HA2上编辑keepalived的配置文件,完成后进行测试
# vim keepalived.conf

# service keepalived start   ###启动keepalived
# ifconfig   ###在主服务器上使用它

  这时候我们给HA1上使用了别名,我们使用别名访问一下。

      5、模拟MASTER出故障
这时候我们把主服务器的Web服务器停了,我们看看ip地址是否会飘移到从服务器上。从下面的两个图可以看到,它真的转移了,如果不相信我们可以测试下网页,我们可以看到它的页面内容也是我们原来设置从服务器的内容。
# service httpd stop    ###停止主服务器的Web服务  主服务器上:

  从服务器上:

      6、测试一下:

  七、双主模型
  1、工作图:
  
  
  简述:当客户端发送访问上面的服务器时,上面的服务器比较繁忙,我们就要用两台主机都进行工作,不过这里我们要使用两个虚拟IP地址,这两个虚拟IP地址是不一样的。我们这里是两个组,第一个组上面是主,下面是从,第二组下面是主,上面是从。如果有一个组中的MASTER挂了,它的VIP就会飘移到另一个组的上面。
  2、修改配置文件
在上面基于web服务的高可用集群中,我们把keepalived配置文件中的最下面#开头的行开启了,开启后我们还要进行编辑,在HA1中将VI_2我们需要将state MASTER改为state BACKUP,我们把优先级改为100,只要比MASTER的优先级小就行。内容如下:

vrrp_instance VI_2 {
interface eth0
state BACKUP  # BACKUP for slave routers
priority 100  # 100 for BACKUP         
virtual_router_id 52
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.58.2/16 dev eth0 label eth0:1
}
track_script {
chk_httpd
chk_mantaince_down
}
notify_master "/etc/keepalived/notify.sh master eth0:1"
notify_backup "/etc/keepalived/notify.sh backup eth0:1"
notify_fault "/etc/keepalived/notify.sh fault eth0:1"
}
# service keepalived restart   ###启动keepalived服务器
#ifconfig     3、查看IP地址配置
      查看HA1的IP地址配置:

  查看HA2的IP地址配置:

      4、测试:
  


  
      5、模拟HA1发生故障
  
# cd /etc/keepalived/
# touch down  
  查看HA2上IP地址配置:
  
      6、测试一下

  
  我们会发现用172.16.58.6和172.16.58.7访问的都是由HA2返回的结果。
  


  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657499-1-1.html 上篇帖子: 负载均衡(LVS DR模式搭建,DR只用一个公网ip,Keepalived+LVS DR) 下篇帖子: KeepAlived实现HAProxy双主并实现资源的动静分离
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表