如何配置负载均衡

什么是负载均衡
在计算机的世界,这就是大家耳熟能详的负载均衡(load balancing),所谓负载均衡,就是说如果一组计算机节点(或者一组进程)提供相同的(同质的)服务,那么对服务的请求就应该均匀的分摊到这些节点上。

这里的服务是广义的,可以是简单的计算,也可能是数据的读取或者存储。负载均衡也不是新事物,这种思想在多核CPU时代就有了,只不过在分布式系统中,负载均衡更是无处不在,这是分布式系统的天然特性决定的,分布式就是利用大量计算机节点完成单个计算机无法完成的计算、存储服务,既然有大量计算机节点,那么均衡的调度就非常重要。

负载均衡的意义在于,让所有节点以最小的代价、最好的状态对外提供服务,这样系统吞吐量最大,性能更高,对于用户而言请求的时间也更小。而且,负载均衡增强了系统的可靠性,最大化降低了单个节点过载、甚至crash的概率。不难想象,如果一个系统绝大部分请求都落在同一个节点上,那么这些请求响应时间都很慢,而且万一节点降级或者崩溃,那么所有请求又会转移到下一个节点,造成雪崩。
如何实现负载均衡
回答可以如下:在nginx里面配置一个upstream,然后把相关的服务器ip都配置进去。然后采用轮询的方案,然后在nginx里面的配置项里,proxy-pass指向这个upstream,这样就能实现负载均衡。

nginx的负载均衡有4种模式:
1)、轮询(默认) 
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
 
2)、weight 
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)、ip_hash 
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4)、fair , url_hash(第三方) 
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

负载均衡配置方法
打开nginx.conf文件,在http节点下添加upstream节点:

upstream webname {    server 192.168.0.1:8080;    server 192.168.0.2:8080;  }  

其中webname是自己取的名字,最后会通过这个名字在url里访问的,像上面这个例子一样什么都不加就是默认的轮询,第一个请求过来访问第一个server,第二个请求来访问第二个server。依次轮着来。

upstream webname {    server 192.168.0.1:8080 weight 2;    server 192.168.0.2:8080 weight 1;  }  

这个weight也很好理解,权重大的被访问的概率就大,上面这个例子的话,访问2次server1,访问一次server2

upstream webname {    ip_hash;    server 192.168.0.1:8080;    server 192.168.0.2:8080;  }   

ip_hash的配置也很简单,直接加一行就可以了,这样只要是同一个ip过来的都会到同一台server上。然后在server节点下进行配置:

