一、Nginx的理解

Nginx是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。特点:占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现最好。

   Nginx常用负载均衡算法:

    轮询(默认算法) ——    每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力

    加权轮询        ——    权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况

    IP HASH        ——    当同IP进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站SESSION共享问题 

二、nginx的配置

      实验步骤:由于之前在源码包的编译过程使用了nginx,在此就不再叙述了,我们对nginx的配置进行如下修改。

      1) 检测是否安装成功

      ---> /usr/local/nginx/sbin/nginx         # 开启ngnix服务

      注意:当服务启动出现错误:error while loading shared  libraries:libpcre.so.1:cannot open shared object file:No such file or directory    

解决方法:1、使用命令where  libpcre.so.1找到它所在的位置

           2、ln  -s  /usr/local/lib/libpcre.so.1  /lib64 命令做个软链接

           3、再重新启动即可(ps  -axu| grep  nginx来查看nginx服务进程)

       ---> ln -s /usr/local/nginx/sbin/nginx  /sbin/   # 进行nginx的链接操作

   2)去掉nginx服务的版本号

   --->  vim  /root/nginx-1.15.3/src/core/nginx.h                # 只修改一行

   # 此时,在真机中使用 curl -I 172.25.2.1 查看,则不会显示nginx的版本号。 

   3)注释/root/nginx-1.15.3/auto/cc/gcc中debug的下一行

      4)在浏览器中输入server1的ip,可以访问nginx的默认文件

       5)添加发布文件

       --->  vim /usr/local/nginx/html/index1.html

        <h1>server1 --- nginx</h1>

       # 在浏览器中的结果:

       6)nginx的基本操作

       --->  /usr/local/nginx/sbin/nginx # 启动服务

       --->  /usr/local/nginx/sbin/nginx -s stop(reload、quit)  #停停止、重启服务

       --->  /usr/local/nginx/sbin/nginx -h|-t                            # h命令帮助;t验证配置文件

三、Nginx实现负载均衡

      1)修改主配置文件

      --->  vim /usr/local/nginx/conf/nginx.conf

      worker_processes  1;

      events {

      worker_connections  65535;

      }

      http {

              upstream xniu{

              # ip_hash       # 负载均衡算法,不写默认为rr(轮询)

              server 172.25.2.2:80;   # 后端服务器

              server 172.25.2.3:80;

              server 127.0.0.1:8080 backup;     # 当后端服务器均有问题时,使用本地的服务

              }

              include mime.types;

             default_type  application/octet-stream;

             server {

                      listen 80;      # nginx监听80端口

                      server_name www.xniu.com;       # 访问域名

                      location / {

                      proxy_pass http://xniu;         # 访问上边的虚拟主机

                     }

             }

      }

     2)查看系统支持的最大文件数,并编辑限制文件

     --->  sysctl -a | grep file

     --->  vim /etc/security/limits.conf

      Nginx - nofile 65535 # 使nginx工作再nginx用户的工作空间

     3)创建nginx用户

     --->  useradd -M -d /usr/local/ngnix  ngnix  #指定用户加目录

     4)重新加载nginx:(加载之后需要打开server2和server3的httpd服务)

     --->  nginx  -s  reload

5)启动server2和server3的httpd服务;server1的httpd访问端口为8080并添加默认发布文件

     6)在真机中测试负载均衡,方式是轮询

   # 当server2和server3都坏掉的时候,会调用server1的httpd服务

   #  也可以给后端服务器设置权重;编辑nginx.conf文件;在虚拟主机172.25.2.2后添加weight=2.则在真机中会出现两次server2,一此server3。结果如下:
  

   # 若负载均衡算法为ip_hash,结果如下(同一个ip访问时,后端服务器不会改变):算法为hash时,不能有后备服务主机。

四、在nginx中静态模块sticky

   sticky时nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和时别cookie,来使同一客户端的请求罗在同一台服务器上。默认标识为route。功能相当于算法ip_bash。

   具体数据的处理过程为:客户算首次发送访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器;后端服务器请求完成后,将响应数据返回给客户端;(此时,nginx生成带有route的cookie,返回给客户端,route的值与后端服务器想对应,可能是明文、md5、sha1等hash值;客户端保存带route的cookie )下一次客户端再发送请求时,会带上route,nginx接收到cookie中route值,随即就转发给对应的后端服务器。

