分布式项目开发完成后发布思路
- 前言
- 服务提供者的发布
- 服务消费者的发布
- 前提:
- 步骤:
- 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集群的高可用
前言
在编写好分布式项目后,我们需要对服务提供者\消费者进行打包 ,上传到服务器上进行发布 .现在对整个过程进行总结
服务提供者的发布
1. 资源打包插件坐标的添加
在父项目的pom.xml中打包插件添加坐标
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5</version>
</plugin>
需要被打包的项目的pom.xml (需要根据被打包的文件所在地方做出少量的调整)
<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 ,指定项目在哪个虚拟机运行 ,一般和发布者在一个虚拟机上面
<!-- 指定当前项目发布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步的前提 !!!
<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账户 ,详情见图
<server>
<id>tomcat7</id>
<username>admin</username>
<password>admin</password>
</server>
5. 修改相关war 项目(消费者的pom.xml 配置文件),引用这个tomcat账户 ,详情见图
<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进行测试
<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 ,测试
#先关闭,再启动
./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
A机器
yum install -y keepalived
B机器
yum install -y keepalived
3.两台机器上都安装nginx
下面是在A机器上操作的
1.更改A机器上的更改keepalived配置文件
默认的配置文件路径在
/etc/keepalived/keepalived.conf
清空文件内容
/etc/keepalived/keepalived.conf
编辑配置文件
vim /etc/keepalived/keepalived.conf
添加加以下内容:
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
编辑配置文件:
vim /usr/local/nginx/sbin/check_ng.sh
增加以下内容:
#!/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服务)
chmod 755 /usr/local/nginx/sbin/check_ng.sh
可以手动执行下脚本程序,判断是否有错。
4.启动keepalived服务,并查看是否启动成功
[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
启动不成功,有可能是防火墙未关闭或者规则限制导致的
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
启动时发现异常
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
[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里面自带的配置文件
配置文件路径:/etc/keepalived/keepalived.conf
清空:> /etc/keepalived/keepalived.conf
编辑配置文件:
[root@bbb-01 ~]# vim /etc/keepalived/keepalived.conf
增加以下内容:
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里面已定义过
[root@bbb-01 ~]# vim /usr/local/nginx/sbin/check_ng.sh
增加以下内容:
#!/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权限
[root@bbb-01 ~]# chmod 755 /usr/local/nginx/sbin/check_ng.sh
4.启动keepalived服务:
[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会访问到从机上
资源打包插件:
链接:https://pan.baidu.com/s/1wra76eKQViSyovBgtP9STw
提取码:39ri
复制这段内容后打开百度网盘手机App,操作更方便哦 ↩︎