• 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)

    比较:

    NAT TUN DR
    服务器节点要求 任何操作系统 必须支持IP隧道模式 服务结点支持虚拟网卡设备,能够禁用设备的ARP响应
    网络要求 可以是拥有私有IP地址的局域网络 拥有合法IP地址的局域网或广域网 拥有合法IP地址的局域网,服务结点与均衡器必须在同一个网段
    支持节点数 10~20个,视负载均衡器处理能力而定 可支持到100个服务结点 可支持到100个服务结点
    网关 负载均衡器即为服务器节点网关 服务结点同自己的网关或路由器连接,不经过负载均衡器 服务结点同自己的网关或路由器连接,不经过负载均衡器
    服务结点安全性 采用内部IP,服务节点隐蔽 采用公网IP地址,结点完全暴露 采用公网IP地址,结点完全暴露
    IP要求 仅需一个合法IP地址作为VIP 除VIP外,每个服务结点需拥有合法的IP地址,可以直接路由至客户端 除VIP外,每个服务结点需拥有合法的IP地址,可以直接路由至客户端
  • 相关阅读:
    11.枚举类.md
    10. Lambda表达式.md
    9.内部类
    8.抽象类、接口和多态.md
    7.final关键字.md
    jQuery学习笔记(5)-事件与事件对象
    Log4Net学习笔记(1)-完整的例子
    SqlServer知识点-操作xml
    NHibernate常见错误汇总(0)-持续更新中
    jQuery学习笔记(4)-设置元素的属性和样式
  • 原文地址:https://www.cnblogs.com/wscy/p/8867959.html
Copyright © 2020-2023  润新知