lvs + keepalived 安装及配置

# lvs + keepalived 基本配置

介绍:LVS(Linux Virtual Server),即Linux虚拟服务器。通过keepalived + nginx,实现服务的高可用。

一、安装

  1. 准备keepalived安装包

    官网下载地址

  2. 安装keepalived

    安装必要工具

     yum install -y gcc openssl-devel popt-devel

    安装keepalived

     tar xzf keepalived-1.4.3.tar.gz
     cd keepalived-1.4.3
     ./configure --prefix=/usr/local/keepalived/
     make && make install

二、配置

修改 keepalived.conf 文件

  1. 全局定义块

     global_defs
     {
         #邮件通知
         #指定keepalived在发生切换时需要发送email到的对象,一行一个
         notification_email
         {
             acassen@firewall.loc;
             failover@firewall.loc;
             sysadmin@firewall.loc;
         }
         #指定发件人
         notification_email_from Alexandre.Cassen@firewall.loc
         #指定smtp服务器地址
         smtp_server 192.168.200.1
         #指定smtp连接超时时间
         smtp_connect_timeout 30
    
         #在局域网内应该是唯一的(与backup节点区分开)。
         router_id KEEPALIVED.192.168.80.110
     }
  2. 监控服务(监控脚本)

     vrrp_script chk_nginx
     {
         #执行脚本的路径
         script "/etc/nginx/check_nginx.sh"
         #调用脚本两次之间的间隔,默认为1秒
         interval 1
         #第二次调用脚本后多长时间没有回应的超时时间
         timeout 10
         weight 10 
     }

    check_nginx.sh 文件内容

     #!/bin/bash
     if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
     then
         /usr/local/nginx/sbin/nginx 
         sleep 5
         if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
         then
             killall keepalived
         fi
     fi

    注意:/usr/local/nginx/sbin/nginx 确保 nginx 启动的正确性。可修改为/usr/local/nginx/sbin/nginx -c /home/nginx/nginx-1.13.7/conf/nginx.conf

  3. vrrp实例

     vrrp_instance VI_1
     {
         #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态。
         state BACKUP
         #设置实例绑定网卡
         interface eht0
         #虚拟路由标识,同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
             # 取值 1 ~ 255
         virtual_router_id 110
         #优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高。
         priority 101 
         #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
         advert_int 1
         #设置为不抢占(这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高)
         #nopreempt 
    
         #设置认证
         authentication
         {
             auth_type PASS
             auth_pass 1111
         }
    
         #虚拟ip(vip)地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs 客户端设定的 vip 相一致!
         virtual_ipaddress
         {
             192.168.80.200
         }
    
         #调用监控脚本
         track_script
         {
             chk_nginx
         }
     }

    查看网卡使用情况命令

     watch cat /proc/net/dev
  4. 虚拟服务器定义

     #VIP地址,要和vrrp_instance模块中的virtual_ipaddress地址一致
     virtual_server 192.168.80.200 443 
     {
         #设置运行情况检查时间,单位是秒
         delay_loop 6
         #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
         #rr,即轮询算法
         lb_algo rr
         #负载均衡转发规则NAT|DR|TUN 
         lb_kind NAT
         #会话保持时间
         persistence_timeout 50
         #使用的协议TCP|UDP
         protocol TCP
    
         real_server 192.168.32.103 443 {
             weight 3
             #realserver的状态检测设置部分
             #TCP_CHECK {            
             #   connect_timeout 10
             #   nb_get_retry 3        
             #   delay_before_retry 3    
             #   connect_port 80
             #}
    
             SSL_GET {
                 url {
                 #   #检查url   
                     path /
                 #   #检查后的摘要信息
                     digest de189aa6fbe0f5890e75fc8d8bcf4f90  
                 }  
                 connect_timeout 5  
                 nb_get_retry 3  
                 delay_before_retry 3  
             }
         }
    
         real_server 192.168.32.104 443 {
             weight 3
             #realserver的状态检测设置部分
             #TCP_CHECK {            
             #   connect_timeout 10
             #   nb_get_retry 3        
             #   delay_before_retry 3    
             #   connect_port 80
             #}
    
             SSL_GET {   
                 connect_timeout 5  
                 nb_get_retry 3  
                 delay_before_retry 3  
             } 
         }
     }

