负载均衡实践手册nginx+tomcat8+nfs+mysql

2 篇文章 0 订阅
2 篇文章 0 订阅

以下都是在centos7的环境下进行

1、相关知识点:nginx,tomcat,会话同步,nfs,nfs指定端口,redis

2、准备一台Nginx服务器,作为负载均衡的前置机,  3台应用服务器安装tomcat服务, 一台nfs文件存储服务器,用于存放用户数据,3台tomcat共享这个存储服务器, 一台mysql服务器;  

3、安装部署nginx

yum install nginx

     可能你会遇到域名无法解析的情况,有两种方式处理

      第一种:修改   /etc/resolv.conf    增加三行脚本:

nameserver 8.8.8.8
nameserver 114.114.114.114
nameserver 223.6.6.6

       第二种:修改网卡的配置 /etc/sysconfig/network-scripts/ifcfg-eth0 :  增加三行脚本:

DNS1=8.8.8.8
DNS2=114.114.114.114
DNS3=223.6.6.6

      然后重启网络:   service network restart,   此次系统同样会自动在/etc/resolv.conf增加三行nameserver的脚本

      你可能遇到的第二个问题是安装nginx,提示没有可以的软件包, 那是因为yum还没有nginx的源

             下载对应当前系统版本的nginx包(package)

wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

             建立nginx的yum仓库

rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

             下载并安装nginx

yum install nginx

            启动nginx服务           

systemctl start nginx

            默认端口80,所以还需要添加防火墙开放端口

firewall-cmd --zone=public(作用域) --add-port=80/tcp(端口和访问类型) --permanent(永久生效)

firewall-cmd --reload (重启防火墙)

           访问 http://ip    出现 "Welcome to nginx!"  的页面,说明nginx安装成功了,  下面还要配置负载均衡,这里涉及到会话保持,session同步的问题,  通常采用ip_hash方式, 我这里用采用redis保存回话的方式; 下面修改nginx配置 /etc/nginx/nginx.cnf, 这个配置文件最后一段是include了另一个配置文件(include /etc/nginx/conf.d/*.conf;),我们把这行删掉,同时把include的配置文件内容copy到这个位置,  修改其中的location,再增加upstream配置,注意如果nginx用其他端口,就要修改server下面的listen  8080,同时再修改location的proxy_set_header Host $host:8080; 完整配置如下:

user  nginx;
worker_processes  auto;
worker_rlimit_nofile 65536;

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


events {
    worker_connections  65536;
}


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 tomcat8{
             server 172.17.110.141:8080 weight=2;
             server 172.17.110.142:8080 weight=2;
             server 172.17.110.143:8080 weight=2;
             server 172.17.110.144:8080 weight=2;
    }

    server {
            listen       80;
            server_name  localhost;
            charset UTF-8;

            location / {
                    proxy_pass http://tomcat8;
                    proxy_redirect default;
                    proxy_set_header Host $host;
                    proxy_http_version 1.1;
                    proxy_set_header X-Forwarded-For $remote_addr;
                    proxy_set_header   X-Real-IP        $remote_addr;
                    proxy_connect_timeout       300;
                    proxy_read_timeout          300;
                    proxy_send_timeout          300;
            }
            location /front/ {
                alias /opt/front/;
            }
            
            error_page   500 502 503 504  /50x.html;

     }

}

只做这些还不够,如果此时应用服务已经配置好,访问nginx的话会出现 (13: Permission denied)错误,此时需要关闭SeLinux

永久修改:/etc/selinux/config   将SELINUX=enforcing改为SELINUX=disabled, 这个修改需要重启机器才生效, 所以可以再做一步临时修改,执行下面的命令:

setenforce 0

4、安装部署tomcat

      下载经jdk 的 rpm包,这种安装最简单,一条命令即可,也不需要配置环境变量

 rpm -ivh jdk-8u91-linux-x64.rpm

       下载tomcat.tar.gz包,解压   

tar -zxvf apache-tomcat-8.0.30.tar.gz

        重命名目录   mv apache-tomcat-8.0.30  tomcat8

        如果要调整端口, 修改 tomcat8-eip/conf/server.xml

        开放防火墙端口, 以80为例   

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

            新建服务文件,以tomcat8为例    /usr/lib/systemd/system/tomcat8.service

[Unit]
Description=Tomcat8
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/tomcat8/bin/tomcat8.pid
ExecStart=/opt/tomcat8/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

            新建tomcat环境文件  tomcat8/bin/setenv.sh

