SpringCloud入門系列0-Nacos的安裝與配置


  • 背景 

    工作有一些年頭了,自從19年初徹底轉了java(這又是另一篇心酸的故事),突然感覺自己荒廢了好幾年(不是說.net不好,而是回顧自己這幾年做的很多東西都浮於表面,有時候弄成很忙的樣子,回頭看看自己以前寫的博客,竟然很多是關於js的,真是感覺浪費時間,在此也奉勸各位老鐵,做后端就好好深入做,不要分太多心到前端上,並不會給自己加分,當然全職轉前端的除外)

    (路人甲:扯蛋一個頂倆,能不能趕緊說技術?)

    OKOK,書接上回,西門慶剛剛脫掉....你們想聽這個我偏偏不說,其實是最近團隊內部要重構一個服務業務,時間不那么緊張,架構搭建由本人負責,沒有強制要求用什么實現,用微服務說實話挺沒底的,但是時間又比較充裕,所以還是決定硬着頭皮上一波(路人乙:波在哪里??要扯淡能不能專業點?最好帶黃圖的那種)

    本系列的目的主要是交流和記錄,希望本系列結束的時候可以讓您的工資翻一倍(前提是你工資只有3K啊:))

    萬事開頭難,畢竟之前沒有什么微服務經驗。最開始是一個組件一個組件查教程,然后一步一步集成,所以最開始的時候用的是主流的springcloud一波流:consul+zuul+hystrix,監控方面SpringbootAdmin+HystrixDashboard,隨着我的不斷深入(別想歪),發現很多組件已經不維護或者有更好的代替,所以樓主一步錯步步錯,最后步入了風塵之路...對不起串台了,馬上開始

  • 技術點

    整體采用SpringCloud作為底部支撐,采用相對較活躍的組件,其中涉及的有(此處應該有一張很炫的圖,大家可自行腦補,我實在懶得畫:))

      Nacos-服務注冊、發現與配置中心(期間還用了eureka)

      SpringcloudGateway-網關 

      Sentinel+dashboard-熔斷降級,也叫斷路器,這個是阿里出品的哨兵,一線互聯網公司很多在用

      Zipkin-鏈路跟蹤

      Elasticsearch+kibana-鏈路跟蹤數據持久化以及查詢

      SpringbootAdmin-整體資源監控

      Quartz-定時任務集成

      JWT-用戶認證,自己實現了一套簡單的jwt

      

    

    各組件版本列表

名稱 版本 git/maven 參考網址
SpringBoot 2.1.9    
SpringCloud Greenwich.SR3    
Nacos(docker) 1.1.4 https://github.com/alibaba/nacos https://nacos.io/
SpringcloudGateway 2.1.3 https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway  
Sentinel 2.1.1

https://github.com/alibaba/Sentinel

https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel

https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
Zipkin-Slim(docker)  latest  https://github.com/openzipkin/zipkin  
Elasticsearch(docker) 6.8.5  https://github.com/elastic/elasticsearch  
Elasticsearch-head(node)      
kibana(docker) 6.8.5    
Quartz 2.1.9  https://github.com/quartz-scheduler/quartz  
       

    

    后續文章我將逐步展開每個組件的安裝配置,各位大爺敬請期待

    開篇我就以nacos和ek的安裝和配置作為前戲吧,俗話說前戲做的足,后面高潮多嘛(手動狗頭)

  • Nacos

    Nacos是阿里18年開源的產品,目前更新非常活躍,屬於springcloud-alibaba的一部分,文檔也比較多,這里就不比較幾個注冊中心的對比了,也不復制nacos的介紹文檔了,入門介紹可以看上表中的網址。

    直接開干:

    由於我的電腦配置不高,我選擇安裝在遠程一台測試機的docker上,建議你也這么干

    直接一把梭:

    docker run --env MODE=standalone \
    -v /dockerdata/nacos/config/application.properties:/home/nacos/conf/application.properties \
    --name nacos -d -p 8848:8848 nacos/nacos-server:1.1.4
   這里映射了8848端口,選擇掛載了一個配置文件,配置文件內容如下
    
# spring

server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848

# nacos.cmdb.dumpTaskInterval=3600
# nacos.cmdb.eventTaskInterval=10
# nacos.cmdb.labelTaskInterval=300
# nacos.cmdb.loadDataAtStart=false


