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
下一篇 2015-09-22

相关推荐

  • 文件管理命令及通配符练习

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例 按增删改查的思路来 增: touch filename:这个命令本身不是用来新建文件的,它是用来修改文件的时间属性,不过默认情况时当filename不存在时,它会默认建立一个空文件 mkdir: 常用参数 -p:相当于递归创建目录 -v:显示出创建过程中的信息 cp : 常用参数 -r:…

    Linux干货 2016-11-06
  • 认识shell

    一、认识shell 什么是shell?shell为单词外壳的意思。那么这是谁的外壳?我们知道一个系统中实际工作的是那些硬件,cpu、内存、磁盘等。我们如何调用这些硬件为我们工作?实际上,硬件是由内核kernel控制的。我们可以通过kernel控制硬件,但我们不能直接和内核kernel交流。我们需要一个外壳,这个外壳就是shell来沟通kernel。何为she…

    Linux干货 2015-09-22
  • 文件的压缩与解压

    文件的压缩与解压   常用命令既参数 1, gzip                        …

    Linux干货 2017-04-16
  • 笔记二、如何在VMWare WorkStations安装CentOS6.8

    一、准备工作     1.安装VMWare WorkStatrion     2.准备好CentOS 6.8 镜像包     http://www.centoscn.com/CentosSoft/iso/    CenO…

    Linux干货 2017-02-14
  • 文本处理:三剑客之sed及vim编辑器

    一、sed的用法详解 sed作为Linux的第二招,有着非常强大的文本处理功能。sed是一种在线编辑器、行编辑器,每次处理一行内容。在处理时,sed首先将行放在内存中的一块临时缓冲区,通常配叫做模式空间(pattern space)。如果模式空间的行符合sed的匹配模式则将该行处理后送到标准输出,如果不匹配则不做任何改动送到标准输出。模式空间中一般情况下只会…

    Linux干货 2016-08-12
  • 磁盘配额管理

    磁盘配额管理    设定文件系统配额 配置逻辑卷设定LVM快照 配置配额系统综述在内核中执行以文件系统为单位启用对不同组或用户的策略不同根据块或者节点进行限制   执行软限制(soft linmit)   硬限制(hard limit)初始化分区挂载选项:usrquota, ge…

    Linux干货 2017-05-22