ngnix高可靠网站架构

小编是一个菜鸟,这是以前一位大神闲着没事的时候传授给我的,自己在电脑上装了四个虚拟机尝试过搭建,在这儿给大家分享一下。国内的许多网站都是这样的搭建模式

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及 搜索引擎 Rambler(俄文:Рамблер)使用。事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

nginx高可用实现部署详细文档

主机名 主机IP 角色 备注
server1 192.168.153.111 nginx主机 反向代理访问tomcat1或者tomcat2
server2 192.168.153.112 nginx备机 反向代理访问tomcat1或者tomcat2
server3 192.168.153.113 tomcat1 业务服务器
server4 192.168.153.114 tomcat2 业务服务器


一.修改启动web服务器

在192.168.15.128和192.168.15.30上分别解压修改tomcat的index页面:

viwebapps/ROOT/index.jsp

修改页面html部分

<html>

<head>

</head>

<body>

SessionID:<%=session.getId()%>

<br/>

SessionIP:<%=request.getServerName()%>

<br/>

<h1>tomcat1 page</h1>

</body>

</html>

这样可以通过访问index来判断访问是不是轮询的


前期准备,

a;修改主机名,

b;修改网关能上网,

c;关闭防火墙

d;修改系统安全设置

1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

SELinux status:                 enabled

2、修改配置文件需要重启机器:

修改/etc/selinux/config 文件  

将SELINUX=enforcing改为SELINUX=disabled  

重启机器即可。  

二.安装配置nginx

1.安装GCC编译器等工具:

一、安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

二、首先要安装 PCRE

PCRE 作用是让 Nginx 支持 Rewrite 功能。

1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

2、解压安装包:

[root@bogon src]# tar zxvf pcre-8.35.tar.gz

3、进入安装包目录

[root@bogon src]# cd pcre-8.35

4、编译安装 

[root@bogon pcre-8.35]#./configure
[root@bogon pcre-8.35]# make && make install

5、查看pcre版本

[root@bogon pcre-8.35]# pcre-config --version

2.下载安装Nginx:

CentOS 6.7下配置 yum 安装 Nginx。

第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo

cd /etc/yum.repos.d/
 
vim nginx.repo

填写如下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

保存,则会产生一个/etc/yum.repos.d/nginx.repo文件。

下面直接执行如下指令即可自动安装好Nginx

yum install nginx -y

安装完成,下面直接就可以启动Nginx了:

service nginx start

现在Nginx已经启动了,直接访问服务器就能看到Nginx欢迎页面了的。


3.配置Nginx.conf

配置文件二个nginx负载均衡器的文件一样

