前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Dubbo的服务提供者与消费者的发布(在虚拟机中)以及使用nginx对项目进行负载均衡优化

基于Dubbo的服务提供者与消费者的发布(在虚拟机中)以及使用nginx对项目进行负载均衡优化

作者头像
时间静止不是简史
发布2020-07-27 10:39:22
5490
发布2020-07-27 10:39:22
举报
文章被收录于专栏:Java探索之路Java探索之路

前言

在编写好分布式项目后,我们需要对服务提供者\消费者进行打包 ,上传到服务器上进行发布 .现在对整个过程进行总结

服务提供者的发布

1. 资源打包插件坐标的添加

在父项目的pom.xml中打包插件添加坐标

代码语言:javascript
复制
 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5</version>
    </plugin>

需要被打包的项目的pom.xml (需要根据被打包的文件所在地方做出少量的调整)

代码语言:javascript
复制
<build>
        <plugins>
            <!-- 指定项目的打包插件信息 -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <!-- 指定打包描述文件的位置:相对项目根目录的路径 -->
                    <!-- assembly打包的描述文件 -->
                    <descriptor>assembly/assembly.xml</descriptor>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

        <resources>
            <!--用于资源拷贝-->
            <resource>
                <directory>src/main/resources/spring</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <targetPath>META-INF/spring/</targetPath>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <!--<targetPath></targetPath>-->
            </resource>
        </resources>
    </build>

注: 主要注意的是spring配置文件的位置

在这里插入图片描述
在这里插入图片描述

2. 复制资源打包assembly插件 ,修改dubbo.properties

assembly打包插件分享至百度云1

在这里插入图片描述
在这里插入图片描述

修改打包插件的dubbo.properties文件

在这里插入图片描述
在这里插入图片描述

3. 在dubbo.xml中指定服务发布的地址

host ,指定项目在哪个虚拟机运行 ,一般和发布者在一个虚拟机上面

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 <!-- 指定当前项目发布dubbo服务的方式 -->
	<!-- 指定服务发布的协议:dubbo协议 -->
	<!-- 指定服务发布的端口:10000 -->
	<!-- 指定项目发布的地方. 可以与注册中心不再同一个虚拟机: host -->
   <dubbo:protocol name="dubbo" port="20000" host="192.168.179.129"/>

4. 对项目进行打包 , 查看结果

刷新该项目, 在target目录下, 有个.gz的压缩包 .

在这里插入图片描述
在这里插入图片描述

5. 上传到虚拟机 ,解压,在bin目录下打开 ,打开后查看日志

出现以后然后打开web ,然后访问

在这里插入图片描述
在这里插入图片描述

服务消费者的发布

前提:

  • 安装了 nginx 服务器
  • 三个tomcat服务器

步骤:

1. 配置三个tomcat账户, 在 tomcat_users.xml

这一步是第4步的前提 !!!

代码语言:javascript
复制
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,admin-script,admin-gui"/>

2. 删除三个tomcat服务器的webapps下的ROOT目录

3. 启动三个tomcat

删除后ROOT文件后 ,将无法访问tomcat 主页, 启动时只能通过日志文件判断是否启动成功 !!!

4. 修改setting.xml( Maven的配置文件), 在Maven中关联tomcat账户 ,详情见图

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 <server>
      <id>tomcat7</id>
      <username>admin</username>
      <password>admin</password>
    </server>

5. 修改相关war 项目(消费者的pom.xml 配置文件),引用这个tomcat账户 ,详情见图

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<build>
      <plugins>
         <!-- 配置Tomcat插件 -->
         <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <configuration>
               <!-- <path>/</path>
               <port>8080</port> -->
               
               <!-- Maven中关联的tomcat账户的id -->
               <server>tomcat7</server>
               <path>/ROOT</path>
               <url>http://192.168.179.129:8080/manager/text</url>
            </configuration>
         </plugin>
      </plugins>
   </build>

注意: url所指定的ip是被发布的消费者所在的虚拟机 ,也就是安装了这三台tomcat的虚拟机

6. 重新打包项目 ,并部署 .部署命令详情见截图

在这里插入图片描述
在这里插入图片描述

上传有点慢, 出现下图说明部署成功!!!

在这里插入图片描述
在这里插入图片描述

7. 重复第5第6步 ,直到该项目被三台tomcat服务器所部署

主要是修改访问的url ,配置完成过后,可以通过ip+port进行测试

代码语言:javascript
复制
<url>http://192.168.179.129:6060/manager/text</url>
<url>http://192.168.179.129:7070/manager/text</url>
<url>http://192.168.179.129:8080/manager/text</url>

8 .修改ngin的配置文件 , 配置负载均衡 ,配置静态资源的放行,详情见图