五、使用corosync和pacemaker实现nginx的高可用

   由于之前配置过corosync和pacemaker的实验环境,再这里就直接使用。若时有问题的话,可以查看之前的博客。

   1)首先我们把server1和server4上都安装上nginx服务。这是只需要把server1中安装好的目录拷贝过去即可使用。

   --->  scp -r  /usr/local/nginx  server4:/usr/local

       2)我们在server4中做一个软链接,并启动

   --->  ln - s  /usr/local/nginx/sbin/nginx   /sbin/

   --->  nginx                              # 启动服务(没报错说明正常)

   --->  nginx  -s  stop                    # 关闭服务

   3)编写nginx的执行脚本(在网上搜即可),放在/etc/init.d/目录下,并给一个可执行权限

   4)此时我们启动server1和server4的corosync服务

   --->  /etc/init.d/corosync  start

   5) 在corosync中添加ip和nginx服务(ip为之前添加进去的)

   # 建立一个资源组,使ip和nginx运行在同一个节点上

   6)完成之后,我们对节点进行测试。(添加进去的服务可以自启动)

    # 在关闭节点4的corosync服务时,资源的调度会自动转换在server1上。(若两个节点都有问题,则不可以访问后端)

   # 当server1主机崩了之后(echo c> /proc/sysrq-trigger),由于有fence机制,会自动启动,完成后又添加在在线节点中。

   注意:当我挂掉一个节点后,再启动的时候,该节点会自动进行资源的抢夺。为了防止出现这样的现象,我们可以设置corosync的当前节点的粘滞性即可 。

Nginx的负载均衡和高可用的更多相关文章

  1. Keepalived+LVS+Nginx负载均衡之高可用

    Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...

  2. nginx负载均衡+keepalived高可用

    nginx负载均衡+keepalived高可用 环境准备 192.168.88.111:nginx + keepalived   MASTER 192.168.88.112:nginx + keepa ...

  3. net core 实战之 redis 负载均衡和"高可用"实现

    net core 实战之 redis 负载均衡和"高可用"实现 1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的& ...

  4. HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用

    HAProxy+keepalived+MySQL实现MHA中slave集群的负载均衡的高可用 Ip地址划分: 240    mysql_b2 242    mysql_b1 247    haprox ...

  5. dubbo服务层面上的负载均衡和高可用

    dubbo上的服务层可以做集群,来达到负载均衡和高可用,很简单,只需要在不同的服务器节点上向同一个zk(内网环境)注册相同的服务 注意就是,消费者不能在同一个zk做这种集群操作的 转载请注明博客出处: ...

  6. 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群,并部署客户端负载均衡和高可用

    本文作者系:视野金服工程师 | 吴海胜 首发于 Nebula Graph 论坛:https://discuss.nebula-graph.com.cn/t/topic/1388 一.前言 本文介绍如何 ...

  7. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  8. asp.net core 实战之 redis 负载均衡和"高可用"实现

    1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...

  9. TCP接入层的负载均衡、高可用、扩展性架构

    一.web-server的负载均衡 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡.整个架构分三层: 上游调用层,一般是browser或者APP 中间反向代理层,n ...

随机推荐

  1. public boolean onKeyDown(int keyCode, KeyEvent event)

    @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method ...

  2. Java-小技巧-003-static、final、static final的区别

    final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变,jvm会将其分配到常量池中,程序不可改变其值: final修 ...

  3. Java实现最基本的集中排序

    排序是一个很重要的概念,现实生活中,我们需要为很多的东西排序.下面我们就介绍几种简单的排序的方法和最基本的思想. 1.冒泡排序:假设一个数组中有10个数字,从左边开始

  4. 数据结构顺序表Java实现

    Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...

  5. cocos代码研究(13)Widget子类EditBox学习笔记

    理论基础 一个用来输入文本的类,继承自 Widget , 以及 IMEDelegate. 代码部分 Public枚举类型 enum KeyboardReturnType键盘的返回键类型. enum I ...

  6. bat笔记

    背景介绍 现入职的公司包含发送EDM的项目,每天都有各种题型邮件需要发送,但是由于各种原因,发送EDM程序的服务器老是被网管各种重启 :) 作为负责人,对这事很恼火,隔几天就被投诉,怎么又没收到考勤邮 ...

  7. 系统管理命令之last

    Linux系统中使用以下命令来查看文件的内容: cat  由第一行开始显示文件内容 tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写! nl   显示的时候,顺道输出行号! mor ...

  8. C题:A Water Problem(dp||搜索)

    原题链接 解法一:递归 #include<cstdio> #include<algorithm> using namespace std; long long n,x,y; l ...

  9. 2018 Multi-University Training Contest 5 Solution

    A - Always Online Unsolved. B - Beautiful Now Solved. 题意: 给出一个n, k  每次可以将n这个数字上的某两位交换,最多交换k次,求交换后的最大 ...

  10. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...