location /name {      proxy_pass http://webname/name/;      proxy_http_version 1.1;      proxy_set_header Upgrade $http_upgrade;      proxy_set_header Connection "upgrade";  }  

proxy_pass里面用上面配的webname代替了原来的ip地址。
这样就基本完成了负载均衡的配置。

下面是主备的配置:
还是在upstream里面

upstream webname {    server 192.168.0.1:8080;    server 192.168.0.2:8080 backup;  } 

设置某一个节点为backup,那么一般情况下所有请求都访问server1,当server1挂掉或者忙的的时候才会访问server2

upstream webname {    server 192.168.0.1:8080;    server 192.168.0.2:8080 down;  }  

设置某个节点为down,那么这个server不参与负载。

实现实例
1 测试环境 
由于没有服务器,所以本次测试直接host指定域名,然后在VMware里安装了三台CentOS。

测试域名 :a.com
A服务器IP :192.168.5.149 (主)
B服务器IP :192.168.5.27
C服务器IP :192.168.5.126

2 部署思路 
A服务器做为主服务器,域名直接解析到A服务器(192.168.5.149)上,由A服务器负载均衡到B服务器(192.168.5.27)与C服务器(192.168.5.126)上。

3 域名解析
由于不是真实环境,域名就随便使用一个a.com用作测试,所以a.com的解析只能在hosts文件设置。

打开:C:Windows\System32\drivers\etc\hosts
在末尾添加

192.168.5.149    a.com 

保存退出,然后启动命令模式ping下看看是否已设置成功
 
A服务器nginx.conf设置 
打开nginx.conf,文件位置在nginx安装目录的conf目录下。
在http段加入以下代码

upstream a.com {       server  192.168.5.126:80;       server  192.168.5.27:80; } 

server{     listen 80;     server_name a.com;     location / {         proxy_pass        http://a.com;         proxy_set_header  Host            $host;         proxy_set_header  X-Real-IP        $remote_addr;         proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;     } }

保存重启nginx

B、C服务器nginx.conf设置 
打开nginx.conf,在http段加入以下代码

server{     listen 80;     server_name a.com;     index index.html;     root /data0/htdocs/www; }

保存重启nginx

测试 
当访问a.com的时候,为了区分是转向哪台服务器处理我分别在B、C服务器下写一个不同

内容的index.html文件,以作区分。打开浏览器访问a.com结果,刷新会发现所有的请求

均分别被主服务器(192.168.5.149)分配到B服务器(192.168.5.27)与C服务器

(192.168.5.126)上,实现了负载均衡效果。

多域名、多泛域名负载绑定示例:
比如绑定*.w2w2.cn、*.xk8ds2d.cn两个域名到负载上:

user  www www;

worker_processes auto;
worker_cpu_affinity auto;

error_log  /home/wwwlogs/nginx_error.log  crit;

pid        /usr/local/nginx/logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept off;
        accept_mutex off;
    }

http
    {
        include       mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile on;
        sendfile_max_chunk 512k;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6].";

        #limit_conn_zone $binary_remote_addr zone=perip:10m;
        ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.

        server_tokens off;
        access_log off;

# 代到本机 8080端口
server{
        listen 8080;
        server_name *.w2w2.cn *.xk8ds2d.cn;
        index index.html index.php;
        root /home/wwwroot/default;

        include enable-php.conf;
}

# 负载均衡模块
upstream *.w2w2.cn {
        server 103.242.133.21:80;
        server 127.0.0.1:8080;
}

#监听80端口的访问
server{
        listen 80;
        server_name *.w2w2.cn;
        location / {
                proxy_pass              http://*.w2w2.cn;
                #proxy_set_header        Host    $host;
                #proxy_set_header        X-Real-IP       $remotr_addr;
                #proxy_set_header        X-Forwarde-For  $proxy_add_x_forwarded_for;
        }
}

# 负载均衡模块
upstream *.xk8ds2d.cn {
        server 103.242.133.21:80;
        server 127.0.0.1:8080;
}

#监听80端口的访问
server{
        listen 80;
        server_name *.xk8ds2d.cn;
        location / {
                proxy_pass              http://*.xk8ds2d.cn;
                #proxy_set_header        Host    $host;
                #proxy_set_header        X-Real-IP       $remotr_addr;
                #proxy_set_header        X-Forwarde-For  $proxy_add_x_forwarded_for;
        }
}

include vhost/*.conf;
}

副服务器nginx.conf代码:

user  www www;

worker_processes auto;
worker_cpu_affinity auto;

error_log  /home/wwwlogs/nginx_error.log  crit;

pid        /usr/local/nginx/logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept off;
        accept_mutex off;
    }

http
    {
        include       mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile on;
        sendfile_max_chunk 512k;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6].";

        #limit_conn_zone $binary_remote_addr zone=perip:10m;
        ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.

        server_tokens off;
        access_log off;

server
    {
        listen 80 default_server reuseport;
        #listen [::]:80 default_server ipv6only=on;
        server_name _;
        index index.html index.htm index.php;
        root  /home/wwwroot/default;

        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*.php$ { deny all; }

        include enable-php.conf;

        location /nginx_status
        {
            stub_status on;
            access_log   off;
        }

        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /.
        {
            deny all;
        }

        access_log  /home/wwwlogs/access.log;
    }
include vhost/*.conf;
}

来源:http://www.startphp.cn/front/php/0327160.html

原文地址:https://www.cnblogs.com/wangyuyanhello/p/12611649.html

时间: 2024-12-09 04:10:49

如何配置负载均衡的相关文章

Linux、Nginx配置负载均衡

nginx配置负载均衡其实很简单,一直还以为负载均衡是个很高端人士玩的 首先先了解下负载均衡,假设一个场景,如果有1000个客户同时访问你服务器时,而你只有一台服务器的Nginx,且只有一个MySQL服务器,那么这些请求 可能会高出你的的服务器承受能力,就会down掉: 解决方法: 1.垂直升级:就是增加服务器的配置,CPU,内存等 2.水平升级:添加多台服务器来分担服务器压力 配置Nginx负载均衡

Microsoft Azure 配置负载均衡

负载均衡大家都知道是什么了吧,就不用介绍了.如何在 microsoft Azure 上配置了?创建两台虚拟机,并加入如云服务.然后在远处登录上去,有时你想在两台虚拟机上通信,怎么办,比如mymv2 ping mymv1先在 mymv1  打开 ICMP协议 右键启用即可这是通信.下面添加服务角色在两台虚拟机添加 web服务器 在 mymv2  iisstart   加了一段代码  <div><h1>mymv2</h1></div> 同样在 mymv1  ii

从Exchange 通往Office 365系列(四)配置负载均衡

既然我们配置了两台CAS服务器,那么为的就是让这两台服务器能够提供负载均衡的服务,在Exchange 2013里配置负载均衡非常简单,因为没有了CAS Array的概念,在Exchange 2013里配置负载均衡完全是在图形化界面里完成的,而在Exchange 2010里可能还需要用Powershell来实现.好的,下边来看如何实验CAS服务器的负载均衡 1. 登陆CAS服务器,点击添加角色和功能 2.直接下一步 3.直接下一步 4.选择当前服务器 5.这里直接下一步 6.注意这里添加网络负载平

apache安装、简单配置负载均衡和会话保持

首先安装apache依赖的apr和apr-util 1.下载(apr.apache.org/download.cgi)源文件, 如apr-1.5.1.tar.gz 2.解压 tar -xzvf apr-1.5.1.tar.gz 3.进入解压目录,依次执行 1 2 3 . /configure make make install 4.下载(apr.apache.org/download.cgi)源文件, 如apr-util-1.5.4.tar.gz 5.解压 tar -xzvf apr-util-

图解nginx配置负载均衡

1. 在Linux上准备两份tomcat 2. 修改两份tomcat的端口号 3. 启动两个tomcat服务器 4. 修改两个服务器上的主页方便测试区分 5. 在nginx配置文件里配置反向代理 备注: 1) hosts文件中 www.burgundyred.com 192.168.18.107 2) nginx默认端口80 6. 重新加载nginx配置文件 ./nginx -s reload 7. 配置负载均衡 备注: 1) weight为权重, 权重高的server被分配的几率较高 2) u

Apache配置负载均衡-实例

公司两台服务器都安装了tomcat,配置apache作为负载均衡,当一台服务器出现故障时还能保证业务正常运行. Server1:192.168.1.100 Server2:192.168.1.200 1.查询是否已经安装了apache rpm -qa | grep httpd 2.使用yum安装apache,负载配置是一样的. yum -y install httpd* 3.启动apache,设置为开机自启动. systemctl start httpd systemctl enable htt

nginx + tomcat配置负载均衡

目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Nginx安装Nginx教程 2.配置两个Tomcat在本机上配置两个Tomcat,分别为tomcat7-8081.tomcat7-8082.tomcat7-8081访问地址:http://localhost:8081,浏览显示内容:this is 8081 porttomcat7-8082访问地址:h

centos+nginx从零开始配置负载均衡

nginx负载均衡的理解 nginx是一个轻量级的.高性能的webserver,他主要可以干下面两件事: 作为http服务器(和apache的效果一样) 作为反向代理服务器实现负载均衡 现在nginx到处都可以见到,经常会看到宕机后的网页会显示nginx的字样,这也说明nginx由于高性能.使用配置简.开源单这些特点被越来越多的用户所接受,所使用. 其中第一种作为http服务器,结合php-fpm进程,对发来的请求进行处理,nginx本身并不会解析php,他只是作为一个服务器,接受客户端发来的请

Nginx配置负载均衡(upstream)+反向代理(httpproxy)

首先准备3台机器(当然是vm虚拟机),一台用来做负载均衡服务器,2台web服务,分别都安装上nginx,怎么安装nginx这里就不在叙述. 另外为了测试的顺利请在之前先把3台机器的防火墙都关掉. IP规划: 均衡机:10.1.1.10   |  web-1:10.1.1.11  |  web-2:10.1.1.12 以下配置均在 nginx.conf中进行 负载均衡服务器配置 upstream webservers {  //upstream实现负载均衡     server 10.1.1.11

Nginx配置负载均衡服务器

最近想买一台二手电脑当Linux服务器,一直没有买,暂时用windows来搞. Nginx下载地址:http://nginx.org/download/nginx-1.2.6.zip Tomcat下载地址:http://tomcat.apache.org/ 配置多个Tomcat 因为是在一台机器上做负载均衡,所以必须保证能有2台服务器,这就需要我们能在一台机器上同时启动2个tomcat.所以需要先设置一下tomcat. 装了一个tomcat6一个tomcat7,tomcat页面是有区别的,下面我