LVS NAT + Keepalived HOWTO

LVS NAT + Keepalived HOWTO

 

这篇文章主要讲解了,基于LVS/NAT,安装,运行与检测keepalived

目录

    1、什么是keepalived?

    2、规划你的网络    

    3、配置内核参数

    4、编译ipvsadm (可选)

    5、编译keepalived(可选)

    6、一个简单的keepalived实例。一个负载均衡器,一个ssh 服务器

    7、故障转移

    8、一个稍微复杂的keepalived实例,负载均衡器,两个ssh server,两个httpd server

    9、开机启动脚本(空)

    10、注意事项

    11、总结

1、什么是keepalived

    keepalived的作者说:

    keepalived的主要目第是为了给linux virtual server项目提供健壮的keepalive功能。这个项目使用C编写,可以在TCP/IP第三,四,五层实现检测功能。这个检测框架给予了keepalived进程检查LVS 服务池状态的能力。keepalived实现了vrrpv2 处理director的故障转移。简单来说,keepalived是一个用户空间进程,主要目的就是为了LVS的健康状况检查和LVdirector的故障转移

    keepalived是一个项目,包括通过LVS实现负载均衡,通过VRRP实现故障转移,监视real server的健康状况。重要的是,它是一个包实现了 lvs+mon+fake+heartbeat的所有功能 。使用keepalived,管理员可以快速的构建一个冗余的负载均衡解决方案而不需要解决大量安装包和脚本的问题。 

    本实例使用的软件:

        CentOS 6.6
        keepalived-1.2.13-5.el6_6.x86_64      
        ipvsadm-1.26-4.el6.x86_64
        openssh-5.3p1-104.el6.x86_64        
        httpd-2.2.15-39.el6.centos.x86_64

2、规划你的网络

画出你的网络的逻辑结构,规划好你的网络有助于减少以后遇到的困难。列出你打算使用的IP,任何额外的路由IP,负载均衡机器打算使用的IP,或者其它相关的信息。

3、配置内核参数:

echo "1" > /proc/sys/net/ipv4/ip_forwarding

4. 编译ipvsadm(可选的)

5. 编译keepalived

[root@node4 src]# tar -xf keepalived-1.2.19.tar.gz; cd keepalived-1.2.19; ./configure; make; make install

 keepalived编译起来很简单,中间报错,安装相应的软件包就可以了,从www.keepalived.org,获取最新版本的包,获取更多信息,请阅读下载keepalived附带的INSTALL文件

6、配置keepalived:一个简单的网络,1负载均衡/虚拟路由 ,一个real server22号端口

  Client (on the internet somewhere) –> load balancer –> realserver 

负载均衡器的IP:
Eth0: 192.168.198.160
VIP :192.168.198.161
Eth1:10.0.0.4
VIP eth1:10.0.0.1
Real server:
IP:10.0.0.2 确保网关指向10.0.0.1

主要配置文件在/etc/keepalived/keepalived.conf ,如果keepalived什么错误都没报告,意味着你很难发现配置的错误,启动keepalived使用-d选项,将会加载配置到syslog里面去。

配置

! 以!开头的都是注释
 
global_defs { 
  
     ! 这是警告邮件将会发送谁那里去 
   notification_email {                    
        admins@example.com 
    fakepager@example.com 
    ! 这里可以添加一些其它的,你想添加的邮件。
   } 
   notification_email_from admins@example.com 
 
   !使用恩地机器发送邮件
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
 
   ! 每一个负载均衡器应该有不同的ID,这将会在SMTP警告中使用,因此你应该让每一个路由很容易的辨别。
   lvs_id LVS_EXAMPLE_01 
} 
 
 
vrrp_sync_group VG1 { 
   group { 
      VI_1 
      VI_GATEWAY 
   } 
} 
 
 
!每一个接口需要至少一个vrrp_instance ,每一个vrrp_instance 是一个逻辑上划分的VIPs组,你也可以有多个vrrp_instance ,如果你喜欢的话。
 
