1. 程式人生 > >docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast)搭建分散式部署(後端篇)

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast)搭建分散式部署(後端篇)

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast)搭建分散式部署(後端篇)

寫在前面:注:閱讀本文前,請先閱讀docker標籤的docker簡易系列的文章。
後端最終實現的架構圖:

第一步 簡單瞭解人人開源專案renren-fast

官網:https://www.renren.io/ ,讀者請自行下載renren-fast前後端專案。
renren-fast | Java快速開發平臺

一個輕量級的Java快速開發平臺,能快速開發專案並交付【接私活利器】
完善的XSS防範及指令碼過濾,徹底杜絕XSS攻擊
實現前後端分離,通過token進行資料互動
實現管理員列表、角色管理、選單管理、定時任務、引數管理、系統日誌、檔案上傳(雲端儲存)等功能

renren-fast是一個輕量級的,前後端分離的Java快速開發平臺,能快速開發專案並交付
具有如下特點:

友好的程式碼結構及註釋,便於閱讀及二次開發
實現前後端分離,通過token進行資料互動,前端再也不用關注後端技術
靈活的許可權控制,可控制到頁面或按鈕,滿足絕大部分的許可權需求
頁面互動使用Vue2.x,極大的提高了開發效率
完善的程式碼生成機制,可線上生成entity、xml、dao、service、vue、sql程式碼,減少70%以上的開發任務
引入quartz定時任務,可動態完成任務的新增、修改、刪除、暫停、恢復及日誌檢視等功能
引入API模板,根據token作為登入令牌,極大的方便了APP介面開發
引入Hibernate Validator校驗框架,輕鬆實現後端校驗
引入雲端儲存服務,已支援:七牛雲、阿里雲、騰訊雲等
引入swagger文件支援,方便編寫API介面文件

專案結構

renren-fast
├─db  專案SQL語句
│
├─common 公共模組
│  ├─aspect 系統日誌
│  ├─exception 異常處理
│  ├─validator 後臺校驗
│  └─xss XSS過濾
│ 
├─config 配置資訊
│ 
├─modules 功能模組
│  ├─app API介面模組(APP呼叫)
│  ├─job 定時任務模組
│  ├─oss 檔案服務模組
│  └─sys 許可權模組
│ 
├─RenrenApplication 專案啟動類
│  
├──resources 
│  ├─mapper SQL對應的XML檔案
│  └─static 靜態資源

第二步 將資料匯入本地資料庫中

在docker的pxc叢集任意節點連線上資料庫,建立 renren_fast 的資料庫,並匯入在renren-fast專案的db目錄中的mysql.sql檔案,點選 開始。如圖所示:

第三步 修改專案中的資料庫連線配置,redis叢集配置

1.修改資料連線,讀者根據自身的環境進行配置。如圖所示:
2.修改redis叢集配置

第四步 通過maven打包專案(jar包方式),並上傳到伺服器(centos)上

進入renren-fast目錄執行如下maven命令:

mvn clean install -Dmaven.test.skip=true

*注:clean | 表示清除之前的jar檔案
install | 表示打包到本地
-Dmaven.test.skip=true | 表示跳過測試程式碼*

執行成功後,生成jar包會在 target 檔案下,接下在centos中建立docker資料卷,通過xfp6工具將檔案拷貝到該資料卷下:

[[email protected] keepalived]# docker volume create j1
j1
[[email protected] keepalived]# docker inspect j1
[
    {
        "CreatedAt": "2018-07-05T04:15:16+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/j1/_data",
        "Name": "j1",
        "Options": {},
        "Scope": "local"
    }
]
[[email protected] keepalived]# cd /var/lib/docker/volumes/j1/_data
[[email protected] _data]# ls
renren-fast.jar

接下來重複第四步驟 建立j2,j3資料卷,以及打包對應專案jar包,並上傳對應的伺服器docker捲上。
注:由於要專案要使用pxc叢集,以及rendis叢集將用到net1,net2 網段,所以java容器將會使用宿主機的ip和埠,故需修改專案的tomcat埠,以免造成埠衝突:

第五步 執行專案

執行容器,進入容器,以及後臺執行專案

[[email protected] _data]# docker run -it -d --name renren1 -v j1:/home/soft --net=host java
93dfb84749cb6b61d1a62353416ccb858249c55e697a04573d247d1e4a8dee69
[[email protected] _data]# docker exec -it  renren1 bash
[email protected]:/# nohup java -jar /home/soft/renren-fast.jar &
[1] 13
[email protected]:/# nohup: ignoring input and appending output to ‘nohup.out’
[email protected]:/#exit

執行成功後,在瀏覽器中訪問http://192.168.9.144:8084/renren-fast/swagger/index.html#/ ,即可檢視是否執行成功:

