Nginx+Keepalived负载均衡主从

拓扑图:

环境描述:

操作系统:CentOS6.4_x64

master-nginx均衡器:192.168.0.202

backup-nginx均衡器:192.168.0.203

后端web1:192.168.0.204

后端web2:192.168.0.205

VTP:192.168.0.200

一、安装nginx

1、安装依赖包和创建用户和组


1

2

3

# yum install -y gcc gcc-c++ make kernel-headers glibc-headers zlib-devel openssl openssl-devel pcre-devel

# groupadd nginx

# useradd -g nginx -s /sbin/nologin nginx

2、安装nginx


1

2

3

4

# tar zxvf nginx-1.4.2.tar.gz

# cd nginx-1.4.2

# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module

# make && make install

二、配置主配置文件


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

# vi /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 8;

error_log logs/error.log;

pid logs/nginx.pid;

events {

 worker_connections 1024;

}

http {

 include 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 logs/access.log main; #上面是访问日志格式和记录位置

 sendfile on;

 tcp_nopush on;

 keepalive_timeout 65;

 gzip on;

upstream www.test.com {

 server 192.168.0.203:80 weight=2;

 server 192.168.0.204:80 weight=2;

 }

 server {

 listen 80;

 server_name www.test.com;

 location / {

 root html;

 index index.html index.htm; #请求转向mysvr 定义的服务器列表

 proxy_pass http://www.test.com;

 proxy_headers_hash_max_size 51200;

 #设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数。

 proxy_headers_hash_bucket_size 6400; #设置头部哈希表大小

 proxy_set_header Host $host;

 proxy_set_header X-Real-IP $remote_addr;

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 include proxy.conf;

 }

 }


1

2

3

4

5

6

7

8

9

10

11

12

13

# vi /usr/local/nginx/conf/proxy.conf

proxy_redirect off;

proxy_set_header Host $host; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 10m;     #允许客户端请求的最大单文件字节数

client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,

proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)

proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)

proxy_buffer_size 4k;  #设置代理服务器(nginx)保存用户头信息的缓冲区大小

proxy_buffers 6 32k;   #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置

proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2)

proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传

三、安装主从keepalived (配置基本一样,主配置文件稍作修改)

1、安装依赖包:


1

# yum install -y pcre pcre-devel openssl-devel lftp libnl-devel popt*

2、安装keepalived


1

2

3

4

5

# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

# tar zxvf keepalived-1.2.7.tar.gz

# cd keepalived-1.2.7

# ./configure --prefix=/usr/local/keepalived

# make && make install

3、keepalived配置成系统服务


1

2

3

4

5

# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# mkdir /etc/keepalived/

# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

4、修改keepalived主配置


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

test@sina.com #故障联系人

 }

notification_email_from admin@test.com #故障发送人

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_MASTER #BACKUP上修改为LVS_BACKUP

 }

vrrp_script check_nginx {

 script "/usr/local/nginx/check_nginx.sh" #检测nginx脚本路径

 interval 2 #监控时间/秒

 }

vrrp_instance VI_1 {

 state MASTER #BACKUP上修改为BACKUP

 interface eth0

 virtual_router_id 51

 priority 100 #BACKUP上修改为90

 advert_int 1

 authentication {

 auth_type PASS

 auth_pass 1111

 }

track_script { #实例引用脚本

     check_nginx

}

 virtual_ipaddress { #VTP

 192.168.0.203

 192.168.0.204

 }

}

5、编写nginx_local.sh脚本


1

2

3

4

5

6

7

8

9

10

11

12

13

14

# vi check_nginx.sh

#!/bin/bash

Count1=`netstat -antp |grep -v grep |grep nginx |wc -l`

if [ $Count1 -eq 0 ];then

    /usr/local/nginx/sbin/nginx

    Count2=`netstat -antp |grep -v grep |grep nginx |wc -l`

    if [ $Count2 -eq 0 ];then

        service keepalived stop

    else

        exit 0

    fi 

else

    exit 0

fi

6、重新启动


1

2

# service keepalived restart

# /usr/local/nginx/sbin/nginx -s reload

四、其他说明

实验中遇到一个问题,当keepalived或服务器没有DOWN时,主从服务器不会切换,所以就使用vrrp_script功能,写了个简单的检测脚本,nginx服务启动不起来时,就关闭keepalived,从而确保能主从切换。

