mac上nginx+jetty负载均衡部署一览

Posted java达人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mac上nginx+jetty负载均衡部署一览相关的知识,希望对你有一定的参考价值。


曾经在windows上进行编程,因为linux系统在服务器端应用比较广泛,专门学了shell脚本,在笔记本上装过一个deepin(linux发行版)进行开发,deepin的界面还是比较精美的,进行一般的开发工作也没有什么问题,但是要安装一些常用软件,就要经历一番折腾,比如你要安装一个qq,要先安装wine,还只能安装国际版,使用过程中时常崩溃;安装无线网卡驱动,上网时非常不稳定,只能用有线的方式,目前deepin团队估计对此作了改进,有兴趣可以去了解下。想过自己装一个macos系统,但要实现完美安装还是需要一定水准的,又是一番耗费时间的工作,于是直接入手一个macbook pro,它也有类linux的命令行界面,假期配了一个nginx+jetty负载均衡玩玩。


负载均衡,就是将任务或者请求分配到多个操作方进行执行,就如同货物搬运,把东西全部压在一个人身上,显得太重了,需要根据每个人的承受能力,由一个管理者将货物分配给不同的人,如果其中有一个人累趴下了,就不要再把货物给他了。web请求非常频繁的时候,也需要类似的机制,将请求分配给多个服务器处理,防止服务器宕机或者闲置的情况发生。负载均衡可以通过多种方式实现,由nginx充当反向代理服务器便是一种常用的方式。nginx代理服务器接受外部的连接请求,将请求转发给内部网络上的服务器,并将得到的结果返回客户端:





关于jetty:


在这里我们使用jetty来充当webserver,利用maven和jetty构建一个标准的webapp,为方便应用运行,我们需要在项目demo的pom.xml文件中先配置一个maven-jetty-plugin插件:


<plugin>

                <groupId>org.mortbay.jetty</groupId>

                <artifactId>maven-jetty-plugin</artifactId>

                <version>6.2.XX</version>

                <configuration>

                    <webAppConfig>

                        <contextPath>/</contextPath>

                        <defaultsDescriptor>src/main/resources/web.xml</defaultsDescriptor>

                    </webAppConfig>

                    <systemProperties>

                        <systemProperty>

                            <name>org.mortbay.jetty.Request.maxFormContentSize</name>

                            <value>600000</value>

                        </systemProperty>

                    </systemProperties>

                    <!-- 每2秒的间隔扫描一次,实现热部署 -->

                    <scanIntervalSeconds>2</scanIntervalSeconds>

                     <!-- 端口先注释掉,在命令中指定 -->


                    <!--<connectors>-->

                        <!--<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">-->

                            <!--<port>8080</port>-->

                        <!--</connector>-->

                    <!--</connectors>-->

                </configuration>

            </plugin>



man -Djetty.port=8081 jetty:run


mvn -Djetty.port=8084 jetty:run



webserver已经启动,并且分别访问http://m.qd.com:8084/index.htmlhttp://m.qd.com:8081/index.html ,网页正常显示。





关于nginx:


为了方便安装nginx等软件,我先安装homebrew,这是mac os上类似于apt-get,yum的软件包管理工具,安装只需一个命令即可:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"



如果安装下载比较慢,可以换成国内的镜像源以提高速度:


cd /usr/local

git remote set-url origin


brew update


有了homebrew,一切就方便很多了,直接在终端执行:brew install nginx

它会自动下载安装。


nginx安装在/usr/local/Cellar/nginx目录,配置文件nginx.conf放在/usr/local/etc/nginx目录下,而日志文件在/usr/local/var/log/nginx下,具体文件可以通过find / -name ‘nginx.conf’命令获得,在终端执行

sudo vim /usr/local/etc/nginx/nginx.conf, 修改为如下内容:


upstream m.qd.com {

    #weigth参数表示权值,权值越高被分配到的几率越大


    server localhost:8084  weight=6;

    server localhost:8081  weight=6;

}



server {

        listen       80;

        server_name  m.qd.com;


        #charset koi8-r;


        #access_log  logs/host.access.log  main;


        location / {

        proxy_pass         http://m.qd.com;


        proxy_set_header   Host             $host;


        proxy_set_header   X-Real-IP        $remote_addr;


         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;



            root   html;

            index  index.html index.htm;

        }


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

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

   }


server节点下的location节点中的proxy_pass配置为:http://+upstream名称,并且localhost:8084与localhost:8081设置了相同的weight值,即nginx在转发请求时两者的访问比率相同.执行


nginx -c /usr/local/etc/nginx/nginx.conf 启动服务,


连续访问,返回正常页面,且实际请求被转发给localhost:8084和localhost:8081处理,以上用例测试通过。upstream除了weight外,还有其他分配策略:按请求ip的hash结果分配(ip_hash),按webserver响应时间分配(fair),按请求url的hash结果分配(url_hash),另外,我们还可以针对静态文件,再配置一个location。





其他:


在部署过程中一些常用的一些命令:


mysql

brew services start mysql或mysql.server start 启动

mysql -u username -P port  命令行登录


mysql>show variables like ‘port'; 查看mysql当前端口


nginx命令:


nginx -s stop 关闭

nginx -s reload 重载

nginx -c /usr/local/etc/nginx/nginx.conf 启动

lsof -i:80  80 端口占用情况排查

kill pid  杀死某个进程。

ps -ef|grep nginx 查询nginx进程



网络:

ping 111.13.100.91 检测网络是否连通


traceroute 111.13.100.91 检测到达目的地经过的路径



jetty:


unzip *.zip  解压安装包


设置JETTY_HOME系统环境变量

$ sudo vi /etc/paths

在文件的末尾添加如下一行代码:

JETTY_HOME=/usr/local/Cellar/jetty9.3

执行source  /etc/paths生效


启动Jetty

  在后台启动

$ cd $JETTY_HOME

$ bin/jetty.sh start

如果要停止jetty的运行,执行如下命令:

$ bin/jetty.sh stop

 



java达人

ID:java_daren





以上是关于mac上nginx+jetty负载均衡部署一览的主要内容,如果未能解决你的问题,请参考以下文章

Ansible 中小企业高可用负载均衡部署方案

域名到站点的负载均衡技术一览(主要是探讨一台Nginx抵御大并发的解决方案)(转)

Nginx负载均衡

centos7+nginx负载均衡Tomcat服务

Tomcat之Nginx+Tomcat实现负载均衡动静分离集群部署

Nginx + Tomcat 反向代理 负载均衡 集群 部署指南