vrrp_instance VI_1 { 
        state MASTER 
        interface eth0 
        lvs_sync_daemon_inteface eth0 
        virtual_router_id 51 
 
        !主节点和备节点是根据优先级选出来的,如果你的state为master但是,优先级低,还是会变为备份节点的。
        priority 150 
    ! 投票的时间间隔
        advert_int 1 
     ! 从主节点切换为备节点是时发送警告。
        smtp_alert 
        authentication { 
                auth_type PASS 
                auth_pass example 
        } 
     ! 配置在keppalived机器上面的IP地址,后面我们会指定那些real server会绑定在这个IP地址上面
        virtual_ipaddress { 
                192.168.1.11 
        ! and more if you want them   
        ! 你也可以指定更多的地址。
        } 
} 
 
 ! 现在配置一个实例real server 默认使用网关方式。
 
vrrp_instance VI_GATEWAY { 
        state MASTER 
        interface eth1 
        lvs_sync_daemon_inteface eth1 
        virtual_router_id 52 
        priority 150 
        advert_int 1 
        smtp_alert 
        authentication { 
                auth_type PASS 
                auth_pass example 
        } 
        virtual_ipaddress { 
                10.20.40.1 
        } 
} 
 
 ! 现在配置更多的信息,我们仅仅配置一个virtual server监听在22号端口。
   
virtual_server 192.168.1.11 22 { 
    delay_loop 6 
    lb_algo rr 
    lb_kind NAT 
    nat_mask 255.255.255.0 
    protocol TCP 
 
    real_server 10.20.40.10 22 { 
        weight 1 
 
        TCP_CHECK { 
                connect_timeout 3 
                connect_port 22 
        } 
    } 
}

然后:

①、Tail -f /var/log/messages  看看输出的日志信息

    ②、Ipvsadm -L -n 查看ipvs的信息

    B4TL@IN1E7(147P8AGFEZ@N.jpg

  ③、最后看看地址信息

 51SF5_{HC3)LKPGSM0``C1R.jpg

最后看看效果。


FM_Y7XDF4_M(FMAKW}N0XS8.jpg

 启动keepalived 使用-d选项 是一个很好的方式检测你的配置文件是否有效。

 

7、故障转移  

  你需要做的只是在另外一台节点配置keepalived复制keepalived的配置文件,改变优先级,状态到bakcup,运行keepalived。你会看到备份服务的日志信息,服务器接受了它的备份状态,如果你去掉了主服务,备份服务器将会接管Master状态

  主服务和备份服务器,只是  lvs_id 指令, priority ,state 指令不一样其余的都一样 ,

  另外你应该移除主服务器看看备份服务器的日志信息,如果主服务器没挂,备份服务器将会看不到VIP的信息。

8、配置keepalived,一个更加复杂的网络, 2VIPs(1 http/https ,1 ssh) 和同时每个VIP都有两个real server

Load balancer IPs:     
    负载均衡器外部接口(eth0): 192.168.198.160
    外部http/https realservers VIP: 192.168.1.162
    外部 ssh realservers VIP: 192.168.1.161
    负载均衡器内部接口(eth1): 10.0.0.4
    配置在eth1上的real server默认网关: 10.0.0.1
  Realserver 1 (http, [https]): 
    IP: 10.0.0.2
  Realserver 2 (http, [https]): 
    IP: 10.0.0.3
  Realserver 3 (ssh): 
    IP: 10.0.0.2
  Realserver 4 (ssh): 
    IP: 10.0.0.3

确保real server的网关指向10.0.0.1

很少的情况会使用这种配置,有其你想去学习使用genhash 命令,生成HTTP get或者SSL_GETMD5码。同样你想配置https的持久连接使你的客户一直连接到real server,就像你去购物的事物,这种状态要一直保持着,不然后果很严重。

917_7S6]HW)VA`9~_2RU]_X.png

最后的字符串你需要追踪的,后面的服务检查会使用到。

配置文件:
! Configuration File for keepalived
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
 
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
 
    sorry_server 192.168.200.200 1358
 
    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

最后检查

①、Tail -f /var/log/messages

    ②、查看ipvs

C8PO1C_([%FC~E4[ME]H1WE.jpg

    ③、查看ip

G8P$}W10%%`CQWZGH9F2FEB.jpg

    ④、看看效果