1.常用命令:


1

2

3

4

5

6

7

# ipvsadm -ln #显示集群中服务器ip信息

# ip add #显示VTP绑定在哪个服务器上

# /usr/local/nginx/sbin/nginx #启动nginx

# /sbin/nginx -s stop #快速终止web服务

# /sbin/nginx -s quit #有安排的结束web服务

# /sbin/nginx -s reload #重新加载相关配置

# echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.local #设置开机启动

2.tail -f /var/log/messger(从日志中可知,主机出现故障后,备机立刻检测到,此时备机变为MASTER角色,并且接管了主机的虚拟IP资源,最后将虚拟IP绑定在eth0设备上)

3.当主LVS恢复后,会切换成主动服务器,如果Keepalived监控模块检测web故障恢复后,恢复的wen主机又将此节点加入集群系统中。

时间: 2024-09-08 07:54:23

Nginx+Keepalived负载均衡主从的相关文章

Nginx配置负载均衡及反向代理

简单介绍: 1.Nginx优点 Nginx 负均衡实现比较简单,可配置性很强,可以按URL做负载均衡,默认对后端有健康检查的能力.后端机器少的情况下(少于10台)负载均衡能力表现好.其优点主要有: 1)功能强大,支持高并发连接,内存消耗少:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3 万并发连接数,且在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M). 2)成本低廉:Nginx 为开源软件,免费使用. 3)Nginx 工作在网络的7 层,所以它

nginx ip_hash 负载均衡问题

问题描述 nginx ip_hash 负载均衡问题 nginx配置如下: #user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 定义负载均衡服务器列表 upstream svr_balance{ ip_has

使用NGINX Plus负载均衡Kubernetes服务

本文讲的是使用NGINX Plus负载均衡Kubernetes服务,[编者的话]此篇文章是Nginx的Michael Pleshakov发表在Nginx官方博客的一篇博文,通过这篇文章概括回顾了Kubernetes暴露服务相关的解决方案,并对最新的Ingreess API进行了说明,最后给出了Kubernetes通过集成NGINX Plus来暴露服务到互联网的解决方案.这个方案解决了目前Kubernetes暴露服务的短板,整个实现过程也比较简单,步骤清晰,具有很强的参考性.我们华三目前也在调研这

nginx tomcat负载均衡

问题描述 nginx tomcat负载均衡 我用nginx + 2个tomcat做的负载均衡,2个tomcat用的一套项目,现在需要做一个定时器任务,但是启动后两个tomcat都会去执行,也就是定时任务执行了两次. 如何才能避免这个问题呢?获得如何能获得当前执行的服务器是哪个,从而进行判断只执行一个. 解决方案 Nginx安装安装路径: /usr/local/nginx安装依赖包[root@localhost /]# yum install gcc-c++ [root@localhost /]#

nginx+tomcat负载均衡刷新页面不会更换主机

问题描述 nginx+tomcat负载均衡刷新页面不会更换主机 用nginx+tomcat+memcached做负载均衡,写了一个测试页面,用浏览器访问, 刷新页面每次都是访问的同一个tomcat,是什么问题啊? 配置文件: 测试地址: 解决方案 它的负载均衡要是基于IP地址,你的IP没变,自然每次都可能分配到同一个服务器.

详解Nginx HTTP负载均衡和反向代理配置_nginx

当前大并发的网站基本都采用了Nginx来做代理服务器,并且做缓存,来扛住大并发.先前也用nginx配置过简单的代理,今天有时间把整合过程拿出来和大家分享,不过其中大部分也是网上找来的资源. nginx完整的反向代理代码如下所示  : [root@data conf]# vim nginx.conf user www www; worker_processes 10; error_log /var/log/nginx/nginx_error.log; pid logs/nginx.pid; wor

linux下Nginx+Tomcat负载均衡配置方法_nginx

Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/ 下. #然后配置

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境).Nginx 1.9.8.Redis 3.2.1 一.背景 在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题. 二.Nginx安装与配置 1.Nginx安装 网上的资源对于安装Nginx的介绍比较多,例如最简单的为: (1) 获取nginx,在http://nginx.org/download/上可以获取当前最新的

Nginx+Tomcat负载均衡配置

 Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?下面然给我们详细来了解一下吧 Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.t