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