nginx负载均衡和mysql主主被动模式基础架构综合部署

1.结构思路

准备用5个虚机,一个虚机安装nginx来配置负载均衡,两个虚机做web服务器,另外两个虚机,安装mysql,做主主被动配置,每次web只读取一个mysql服务。

2.具体实施步骤

用vmware最小化安装5个虚机,我用的是centos7,可以克隆。

配置两个虚机web服务,我这里用wordpress。架构可以用lamp,也可以用lnmp,我这里用lnmp。注意web连接的mysql不是在本地,启用的是另外一个虚机的mysql。

配置虚机的nginx负载均衡。

配置两个虚机的mysql主主。

测试:
负载均衡测试:分别关掉web服务器,看看访问是否正常。
mysql主从测试:看看数据是不是同步,两个mysql服务器调换测试。
压力测试:暂时没有方案。

3.虚机IP信息统计

nginx		192.168.211.140
nginx_s1        192.168.211.136
nginx_s2	192.168.211.137
nginx_mysql	192.168.211.138
nginx_mysql2	192.168.211.139

4.配置nginx_mysql和nginx_mysql2的主主被动模式

4.1配置mysql源

我这里用mysql5.7,centos默认没有mysql5.7。需要安装mysql源。
[[email protected] ~]# wget  https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
   ##下载源安装包

[[email protected] src]# rpm -ivh mysql57-community-release-el7-11.noarch.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-11 ################################# [100%]

##安装完成后,见如下,多了mysql的源

[[email protected] yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo     mysql-community-source.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  mysql-community.repo

4.2用源安装mysql

yum -y install mysql-server mysql-devel

4.3mysql基础设置,修改密码设置开机启动 

[[email protected] ~]# systemctl start mysqld.service      ##启动
[[email protected] ~]# systemctl enable mysqld.service     ##设置开机启动
[[email protected] ~]# systemctl status mysqld.service     ##查看状态

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个临时的默认密码。

[[email protected] log]# cat mysqld.log  |grep password
2017-11-15T02:30:48.422591Z 1 [Note] A temporary password is generated for [email protected]: jyjzify=j0sA   ##这就是密码
2017-11-15T02:32:48.309585Z 3 [Note] Access denied for user ‘root‘@‘localhost‘ (using password: NO)

临时密码登录mysql后,必须先修改root密码,而且密码有规则,必须包含大小写字母数字还有符号,必须8位以上。

mysql> alter user ‘root‘@‘localhost‘ identified by ‘[email protected]‘;
Query OK, 0 rows affected (0.01 sec)

4.4配置主主被动模式

   配置说明

   配置主-主服务器对。
  
   两台服务器有相同的数据
   启用二进制日志,选择唯一的ID,并创建复制账号
   启用备库更新的日志记录
   把被动服务器配置成只读,防止可能与主动服务器上的更新产生冲突。可选。
   启动每个服务器的mysql实例。
   每个主库设置为对方的备库,使用新创建的二进制日志开始工作。

   

   两个服务器都是新安装的,数据相同。
   启动二进制日志,设置唯一的serverid,创建复制账号,如下:

   [[email protected] var]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#log_bin=ON
#log_bin_basename=/var/lib/mysql/mysql-bin
#log_bin_index=/var/lib/mysql/mysql-bin-index
log-bin=/var/lib/mysql/logs/mysql-bin           ##注意这个路径,这个路径的权限如果不是mysql:mysql,将无法启动mysql.
server-id=6                                     ##两个mysql服务器配置一样,只是server-id不同,另外一个我设置为数字8.

   创建复制账号:                               ##两个mysql都创建

mysql> grant replication slave,replication client on *.*  to [email protected]‘%‘ identified by ‘Passw0rd!‘;
Query OK, 0 rows affected, 1 warning (0.02 sec)

    
   
   记录binlog position                                             ##两个mysql的分别记录 等下要用
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      457 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

   启动复制
  
  change master to master_host=‘server1‘,    #主库的名字   两个mysql互相写对方的IP
  master_user=‘repl‘,                        #创建的用户名
  master_password=‘password‘,                #repl的密码
  master_log_file=‘mysql-bin.000001‘,        #记录的position值
  master_log_pos=0;                          #master_log_pos参数设置为0,因为要从日志的开头读起。

  执行命令:show slave status                #备库执行   检查复制是否正确执行

  执行命令:start slave                      #备库执行,启动开始复制
  

   启动成功  每个mysql都会启动三个线程

   mysql> show processlist
    -> ;
+----+-------------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| Id | User        | Host                  | db   | Command     | Time | State                                                         | Info             |
+----+-------------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
|  4 | system user |                       | NULL | Connect     | 1006 | Waiting for master to send event                              | NULL             |
|  5 | system user |                       | NULL | Connect     | 1553 | Slave has read all relay log; waiting for more updates        | NULL             |
|  6 | root        | localhost             | NULL | Query       |    0 | starting                                                      | show processlist |
|  7 | repl        | 192.168.211.138:41590 | NULL | Binlog Dump |  396 | Master has sent all binlog to slave; waiting for more updates | NULL             |

   测试

   192.168.211.139  :

   mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| logs               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.04 sec)

