一、集群部署流程說明
環(huán)境配置
#環(huán)境配置
hostnamectl set-hostname web2-server && su
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
SELINUX=disabled
vim /etc/resolv.conf
nameserver 114.114.114.114
#安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
#設(shè)置阿里云鏡像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安裝 docker-ce 社區(qū)版
yum install -y docker-ce
systemctl start docker
systemctl enable docker
#配置鏡像加速,官方網(wǎng)址可參考:https://help.aliyun.com/document_detail/60750.html
mkdir -p /etc/docker
#直接命令行輸入以下內(nèi)容:
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"]
}
EOF
#把Harbor地址加入到Docker信任列表(harbor倉庫的docker中不需要配)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.8.20:85"]
}
systemctl daemon-reload
systemctl restart docker
#網(wǎng)絡(luò)優(yōu)化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
docker version
二、修改idea中微服務(wù)配置
2.1 注冊中心配置
idea中修改注冊中心eureka的配置,單節(jié)點換成集群
# 集群版
spring:
application:
name: EUREKA-HA
---
server:
port: 10086
spring:
# 指定profile=eureka-server1
profiles: eureka-server1
eureka:
instance:
# 指定當profile=eureka-server1時,主機名是eureka-server1
hostname: 192.168.8.17
client:
service-url:
# 將自己注冊到eureka-server1、eureka-server2這個Eureka上面去
defaultZone: http://192.168.8.17:10086/eureka/,http://192.168.8.16:10086/eureka/
---
server:
port: 10086
spring:
profiles: eureka-server2
eureka:
instance:
hostname: 192.168.8.16
client:
service-url:
defaultZone: http://192.168.8.17:10086/eureka/,http://192.168.8.16:10086/eureka/
在啟動微服務(wù)的時候,加入?yún)?shù): spring.pro?les.active 來讀取對應(yīng)的配置
2.2 其他微服務(wù)配置
- 網(wǎng)關(guān)服務(wù)配置
defaultZone: http://192.168.8.17:10086/eureka/,http://192.168.8.16:10086/eureka/ # Eureka訪問地址
- 權(quán)限管理配置
defaultZone: http://192.168.8.17:10086/eureka,http://192.168.8.16:10086/eureka
- 業(yè)務(wù)模塊配置
defaultZone: http://192.168.8.17:10086/eureka,http://192.168.8.16:10086/eureka
2.3 提交已修改的配置
三、設(shè)計Jenkins集群項目的構(gòu)建參數(shù)
3.1 安裝Extended Choice Parameter插件
該插件可以支持多選框
3.2 創(chuàng)建流水線項目
3.3 配置項目參數(shù)
逗號必須得是英文,否則出錯
tensquare_eureka_server@10086,tensquare_zuul@10020,tensquare_admin_service@9001,tensquare_gathering@9002
3.4 測試代碼循環(huán)構(gòu)建
-
循環(huán)測試代碼檢查
-
循環(huán)打包編譯
//添加公共子工程
stage('make install public sub project') {
sh "mvn -f tensquare_common clean install"
}
//編譯打包微服務(wù),制作鏡像
stage('make package') {
for (int i=0;i<selectedProjectNames.length;i++){
//項目名稱tensquare_eureka_server@10086
def projectInfo=selectedProjectNames[i]
//當前項目名稱
def currentProjectName=projectInfo.split("@")[0]
//當前端口
def currentProjectPort=projectInfo.split("@")[1]
sh "mvn -f ${currentProjectName} clean package dockerfile:build"
//定義鏡像名稱
def imageName="${currentProjectName}:${tag}"
//對鏡像打標簽
sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
//鏡像推送到harbor
withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
//登錄harbor
sh "docker login -u ${username} -p ${password} ${harbor_url}"
//鏡像上傳
sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
sh "echo 鏡像上傳成功"
}
}
//部署應(yīng)用
sshPublisher(publishers: [sshPublisherDesc(configName: "master_server", transfers: [sshTransfer(cleanRemote: false, excludes: "", execCommand: "/opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_name} ${project_name} ${tag} ${port}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: "[, ]+", remoteDirectory: "", remoteDirectorySDF: false, removePrefix: "", sourceFiles: "")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
四、完成微服務(wù)多服務(wù)器遠程發(fā)布
4.1 配置遠程部署服務(wù)器
從Jenkins服務(wù)器拷貝公鑰到docker2遠程服務(wù)器
ssh-copy-id 192.168.8.16
4.2 Jenkins中添加遠程服務(wù)器
系統(tǒng)配置中添加遠程服務(wù)器
4.3 修改Docker配置信任Harbor私服地址
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.8.20:85"]
}
systemctl restart docker
4.4 項目配置參數(shù)
添加構(gòu)建參數(shù)——》多選框:部署服務(wù)器
4.5 修改Jenkins?le構(gòu)建腳本
//定義gitlab的憑證
def git_auth="03757112-b3bd-4955-93ef-ad84869f39a9"
//定義gitlab的URL路徑
def git_url="git@192.168.8.18:gl/tensquare_back.git"
//鏡像標簽
def tag="latest"
//harbor的url地址
def harbor_url="192.168.8.20:85"
//鏡像倉庫名
def harbor_name="tensquare"
//harbor憑證
def harbor_auth="778a9460-c68d-4ab6-ab7f-f5113ec3a900"
node {
//選擇的微服務(wù)項目名稱
def selectedProjectNames="${project_name}".split(",")
//獲取當前選擇服務(wù)器
def selectedServers="${publish_server}".split(",")
stage('pull code') {
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
}
stage('check code') {
//循環(huán)檢查
for (int i=0;i<selectedProjectNames.length;i++){
//項目名稱tensquare_eureka_server@10086
def projectInfo=selectedProjectNames[i]
//當前項目名稱
def currentProjectName=projectInfo.split("@")[0]
//當前端口
def currentProjectPort=projectInfo.split("@")[1]
//定義SonarQubeScanner工具
def scannerHome = tool 'sonar-scanner'
//引用SonarQube系統(tǒng)環(huán)境
withSonarQubeEnv('sonarqube') {
sh """
cd ${currentProjectName}
${scannerHome}/bin/sonar-scanner
"""
}
}
}
//添加公共子工程
stage('make install public sub project') {
sh "mvn -f tensquare_common clean install"
}
//編譯打包微服務(wù),制作鏡像
stage('make package') {
for (int i=0;i<selectedProjectNames.length;i++){
//項目名稱tensquare_eureka_server@10086
def projectInfo=selectedProjectNames[i]
//當前項目名稱
def currentProjectName=projectInfo.split("@")[0]
//當前端口
def currentProjectPort=projectInfo.split("@")[1]
sh "mvn -f ${currentProjectName} clean package dockerfile:build"
//定義鏡像名稱
def imageName="${currentProjectName}:${tag}"
//對鏡像打標簽
sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
//鏡像推送到harbor
withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
//登錄harbor
sh "docker login -u ${username} -p ${password} ${harbor_url}"
//鏡像上傳
sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
sh "echo 鏡像上傳成功"
}
//遍歷所有服務(wù)器,分別部署
for (int j=0;j<selectedServers.length;j++){
//獲取當前服務(wù)器名稱
def currentServerName=selectedServers[j]
//調(diào)用不同服務(wù)器模塊內(nèi)容--spring.profiles.active=eureka-server1/eureka-server2
def activeProfile="--spring.profiles.active="
//根據(jù)不同的服務(wù)器名稱調(diào)用不同的服務(wù)器配置信息
if (currentServerName=="master_server"){
activeProfile=activeProfile+"eureka-server1"
}else if (currentServerName=="slave_server"){
activeProfile=activeProfile+"eureka-server2"
}
//部署應(yīng)用
sshPublisher(publishers: [sshPublisherDesc(configName: "${currentServerName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/jenkins_shell/deployCluster.sh ${harbor_url} ${harbor_name} ${currentProjectName} ${tag} ${currentProjectPort} ${activeProfile}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
推送上傳gitlab
4.6 編寫部署腳本
編寫deployCluster.sh部署腳本,放到兩臺生產(chǎn)服務(wù)器中路徑:
/opt/jenkins_shell/deployCluster.sh
4.7 進行構(gòu)建測試
可以看到構(gòu)建成功
查看容器發(fā)布結(jié)果
查看eureka注冊結(jié)果
4.8 構(gòu)建剩下的集群微服務(wù)
五、Nginx+Zuul 集群實現(xiàn)高可用網(wǎng)關(guān)
5.1 web2-server服務(wù)器上安裝nginx
yum install epel-release.noarch -y
yum install -y nginx
5.2 修改nginx配置文件
vim /etc/nginx/nginx.conf
#37行出添加反向代理服務(wù)器池,42行出修改端口號
36 include /etc/nginx/conf.d/*.conf;
37 upstream zuulServer{
38 server 192.168.8.16:10020 weight=1;
39 server 192.168.8.17:10020 weight=1;
40 }
41 server {
42 listen 85;
43 listen [::]:85;
44 server_name _;
45 root /usr/share/nginx/html;
#49行出添加反向代理指向服務(wù)器池
48 include /etc/nginx/default.d/*.conf;
49 location / {
50 proxy_pass http://zuulServer/;
51 }
nginx -t
systemctl start nginx.service
5.3 修改前端Nginx的訪問地址
5.4 Jenkins中進行前端項目構(gòu)建
成功訪問前端數(shù)據(jù)庫中的數(shù)據(jù)
參考:
https://blog.csdn.net/m0_56444183/article/details/123262744