负载均衡配置

在这里插入图片描述
在这里插入图片描述

静态资源配置 ,以及访问原理的图解

在这里插入图片描述
在这里插入图片描述

9 .修改本地主机的host文件, 详情见图

在这里插入图片描述
在这里插入图片描述

10. 重启nginx ,测试

代码语言:javascript
复制
#先关闭,再启动
./nginx -s quit
./nginx
在这里插入图片描述
在这里插入图片描述

拓展:nginx keepalive实现nginx集群的高可用

背景

通过nginx的负载均衡配置 , 已经实现了访问消费者项目时 ,被随机的分担到了多个tomcat服务器 . 减轻了服务其的压力 ,而且,当一台tomcat 宕机掉时, 服务仍能够运行 . 但是随之而来的问题是 :万一 nginx服务器挂掉还怎么玩? 这里就引出了nginx keepalive ,作用是实现nginx集群的高可用

参考连接 :

https://blog.51cto.com/12922638/2155817

keepalive介绍(朋友/大佬进行的整理)

keepalive是在TCP中一个可以检测死连接的机制。

keepalive原理很简单,TCP会在空闲了一定时间后发送数据给对方:

1.如果主机可达,对方就会响应ACK应答,就认为是存活的。

2.如果可达,但应用程序退出,对方就发FIN应答,发送TCP撤消连接。

3.如果可达,但应用程序崩溃,对方就发RST消息。

4.如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。这个时间就是默认的二个小时。

集群安装

1.准备两台机器

A机器:192.168.40.128

B机器:192.168.40.130

A级器作为master,B机器作为backup

2.两台机器都安装:keepalived

代码语言:javascript
复制
A机器
 yum install -y keepalived
B机器
 yum install -y keepalived

3.两台机器上都安装nginx

下面是在A机器上操作的

1.更改A机器上的更改keepalived配置文件

代码语言:javascript
复制
默认的配置文件路径在
/etc/keepalived/keepalived.conf

清空文件内容

代码语言:javascript
复制
 /etc/keepalived/keepalived.conf

编辑配置文件

代码语言:javascript
复制
vim /etc/keepalived/keepalived.conf

添加加以下内容:

代码语言:javascript
复制
bal_defs {
   notification_email {
     1098087897@qq.com
   }
   notification_email_from root@aminglinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/nginx/sbin/check_ng.sh"//脚本的地址
    interval 3
}
vrrp_instance VI_1 {
    state MASTER			//大写
    interface eth0			//网卡和当前机器一致,否则无法启动keepalived服务  可以使用ip add查看
    virtual_router_id 51			//主从保持一致
    priority 100			//权重  主比从大
    advert_int 1
    authentication {   //验证信息   主从保持一致
        auth_type PASS
        auth_pass 123
    }
    virtual_ipaddress {//vip  虚拟ip
        192.168.40.200/24 dev eth0//随意设置
    }
    track_script {
        chk_nginx
    }
}

2.定义监控脚本

脚本路径在keepalived配置文件中有定义,路径为/usr/local/sbin/check_ng.sh

编辑配置文件:

代码语言:javascript
复制
vim /usr/local/nginx/sbin/check_ng.sh

增加以下内容:

代码语言:javascript
复制
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
			#启动nginx的命令
        /usr/local/nginx/sbin/nginx 
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                service keepalived stop
        fi
fi

3.脚本创建完之后,还需要改变脚本的权限(不更改权限,就无法自动加载脚本,那就无法启动keepalived服务)

代码语言:javascript
复制
chmod 755 /usr/local/nginx/sbin/check_ng.sh

可以手动执行下脚本程序,判断是否有错。

4.启动keepalived服务,并查看是否启动成功

代码语言:javascript
复制
[root@aaa-01 ~]# service keepalived start
[root@aaa-01 ~]# ps aux |grep keepalived
root     34653  0.0  0.1 118652  1400 ?        Ss   12:16   0:00 /usr/sbin/keepalived -D
root     34654  0.0  0.2 122852  2392 ?        S    12:16   0:00 /usr/sbin/keepalived -D
root     34655  0.0  0.2 122852  2448 ?        S    12:16   0:00 /usr/sbin/keepalived -D
root     34661  0.0  0.0 112720   988 pts/1    S+   12:16   0:00 grep --color=auto keepalived

启动不成功,有可能是防火墙未关闭或者规则限制导致的

代码语言:javascript
复制
service iptables stop 关闭firewalld
iptables -nvL查看防火墙
setenforce 0 临时关闭selinux
getenforce命令查看是否为Permissive

keepalived使用224.0.0.18作为Master和Backup健康检查的通信IP

这时再来启动keepalived,就会看到keepalived进程服务了

查看keepalived的启动日志:/var/log/messages