mysql> create database utec;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| logs               |
| mysql              |
| performance_schema |
| sys                |
| utec               |
+--------------------+
6 rows in set (0.00 sec)

  
    看看192.168.211.138

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| logs               |
| mysql              |
| performance_schema |
| sys                |
| utec               |
+--------------------+
6 rows in set (0.00 sec)

mysql> 

    138创建个:
mysql> use utec;
Database changed
mysql> create table t1(i int);
Query OK, 0 rows affected (0.04 sec)

mysql> show tables;
+----------------+
| Tables_in_utec |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> 

    139检查看看:
mysql> use utec;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_utec |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> 
    
    主主已经搭建成功。但是这种模式容易出问题,我们如果同时更新数据会冲突。
    我们把数据库修改成被动模式,只允许其中一个数据库允许写入数据。

 mysql> show variables like ‘%read_only%‘;
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.02 sec)

mysql> 

        对于数据库读写状态,主要靠 “read_only”全局参数来设定;默认情况下,数据库是用于读写操作的,所以read_only参数也是0或faluse状态,
这时候不论是本地用户还是远程访问数据库的用户,都可以进行读写操作;如需设置为只读状态,将该read_only参数设置为1或TRUE状态,但设置 read_only=1 
状态有两个需要注意的地方:
      1.read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 show slave status\G 命令查看salve状态,
可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致;
      2.read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作;在MySQL中设置read_only=1后,
普通的应用用户进行insert、update、delete等会产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数据变化的错误,但具有super权限的用户,
例如在本地或远程通过root用户登录到数据库,还是可以进行数据变化的DML操作;

      为了确保所有用户,包括具有super权限的用户也不能进行读写操作,就需要执行给所有的表加读锁的命令 “flush tables with read lock;”,
这样使用具有super权限的用户登录数据库,想要发生数据变化的操作时,也会提示表被锁定不能修改的报错。

        这样通过 设置“read_only=1”和“flush tables with read lock;”两条命令,就可以确保数据库处于只读模式,不会发生任何数据改变,
在MySQL进行数据库迁移时,限定master主库不能有任何数据变化,就可以通过这种方式来设定。

       但同时由于加表锁的命令对数据库表限定非常严格,如果再slave从库上执行这个命令后,slave库可以从master读取binlog日志,但不能够应用日志,
slave库不能发生数据改变,当然也不能够实现主从同步了,这时如果使用 “unlock tables;”解除全局的表读锁,slave就会应用从master读取到的binlog日志,
继续保证主从库数据库一致同步。

       为了保证主从同步可以一直进行,在slave库上要保证具有super权限的root等用户只能在本地登录,不会发生数据变化,其他远程连接的应用用户只按需分配为select,
