Javeweb项目微服务集群部署

** 基于Springcloud的javaweb项目部署集群环境,采用jdk运行(jar包),consul 进行注册服务监控健康,实现并发量大的时候可以快速响应的高并发效果**
操作过程如下
1.安装nfs服务
2.安装相应中间件服务
3.安装数据库以及缓存数据库
4.配置文件
5.运行文件调试
(监控健康服务节点consul /请求反向代理nginx/)

1.安装Net file system 共享文件服务(nfs)

离线安装(内网/脱网/局域网)/外网直接yum install nfs rpcbind即可~操作如下

NFS 服务需要依赖 RPC 服务,所以这里 NFS 服务端需要安装 rpcbind 和 nfs-utils,客户端只需要安装 nfs-utils。
1.首先确认服务端系统是否已安装nfs

rpm -qa nfs-utils rpcbind

2.安装服务
如果计算机可以连接到互联网,则可以通过以下命令进行安装:

#服务端
yum install -y nfs-utils rpcbind
#客户端
yum install -y nfs-utils

但是,很多时候由于安全的原因不能联网,所以只能离线安装。
下载离线安装包,
rpcbind:

libtirpc-0.2.4-0.15.el7.x86_64.rpm
rpcbind-0.2.0-47.el7.x86_64.rpm

nfs-utils:

nfs-utils-1.3.0-0.61.el7.x86_64
tcp_wrappers-7.6-77.el7.x86_64
...
#这个依赖有点多,需要的可以联系我,就不一一列出来了
百度网盘下载地址:https://pan.baidu.com/s/1mq7ZnWyn33krFcE3AnBQPQ 
提取码:cfq2 

安装离线包:

#安装路径下的所有rpm包
rpm -Uvh *.rpm --nodeps --force
#安装特定的rpm包
rpm -hvi dejagnu-1.4.2-10.noarch.rpm

最后,检查是否安装成功。
配置:
1.在服务端创建一个共享目录 /data/share ,作为客户端挂载的远端入口,然后设置权限。

mkdir -p /data/share
chmod 755 /data/share

2.修改 NFS 配置文件 /etc/exports

vim /etc/exports
#配置单个ip
/data/share 192.168.0.130(rw,sync,insecure,no_subtree_check,no_root_squash)
/data/share 192.168.0.131(rw,sync,insecure,no_subtree_check,no_root_squash)
#配置ip段
/data/share 192.168.0.130/139(rw,sync,insecure,no_subtree_check,no_root_squash)
#配置所有ip可以挂载
/data/share *(rw,sync,insecure,no_subtree_check,no_root_squash)

说明:
/data/share-共享目录
192.168.0.130-IP地址,可以是特定的ip地址、ip地址段或所有可以访问的ip
rw,sync,insecure,no_subtree_check,no_root_squash-访问控制参数,具体参考下面列表。

参数说明
ro只读
rw读写
sync同步共享-所有数据在请求时写入共享
async异步共享-nfs 在写入数据前可以响应请求
securenfs 通过 1024 以下的安全 TCP/IP 端口发送
insecurenfs 通过 1024 以上的端口发送
wdelay如果多个用户要写入 nfs 目录,则归组写入(默认)
no_wdelay如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置
hide在 nfs 共享目录中不共享其子目录
no_hide共享 nfs 目录的子目录
subtree_check如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)
no_subtree_check不检查父目录权限
all_squash共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录
no_all_squash保留共享文件的 UID 和 GID(默认)
root_squashroot 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
no_root_squashroot 用户具有根目录的完全管理访问权限
anonuid=xxx指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID
anongid=xxx指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID
启动服务并测试

1.启动rpc服务

service rpcbind start
#或者使用如下命令
/bin/systemctl start rpcbind.service

# 查看 NFS 服务项 rpc 服务器注册的端口列表
rpcinfo -p localhost 

2.启动nfs服务

service nfs start
#或者使用如下命令亦可
/bin/systemctl start nfs.service
# 启动 NFS 服务后 rpc 服务已经启用了对 NFS 的端口映射列表
# rpcinfo -p localhost

3.在另一台 Linux 上挂载目录

#查看配置
showmoun -e 192.168.xxx.xxx
#新建目录
mkdir -p /share
#挂载共享目录(挂载远端目录到本地 /share 目录)
mount 192.168.0.130:/data/share  /share
#查看挂载目录状况
 df -h | grep 10.222.77.86
#如果要卸载目录
umount  /share

2.安装注册服务consul

简介:Consul是一个分布式高可用的系统,一个发现和配置服务的工具。客户端可以利用它提供的API注册和发现服务,及监控检测功能实现服务的高可用。
下载

wget https://releases.hashicorp.com/consul/1.5.2/consul_1.5.2_linux_amd64.zip

离线环境下则直接拉包进来即可~

解压


 -方法1
unzip consul_1.5.2_linux_amd64.zip  -d /usr/bin   ##解压到usr/bin目录下
unzip consul_1.5.2_linux_amd64.zip                      ##解压到当前目录下
 -方法2
 unzip consul_1.5.2_linux_amd64.zip   ##解压

