debian下配置keepalived ha

摘要:
抄袭自http://blog.51yip.com/server/1417.html,做了一些更改以供参考http://blog.linuxphp.org/archives/1615/注意:NAT模式不需要在rs机器上进行任何配置,例如IP。以下是DR模式。iptunnel模式还需要在rs上配置vip和路由器。iptunnel和DR模式不允许您更改后端端口。服务器简介Master192.1

抄袭自http://blog.51yip.com/server/1417.html,做了一些修改

可以参考http://blog.linuxphp.org/archives/1615/

备注:NAT模式在rs机器上不需要做关于ip之类的任何配置,以下为DR模式,ip tunnerl模式也需要在rs上配置vip和router,ip tunnel和DR模式不允许改变后端的端口。

服务器介绍

Master        192.168.1.11        //lvs主服务器
BACKUP        192.168.1.12        //lvs从服务器
VIP           192.168.1.8         //VIP
WEB1-Real     192.168.1.104       //RS服务器
WEB2-Real     192.168.1.108       //RS服务器

VIP不需要用ifconfig手工配置,配置好keepalived以后,keepalived会自动给你配置好

模式:

配置keepalived的两个主机会自动根据配置把VIP绑定到相关网卡
两个RS主机上需要手工绑定VIP,添加路由表

原因在于,当LVS把client的包转发给Real-server时,因为包的目的IP地址是VIP,那么如果Real-server收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所以需要将这个IP地址绑到网卡上;当发送应答包给client时,Real-server就会把包的源和目的地址调换,直接回复给client。

 

在lvs的master和slave上安装ipvsadm和keepalived

然后配置/etc/keepalived/keepalived.conf,额,debian下其实也有sample文件的,在/usr/share/doc/keepalived/下面,复制出来改改

global_defs {
    router_id LVS_DEVEL                 #负载均衡器标识,同一网段内,可以相同
}

vrrp_sync_group VGM {                   #定义一个vrrp组
    group {
        VI_1
    }

    #这里似乎也支持脚本
    # notify_master /path/to/to_master.sh
    # notify_backup /path_to/to_backup.sh
    # notify_fault "/path/fault.sh VG_1"

}

vrrp_instance VI_1 {                    #定义vrrp实例
    state BACKUP                        #主LVS是MASTER,从的BACKUP,一般都设置为BACKUP,并且priority高的设置为nopreempt(不抢占)
    interface eth0                      #LVS监控的网络接口,笔记本测试的时候可以用wlan0,具体看自己的机器
    virtual_router_id 51                #同一实例下virtual_router_id必须相同
    priority 150                        #定义优先级,数字越大,优先级越高,MASTER必须高于BACKUP
   nopreempt advert_int 1
#MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #验证类型和密码 auth_type PASS auth_pass 1111 }
virtual_ipaddress { #虚拟IP
192.168.1.8 } } virtual_server 192.168.1.8 11111 { #定义虚拟服务器 delay_loop 2 #健康检查时间,单位是秒 lb_algo rr #负载调度算法,这里设置为rr,即轮询算法 lb_kind DR #LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选 persistence_timeout 60 #会话保持时间,指客户端往服务器发包时,在这个时间段内服务器把这些请求转发到同一个rs上,单位是秒,测试直接改成0 protocol TCP #转发协议类型,有tcp和udp两种 real_server 192.168.1.104 11111 { #定义WEB服务器 weight 100 #权重 TCP_CHECK { #通过tcpcheck判断RealServer的健康状态 connect_timeout 2 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 11111 #检测端口 } } real_server 192.168.1.108 11111 { weight 100
#这里支持任意脚本,很强大
#notify_down "xxxx.sh your_param"
#notify_up "xxxx.py"
TCP_CHECK { connect_timeout
2 nb_get_retry 3 delay_before_retry 3 connect_port 11111 } } }

从服务器只要改二个地方就行了,priority的权重调小一点,state改成BACKUP,注意realserver的connect_timeout字段

下面配置real server的配置脚本

gvim /etc/init.d/rs-lvs,并且chmod +x

#!/bin/bash

VIP=192.168.1.8

source /lib/lsb/init-functions