#add tomcat env
JAVA_HOME=/usr/java/jdk1.8.0_91
JAVA_JRE=/usr/java/jdk1.8.0_91/jre
#add tomcat pid
CATALINA_PID="$CATALINA_BASE/bin/tomcat8.pid"

            配置开机启动命令  systemctl enable tomcat8

            前面Nginx配置的时候说过,负载均衡需要保持session同步,下面就来配置:

           a.   copy 4个包 到 tomcat的lib目录 commons-logging-1.2.jar,commons-pool2-2.4.2.jar,jedis-2.9.0.jar,tomcat-cluster-redis-session-manager-2.0.4.jar, 这几个包在https://github.com/ran-jit/tomcat-cluster-redis-session-manager这个项目上可以下载到,找它的2.0.4版本,最新的版本没有验证过;

          b.  然后从tomcat-cluster-redis-session-manager-2.0.4.jar包内解压出配置文件redis-data-cache.properties放到tomcat的conf目录,注意修改redis服务的地址和端口,

          c. 修改tomcat/conf/context.xml在最下面增加两行配置

    <Valve className="tomcat.request.session.redis.SessionHandlerValve" />
    <Manager className="tomcat.request.session.redis.SessionManager" />

          e. 注意webapps/ROOT/WEB-INF/web.xml  内不能把session-timeout设置成-1,这个坑填了好久。。。

     其他几台tomcat同样配置

      启动tomcat   systemctl start tomcat8

5、安装配置redis      

      下载最新的redis   wget http://download.redis.io/releases/redis-5.0.5.tar.gz

       解压   tar xzf redis-4.0.10.tar.gz

       安装  

cd redis-5.0.5
make

       这个打包过程可能会出现错误,由于redis是c语言写的, 所以需要安装c语言的编译环境gcc,  先安装它,然后在make就不会有错误了。

      启动redis

       src/redis-server

     后台启动

      src/redis-server &

      也可以把redis安装成服务

      在redis-5.0.5 目录下  执行make install。会将make编译生成的可执行文件拷贝到/usr/local/bin目录下,

       执行./utils/install_server.sh配置Redis配置之后Redis能随系统启动。

      Redis服务查看、开启、关闭
      通过ps -ef|grep redis命令查看Redis进程;
      开启Redis服务操作通过/etc/init.d/redis_6379 start命令,也可通过(service redis_6379 start);
      关闭Redis服务操作通过/etc/init.d/redis_6379 stop命令,也可通过(service redis_6379 stop)

      最后注意开放6379端口

6、安装配置nfs   

      服务端安装

     1.安装

      yum -y install nfs-utils rpcbind

     2.启动服务,先启动rpcbind

     service rpcbind start

     service nfs start

    3.创建需要共享的目录

    mkdir -p /data/share

    4.对文件夹设置权限

    chown -R nfsnobody /data/share

    5.编辑共享

    vi /etc/exports

    #增加下面内容

     /data/share 192.168.0.50(ro,insecure,sync,all_squash)

    注:可以指定特定的ip,也可以直接写*开放所有ip访问权限。

    常见的选项:

         ro:默认选项,以只读的方式共享。

         rw:以读写的方式共享。

         root_squash:将客户端使用的是root用户时,则映射到NFS服务器的用户为NFS的匿名用户(nfsnobody)。

         no_root_squash:将客户端使用的是root用户时,则映射到FNS服务器的用户依然为root用户。

         all_squash:默认选项,将所有访问NFS服务器的客户端的用户都映射为匿名用户,不管客户端使用的是什么用户。

         anonuid:设置映射到本地的匿名用户的UID

         anongid:设置映射到本地的匿名用户的GID

         sync:默认选项,保持数据同步,数据同步写入到内存和硬盘。

         async:异步,先将数据写入到内存,在将数据写入到硬盘。

         secure:NFS客户端必须使用NFS保留端口(通常是1024以下的端口),默认选项。

         insecure:允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)。

  6.生效配置

      exportfs -r

 7.开启防火墙

     firewall-cmd --permanent --add-service=nfs

     firewall-cmd --permanent --add-service=mountd

     firewall-cmd --permanent --add-service=rpc-bind

     firewall-cmd --reload

       注意:对于不能开发服务只能开发端口的的服务器,那么就需要固定NFS端口了,因为nfs服务默认是端口随机的                 

                  vi /etc/sysconfig/nfs 

                  RQUOTAD_PORT=9001

                 MOUNTD_PORT=9002

                 STATD_PORT=9003

                 vi /etc/modprobe.d/lockd.conf

                options lockd nlm_tcpport=9004

                options lockd nlm_udpport=9005

               然后重启服务  restart nfs rpcbind

               开放 9001  9002 9003 9904 9005   2049,111  端口,其中2049,111 是nfs固定的不能修改的端口。

     客户端安装配置,也就是几个tomcat的服务器

            yum -y install nfs-utils          

          1.客户端创建需要挂载的目录

            mkdir /usr/share

          2.客户端查看服务器共享目录信息

            showmount -e 服务器ip

         3.进行挂载

            mount -t nfs 主机ip:/data/share /usr/share -o proto=tcp -o nolock

         4、设置开机挂载

           vi /etc/fstab

           增加一行配置

           服务器ip:/data/share /usr/share  /usr/share nfs  defaults 0 0

 

至此,完整的负载均衡安装配置完成了,省略了mysql的安装, 这里面还是有一些坑的,需要实际操作才能一一填上, 另外nginx本身也有一些配置可以调整,如proxy_connect_timeout, 这些需要在实际运行中调试配置,才能达到最佳的效果, 一般来说并发超过250个,就建议做负载均衡了,但是多少并发量需要搭建多少个tomcat,这个还需要实际调试配置,  这里经验尚浅,无法给出完美的建议。

               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值