「實戰篇」開源專案docker化運維部署-後端java部署(七)
本節主要說說後端的部署需要注意的點,本身renren-fast這個專案就是通過springboot來進行開發的,springboot內建的有tomcat所以,咱們不用在容器內安裝tomcat,直接用jar檔案來進行執行。原始碼:https://github.com/limingios/netFuture/blob/master/後端/ 後端雙機熱備
https://gitee.com/renrenio/renren-fast
spring boot
-
如何配置redis叢集
>之前配置的redis叢集,修改下單節點的吧,把所有的redis叢集都放上去。
spring: # 環境 dev|test|prod profiles: active: dev # jackson時間格式化 jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss http: multipart: max-file-size: 100MB max-request-size: 100MB enabled: true redis: open: false# 是否開啟redis快取true開啟false關閉 database: 0 #host: localhost #port: 6379 #password:# 密碼(預設為空) timeout: 6000# 連線超時時長(毫秒) cluster: nodes: - 172.19.0.2:6379 - 172.19.0.3:6379 - 172.19.0.4:6379 - 172.19.0.5:6379 - 172.19.0.6:6379 - 172.19.0.7:6379 pool: max-active: 1000# 連線池最大連線數(使用負值表示沒有限制) max-wait: -1# 連線池最大阻塞等待時間(使用負值表示沒有限制) max-idle: 10# 連線池中的最大空閒連線 min-idle: 5# 連線池中的最小空閒連線
-
maven打包工程
>renren-fast 包含了tomcat.jar檔案,準確的來說是springboot的maven,pom中自帶的tomcat。所以打包成jar包可以獨立執行檔案
注意:java後臺程式不使用虛擬網路,直接使用宿主的ip埠。–net=host
- 執行java容器部署後端專案 <j1的後臺>
docker volume create j1 #檢視j1所在的路徑,方便jar包上傳 docker volumeinspect j1 docker run -it -d name j1 -v j1:/home/soft --net=host java docker exec -it j1 bash #將編譯好的jar拷貝到宿主機上j1所在的目錄下 nohubp 就是後臺掛機專案 nohup java -jar/home/soft/renren-fast.jar
- 執行java容器部署後端專案 <j2的後臺>
docker volume create j2 #檢視j2所在的路徑,方便jar包上傳 docker volumeinspect j2 docker run -it -d name j2 -v j2:/home/soft --net=host java docker exec -it j2 bash #將編譯好的jar拷貝到宿主機上j2所在的目錄下 nohubp 就是後臺掛機專案 nohup java -jar/home/soft/renren-fast.jar
- 執行java容器部署後端專案 <j3的後臺>
docker volume create j3 #檢視j3所在的路徑,方便jar包上傳 docker volumeinspect j3 docker run -it -d name j3 -v j3:/home/soft --net=host java docker exec -it j3 bash #將編譯好的jar拷貝到宿主機上j3所在的目錄下 nohubp 就是後臺掛機專案 nohup java -jar/home/soft/renren-fast.jar
設定負載均衡
所有的負載都發送到一個jar包上,如果量比較大,tomcat最大承受500的併發,Tomcat可能就掛了。
- nginx
nginx 是效能非常出色的反向代理伺服器,最大可以支援8萬/秒的併發訪問,之前咱們資料庫中介軟體和redis中介軟體使用了haproxy,因為haproxy對tcp這種負載均衡做的比較好,現在java容器內的tomcat是支援的http的協議,http負載做的最好的是nginx,我們選擇nginx負載均衡的產品。
- nginx的配置
定義了一個upstream tomcat內建的都是宿主機器的ip和埠,通過埠的對映找到對應的容器,在server中配置好tomcat的和nginx的埠,直接訪問nginx,進行跳轉到對應的java容器上。埠6101
usernginx; worker_processes1; error_log/var/log/nginx/error.log warn; pid/var/run/nginx.pid; events { worker_connections1024; } http { include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$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.logmain; sendfileon; #tcp_nopushon; keepalive_timeout65; #gzipon; proxy_redirectoff; proxy_set_headerHost $host; proxy_set_headerX-Real-IP $remote_addr; proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size10m; client_body_buffer_size128k; proxy_connect_timeout5s; proxy_send_timeout5s; proxy_read_timeout5s; proxy_buffer_size4k; proxy_buffers4 32k; proxy_busy_buffers_size64k; proxy_temp_file_write_size 64k; upstream tomcat { server 192.168.66.100:6001; server 192.168.66.100:6002; server 192.168.66.100:6003; } server { listen6101; server_name192.168.66.100; location / { proxy_passhttp://tomcat; indexindex.html index.htm; } } }
- 建立nginx的指令
> nginx使用宿主的主機ip。–net=host
# 容器內的nginx啟動載入容器外的配置檔案 docker run -it -d --name n1 -v /root/v1/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
- nginx的配置
>埠6102
usernginx; worker_processes1; error_log/var/log/nginx/error.log warn; pid/var/run/nginx.pid; events { worker_connections1024; } http { include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$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.logmain; sendfileon; #tcp_nopushon; keepalive_timeout65; #gzipon; proxy_redirectoff; proxy_set_headerHost $host; proxy_set_headerX-Real-IP $remote_addr; proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size10m; client_body_buffer_size128k; proxy_connect_timeout5s; proxy_send_timeout5s; proxy_read_timeout5s; proxy_buffer_size4k; proxy_buffers4 32k; proxy_busy_buffers_size64k; proxy_temp_file_write_size 64k; upstream tomcat { server 192.168.66.100:6001; server 192.168.66.100:6002; server 192.168.66.100:6003; } server { listen6102; server_name192.168.66.100; location / { proxy_passhttp://tomcat; indexindex.html index.htm; } } }
- 建立nginx的指令
> nginx使用宿主的主機ip。–net=host
# 容器內的nginx啟動載入容器外的配置檔案 docker run -it -d --name n2 -v /root/v2/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx
後端專案的雙機熱備負載均衡方案
之前已經設定了n1 和n2,都可以正常的訪問後端,但是沒有設定keepalived,他們之前無法爭搶ip,無法做到雙機熱備。這次說說雙機熱備。
進入容器n1然後安裝keepalived
keepalived必須在n1所在的容器之內,也可以在docker倉庫裡面下載一個nginx-keepalived的映象。這裡直接在容器內安裝keepalived。
docker exec -it n1 /bin/bash #寫入dns,防止apt-get update找不到伺服器 echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null apt-get clean apt-get update apt-get install vim vi /etc/apt/sources.list
sources.list 新增下面的內容
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
- 更新apt源
apt-get clean apt-get update apt-get install keepalived apt-get install vim
- keepalived配置檔案
容器內的路徑:/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
keepalived.conf
vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.66.151 } } virtual_server 192.168.66.151 6201 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.66.100 6101 { weight 1 } }
- VI_1 名稱可以自定義
- state MASTER | keepalived的身份(MASTER主伺服器,BACKUP備份伺服器,不會搶佔虛擬機器ip)。如果都是主MASTER的話,就會進行互相爭搶IP,如果搶到了就是MASTER,另一個就是SLAVE。
- interface網絡卡,定義一個虛擬IP定義到那個網絡卡上邊。網絡卡裝置的名稱。eth33是宿主機是網絡卡。
- virtual_router_id 51 | 虛擬路由標識,MASTER和BACKUP的虛擬路由標識必須一致。標識可以是0-255。
- priority 100 | 權重。MASTER權重要高於BACKUP 數字越大優選級越高。可以根據硬體的配置來完成,權重最大的獲取搶到的級別越高。
- advert_int 1 | 心跳檢測。MASTER與BACKUP節點間同步檢查的時間間隔,單位為秒。主備之間必須一致。
- authentication | 主從伺服器驗證方式。主備必須使用相同的密碼才能正常通訊。進行心跳檢測需要登入到某個主機上邊所有有賬號密碼。
- virtual_ipaddress | 虛擬ip地址,可以設定多個虛擬ip地址,每行一個。根據上邊配置的eth33上配置的ip。192.168.66.151 是自己定義的虛擬ip
- 啟動keeplived
容器內啟動
service keepalived start
進入容器n2然後安裝keepalived
keepalived必須在n2所在的容器之內,也可以在docker倉庫裡面下載一個nginx-keepalived的映象。這裡直接在容器內安裝keepalived。
docker exec -it n2 /bin/bash #寫入dns,防止apt-get update找不到伺服器 echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null apt-get clean apt-get update apt-get install vim vi /etc/apt/sources.list
sources.list 新增下面的內容
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
- 更新apt源
apt-get clean apt-get update apt-get install keepalived apt-get install vim
- keepalived配置檔案
容器內的路徑:/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
keepalived.conf
vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.66.151 } } virtual_server 192.168.66.151 6201 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.66.100 6101 { weight 1 } }
- VI_1 名稱可以自定義
- state MASTER | keepalived的身份(MASTER主伺服器,BACKUP備份伺服器,不會搶佔虛擬機器ip)。如果都是主MASTER的話,就會進行互相爭搶IP,如果搶到了就是MASTER,另一個就是SLAVE。
- interface網絡卡,定義一個虛擬IP定義到那個網絡卡上邊。網絡卡裝置的名稱。eth33是宿主機是網絡卡。
- virtual_router_id 51 | 虛擬路由標識,MASTER和BACKUP的虛擬路由標識必須一致。標識可以是0-255。
- priority 100 | 權重。MASTER權重要高於BACKUP 數字越大優選級越高。可以根據硬體的配置來完成,權重最大的獲取搶到的級別越高。
- advert_int 1 | 心跳檢測。MASTER與BACKUP節點間同步檢查的時間間隔,單位為秒。主備之間必須一致。
- authentication | 主從伺服器驗證方式。主備必須使用相同的密碼才能正常通訊。進行心跳檢測需要登入到某個主機上邊所有有賬號密碼。
- virtual_ipaddress | 虛擬ip地址,可以設定多個虛擬ip地址,每行一個。根據上邊配置的eth33上配置的ip。192.168.66.151 是自己定義的虛擬ip
- 啟動keeplived
容器內啟動
service keepalived start
PS:到此未知後端的nginx雙負載,雙熱備方案已經實現了,
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:下一篇: