zoukankan      html  css  js  c++  java
  • keepalived操做

    ##一,lvs+keepalived 与HAproxy+keepalived

    ##二,实验操做:

    nfs挂载:

    nfs挂载,在后端创建用户,用户名及id与服务器nginx一致,并对导出的目录为该用户放开权限

    /home/nfstestdir       192.168.222.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

    NFS权限参数配置
    ro                      只读访问 
    rw                      读写访问 
    sync                    所有数据在请求时写入共享 
    async                   NFS在写入数据前可以相应请求 
    secure                  NFS通过1024以下的安全TCP/IP端口发送 
    insecure                NFS通过1024以上的端口发送 
    wdelay                  如果多个用户要写入NFS目录,则归组写入(默认) 
    no_wdelay               如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。 
    hide                    在NFS共享目录中不共享其子目录 
    no_hide                 共享NFS目录的子目录 
    subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) 
    no_subtree_check        和上面相对,不检查父目录权限 
    all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。 
    no_all_squash           保留共享文件的UID和GID(默认) 
    root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认) 
    no_root_squas           root用户具有根目录的完全管理访问权限 
    anonuid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的UID 
    anongid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的GID 

    nginx +fpm

    配置重点,php-fpm  配置启动用户为nginx  ,这样php可以以相同的用户处理nfs上的文件

    配置参考其他博文:https://www.cnblogs.com/g2thend/p/10884579.html

    lvs+keepalived  

    keepalived  配置2个vip,一个走网站服务,一个走数据库。和图示不同,只是ip 有改动,注意所有ip 为同一局域网下

    cat  /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
            2222@qq.com    
       }
    
       notification_email_from  admin@loaclhost
       smtp_server  127.0.0.1
       smtp_connect_timeout 30
       router_id  test73
       vrrp_skip_check_adv_addr
      # vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth1
        virtual_router_id 51
        priority   50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1q2w3e4r
        }
        virtual_ipaddress {
        #    192.168.36.179
        192.168.36.179   dev eth1  label eth1:0
        192.168.36.180   dev eth1  label eth1:1
        }
    }
    
    virtual_server 192.168.36.180 3306  {     
        delay_loop   5                       
        lb_algo rr                          #调度算法 
        lb_kind  DR                         #集群类型NAT|DR|TUN
        nat_mask 255.255.255.0              #子网掩码,可选项。
        #persistence_timeout 50                
        protocol TCP                        #|UDP|SCTP 
       #sorry_server <IPADDR> <PORT>         
    
        real_server  192.168.36.76  3306  {   #RS地址和端口
            weight  1                        
             TCP_CHECK {
              connect_port  3306
              connect_timeout  3
              nb_get_retry 2
              delay_before_retry 1
                }  
            }             
      }
    
    
    
    virtual_server   192.168.36.179  80  {     
        delay_loop   5                       
        lb_algo rr                          #调度算法 
        lb_kind  DR                         #集群类型NAT|DR|TUN
        nat_mask 255.255.255.0              #子网掩码,可选项。
        #persistence_timeout 50                
        protocol TCP                        #|UDP|SCTP 
       #sorry_server <IPADDR> <PORT>         
    
        real_server  192.168.36.74 80  {   #RS地址和端口
            weight  1                        
            HTTP_GET {               
              url {
                  path  /index.html                     
                  status_code 200          
                  }                          
                connect_timeout 3            
                nb_get_retry 3              
                delay_before_retry 3        
             #  connect_ip <IP ADDRESS>      
             #  connect_port <PORT>          
             #  bindto <IP ADDRESS>         
             #  bind_port <PORT>            
            }
                 
        }
         
        
        real_server  192.168.36.75 80  {   #RS地址和端口
            weight  1                        
            HTTP_GET {
              url {
                  path  /index.html
                  status_code 200  
                  }                
                connect_timeout 3  
                nb_get_retry 3     
                delay_before_retry 3
             #  connect_ip <IP ADDRESS>
             #  connect_port <PORT>    
             #  bindto <IP ADDRESS>    
             #  bind_port <PORT>       
            }
    
        }
    }
    

      

    ###2,haproxy +keepalived

    此时keepalived只是作为单点故障恢复,不做lvs负载均衡,所以不用配置vrrp_instance.

    haproxy配置

    cat  /etc/haproxy/haproxy.cfg 
    global
      maxconn  100000    
      chroot /usr/local/haproxy
      stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin  process 1
      stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin  process 2
      #仅限本机,根据传送的信号关闭进程等
      uid 1990                #nobody   /sbin/nologin
      gid 1990                #useradd   -s  /sbin/nologin   haproxy   更换uid pid 
      daemon
      nbproc 2               #启动进程数,与cpu保持一致
      #nbthread  2            #指定每个haproxy进程开启的线程数,默认为每个进程一个线程  使用版本>v1.8  
      #看线程  pstree
      #ulimit-n 65535         #设置每进程所能够打开的最大文件描述符数目  
      #cpu-map 1 0            #第一个进程绑定到0核心上
      #cpu-map 2 1
      #cpu-map 3 2
      #cpu-map 4 3
      pidfile    /run/haproxy.pid
      spread-checks  2          #后端server状态check,随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认0不延迟
      log 127.0.0.1  local3   info   
      #没有专门日志 vim  /etc/rsyslog.conf  
      #imudp  模块打开  接收端口打开
      #local3.*       /var/log/haproxy_xxxx.log   systemctl  restart  rsyslog 
    defaults
        option http-keep-alive   #会话保持
        option  forwardfor       #头部添加客户端源地址 ip透传
      #后端服务器需要记录客户端真实ip, 需要在HTTP请求中添加”X-Forwarded-For”字段;
      #haproxy自身的健康检测机制访问后端服务器时, 不应将记录访问日志,可用except来排除127.0.0.0,即haproxy本身
      #option      httpclose 
      #启http协议中服务器端关闭功能, 每个请求完毕后主动关闭http通道, 使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录
      #option      dontlognull   #如果产生了一个空连接,那这个空连接的日志将不会记录.
        maxconn 100000           #最大并发
        mode http                #全局默认转发模式,listen 区域可重写该变量
        timeout connect 60s      #TCP之前 (请求到后端,不能建立连接
        timeout client  600s     #空连接时间 
        timeout server  600s     #tcp之后(请求已转发) 后端处理较长,建议设置久时间
        timeout check   10s       #心跳检测时间
        #timeout http-request  10s  #默认http请求超时时间
        #timeout queue    1m     #默认队列超时时间, 后端服务器在高负载时, 会将haproxy发来的请求放进一个队列中
        
        #当与后端服务器的会话失败(服务器故障或其他原因)时, 把会话重新分发到其他健康的服务器上; 当故障服务器恢复时, 会话又被定向到已恢复的服务器上;
        #还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数
        #option      redispatch
        #retries     3
        #当haproxy负载很高时, 自动结束掉当前队列处理比较久的链接.
        #option      abortonclose
        
        #设置默认的负载均衡方式
        #balance source 
        #balnace leastconn
        
    
    listen stats
       mode http
       bind 0.0.0.0:9999
       stats enable
       log   global
       #option  httplog       #日志格式
       #maxconn   10          #统计页面默认最大连接
       #stats hide-version    #隐藏统计页面上的haproxy版本信息
       #stats refresh 30s     #监控页面自动刷新时间
       #stats realm  LTC Haproxy  #统计页面密码框提示文本
       stats uri     /haproxy-status
       stats auth    haadmin:1q2w3e4r
       #手工启动/禁用后端服务器, 可通过web管理节点
       stats admin if TRUE
       
       #设置haproxy错误页面
        errorfile 400 /usr/local/haproxy/errorfiles/400.http
        errorfile 403 /usr/local/haproxy/errorfiles/403.http
        errorfile 408 /usr/local/haproxy/errorfiles/408.http
        errorfile 500 /usr/local/haproxy/errorfiles/500.http
        errorfile 502 /usr/local/haproxy/errorfiles/502.http
        errorfile 503 /usr/local/haproxy/errorfiles/503.http
        errorfile 504 /usr/local/haproxy/errorfiles/504.http
    
    listen  web_port
       bind  *:80   #填写具体的地址端口(可绑定多网卡分流
       mode  tcp
       log  global
       #option forwardfor
       server web1   192.168.36.74:80  weight  2   check  port  9000  inter 3000 fall 2 rise 5  #健康检查后端php:9000
       server web2   192.168.36.75:80  weight  3   check  port  9000   inter 3000 fall 2 rise 5  #健康检查后端php:9000

    keepalived

    主备配置文件需改变  state MASTER  状态,优先级页需要改变,默认为抢占模式,即主故障后备生效,主恢复后备因为优先级再次失效

    global_defs {
       notification_email {
            2222@qq.com    
       }
    
       notification_email_from  admin@loaclhost
       smtp_server  127.0.0.1
       smtp_connect_timeout 30
       router_id  test73
       vrrp_skip_check_adv_addr
      # vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth1
        virtual_router_id 51
        priority   50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1q2w3e4r
        }
        virtual_ipaddress {
        #    192.168.36.179
        192.168.36.179   dev eth1  label eth1:0
        192.168.36.180   dev eth1  label eth1:1
        }
    }

    keepalived  监控脚本

    #keepalived  再改变状态即 MASTER 或 BACKUP 时执行脚本
    cat /etc/keepalived/notify.sh
    #!/bin/bash
    contact='2012@qq.com'
    notify() {
    mailsubject="$(hostname) to be $1, vip 转移"
    mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
    echo "$mailbody" | mail -s "$mailsubject" $contact
    }
    case $1 in
    master)
    notify master
    ;;
    backup)
    notify backup
    ;;
    fault)
    notify fault
    ;;
    *)
    echo "Usage: $(basename $0) {master|backup|fault}"
    exit 1
    ;;
    esac
    
    
    调用方法 vrrp_instance 中调用
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    
    
    
    #判断本机是否可用,对vs权重进行调整,进而改变VIP的位置
    (根据第三方文件判断本机服务是否正常) #主配置文件中声明 vrrp_script chk_down { script
    "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 7 || exit 0" #script "/usr/bin/killall -0 nginx" #根据文件是否存在测试进程是否活跃 interval 1 weight -20 fall 3 rise 5 timeout 2 } #vrrp_instance 中调用 track_script { #chk_down chk_nginx }

     

  • 相关阅读:
    day23_2_logging
    day23_1-re模块之转义字符、分组、方法
    The Python Standard Library
    re.groups取出来的空元祖??
    Mybatis-学习笔记(2)Mybatis配置文件
    Mybatis-第N篇配置log4j1、log4j2打印执行的sql语句
    Java-数据库连接池第一篇
    Mybatis-学习笔记(1)SqlSessionFactory、SqlSession、Mybatis配置文件configuration的属性标签
    Spring MVC-学习笔记(5)spring MVC的文件上传、下载、拦截器
    Java-多线程第四篇线程池
  • 原文地址:https://www.cnblogs.com/g2thend/p/10996614.html
Copyright © 2011-2022 走看看