博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次微服务部署手册
阅读量:5170 次
发布时间:2019-06-13

本文共 10720 字,大约阅读时间需要 35 分钟。

新一代数据订阅系统部署手册

1.系统介绍

关区新一代数据订阅系统采用SpringBoot技术开发,基本的架构如下:


2.部署准备工作

首先将程序打包为一个单体JAR包,名为:event-process-0.0.1-SNAPSHOT.jar,将程序和全局配置文件application.yml放到当前目录下,在当前目录下编写Dockerfile,如下:

FROM cantara/alpine-openjdk-jdk8WORKDIR /usr/myappCOPY event-process-0.0.1-SNAPSHOT.jar /usr/myapp/COPY ./application.yml /usr/myapp/config/CMD  java -jar /usr/myapp/event-process-0.0.1-SNAPSHOT.jar

将上述代码保存至Dockerfile中,然后在当前目录下执行如下指令:

docker build . -t myevent

执行无误后程序将打包为docker镜像,然后用如下命令启动docker镜像:

docker run -d -p 9091:8080 --name=myevent1 -v /home/conf/event:/usr/myapp/config -v /etc/localtime:/etc/localtime --hostname=myevent1 --restart=always  myevent

镜像启动后,可以使用如下命令从开发机上到导出镜像文件:

docker export 镜像ID -o myevent.tar

将myevent.tar文件copy至生产环境备用。

3.部署

部署将使用两台CentOS 7.6 linux主机,IP地址分别为10.77.9.112和10.77.9.113,并使用10.77.9.114作为共享的虚拟IP对外提供服务。其中112和113主机上分别安装了docker引擎和keepalived的软件,并有nginx的docker镜像。

3.1目录规划和相关配置文件的放置

在两台主机上分别创建目录,目录创建命令如下:

mkdir /home/confmkdir /home/conf/nginxmkdir /home/conf/nginx/conf.dmkdir /home/conf/nginx/check_shmkdir /home/conf/event

3.2放置配置文件

在两台主机想分别放置如下目录:

将application.yml放置到目录/home/conf/event;在目录/home/conf/nginx中创建文件nginx.conf;在目录/home/conf/nginx/conf.d中创建文件default.conf;在目录/home/conf/nginx/创建文件nginx_check.sh。

3.3启动docker镜像

3.3.1导入myevent.tar镜像

分别在两台主机上导入myevent镜像文件,命令如下:

docker import myevent.tar myevent

3.3.2 修改配置文件

按照部署要求修改两台主机上的application.yml,将数据库链接和RabbitMQ的配置更新至生产环境。

3.3.2.1修改112的nginx相关配置

修改nginx.conf如下:

user  nginx;worker_processes  1;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;events {    worker_connections  1024;}http {    upstream tomcat_server {        server 10.77.9.112:9090;        server 10.77.9.112:9091;        server 10.77.9.113:9090;        server 10.77.9.113:9091;    }    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;    include /etc/nginx/conf.d/*.conf;}

修改default.conf如下:

server {    listen       80;    server_name  10.77.9.112;    #charset koi8-r;    #access_log  /var/log/nginx/host.access.log  main;    location / {        #root   /usr/share/nginx/html;        #index  index.html index.htm;        proxy_pass http://tomcat_server;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }    #error_page  404              /404.html;    # redirect server error pages to the static page /50x.html    #    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /usr/share/nginx/html;    }    # proxy the PHP scripts to Apache listening on 127.0.0.1:80    #    #location ~ \.php$ {
# proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ {
# root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht {
# deny all; #}}

编写nginx_check.sh,保存后给予可执行权限chmod +x nginx_check.sh如下:

#!/bin/bashA=$(ps -C nginx --no-header|wc -l)if [ $A -eq 0 ]then   docker start nginx1   sleep 8   B=$(ps -C nginx --no-header | wc -l)   if [ $B -eq 0 ]   then        systemctl stop keepalived.service   fifi
3.3.2.2修改113的nginx相关配置

修改nginx.conf如下:

user  nginx;worker_processes  1;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;events {    worker_connections  1024;}http {    upstream tomcat_server {        server 10.77.9.112:9090;        server 10.77.9.112:9091;        server 10.77.9.113:9090;        server 10.77.9.113:9091;    }    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;    include /etc/nginx/conf.d/*.conf;}

修改default.conf如下:

server {    listen       80;    server_name  10.77.9.113;    #charset koi8-r;    #access_log  /var/log/nginx/host.access.log  main;    location / {        #root   /usr/share/nginx/html;        #index  index.html index.htm;        proxy_pass http://tomcat_server;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }    #error_page  404              /404.html;    # redirect server error pages to the static page /50x.html    #    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /usr/share/nginx/html;    }    # proxy the PHP scripts to Apache listening on 127.0.0.1:80    #    #location ~ \.php$ {
# proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ {
# root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht {
# deny all; #}}

编写nginx_check.sh,保存后给予可执行权限chmod +x nginx_check.sh如下:

#!/bin/bashA=$(ps -C nginx --no-header|wc -l)if [ $A -eq 0 ]then   docker start nginx2   sleep 8   B=$(ps -C nginx --no-header | wc -l)   if [ $B -eq 0 ]   then        systemctl stop keepalived.service   fifi
3.3.2.3修改keepalived配置

分别修改112和113主机路径/etc/keepalived/keepalived.conf文件。

112修改如下:

! Configuration File for keepalivedglobal_defs {   router_id LVS_52   vrrp_skip_check_adv_addr   #vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}vrrp_script chk_nginx {   script "/home/conf/nginx/check_sh/nginx_check.sh"   interval 2   weight -5   fall 3   rise 2}vrrp_instance VI_1 {    state MASTER    interface ens32 #主机上的网卡编号    virtual_router_id 151 #主备必须相同    mcast_src_ip 10.77.9.112    priority 100 #主机的必须大于备机    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    track_script {        chk_nginx    }    virtual_ipaddress {        10.77.9.114 #虚拟ip,主备相同    }}virtual_server 10.77.9.114 80 {    delay_loop 6    lb_algo rr    lb_kind NAT    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    real_server 10.77.9.112 8000 {        weight 1         TCP_CHECK{                connect_timeout 5                ng_get_retry 3                delay_before_retry 3                connect_port 8000        }    }    real_server 10.77.9.113 8000 {        weight 1        TCP_CHECK{                connect_timeout 5                ng_get_retry 3                delay_before_retry 3                connect_port 8000        }    }}

113修改如下:

! Configuration File for keepalivedglobal_defs {   router_id LVS_53   vrrp_skip_check_adv_addr   #vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}vrrp_script chk_nginx {   script "/home/conf/nginx/check_sh/nginx_check.sh"   interval 2   weight -5   fall 3   rise 2}vrrp_instance VI_1 {    state MASTER    interface ens32    virtual_router_id 151    mcast_src_ip 10.77.9.113    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    track_script {        chk_nginx    }    virtual_ipaddress {        10.77.9.114    }}virtual_server 10.77.9.114 80 {    delay_loop 6    lb_algo rr    lb_kind NAT    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    real_server 10.77.9.112 8000 {        weight 1         TCP_CHECK{                connect_timeout 5                ng_get_retry 3                delay_before_retry 3                connect_port 8000        }    }    real_server 10.77.9.113 8000 {        weight 1        TCP_CHECK{                connect_timeout 5                ng_get_retry 3                delay_before_retry 3                connect_port 8000        }    }}
3.3.2.4修改hosts文件

分别在112,113主机的/etc/hosts文件中加入如下域名解析:

10.266.33.242 frame.h2018.hg.cn10.99.27.223 app-api-test.h2018.com
3.3.2.5修改docker配置文件daemon.json

分别在112,113两台主机的/etc/docker/daemon.json文件中加入域名解析:

{"dns":["10.77.9.112","10.77.9.113"]}

重启docker引擎:systemctl restart docker

3.3.3创建容器并运行

3.3.3.1创建myevent容器并运行

在112主机上分别执行如下命令:

docker run -d -p 9091:8080 --name=myevent1 -v /home/conf/event:/usr/myapp/config -v /etc/localtime:/etc/localtime --hostname=myevent1 --restart=always  myevent /bin/sh -c 'java -jar -Duser.timezone=GMT+8 /usr/myapp/event-process-0.0.1-SNAPSHOT.jar'docker run -d -p 9090:8080 --name=myevent2 -v /home/conf/event:/usr/myapp/config -v /etc/localtime:/etc/localtime --hostname=myevent2 --restart=always  myevent /bin/sh -c 'java -jar -Duser.timezone=GMT+8 /usr/myapp/event-process-0.0.1-SNAPSHOT.jar'

在113主机上分别执行如下命令:

docker run -d -p 9091:8080 --name=myevent3 -v /home/conf/event:/usr/myapp/config -v /etc/localtime:/etc/localtime --hostname=myevent3 --restart=always  myevent /bin/sh -c 'java -jar -Duser.timezone=GMT+8 /usr/myapp/event-process-0.0.1-SNAPSHOT.jar'docker run -d -p 9090:8080 --name=myevent4 -v /home/conf/event:/usr/myapp/config -v /etc/localtime:/etc/localtime --hostname=myevent4 --restart=always  myevent /bin/sh -c 'java -jar -Duser.timezone=GMT+8 /usr/myapp/event-process-0.0.1-SNAPSHOT.jar'
3.3.3.2创建nginx容器并运行

在112主机上执行如下命令:

docker run -d -p 8000:80  --restart=always --hostname=nginx1 --name=nginx1 --link=myevent1:myevent_1 --link=myevent2:myevent_2 -v /etc/localtime:/etc/localtime -v /home/conf/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/conf/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf  nginx

在113主机上执行如下命令:

docker run -d -p 8000:80  --restart=always --hostname=nginx2 --name=nginx2  -v /etc/localtime:/etc/localtime -v /home/conf/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/conf/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf  nginx

3.4关闭linux系统防火墙

分别在两台linux主机上执行如下命令:

systemctl stop firewalld.service systemctl disable firewalld.service

3.5安装域名解析服务

分别在两台linux主机上执行如下命令:

yum install dnsmasqsystemctl enable dnsmasq.servicesystemctl restart dnsmasq.service

转载于:https://www.cnblogs.com/tom-lau/p/10142959.html

你可能感兴趣的文章
隐私政策
查看>>
raspberrypi 与 arduino 使用 nRF24L01+ 通信 -- arduino为接收端
查看>>
asp.net 利用jquery.form插件上传图片
查看>>
GitHub更新已经fork的项目
查看>>
CNBlog客户端--第一阶段记录
查看>>
man时括号里的数字是啥意思
查看>>
Selenium RC for Java 环境配置
查看>>
看清贬值的真实情况再惊恐
查看>>
jdk_1_8_1
查看>>
Eclipes中AndbaseDemo 手动导入 Android studio
查看>>
Maven聚合与继承
查看>>
【转】VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
查看>>
Android 蹲坑的疑难杂症集锦一
查看>>
c#Winform程序CPU占用高的原因和解决方法(转载)
查看>>
ElasticSearch集群迁移和升级总结
查看>>
lintcode-medium-Number of Airplanes in the Sky
查看>>
PID算法(C语言)
查看>>
正则表达式(以后认真研究下)
查看>>
python 【递归 及 二分法】
查看>>
AGC016E Poor Turkeys
查看>>