启动时发现异常

代码语言:javascript
复制
Jul 30 22:24:14 localhost Keepalived_vrrp[2132]: VRRP_Instance(VI_1) Now in FAULT state

现在处于故障状态

检查后发现是检查nginx启动状态的脚本出错,更正脚本错误。

6.查看ip地址,使用 ip add 命令,可以查看到vip192.168.40.200

代码语言:javascript
复制
[root@localhost sbin]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:0b:1b:a6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.130/24 brd 192.168.40.255 scope global eth0
    inet 192.168.40.200/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe0b:1ba6/64 scope link 
       valid_lft forever preferred_lft forever

以下是B机器上的配置

1.自定义B机器keepalived配置文件,更改虚拟IP和主一样的,首先清空B机器keepalived里面自带的配置文件

代码语言:javascript
复制
配置文件路径:/etc/keepalived/keepalived.conf
清空:> /etc/keepalived/keepalived.conf

编辑配置文件:

代码语言:javascript
复制
[root@bbb-01 ~]# vim /etc/keepalived/keepalived.conf

增加以下内容:

代码语言:javascript
复制
bal_defs {
   notification_email {
     1098087897@qq.com
   }
   notification_email_from root@aminglinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/nginx/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP        //这里 和master不一样的名字
    interface eth0        //网卡和当前机器一致,否则无法启动keepalived服务
    virtual_router_id 51        //和主机器 保持一致
    priority 90            //权重,要比主机器小的数值
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.40.200/24 dev eth0  //和主机保持一致
    }
    track_script {
        chk_nginx
    }
}

2.定义监控脚本,路径再keepalived里面已定义过

代码语言:javascript
复制
[root@bbb-01 ~]# vim /usr/local/nginx/sbin/check_ng.sh

增加以下内容:

代码语言:javascript
复制
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /usr/local/nginx/sbin/nginx 
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                service keepalived stop
        fi
fi

3.改动脚本的权限,设置为755权限

代码语言:javascript
复制
[root@bbb-01 ~]# chmod 755 /usr/local/nginx/sbin/check_ng.sh

4.启动keepalived服务:

代码语言:javascript
复制
[root@bbb-01 ~]# service keepalived start
[root@bbb-01 ~]# ps aux |grep keep
root     19134  0.0  0.1 118608  1384 ?        Ss   12:33   0:00 /usr/sbin/keepalived -D
root     19135  0.0  0.2 122804  2384 ?        S    12:33   0:00 /usr/sbin/keepalived -D
root     19136  0.0  0.2 122804  2424 ?        S    12:33   0:00 /usr/sbin/keepalived -D
root     19143  0.0  0.0 112676   984 pts/0    R+   12:33   0:00 grep --color=auto keep

测试

浏览器访问vip(虚拟地址),即192.168.40.200,主机正常,访问的是master, 将主机上的keepalived关闭,从即上的vip会开启,使用ip add查看主机上的ip,可以发现在监听192.168.40.200,这是访问nginx会访问到从机上

  1. 资源打包插件: 链接:https://pan.baidu.com/s/1wra76eKQViSyovBgtP9STw 提取码:39ri
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 服务提供者的发布
    • 1. 资源打包插件坐标的添加
      • 2. 复制资源打包assembly插件 ,修改dubbo.properties
        • 3. 在dubbo.xml中指定服务发布的地址
          • 4. 对项目进行打包 , 查看结果
            • 5. 上传到虚拟机 ,解压,在bin目录下打开 ,打开后查看日志
            • 服务消费者的发布
              • 前提:
                • 步骤:
                  • 1. 配置三个tomcat账户, 在 tomcat_users.xml
                  • 2. 删除三个tomcat服务器的webapps下的ROOT目录
                  • 3. 启动三个tomcat
                  • 4. 修改setting.xml( Maven的配置文件), 在Maven中关联tomcat账户 ,详情见图
                  • 5. 修改相关war 项目(消费者的pom.xml 配置文件),引用这个tomcat账户 ,详情见图
                  • 6. 重新打包项目 ,并部署 .部署命令详情见截图
                  • 7. 重复第5第6步 ,直到该项目被三台tomcat服务器所部署
                  • 8 .修改ngin的配置文件 , 配置负载均衡 ,配置静态资源的放行,详情见图
                  • 9 .修改本地主机的host文件, 详情见图
                  • 10. 重启nginx ,测试
              • 拓展:nginx keepalive实现nginx集群的高可用
                • 背景
                  • 参考连接 :
                    • keepalive介绍(朋友/大佬进行的整理)
                      • 集群安装
                        • 下面是在A机器上操作的
                        • 以下是B机器上的配置
                        • 测试
                    相关产品与服务
                    负载均衡
                    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档