cp consul /usr/local/bin/                       ##移动

验证
consul

启动开发模式(快速启动一个单节点Consul,但是不能数据持久化,不能用于生产环境)

consul agent -dev

consul server端的启动命令:

consul agent -server -bootstrap-expect 1  -client 0.0.0.0 -config-dir /etc/consul.d
或者 这样可以输出日志
nohup consul agent -server -bootstrap-expect 1 -client 0.0.0.0 -config-dir /etc/basic.json >consul.log &

-config-dir :就是指定加载置文件的目录,我们只需要填写配置文件的目录就可以帮助我们把该目录下所有的以.json结尾配置文件加载进去,它的加载顺序是根据26个字母的顺序加进行加载配置文件的。文件内容都是json格式的数据。默认后面文件定义配置会覆盖前面文件定义的配置。

{
   "ports": {  
       "http": 8501 ,
       "dns": 8601,
       "grpc": 8401,
       "serf_lan": 8311,
       "serf_wan": 8312, 
       "server": 8310
     }

启动consul server端后,会发现我们的端口全部变成上面描述的端口,consul web UI的端口不在是默认的8500 而变成了 8501 ,另外当我们启动其他consul时,通过-retry-join 加入server端时会报错,拒绝连接,原因就是因为server端的端口发生了改动,它默认去连接8301端口,此时-retry-join不能直接写ip地址,需要写对应的修改后的serf_lan端口 例如:

consul agent   -data-dir /consul/data2  -advertise 127.0.0.1 -client 0.0.0.0 -join 127.0.0.1:8311

consul描述
查看集群成员

consul members

consul集群
ps:

查看最近历史日志
consul monitor
停止
gracefully或者forcefully

插入节点注册服务写一个json数据:

{
    "service":{
        "name":"test01",
        "tags":[
            "",
            ""
        ],
        "address":"127.0.0.1",
        "port":3010,
        "enable_tag_override": false,
        "check":{
            "deregisterCriticalServiceAfter":"90m",
            "http":"http://127.0.0.1:3010/health",
            "interval":"10s"
        }
    }
}
名词解释:
tags:服务的tag,自定义,可以根据这个tag来区分同一个服务名的服务
address:服务注册到consul的IP,服务发现,发现的就是这个IP
port:服务注册consul的PORT,发现的就是这个PORT
enable_tag_override:标签是否允许覆盖
http:指定健康检查的URL,调用后只要返回20X,consul都认为是健康的
interval:健康检查间隔时间,每隔10s,调用一次健康检查的URL

重启Agent

consul agent -dev -config-dir /etc/consul.d/

3.安装Nginx

1.首先下载Nginx前需要一些插件~
可以查看gcc版本,若无,则就基本无了

gcc -v

安装gcc,pcre、pcre-devel,zlib,zlib-devel,openssl,openssl-devel操作可以直接百度~

  • gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言.
  • pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
  • zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,
  • openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔

正式安装nginx
1、下载nginx安装包

wget http://nginx.org/download/nginx-1.9.9.tar.gz  

2、把压缩包解压 usr/local/java

tar -zxvf  nginx-1.9.9.tar.gz

3、切换到cd /usr/local/java/nginx-1.9.9/下面
执行三个命令:

初始化默认配置
./configure
 编译
make
安装
make install

4、切换到/usr/local/nginx安装目录,nginx的配置文件nginx.conf文件,主要也就是端口
5、启动nginx服务 切换目录到/usr/local/nginx/sbin下面

./nginx

查看nginx服务是否启动成功

ps -ef | grep nginx

4.安装MySQL数据库下载工具

下载工具wget:网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。

yum -y install wget

下载mysql源安装包

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装mysql源

yum localinstall mysql57-community-release-el7-8.noarch.rpm

以上两步都是必须的,以下就是检测源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

安装mysql服务,此处看网速有快有慢(可以用阿里源,百度下)

yum install mysql-community-server

安装后,启动mysql服务

systemctl start mysqld

查看mysqld服务,此处要是查看到activity状态是running那就表明已经

systemctl status mysqld

安装成功了,设置开机启动

systemctl enable mysqld

重载服务

systemctl daemon-reload

mysql5.7安装时会产生一个默认的密码,查看此密码的文件一般存在于/var/log/mysqld.log上 查看初始密码

grep 'temporary password' /var/log/mysqld.log

设置参数

修改/etc/my.cnf,[mysqld]下面加入
取消密码复杂度

plugin-load=validate_password.so 
validate-password=OFF

设置表大小写不敏感

设置默认端口为3307

port=3307

保存退出后,重启服务, 修改密码。

systemctl restart mysqld

设置密码和远程连接
修改密码

grep "password" /var/log/mysqld.log  ## 查看自动生成的密码
mysql -uroot -p 

输入root初始密码登录-- 密码设为123456

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
设置密码为"123456"(为初始化方便,生产环境可以设置密码)
mysql> use mysql; 
mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql> GRANT ALL ON *.* TO root@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
mysql>quit;

5.安装Redis Nosql类型数据库(缓存数据库)

安装工具以及redis

yum install epel-release
yum install redis
systemctl start redis && systemctl enable redis

配置外网可访问

vi /etc/redis.conf

找到

bind 127.0.0.1
protected-mode yes

改为

bind 0.0.0.0
protected-mode no

重启服务生效

systemctl restart redis

############# ** 以下操作为部署Myapps平台系统的操作 ,微服务框架部署完毕 ** #############

6.部署Myapps

6.1导入相应JAR包(runtime,signon,designer主要jar包)
6.2编写启动文件,启动后查看jar包是否启动并且注册到consul节点
cat > /data/myapps/run-gateway-service.sh <<EOF
nohup java -server -jar -Xms256M -Xmx512M obpm-gateway-consul-5.x.nightbuild.jar  --spring.cloud.consul.host=192.168.0.26 >/data/myapps/logs/gateway.log 2>&1 &
EOF
chmod +x /data/myapps/run-gateway-service.sh
cat > /data/myapps/run-runtime-service.sh <<EOF
nohup java -server -jar  -Xms512M -Xmx2048M obpm-runtime-consul-5.x.nightbuild.jar --myapps.storage.root=/data/myapps/storage --spring.cloud.consul.host=192.168.0.26 --spring.datasource.url="jdbc:mysql://192.168.0.27:3306/obpm2?characterEncoding=UTF-8&serverTimezone=GMT" --spring.datasource.username=root --spring.datasource.password=123456 --spring.redis.host=192.168.0.27 >/data/myapps/logs/runtime.log  2>&1 &
EOF
chmod +x /data/myapps/run-runtime-service.sh
cat > /myapps/run-signon-service.sh <<EOF
nohup java -server -jar -Xms256M -Xmx512M obpm-signon-consul-5.x.nightbuild.jar --myapps.storage.root=/myapps/storage --spring.cloud.consul.host=192.168.89.10:10500 --spring.datasource.url="jdbc:mysql://192.168.88.141:3307/obpm5?characterEncoding=UTF-8&serverTimezone=GMT" --spring.datasource.username=root --spring.datasource.password=123456 --spring.redis.host=192.168.89.10 >/myapps/logs/signon.log  2>&1 &
EOF
chmod +x /myapps/run-signon-service.sh
cat > /myapps/run-message-service.sh <<EOF
nohup java -server -jar -Xms256M -Xmx512M obpm-message-consul-5.x.nightbuild.jar --myapps.storage.root=/myapps/storage --spring.cloud.consul.host=192.168.89.10:10500 --spring.datasource.url="jdbc:mysql://192.168.89.141:3307/message5?characterEncoding=UTF-8&serverTimezone=GMT" --spring.datasource.username=root --spring.datasource.password=123456 --spring.redis.host=192.168.89.10 >/myapps/logs/message.log  2>&1 &
EOF
chmod +x /myapps/run-message-service.sh
cat > /myapps/run-designer-service.sh <<EOF
nohup java -server -jar -Xms512M -Xmx2048M obpm-designer-consul-5.x.nightbuild.jar --myapps.storage.root=/myapps/storage --spring.cloud.consul.host=192.168.89.10:10500 >/myapps/logs/designer.log 2>&1 &
EOF
cmod +x /myapps/run-designer-service.sh
6.3查看jar包是否启动并且注册到consul节点

去到consul ui里面就行查看即可~若有出现节点 则证明服务启动成功
若无则需要检查consul地址是否配置错误

6.4导入静态资源文件以及nfs服务共享文件进行存放软件

ps!!!:微服务采用前后端分离 静态资源文件存放于nginx进行http代理即可
共享文件则需要存放到开启NFS共享服务的相应文件夹目录下(obpm-demo)

6.5配置NGINX静态资源地址以及服务器地址进行负载均衡
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

   upstream runtime {
server 192.168.89.12:8083;
server 192.168.89.11:8083;
}

upstream signon {
server 192.168.89.12:8010;
server 192.168.89.11:8010;
}
upstream designer {
server 192.168.89.12:8082;
server 192.168.89.11:8082;
}


upstream message {
server 192.168.89.12:8084;
server 192.168.89.11:8084;
}

 server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
         ### 静态资源
        location /static {
               alias /myapps/static;
               index index.html;
               }
location /designer {
                        proxy_pass http://designer/designer;
                        add_header 'Access-Control-Allow-Origin' '*';
                        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,PUT';
                        add_header 'Access-Control-Allow-Header' 'Content-Type,*';
                }
location /signon {
                        proxy_pass http://signon/signon;
                        add_header 'Access-Control-Allow-Origin' '*';
                        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,PUT';
                        add_header 'Access-Control-Allow-Header' 'Content-Type,*';
                }
location /obpm {
						proxy_pass http://runtime/obpm;
                        add_header 'Access-Control-Allow-Origin' '*';
                        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,PUT';
                        add_header 'Access-Control-Allow-Header' 'Content-Type,*';
                
}
location /message {
                        proxy_pass http://message/message;
                        add_header 'Access-Control-Allow-Origin' '*';
                        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,PUT';
                        add_header 'Access-Control-Allow-Header' 'Content-Type,*';
                } 

	
	
	
	
	
}


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值