注:192.168.9.144:8084 讀者自行修改成自己的配置
接下建立第二個,第三個容器,並進入對應容器,啟動專案:

[[email protected] _data]# docker run -it -d --name renren2 -v j2:/home/soft --net=host java
4529571967b571b02ca8682e7d40d745725d256c46aee89189a5a3e2b97c7f93
[[email protected] _data]# docker exec -it renren2 bash
[email protected]:/# nohup java -jar /home/soft/renren-fast.jar  &
[1] 13
[email protected]:/# nohup: ignoring input and appending output to ‘nohup.out’
[email protected]:/# exit
exit
[[email protected] _data]# docker run -it -d --name renren3 -v j3:/home/soft --net=host java
645d2f9790aa8ec76188dd14a2dd761a3f9973dc2ec5392c45f4f8b4feeebeee
[[email protected] _data]# docker exec -it renren3 bash
[email protected]:/# nohup java -jar /home/soft/renren-fast.jar &

讀者可在瀏覽器總訪問測試第二個 第三個是否能訪問成功,http://192.168.9.144:8085/renren-fast/swagger/index.html#/ http://192.168.9.144:8086/renren-fast/swagger/index.html#/

第六步 實現nginx負載均衡

在centos視窗中,執行如下命令,拉取nginx映象:

docker  pull 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 {
    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;

    proxy_redirect          off;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size    10m;
    client_body_buffer_size   128k;
    proxy_connect_timeout   5s;
    proxy_send_timeout      5s;
    proxy_read_timeout      5s;
    proxy_buffer_size        4k;
    proxy_buffers           4 32k;
    proxy_busy_buffers_size  64k;
    proxy_temp_file_write_size 64k;

    upstream tomcat {
        server 192.168.9.144:8084;
        server 192.168.9.144:8085;
        server 192.168.9.144:8086;
    }
    server {
        listen       8087;
        server_name  192.168.9.144; 
        location / {  
            proxy_pass   http://tomcat;
            index  index.html index.htm;  
        }  

    }
}

注:upstream tomcat | tomcat 可以自行更改, tomcat名字與proxy_pass 下方的tomcat名字一致即可
server | 將192.168.9.144:8087的請求轉發的地址

在伺服器上建立nginx檔案,啟動nginx,並且開放防火牆埠:

docker run -it -d --name nginx1 -v /home/soft/nginx/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged  nginx
firewall-cmd --add-port=8087/tcp

測試是否啟動成功:在瀏覽器中訪問 http://192.168.9.54:8087/renren-fast/swagger/index.html
緊接著按照相同的步驟 建立第二個nginx容器,並且建立第二個nginx配置檔案nginxslave.conf(讀者請自行上傳到伺服器)。與第一個nginx.conf配置檔案差異在檔案的尾部的埠監聽資訊將8087改為8088

    server {
        listen       8088;
        server_name  192.168.9.144; 
        location / {  
            proxy_pass   http://tomcat;
            index  index.html index.htm;  
        }  

    }

建立並上傳完第二配置檔案,執行如下命令:

docker run -it -d --name nginx2 -v /home/soft/nginx/nginxslave.conf:/etc/nginx/nginx.conf --net=host --privileged  nginx
firewall-cmd --add-port=8088/tcp

測試是否啟動成功,在瀏覽器中訪問 http://192.168.9.54:8088/renren-fast/swagger/index.html

第七步 伺服器的雙機熱備

分別在nginx1、nginx2容器,安裝keepalived爭搶虛擬ip。執行如下命令:

[[email protected] _data]# docker exec -it nginx1 bash
[email protected]:/# apt-get update
[email protected]:/# apt-get install vim
[email protected]:/# apt-get keepalived
[email protected]:/#  vim /etc/keepalived/keepalived.conf

第一個keepalived.conf檔案內容如下:

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.9.145
    }
}
virtual_server 192.168.9.145 8089 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.9.144 8087 {
        weight 1
    }
}
[email protected]:/# service keepalived start
[ ok ] Starting keepalived: keepalived.
[email protected]:/# exit

[[email protected] _data]# docker exec -it nginx2 bash
[email protected]:/# apt-get update
[email protected]:/# apt-get install vim
[email protected]:/# apt-get keepalived
[email protected]:/#  vim /etc/keepalived/keepalived.conf

第二個keepalived.conf檔案內容如下:

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.9.145
    }
}
virtual_server 192.168.9.145 8089 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.9.144 8088 {
        weight 1
    }
}
[email protected]:/# service keepalived start
[ ok ] Starting keepalived: keepalived.
[email protected]:/# exit

配置啟動完成後 ,測試是否成功,在瀏覽器中訪問 http://192.168.9.145:8089/renren-fast/swagger/index.html