case "$1" in
start)
 ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
 route add -host $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
 echo 1 >/proc/sys/net/ipv4/ip_forward

 sysctl -p >/dev/null 2>&1
 echo "RealServer Start OK"
 ;;
stop)
 ifconfig lo:0 down
 route del $VIP >/dev/null 2>&1

 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 0 >/proc/sys/net/ipv4/ip_forward

sysctl -p >/dev/null 2>&1
echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0

这个脚本如果是windows下scp到linux主机,需要vim以后set ff=unix,然后保存

在lvs主机

sudo invoke-rc.d keepalived restart

 

 rs主机

sudo invoke-rc.d rs-lvs start

 

如何查看VIP在哪个lvs主机上

ip a
看eth0,应该能看到192.168.1.8这个VIP

附上一个在rs执行的tunnel模式的脚本,lvs主机上lb_kind改成TUN

#!/bin/bash

VIP=192.168.1.8

source /lib/lsb/init-functions

case "$1" in
start)
 ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
 route add -host $VIP dev tunl0

 echo 1 >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
 echo 2 >/proc/sys/net/ipv4/conf/tunl0/arp_announce
 echo 0 >/proc/sys/net/ipv4/conf/tunl0/rp_filter
 echo 1 >/proc/sys/net/ipv4/conf/tunl0/forwarding

 echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
#all的rp_filter非常重要,不然rs收不到
 echo 0 >/proc/sys/net/ipv4/conf/all/rp_filter
 echo 1 >/proc/sys/net/ipv4/ip_forward

 sysctl -p >/dev/null 2>&1
 echo "RealServer Start OK"
 ;;
stop)
 ifconfig tunl0 down
 route del $VIP >/dev/null 2>&1

 echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
 echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter
 echo 0 >/proc/sys/net/ipv4/ip_forward

sysctl -p >/dev/null 2>&1
echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0

免责声明:文章转载自《debian下配置keepalived ha》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇thinkphp 对数据库的操作eslint使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux下如何添加一个用户并且让用户获得root权限

1、添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 #passwd tommy //修改密码 Changing password for user tommy. New UNIX password: //在这里输入新密码 Retype new UNIX password: //...

Linux下定时任务的查看及取消

  crontab -l 表示列出所有的定时任务 crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除,执行crontab -l后会提示用户:“no crontab for admin”   该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。 每个域之间使用空格或者制表符分...

linux每天一小步---awk命令详解

1 命令功能 awk是linux环境下的一个强大的文本工具,由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(默认为空格)隔开,我们就可以将这个文件看成是有很多列的文本组成,这样的文件最适合用awk进行处理,其实awk在工作中多用于处理log文件。awk在处理庞大文件时不会出现内存溢出或是处理缓慢的问题。 awk有3个不...

ArcGIS平台中PostgreSQL数据连接配置总结

     通常用户在使用要素服务时,要求数据必须是存放在空间数据库中的。同时,需要将数据库注册到ArcGIS for Server,这样在发布服务时就不需要进行数据拷贝,从而可以节省磁盘空间及服务发布时间。以下就ArcGIS平台的Desktop和Server产品中如何使用PostgreSQL数据库进行总结,包括Linux版的ArcGIS for Serve...

[Linux实用工具]Linux监控工具munin的安装和配置

〇、摘要 munin是用于Linux系统(也可以监控windows系统)的监控软件。munin除了可以监控系统的各项数值之外,最大的好处是可以自己编写插件自定义监控需要的数值。整个系统的架构简单明了,操作方便。如果是使用Debian或者Ubuntu安装,安装过程也非常简单。munin除了可以监控结果,也可以设置报警。对于我个人对性能测试的工作来说,是个非常...

针对防止自己的Linux进程被杀死的解决办法

这里后三种方法 在/etc/inittab文件加一条语句( :id:rstate:action:process),运行动作为 respawn,这样在每次系统检测到process进程不存在时,就会重启它。 创建一个守护进程,该守护进程的功能就是检测主进程是否在运行,若不在运行,那么守护进程就启动它。(这里存在一个问题,守护进程也可能会被杀死,那么更狠的一点...