# metrics for prometheus
#management.endpoints.web.exposure.include=*

# metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200

# metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true

server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
# default current work dir
server.tomcat.basedir=

## spring security config
### turn off security
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**

nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**

# nacos.naming.distro.taskDispatchPeriod=200
# nacos.naming.distro.batchSyncKeyCount=1000
# nacos.naming.distro.syncRetryDelay=5000
# nacos.naming.data.warmup=true
# nacos.naming.expireInstance=true

nacos.istio.mcp.server.enabled=false

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://xxxx:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&useAffectedRows=true
db.user=root
db.password=123456

  實際上大部分都是默認的配置文件,如果你本地測試過安裝nacos,可以對比下默認的配置前面基本是一樣的,我修改了后面

  spring.datasource.platform=mysql 這一行,代表數據存儲在mysql中,后面db開頭的參數都是mysql的配置,而nacos官方也提供了默認數據庫的表結構,地址為:https://github.com/alibaba/nacos/blob/409838fe1f2dc53f7f5c63c660cd69b0fae1d49e/config/src/main/resources/META-INF/nacos-db.sql
 在你自己的mysql中建表就好,至於為啥我要保存到mysql中,自然是為了后面做准備了,這里先賣個關子,照做就好.
 安裝好后啟動容器,配置好端口防火牆就可以訪問了(默認用戶名和密碼都是nacos,想修改的話去改users表就好了,密碼生成規則在nacos源碼里,由看官自行查找,三年之后在評論里公布方法。。誰的臭雞蛋??亂扔雜物罰款五毛)
  

 

 

     

  

  • ES以及相關組件安裝

    (這部分跟微服務關系不大,如果你不需要數據相關的要求,這部分可以跳過)

  1. Elasticsearch

    我也不詳細解釋了,網上安裝的教程多如牛毛,直接上命令

    

docker run  -e xpack.security.enabled=true \
                    -e xpack.security.transport.ssl.enabled=true \
                    -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \
                    -d -p 9200:9200 -p 9300:9300 \
                    -v /dockerdata/es/config/master.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
                    -v /dockerdata/es/master:/usr/share/elasticsearch/data \
                    -v /dockerdata/es/config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties \
                    --name es-master elasticsearch:6.8.5

    還是稍加解釋下:映射的是9200(9300是通訊接口),掛載了配置文件master.yml,數據目錄,以及日志文件,這里給出具體配置

    master.yml

    

cluster.name: elasticsearch-cluster
node.name: master
network.bind_host: 0.0.0.0
network.publish_host: xxxx
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["xxxx:9300","xxxx:9301"]
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

  

 

 

    log4j2.properties

appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %.-10000m%n
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 256MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
appender.rolling.strategy.action.condition.nested_condition.exceeds = 1GB

  

      ps:這里有一個坑,log4j2的日志文件如果你復制過去可能會有空格,注意檢查每一行的前后空格,否則會出意外錯誤

 

  1.   head插件安裝教程網上也很多,這里只提一個坑,不要使用docker安裝head,原因是:
      官方docker鏡像沒有同步git主版本,所以存在一個bug:所有接口調用都報406錯誤,原因是es新版更新了請求機制,需要指定content-type

      ps:由於es開啟了xpack,所以head訪問時要在參數上添加用戶名密碼才可以訪問,類似這樣 http://xxxx:9100/?auth_user=elastic&auth_password=123456

  1.   kibana:(注意kibana要與es的版本一致)

      

docker run -l es-master:elasticsearch -p 5601:5601 -v /dockerdata/es/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -d kibana:6.8.5

      

      
    kibana.yml:
    
server.name: kibana
server.host: "0"
elasticsearch.url: http://xxxx:9200
xpack.monitoring.ui.container.elasticsearch.enabled: true

# Elasticsearch xpack
elasticsearch.username: "elastic"
elasticsearch.password: "123456"

  

  • 總結

   本文給出本系列涉及到的組件列表以及nacos的安裝配置以及沒有什么存在感的elk相關配置安裝,而每一個組件的安裝其實都有很多坑,不過大家可以自行查找,不屬於本人原創的內容就不粘貼了

    整體來說這篇並沒有什么干貨(逃命中。。) 后續逐步展開各組件的使用和集成,盡快讓各位老鐵步入主題,覆雨翻雲、高潮迭起:) 謝謝觀看

    

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM