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

相关推荐

  • Linux系统认知

    前言 在认识Linux系统之前先介绍下计算机的组成构造及其功能: 1,简单来说计算机可以划分为软件系统和硬件系统: (1)软件系统自不必说就是各种不同的程序,协助用户更好地使用电脑。 (2)硬件系统指的是主机、显示器、鼠键等硬件设备。 2,按冯诺依曼体系可将计算机按逻辑构成分为: (1)CPU(运算器、控制器)。运算器是数据处理装置,用来完成对数据的算术运算…

    Linux干货 2016-09-20
  • MySQL入门书籍和方法分享

    原文:http://cenalulu.github.io/mysql/mysql-book-for-newbie/           作者: 卢钧轶     本文罗列了一些适用于MySQL及运维入门和进阶使用的书籍。 背景:各大论坛上总是…

    Linux干货 2015-04-09
  • 马哥教育网络班21期+第1周课程练习

    (一)计算机的基础认识       1. 冯诺依曼体系:          运算器(ALU Arithmetic Logical Unit):完成算数和逻辑运算。          控制器(CU Control Unit):发出各…

    Linux干货 2016-07-07
  • Memcached实现Tomcat的session会话绑定

    memcached介绍:  Memcached是一个高性能的分布式内存对称缓存系统;通过缓存查询数据库结果,介绍数据库访问次数,以提高web应用的速度、提高扩展性。  Memcached特点:   协议简单   基于libevent的事件处理   内置内存存储方式  memcached不互相通信的分…

    Linux干货 2015-08-01
  • 条件判断工具 test or [ ]

    概述         条件判断是学习shell脚本之前要掌握的重点基础。条件判断分为以下几类:文件判断、数值判断、字符判断。而文件判断还可以细分到:文件类型判断、文件权限判断、文件所属判断、文件之间属性判断;      &nbsp…

    Linux干货 2016-02-14
  • 笔记三、如何在VMWare Workstation中安装CentOS 7

    一、准备工作     1.1 安装VMWare WorkStatrion     1.2 准备好CentOS 7 镜像包     http://www.centoscn.com/CentosSoft/iso/    CenOS7下载地址 二…

    2017-02-23