user  root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
      upstream myServer{      
   
   server 192.168.153.113:8080;      
      server 192.168.153.114:8080;     

    }     
     server {    
        listen       80;    
      
  server_name 192.168.153.222; 
    
        #charset koi8-r;    
    
        #access_log  logs/host.access.log  main;    
    
        location / {     
          proxy_pass  
http://myServer     
        }


    
}

    include /etc/nginx/conf.d/*.conf;
}

 

 

这里面配置较多,其中比较有用的已经标红了,可以直接将此部分配置在默认的nginx的配置文件里面即可

三.安装及配置keepalived

1.安装keepalived

在两台nginx服务器安装keepalived:


 

通过yum –y install keepalived 来代替,不同安装方式而已,不是重点

二台Nginxkeepalived.conf配置文件如下配置完成后分别service keepalived start启动检验keepalived配置是否成功

两台keepalived的配置如下:可以看出两者之间的区别仅仅是主备的权重不同,主为100备为66,其余一些有作用的配置已经用红色标注

主:

 

global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from keepalived@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_MASTER

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh"

interval 2                           #(检测脚本执行的间隔)

weight 2

}

vrrp_instance VI_1 {

   #state MASTER

    state BACKUP

    nopreempt                      

    #设置非抢占模式时,修改“state MASTER”为“state BACKUP”,添加“nopreempt“

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

chk_http_port            #(调用检测脚本)

}

    virtual_ipaddress {

        192.168.153.222

    }

}

备: 

 

global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from keepalived@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_BACKUP

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh"

interval 2                           #(检测脚本执行的间隔)

weight 2

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 66

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

chk_http_port            #(调用检测脚本)

}

    virtual_ipaddress {

        192.168.153.222

    }

}

以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程

vim /usr/local/src/check_nginx_pid.sh

 

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`       

if [ $A -eq 0 ];then                           

      /usr/local/nginx/sbin/nginx       

      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then 

              killall keepalived                   

      fi

fi

 

Ok,开始nginx负载均衡测试,停掉其中一台的任何服务,不影响整个系统的运作

添加系统开机启动

chkconfig --add keepalived

chkconfig  --level 23456 keepalived on

四.测试

依次启动两个tomcat=》启动两个nginx=》启动两个keepalived,查看主机上是否有虚拟ip192.168.15.135

通过虚拟ip访问nignx,看页面是不是轮询两个tomcat

将主机的nginx进程kill掉,看看vip是不是切换到备机器上了

访问虚拟ip是不是还能轮询访问tomcat

service nginx restart

service keepalived stop

tail -f /var/log/messages

keepalived 配置的网卡名称不对

chkconfig --add keepalived

chkconfig --level 23456 keepalived on

-level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关闭。

等级0表示:表示关机

等级1表示:单用户模式

等级2表示:无网络连接的多用户命令行模式

等级3表示:有网络连接的多用户命令行模式

等级4表示:不可用

等级5表示:带图形界面的多用户模式

等级6表示:重新启动

错误:[alert] 3790#3790: setrlimit(RLIMIT_NOFILE, 51200) failed (13: Permission denied)

vi /etc/security/limits.conf 底部加上 
* soft nofile 51200 
* hard nofile 51200 
scp /etc/security/limits.conf 192.168.153.111:/etc/security/
vi /etc/sysctl.conf 底部添加 
fs.file-max=51200

scp /etc/ sysctl.conf 192.168.153.111: /etc/

错误:failed (13: Permission denied) while reading upstream(巨坑)

1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

SELinux status:                 enabled

2、修改配置文件需要重启机器:

修改/etc/selinux/config 文件  

将SELINUX=enforcing改为SELINUX=disabled  

重启机器即可。  

配置状态监控:

在nginx.conf中配置如下:

location /nginx_status {

           stub_status on;

           auth_basic "NginxStatus";

           auth_basic_user_file /usr/local/nginx/htpasswd;

           #allow 127.0.0.1;

           #deny all;

       }

然后运行下面的命令:

printf "admin:$(openssl passwd -crypt 123456)\n" >>/usr/local/nginx/htpasswd

最后在浏览器地址栏中输入:

http://192.168.153.111/nginx_status

输入用户名和密码:

效果如下图:

在192.168.153.111上面安装memcached

yum -y install memcached

启动memcached服务

services  memcached start

检查服务是否正常启动

[root@server1 etc]# ps -ef | grep memcached

494      11771      1  0 11:49 ?        00:00:00 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid

root     11789   4401  0 11:49 pts/1    00:00:00 grep memcached

[root@server1 etc]# netstat -anp | grep mem

tcp       0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      11771/memcached    

tcp       0      0 :::11211                    :::*                        LISTEN      11771/memcached    

udp       0      0 0.0.0.0:11211               0.0.0.0:*                             11771/memcached    

udp       0      0 :::11211                    :::*                                  11771/memcached    

C:\Users\teacher>telnet 192.168.153.111 11211

stats

配置tomcat的配置文件。

context.xml

server.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

       memcachedNodes="n1:192.168.153.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"

/>

======================server.xml===================

<Engine name="Catalina" defaultHost="localhost">

     jvmRoute="tomcatRoute1"

导入jar包。推荐使用maven自动下载

  <groupId>de.javakaffee.msm</groupId>

   <artifactId>memcached-session-manager</artifactId>

   <version>2.1.1</version>

   </dependency>

   <dependency>

   <groupId>de.javakaffee.msm</groupId>

   <artifactId>memcached-session-manager-tc7</artifactId>

   <version>2.1.1</version>

 

</dependency>

<dependency>

   <groupId>de.javakaffee.msm</groupId>

   <artifactId>msm-kryo-serializer</artifactId>

   <version>2.1.1</version>

</dependency>

重新启动tomcatsessionID不变

使用redis实现session一致性

yum install epel-release

yum install redis

[root@server2 ~]# service redis status

redis-server is stopped

[root@server2 ~]# service redis start

Starting redis-server:                                     [  OK  ]

[root@server2 ~]#

[root@server2 ~]# netstat -anp | grep redis

tcp       0      0 127.0.0.1:6379              0.0.0.0:*                   LISTEN      47886/redis-server 

[root@server2 ~]#

修改配置文件/etc/redis.conf

将127.0.0.1修改为192.168.153.112

重启服务

[root@server2 ~]# service redis restart

Stopping redis-server:                                     [  OK  ]

Starting redis-server:                                     [  OK  ]

配置tomcat配置文件

/usr/local/tomcat7_redis/conf/server.xml  修改端口号为8181

/usr/local/tomcat7_redis/conf/context.xml

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />

<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"

        host="192.168.153.112"

        port="6379"

        database="0"

        maxInactiveInterval="60" />

上传jar包

重启tomcat

修改nginx配置

/etc/nginx/nginx.conf

重启nginx服务

[root@server1 ~]# service nginx restart

Stopping nginx:                                           [  OK  ]

Starting nginx:                                            [  OK  ]

备份机同样

设置redis主备切换

在备机的redis.conf中加下面配置

slaveof 192.168.153.112 6379

猜你喜欢

转载自blog.csdn.net/a_long_123/article/details/78131915