ZH$(Z(3K3{`C)KGTIP1X(NY.png{ZXV6ET_4G[]6]$R6K]7Z5P.png

Ssh测试,ssh应该使用源地址绑定好一些。

  。。。

要想实现故障转移,只需要在另外一个节点,复制keepalived.conf 修改lvs_id prioritystate

9.  开机启动脚本实例

这个先留着,

10、故障排除

    运行keepalived使用-d选项,查看/var/log/messages

    查看ipvsadm的输出

    查看ip addr list 的输出

   注意事项

1) 打开IP forwarding (echo "1" > /proc/sys/net/ipv4/ip_forward)

2) 使用新版本的lvs

3) Readl server必须把负载均衡器当做网关

4) Real server是内网和外网不重要,重要的是他们必须在同一个LANs或者VLAN里面。

5) 你必须有一个vrrp_instance 部分定义在 keepalived 来配置VIP.

6) VRRP里面,优先级越小发言权越小。

7) VRRP 实例不能使用相同的route_id keepalived不会报错,但是你将看不到VRRP实例的IP地址。

8) 尽管keepalived不会抱怨你忽略了一些选项,但是不推荐遗留选项,你使用了TCP_CHECK80端口,不要忽略了connect_port 80这条指令。 

 

这些都非常明显,但是他们确实是可能出现在配置问题里面的。

11、总结

    1、还是说,这个博客平台的后台编辑,差劲。。。浪费时间,每次编辑出来都很丑,当然我自己布局也有部分原因

    2、这篇文章是我在keepalived的官网上翻译的,把配置文件修改为自己电脑的配置文件了。

    3、因为刚学,这时候keepalived不够精通,文章质量不够高,另外这样翻译有些事倍功办的效果,说了那么多,很多都是废话。

    4、还是要说我的博客写的不行,可能太赶时间了吧,速度快,文章就不够精品,速度慢,可是时间却没那么多。我下面看情况,把keepalived的配置文件详解,贴出来。

原文链接:

http://www.keepalived.org/LVS-NAT-Keepalived-HOWTO.html

原创文章,作者:艾贺,如若转载,请注明出处:http://www.178linux.com/8177

(0)
上一篇 2015-09-19 10:36
下一篇 2015-09-22 09:17

相关推荐

  • 设计模式(七)组合模式Composite(结构型)

    1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面。 例子1:就是多级树形菜单。 例子2:文件和文件夹目录 2.问题 我们可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象。我们可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象。客户端代码必须区别对象简单对象和容器对象,而实际上大多数情况下用…

    Linux干货 2015-07-01
  • CentOS下获取帮助

    CentOS中获取帮助 在使用和学习CentOS系统时,我们可能会遇上不熟悉的命令,需要获取帮助。在很多情况下,我们无法通过网络获取帮助,这个时候我们就需要自己通过查看系统帮助文档来解决问题。下面就来介绍获取帮助的方法: 1、 获取简单的帮助信息:whatis COMMAND   2、获取比较详细的命令帮助信息:help COMMAND;COMMA…

    2017-07-15
  • N26第三周

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。        who -i或-u 显示闲置时间, 若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串   &n…

    Linux干货 2017-01-16
  • Linux 入门(二)

    又一个周的时间过去了,觉得时间过的好快的呢,大概是因为沉迷于学习吧(害羞脸),在这一周里学习了不少东西呢,下面就来总结一下吧 (1)    cp 复制 如果只是单纯的敲cp复制文件而不加任何选项的时候,如果目的目录文件已经存在,就会直接覆盖,而不会出现任何提示信息,而当在实际操作时,就算不加 –i选项,也会提示要不要覆盖文件 原…

    2017-07-22
  • Linux基础知识之history命令详解

     该博文以CentOS6.8_x86_64系统为基础,Xshell 5远程连接CentOS系统,以root身份登录系统。 为什么要学习history命令?     history命令是Linux的一个内嵌的shell命令,history命令的使用有时会大大缩短我们输入命令的时间,达到节省命令快捷操作的要求。学…

    Linux干货 2016-07-27
  • 优质代码的十诫

    1.- DRY: Don’t repeat yourself. DRY 是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让…

    Linux干货 2015-04-01