insert,update,delete等权限,保证没有super权限,则只需要将salve设定“read_only=1”模式,即可保证主从同步,又可以实现从库只读。

       相对的,设定“read_only=1”只读模式开启的解锁命令为设定“read_only=0”;设定全局锁“flush tables with read lock;”,对应的解锁模式命令为:“unlock tables;”.

      当然设定了read_only=1后,所有的select查询操作都是可以正常进行的。

    
      设置:

[mysqld]

read_only=1
#log_bin=ON

#log_bin_basename=/var/lib/mysql/mysql-bin
#log_bin_index=/var/lib/mysql/mysql-bin-index
log-bin=/var/lib/mysql/logs/mysql-bin
server-id=6                                                                   ##在my.cnf [mysqld]下面设定read_only=1即可。

      设置好后重启mysql   查看

mysql> show variables like ‘%read_only%‘;
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | ON    |                                           ##已经on了。
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.03 sec)

     测试下,新建个账户,看看能写数据吗,root是可以的,因此要新建账户测试。

mysql> grant all privileges on utec.* to ‘k‘@‘%‘ identified by ‘Passw0rd!‘;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> 

    用这个新建的用户分别登录mysql  

mysql> create table t5(j int);
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement             ##139开启了read_only
mysql> 

   138上执行正常

mysql> create table t4(k int);
Query OK, 0 rows affected (0.03 sec)

mysql> 

    到此主主被动模式配置成功。
      
 

5.配置web,两个web服务器一样配置

5.1安装nginx

必要软件准备
pcre  支持rewrite功能
yum –y install pcre*
openssl   ssl支持
yum –y install openssl*

tar -zxvf nginx-1.12.1.tar.gz 

