LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

时间:2022-12-19 11:12:40

前言

  首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来;这里表示抱歉了!

  另外,本文是在我的另一篇博客主从热备+负载均衡(LVS + keepalived)的基础上进行的,如果没有看过,那么最好去看下,不然本篇文章看起来有点费劲哦!

  LVS提供虚拟服务;nginx作为反向代理服务器来实现负载均衡;keepalived实现主从热备,检查RealServer的健康状态以及主机与备机之间失效转移

环境准备与配置

  VIP(Virtual IP)为192.168.1.200,用户只需要访问这个IP地址即可获得网页服务

  负载均衡主机为192.168.1.114(master) ----》keepalived

  备机为 192.168.1.112(brucelee) ----》keepalived

  Web服务器A为192.168.1.111(youzhibing) ----》realserver + nginx + tomcat

  Web服务器B为 192.168.1.115(youzhibing03) ----》realserver + nginx + tomcat

  现在缺的就是在web服务器上配置nginx了。

  1.nginx压缩文件解压 (192.168.1.111安装nginx服务)

    准备nginx-1.8.0.tar.gz,并解压到当前目录,命令tar -zxf nginx-1.8.0.tar.gz

LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

  2.nginx依赖包安装

    nginx安装有环境要求,nginx依赖下面3个包

    a. gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ )

    b. rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ )

    c. ssl 功能需要 openssl 库 ( 下载: http://www.openssl.org/ )

    这里我就不用源码包方式来安装了,直接一键式安装:yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

  3.nginx安装    

    cd nginx-1.8.0 

    ./configure --prefix=/usr/local/nginx 

    make

    make install

    安装完成之后,检查nginx的配置文件是否正确

    cd /usr/local/nginx/sbin

    ./nginx -t

    LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    说明配置文件正确,那么nginx安装成功!

  4.启动nginx

    cd /usr/local/nginx/sbin

    ./nginx

    LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    nginx启动成功!

  5.配置nginx

    a. cd /usr/local/nginx/conf,新建proxy.conf,进行代理配置,内容如下:

# proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X
-Real-IP $remote_addr;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout
90;
proxy_send_timeout
90;
proxy_read_timeout
90;
proxy_buffer_size 4k;
proxy_buffers
4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

    b. 配置nginx.conf,相关注释已经写明,大家看仔细:

user  root;            #运行用户
worker_processes
1; #启动进程,通常设置成和cpu的数量相等

#全局错误日志及PID文件
error_log
/usr/local/nginx/logs/error.log;
error_log
/usr/local/nginx/logs/error.log notice;
error_log
/usr/local/nginx/logs/error.log info;
pid
/usr/local/nginx/logs/nginx.pid;

# 工作模式及连接数上线
events {
use epoll; #epoll是多路复用IO(I
/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

worker_connections
1024; #单个后台worker process进程的最大并发链接数
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
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;

#设定请求缓冲
server_names_hash_bucket_size
128;
client_header_buffer_size 32K;
large_client_header_buffers
4 32k;
# client_max_body_size 8m;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I
/O处理速度,降低系统的uptime.
sendfile on;
tcp_nopush on;
tcp_nodelay on;

#连接超时时间
#keepalive_timeout
0;
keepalive_timeout
65;

#开启gzip压缩,降低传输流量
gzip on;
gzip_min_length 1k;
gzip_buffers
4 16k;
gzip_http_version
1.1;
gzip_comp_level
2;
gzip_types text
/plain application/x-javascript text/css application/xml;
gzip_vary on;

#添加tomcat列表,负载均衡的服务器都放在这
upstream tomcat_pool {
#server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
server
192.168.1.111:8080 weight=4 max_fails=2 fail_timeout=30s;
  server
192.168.1.115:8080 weight=4 max_fails=2 fail_timeout=30s;
}

server {
listen
80; #监听端口
server_name
192.168.1.200; #对外提供服务的网址(域名或者ip)

#默认请求设置
location
/ {
index index.jsp index.html index.htm; #设定访问的默认首页
root
/usr/local/apache7/webapps; #站点根目录,此目录下存放我们的web项目
}

#charset koi8
-r;

#access_log logs
/host.access.log main;


#所有的jsp页面均由tomcat处理
location
~ \.(jsp|jspx|dp)?$
{
proxy_set_header Host $host;
proxy_set_header X
-Real-IP $remote_addr;
proxy_pass http:
//tomcat_pool; #转向tomcat处理
}

#所有的静态文件直接读取不经过tomcat,nginx自己处理
location
~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{
expires 30d;
}
location
~ .*\.(js|css)?$
{
expires 1h;
}
#log_format access
'$remote_addr - $remote_user [$time_local] "$request" '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" $http_x_forwarded_for';
#access_log /usr/local/nginx/logs/ubitechtest.log access;#设定访问日志的存放路径

# redirect server error pages to the
static page /50x.html
#

#定义错误提示页面
error_page
500 502 503 504 /50x.html;
location
= /50x.html {
root html;
}

}
}

    配置完成后,重启nginx

    cd /usr/local/nginx/sbin

    ./nginx -s reload

  6.配置192.168.1.115上的nginx

    配置过程与之前一样,只是要注意nginx.conf中的默认请求,如若web服务器上的tomcat配置都一模一样,那么nginx的配置文件也就一样了,但是我的tomcat配置有点不一样,所以nginx.conf也有些许不一样,改动如下就可以了。

  #默认请求设置
location
/ {
index index.jsp index.html index.htm; #设定访问的默认首页
root
/usr/share/tomcat7/webapps; #站点根目录,此目录下存放我们的web项目
}

  7.主从负载服务器keepalived配置

    本来是不要修改的,但是这次我用的是VIP的80端口,需要将之前的8080端口改成80端口,所有的主从负载服务器都要改正确!

LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

结果展示

  1.nginx负载均衡效果(tomcat要启动)

    LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

  2.最终效果展示 ----》 所有web服务器启动realserver服务:service realserver start;启动tomcat;启动nginx;

          ----》 主从负载服务器启动keepalived服务:service keepalived start;

LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

总结

  两篇博客主从热备是一样的,都实现了,这篇博客我也就没演示效果了;但是负载均衡效果却有不同,之前的是一段时间内的请求由同一realserver处理,而这次是每一次请求处理的realserver都不同,有些许差别,但是总体效果是一样的,都能达到最终目的!

  由于只是在之前的基础上引入了nginx,所以很多效果都没演示了,大家有时间可以自己去实践,也最好是自己去实践,每个人遇到的问题都会不同,得出的结果也会不同!

后话

  这篇博客其实早就着手准备,但是由于种种原因,一直没能实践完,也没敢写上来,一直推迟到今天才更新上来,这里对期待的小伙伴们说声抱歉了!

  另外,加入nginx后的一些测试,比如某台web服务器的宕机、某台负载服务器的宕机,我就没有测试了,希望各位小伙伴能测试完(我只是理论上的认为是和之前的一样,是能正常服务的)!