三、启动

  1. 启动keepalived

    执行命令

     ./keepalived -f /usr/local/keepalived/etc/keepalived.conf
  2. 查看虚拟ip

    在主节点执行命令

     ip a

    如果在列表中查看到vip地址,则启动成功。(主机MASTER启动,备机BACKUP上虚拟ip则不生效)

  3. 日志默认位置

     /var/log/messages
  4. 启动进程3个

    • 父进程,负责监控其子进程
    • vrrp子进程
    • checkers子进程
  5. 查询vip绑定情况

    • 查看日志

      执行命令

        tail -f /var/log/messages

      结果

        Registering new address record for 192.168.80.200 on eth0.IPv4.

      需等待地址注册成功后(配置地址较多,会比较慢),虚拟地址才可正常访问。

    • 查看vip绑定情况

      执行命令

        ipvsadm -L

        ipvsadm -L -n --stats

      ipvsadm安装

四、测试

  • 测试环境 CentOS 6.5
  • 启动主/备机上keepalived,主机vip生效,备机vip未生效。
  • 停掉主机keepalived,备机vip生效,主机vip失效。
  • 启动主机keepalived,主机vip生效,备机vip失效。
  • 测试过程中,vip地址均可正常访问,则测试通过。

五、问题解决

  1. 因文件格式导致脚本报错(syntax error near unexpected token `fi')

    执行命令:

     vim check_nginx.sh 

    查看脚本格式

     :set ff

    将dos格式修改为unix

     :set ff=unix

    保存退出

     :wq
  2. 脚本无可执行权限

    切换管理员帐号:

     su root

    添加可执行权限:

     chmod +x check_nginx.sh
  3. 直接删除/var/log/messages日志文件,导致keepalived无法启动

    解决方法:恢复日志

  4. 报错 MD5 digest error to server

    digest的值用genhash生成,genhash由keepalived自带,一般位于安装目录中的bin目录,生成方法:

     ./genhash -s [realserverIP] -p [port] -u [url]

    例,

     ./genhash -s 192.168.1.100 -p 80 -u /index.html

    参数查看

     ./genhash -h

    生成适用httpsdigest

     ./genhash -s 192.168.1.100 -p 443 -u /index.html --use-ssl
  5. 主备同时出现相同vip

    • 问题解释:备节点收不到主节点的通告,认为主节点故障,切换状态,发布VIP。

    • 导致原因:两节点的上联交换机禁用了组播;防火墙没有允许vrrp或者组播流量;

    • 设置vrrp单播通告

      修改主备机 keepalived.conf 文件,在 vrrp_instance 中添加如下配置:

        ## source ip
        unicast_src_ip  192.168.32.104
        ## dest ip       
        unicast_peer {
            192.168.32.103               
        }
    • 配置iptables

      执行命令

        vim /etc/sysconfig/iptables

      添加

        -A INPUT -p vrrp -j ACCEPT

      或者

        -A INPUT -m pkttype --pkt-type multicast -j ACCEPT

      重启iptables

        service iptables restart
  6. 安装报错 configure: error: libnfnetlink headers missing

     yum install -y libnfnetlink-devel
  7. vip 可以 ping 通,但偶尔 telnet 不通端口(50%概率)

    • 导致原因:keepalived与nginx配置在同一台服务器

    • 解决方法:virtual_server中只保留本机 nginx 的real_server配置。

六、补充

参考

  1. lvs调度算法

    • rr:轮循(Round Robin)

    • wrr:加权轮循(Weighted Round Robin)

    • lc:最少连接数(Least Connection)

    • wlc:加权最少连接(Weighted Least Connection)

    • lblc:基于局部性的最少链接(Locality-Based Least Connections)

    • sh:源地址散列(Source Hashing)

    • dh:目标地址散列(Destination Hashing)

  2. 负载均衡转发规则

    • NAT:网络地址转换(Network Address Translation)

    • DR:直接路由(Direct Routing)

    • TUN:IP隧道(IP tunneling)

比较:

NATTUNDR
服务器节点要求任何操作系统必须支持IP隧道模式服务结点支持虚拟网卡设备,能够禁用设备的ARP响应
网络要求可以是拥有私有IP地址的局域网络拥有合法IP地址的局域网或广域网拥有合法IP地址的局域网,服务结点与均衡器必须在同一个网段
支持节点数10~20个,视负载均衡器处理能力而定可支持到100个服务结点可支持到100个服务结点
网关负载均衡器即为服务器节点网关服务结点同自己的网关或路由器连接,不经过负载均衡器服务结点同自己的网关或路由器连接,不经过负载均衡器
服务结点安全性采用内部IP,服务节点隐蔽采用公网IP地址,结点完全暴露采用公网IP地址,结点完全暴露
IP要求仅需一个合法IP地址作为VIP除VIP外,每个服务结点需拥有合法的IP地址,可以直接路由至客户端除VIP外,每个服务结点需拥有合法的IP地址,可以直接路由至客户端

转载于:https://www.cnblogs.com/wscy/p/8867959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值