[[email protected] src]# cd nginx-1.12.1
[[email protected] nginx-1.12.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[[email protected] nginx-1.12.1]# 

编译

./configure --prefix=/usr/local/nginx-1.12.1 --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre

编译完成,执行:make &&make install

建立执行文件的link,方便执行命令

[[email protected] nginx-1.12.1]# ln -s /usr/local/nginx-1.12.1/sbin/nginx /usr/sbin/nginx

启动nginx 
执行命令

[[email protected] nginx-1.12.1]# nginx

检查服务是不是起来了

[[email protected] nginx-1.12.1]# ps -ef |grep nginx
root      6329     1  0 03:37 ?        00:00:00 nginx: master process nginx
nobody    6330  6329  0 03:37 ?        00:00:00 nginx: worker process
root      6333  2216  0 03:38 pts/0    00:00:00 grep --color=auto nginx
[[email protected] nginx-1.12.1]# netstat -antpl |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6329/nginx: master  
[[email protected] nginx-1.12.1]# 

可以看到服务已经起来

5.2安装php

先安装安装php必须的软件:
yum –y install gd-devl libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel
我这边是官网下载的php-7.1.8

解压缩
tar –zxvf php-7.1.8.tar.gz
进入php-7.1.8  编译

[[email protected] php-7.1.8]# ./configure --prefix=/usr/local/php-7.1.8 --with-config-file-path=/usr/local/php-7.1.8/etc 
--with-bz2 --with-curl --enable-ftp --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local 
--with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local 
--enable-mbstring  --enable-calendar  --with-gettext  --with-libxml-dir=/usr/local --with-zlib  
--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --enable-dom --enable-xml 
--enable-fpm --with-libdir=lib64

配置php

配置php
cp php.ini-production /usr/local/php-7.1.8/etc/php.ini
cp /usr/local/php-7.1.8/etc/php-fpm.conf.default  /usr/local/php-7.1.8/etc/php-fpm.conf
启动php
/usr/local/php-7.1.8/sbin/php-fpm

如果报错:
[15-Aug-2017 13:55:33] WARNING: Nothing matches the include pattern ‘/usr/local/php-7.1.8/etc/php-fpm.d/*.conf‘ from /usr/local/php-7.1.8/etc/php-fpm.conf at line 125.
[15-Aug-2017 13:55:33] ERROR: No pool defined. at least one pool section must be specified in config file
[15-Aug-2017 13:55:33] ERROR: failed to post process the configuration
[15-Aug-2017 13:55:33] ERROR: FPM initialization failed

/usr/local/php-7.1.8/etc/php-fpm.d
把此目录下的www.conf.default
改成www.conf
然后启动,启动成功。

检查下:

[[email protected] php-fpm.d]# ps aux |grep php
root      2670  0.0  0.7 216016  3864 ?        Ss   01:18   0:00 php-fpm: master process (/usr/local/php-7.1.8/etc/php-fpm.conf)
nobody    2671  0.0  0.6 216016  3424 ?        S    01:18   0:00 php-fpm: pool www
nobody    2672  0.0  0.6 216016  3424 ?        S    01:18   0:00 php-fpm: pool www
root      2674  0.0  0.1 112664   968 pts/0    S+   01:19   0:00 grep --color=auto php
[[email protected] php-fpm.d]# 

5.3配置wordpress

我们用的数据库不是在本地,是在192.168.211.138

须先在mysql建立一个wordpress数据库,和一个存取wordpress数据库的用户

mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on wordpress.* to ‘wordpress‘@‘%‘ identified by ‘Passw0rd!‘;
Query OK, 0 rows affected, 1 warning (0.01 sec)

wordpress 路径为   

[[email protected] wordpress]# pwd
/usr/local/src/wordpress

配置下数据库
[[email protected] wordpress]# pwd
/usr/local/src/wordpress
[[email protected] wordpress]# ls
index.php        wp-admin              wp-config-sample.php  wp-links-opml.php  wp-settings.php
license.txt      wp-blog-header.php    wp-content            wp-load.php        wp-signup.php
readme.html      wp-comments-post.php  wp-cron.php           wp-login.php       wp-trackback.php
wp-activate.php  wp-config.php         wp-includes           wp-mail.php        xmlrpc.php
[[email protected] wordpress]# 

wp-config.php是由wp-config-sample.php复制而来,修改下里面的数据库连接信息

5.4设置nginx

删除默认页面的server配置,就是第一个server段。
加入下面的

server {
		listen		80;
                index		index.php index.html index.htm;
		access_log	logs/wordpress.access.log main;
		root		/usr/local/src/wordpress;
		location / {
			try_files $uri $uri/ /index.php?q=$uri&$args;
		}
		error_page	404 /404/html;
		error_page	500 502 503 504 /50x.html;
		location = /50x.html {
			root /usr/local/src/wordpress;
		}
		           
		location ~\.php$ {
			try_files $uri =404;
			fastcgi_pass 127.0.0.1:9000;
			fastcgi_index index.php;
			fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
			include	fastcgi_params;
		}
}

打开浏览器输入IP,可以访问wordpress了。

记录下密码:[email protected]!

两个web server都要配置nginx。

到这里,已经实现了两个web server共用一个mysql,同时mysql做了主主被动模式的备份。

6.配置负载均衡

前面我们已经部署了两个web(192.168.211.136  192.168.211.137)
现在通过第三台服务器部署nginx,来实现这两台服务器的负载均衡。
服务器IP是192.168.211.140

6.1解压缩nginx

[[email protected] src]# pwd
/usr/local/src
[[email protected] src]# ls
haproxy-1.7.9.tar.gz  nginx-1.12.1.tar.gz  wordpress-4.8.1-zh_CN.tar.gz
nginx-1.12.1          php-7.1.8.tar.gz     zabbix-2.2.2.tar.gz
[[email protected] src]# 

6.2编译安装

[[email protected] ~]# ./configure --prefix=/usr/local/nginx-1.12.1 --with-http_ssl_module 
--with-http_v2_module --with-http_stub_status_module --with-pcre

[[email protected] ~]# make && make install

设置link

[[email protected] ~]# ln -s /usr/local/nginx-1.12.1/sbin/nginx /usr/sbin/nginx

6.3

配置

以下是完整参考文件

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

upstream backend { 
    server 192.168.211.136:80;                           #真实server的IP
    server 192.168.211.137:80;                           #真实server的IP
}
server{ 
    listen 80; 
    server_name 192.168.211.140;                         #这个是访问用到的域名,我这里没有域名,直接用了nginx设置负载均衡那台服务器的IP
    location / { 
        proxy_pass http://backend;                       #backend对应上面upstream
        proxy_set_header Host $host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
}
}

6.4测试

配置成功,我们访问配置nginx负载服务器的IP(192.168.211.140),读取的页面就是我们前面配置的那两台web服务器(136,137)的web内容。

我们关闭136  137两台服务器的nginx服务,访问192.168.211.140  web无法打开。

打开任何一个136 137的nginx服务,访问192.168.211.140  web访问正常。

6.5

到这里一个基础的架构做出来了。

前端是nginx负载均衡,后端是mysql主主被动模式。
时间: 2024-10-16 10:23:56

nginx负载均衡和mysql主主被动模式基础架构综合部署的相关文章

Linux CentOS搭建JDK+Mysql+Tomcat+Nginx负载均衡环境      

本文使用了Tomcat+Nginx环境,主要起到负载均衡的作用,使用Tomcat处理jsp后台程序,使用Nginx处理静态页面. 准备工作(下载软件版本,请自行百度下载) 安装包放至:/usr/local/src 安装地址:/usr/local/软件名 1.apache-tomcat-6.0.48 2.mysql-5.5.54 3.nginx-1.6.3 4.cmake-2.8.8 5.pcre-8.40 6.jdk-8u11-linux-x64 7.openssl-1.1.0d(https使用

【转】双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的nginx,nginx对于静态资源请求就直接在本机检索并返回,对于php的动态请求,则负载均衡到server1和server2.对于SQ

双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构. 架构简介 此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的Nginx,nginx对于静态资源请求就直接在本机检索并返回,对于PHP的动态请求,则负载均衡到server1和server2.对于S

nginx 负载均衡时,一台tomcat宕机时的问题 自动切换(转自java版web项目-微信公众号)

如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加upstream节点. upstream linuxidc {      server 10.0.6.108:7080;      server 10.0.0.85:8980;} 2.  将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即

企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件. Keepalived软件主要是通过VRRP协议实现高可用功能的.VRRP是Virtual Router Redundancy Pro

nginx负载均衡+keepalive心跳检测

环境标准: 一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 内核:2.6.32-642.el6.x86_64 系统:CentOS release 6.8 (Final) ip: web01:10.0.0.8 nginx 解析手机端 均做了nginx的负载均衡但是只均衡一台机器可以后续往里填 web02:10.0.0.200 nginx 解析电脑端 均做了nginx的负载均衡但是只均衡一台机器可以后续往里填 lb01

搭建Nginx负载均衡服务文档一

搭建负载均衡服务的实际需求: 1.把单台服务器无法承受的大规模并发访问或数据流量分担到多台节点设备上,分别进行处理,减少用户等待响应的时间,提升用户体验. 2.单个重负载的运算分担到多台节点设备上做并行处理,每个节点处理结束后,将结果汇总,返回给用户. 3.7*24小时的服务保证,任意一个或多个有限后面节点设备宕机,不能影响业务. 实现Nginx负载均衡需要两个组件: l  Ngx_http_proxy_module,用于把请求后抛给服务器节点或upstream服务器池: l  Ngx_http

Nginx 负载均衡-加权轮询策略剖析

本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更多机会获取到监听套接口,从而客户端的请求到达后也就相应地被它捕获并处理).如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适的后端服务器来处理当前请求,就是本文要说的负载均衡.这两种均衡互不冲突并且能同时生效. nginx不

nginx负载均衡集群

nginx负载均衡集群  0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对ip(牵扯到ip和内核的改动) 2.优势: (a)非常灵活地配置负载均衡 (b)可以根据域名去转发  应用情景:不同域名对应不同机器 或者 域名下有二级目录,不同目录可以针对不同的real server(不需要配置公网 IP) 实验环境: director主机: 192.168.131.132 re