• LVS负载均衡


    版权声明:本文为yunshuxueyuan原创文章。
    如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/
    QQ技术交流群:299142667

    LVS负载均衡

    1. 基本介绍

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

    LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。

    2. Lvs的组成:

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

    2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    3. Lvs配置步骤:

    a. 准备好3台虚拟机,配置ip在同一网段

    b. 配置lvs的VIP

     

    c. 调整后端真实server的响应,通告级别(每一台)

    echo 1  > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    
    echo 2  > /proc/sys/net/ipv4/conf/eth0/arp_announce
    
    echo 1  > /proc/sys/net/ipv4/conf/all/arp_ignore
    
    echo 2  > /proc/sys/net/ipv4/conf/all/arp_announce

    d. 调整后端真实server的VIP(每一台)

    ifconfig lo:8 192.168.9.100 netmask 255.255.255.255

    e. 启动真实server上的httpd服务,并编写欢迎页面

    service httpd start
    
    /var/www/html
    
    vi index.html  from ooxxip

    f. 在LVS主机器上安装ipvsadm,并配置

    yum install ipvsadm -y
    
    ipvsadm -A -t 192.168.9.100:80 -s rr
    
    ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.12 -g
    
    ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.13 -g
    
    ipvsadm -ln
    
    ipvsadm –lnc

    g. 保存规则:

    ipvsadm -S > /tmp/lvs_conf

    h. 载入此前规则:

    ipvsadm -R < /tmp/lvs_conf

    KEEPALIVED高可用

    1. 定义

    Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现。

    2. 安装配置:

    a. yum install  keepalived
    
    b. vi /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    
    
    
    global_defs {
    
       notification_email {
    
         acassen@firewall.loc  #发送提醒邮件的目标地址可以有多个
    
         failover@firewall.loc
    
         sysadmin@firewall.loc
    
       }
    
       notification_email_from Alexandre.Cassen@firewall.loc #发送邮件的from地址,可以随意写,邮件地址不存在都无所谓
    
       smtp_server 192.168.200.1 #邮件服务的地址,一般写本地
    
       smtp_connect_timeout 30
    
       router_id LVS_DEVEL
    
    }
    
    
    
    vrrp_instance VI_1 {
    
        state MASTER         #MASTER 主和从
    
        interface eth0       #VIP需要绑定的网卡名称
    
        virtual_router_id 51
    
        priority 150         #优先级 主的优先级要高
    
        advert_int 1
    
        authentication {
    
            auth_type PASS
    
            auth_pass 1111
    
        }
    
        virtual_ipaddress {
    
    192.168.122.200/24 dev eth0 label eth0:0 #设置VIP
    
        }
    
    }
    
    
    
    virtual_server 192.168.122.200 80 { #设置虚拟lvs服务,VIP PORT
    
        delay_loop 6
    
        lb_algo rr #调度算法
    
        lb_kind DR #lvs的模式
    
        nat_mask 255.255.255.0
    
        persistence_timeout 0 同一个IP地址在n秒内lvs转发给同一个后端服务器
    
        protocol TCP
    
    
    
        real_server 192.168.122.112 80 {#设置真实服务器的心跳机制
    
            weight 1#权重
    
            HTTP_GET {#心跳检测的方式(注意空格)
    
                url {
    
                  path /#心跳检查的地址
    
                status_code 200#心跳检查返回的状态
    
                }
    
                connect_timeout 3#超时时间
    
                nb_get_retry 3#重复检查3次
    
                delay_before_retry 3#每隔1秒钟再次检查
    
            }
    
        }
    
        real_server 192.168.122.113 80 {#同上
    
            weight 1
    
            HTTP_GET {
    
                url {
    
                  path /
    
                status_code 200
    
                }
    
                connect_timeout 3
    
                nb_get_retry 3
    
                delay_before_retry 3
    
            }
    
        }
    
    }
    
    c. service keepalived start

    NGINX

    1. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    2. 安装:

    a. 下载源码包

    b. 解压缩:tar xf filename

    c. ./configure

    检查操作系统

    检查编译环境

    yum install gcc

    pcre 依赖库

    yum search pcre

    yum install pcre-devel

    openssl

    yum install opssl-devel

    ./configure --help

    ./configure --prefix=/opt/sxt/nginx

    d. make && make install

    3. 添加tengine到注册表,将下面文件中的代码,拷贝到/etc/init.d/nginx中;然后就可以使用service命令了

    4. 配置:

    a. 文件结构

    全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

    events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

    http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

    server块:配置虚拟主机的相关参数,一个http中可以有多个server。

    location块:配置请求的路由,以及各种页面的处理情况。

    b. 配置文件示例:

    #user  nobody; #配置用户或者组,默认为nobody nobody
    
    worker_processes  1; #允许生成的进程数,默认为1
    
    
    
    #error_log  logs/error.log;#制定日志路径,级别。这个设置可以放入全局块,http块,server块
    
    #error_log  logs/error.log  notice;
    
    #error_log  logs/error.log  info;
    
    
    
    #pid        logs/nginx.pid;#指定nginx进程运行文件存放地址
    
    
    
    
    
    events {
    
        worker_connections  1024;#最大连接数
    
    }
    
    
    
    # load modules compiled as Dynamic Shared Object (DSO)
    
    #
    
    #dso {
    
    #    load ngx_http_fastcgi_module.so;
    
    #    load ngx_http_rewrite_module.so;
    
    #}
    
    
    
    http {
    
        include       mime.types;#文件扩展名与文件类型映射表
    
        default_type  application/octet-stream;#默认文件类型,默认为text/plain
    
    
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    
        #                  '$status $body_bytes_sent "$http_referer" '
    
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
    
    
        #access_log  logs/access.log  main;
    
    
    
        sendfile        on;#允许sendfile方式传输文件
    
        #tcp_nopush     on;
    
    
    
        keepalive_timeout  0;#连接超时时间
    
        #keepalive_timeout  65;
    
    
    
        #gzip  on;
    
    
    
        upstream httpd {#服务器列表
    
    server 192.168.122.112:80;
    
    server 192.168.122.113:80;
    
        }
    
    
    
        upstream tom {
    
    server 192.168.122.112:8080;
    
    server 192.168.122.113:8080;
    
        }
    
    
    
        server {
    
            listen       80;#监听端口
    
            server_name  localhost;#监听地址
    
    
    
            #charset koi8-r;
    
    
    
            #access_log  logs/host.access.log  main;
    
    
    
            location / {#请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
    
                root   html;#根目录
    
                index  index.html index.htm;#设置默认页
    
        #autoindex on;
    
            }
    
    
    
    location /mp3 {
    
        proxy_pass http://httpd/;#请求转向httpd 定义的服务器列表
    
    }
    
    
    
    location /tom {
    
        proxy_pass http://tom/;
    
    }
    
    
    
    }

    c. location匹配规则:

    先普通

    顺序无关

    最大前缀

    匹配规则简单

    打断:

    ^~

    完全匹配

    再正则

    不完全匹配

    正则特殊性:一条URI可以和多条location匹配上

    有顺序的

    先匹配,先应用,即时退出匹配

    5. session共享及一致性解决方案:

    a. memcached缓存服务,可以和tomcat整合

    b. 安装memcached

    yum install memcached –y

    c. 启动memcached

    memcached -d -m 128m -p 11211 -l 192.168.122.111 -u root -P /tmp/

    d. 拷贝memcached相关jar包到tomcat的lib下

    e. 配置tomcat,每个tomcat里面的context.xml中加入

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    
    memcachedNodes="n1:192.168.122.111:11211"
    
        sticky="false"
    
        lockingMode="auto"
    
        sessionBackupAsync="false"
    
       requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
    
        sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    
    />

    版权声明:本文为yunshuxueyuan原创文章。
    如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/
    QQ技术交流群:299142667

  • 相关阅读:
    ABAP Webdynpro Interface View的用法
    ABAP Webdynpro的跟踪工具WD_TRACE_TOOL
    git 速查
    Python 解析含有命名空间(xmlns)的xml文件(基于ElementTree)
    完全显示DataFrame中行、列内容
    解决Jupyter Notebook中for循环输出DataFrame不够美观
    git配置别名
    元素可拖拽(移动端与pc端)
    pointer network和recursive神经网络
    ELMO,BERT和GPT简介
  • 原文地址:https://www.cnblogs.com/sxt-zkys/p/7693898.html
Copyright © 2020-2023  润新知