nacos官網: Redirecting to: https://nacos.io/
-
服務發現和服務健康監測
Nacos 支持基于 DNS 和基于 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO注冊 Service 后,服務消費者可以使用DNS TODO 或HTTP&API查找和發現服務。
Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。 對于復雜的云環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。
-
動態配置服務
動態配置服務可以讓您以中心化、外部化和動態化的方式管理所有環境的應用配置和服務配置。
動態配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和敏捷。
配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易。
Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務和應用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發布、一鍵回滾配置以及客戶端配置更新狀態跟蹤在內的一系列開箱即用的配置管理特性,幫助您更安全地在生產環境中管理配置變更和降低配置變更帶來的風險。
-
動態 DNS 服務
動態 DNS 服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以 DNS 協議為基礎的服務發現,以幫助您消除耦合到廠商私有服務發現 API 上的風險。
Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務的關聯域名和可用的 IP:PORT 列表.
-
服務及其元數據管理
Nacos 能讓您從微服務平臺建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計數據。
-
下載(github)
-
nacos-server1.4.2.zip( windows部署版)
-
nacos1.4.2.zip (windows源碼)
-
nacos-windows單機版
-
將nacos-server1.4.2.zip解壓
-
在nacos/bin運行cmd
-
執行startup.cmd -m standalone
-
standalone單機版
-
cluster集群版
-
說明:可以直接修改startup.cmd文件中
set MODE="cluster"
-
#nacos啟動方式為:standalone "nacos is starting with standalone" #nacos監聽端口8848,web應用根是/nacos 2023-02-27 08:58:27,174 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos' #embedded storage:內置數據庫 2023-02-27 08:58:27,178 INFO Nacos started successfully in stand alone mode. use embedded storage
-
測試
http://localhost:8848/nacos
用戶名和密碼都是:nacos
nacos-docker單機版
https://hub.docker.com/
-
運行容器
docker run --name n1 -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:1.4.2
-
測試
http://192.168.206.130:8848/nacos
nacos-docker-mysql單機版
-
安裝mysql
docker run -d --name zking-mysql --network net-ry \ -v /data/mysql/conf/my.cnf:/etc/my.cnf \ -v /data/mysql/data:/var/lib/mysql \ --privileged=true --restart=always \ -e MYSQL_ROOT_PASSWORD=sasa -p 3306:3306 \ mysql/mysql-server:5.7
參考上節內容,需要net-ry網絡
-
mysql充許遠程連接
# 進入容器 docker exec -it zking-mysql /bin/bash # 登錄 mysql -u root -p; # 添加用戶并授權 grant all privileges on *.* to root@'%' identified by 'sasa' with grant option; # 刷新權限 flush privileges;
-
創建數據庫nacos-config
create database nacos_config;
-
執行nacos源碼中nacos-1.4.2\distribution\conf中的nacos-mysql腳本
-
運行nacos容器
docker run -d \-e MODE=standalone \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=zking-mysql \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=sasa \-e MYSQL_SERVICE_DB_NAME=nacos_config \-e MYSQL_DATABASE_NUM=1 \-e NACOS_APPLICATION_PORT=8848 \--restart=always \--network net-ry \--name n2 \-p 8849:8848 \nacos/nacos-server:1.4.2
mysql與nacos在一網絡中net-ry中
nacos-docker-mysql集群版
為2與3
準備
環境準備
-
虛擬機內存為2G或更高
-
進入虛擬機之后,使用free查看內存使用情況
-
-
虛擬機處理器
mysql安裝
-
下載鏡像
docker pull mysql/mysql-server:5.7
不同鏡像配置環境可能不同
-
在宿主機中相關目錄,用于掛載容器的相關數據
mkdir -p /data/mysql/{conf,data}
-
編寫my.cnf配置文件,在/data/mysql/conf目錄中 (課件中有該文件,直接上傳即可)
[client] default-character-set=utf8[mysql] default-character-set=utf8[mysqld] ##官方的配置 # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M skip-host-cache skip-name-resolve datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock secure-file-priv=/var/lib/mysql-files user=mysql# Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid##下面為添加的自定義配置 init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake # default: sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # modeified: sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_allowed_packet=10M default-time_zone='+8:00' default_authentication_plugin=mysql_native_password
-
創建并啟動mysql容器
#格式一 docker run -p 3306:3306 --name zking-mysql -d mysql/mysql-server:5.7 docker logs zking-mysql #格式二 docker run -p 3306:3306 --name zking-mysql -e MYSQL_ROOT_PASSWORD=sasa -d ? mysql/mysql-server:5.7
了解mysql目錄結構
docker run -p 3306:3306 \ --name zking-mysql \ -v /data/mysql/conf/my.cnf:/etc/my.cnf \ -v /data/mysql/data:/var/lib/mysql \ --net=net-test \ --privileged=true \ --restart=always \ -e MYSQL_ROOT_PASSWORD=sasa \ -d mysql/mysql-server:5.7
參數說明: -p 3306:3306:宿主機端口:容器端口
--name mysql:容器名字
-v:掛載宿主機的一個目錄, 持久化存儲的關鍵所在,將主機目錄掛載到容器對應目錄,分別是:配置文件、日志文件、數據文件
-v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql
--privileged=true:使用該參數,container內的root擁有真正的root權限, 否則,container內的root只是外部的一個普通用戶權限
--restart=always:容器自動啟動參數,其值可以為[no,on-failure,always] no為默認值,表示容器退出時,docker不自動重啟容器 on-failure表示,若容器的退出狀態非0,則docker自動重啟容器,還可以指定重啟次數,若超過指定次數未能啟動容器則放棄 always表示,只要容器退出,則docker將自動重啟容器
-e MYSQL_ROOT_PASSWORD=sasa:設置root的密碼 -d mysql/mysql-server:5.7:后臺啟動模式及使用的鏡像
-
修改mysql允許Navicat遠程連接
# 進入容器 docker exec -it zking-mysql /bin/bash ? # 登錄 mysql -u root -p; ? # 授權 grant all privileges on *.* to root@'%' identified by 'sasa'; ? # 刷新權限 flush privileges;
創建nacos需要的數據庫
-
將3306端口加入防火墻,使用mysql客戶端鏈接數據庫
-
創建數據庫
CREATE DATABASE IF NOT EXISTS nacos_config DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-
導入nacos數據(nacos安裝目錄下 conf目錄中有腳本nacos-mysql.sql)
下載nacos鏡像
docker pull nacos/nacos-server:1.4.2
創建自定義網絡
docker network create mynet --subnet=192.168.0.0/16
獲取nginx鏡像
docker pull nginx
nacos集群部署
在真實環境下,為了便于主節點選舉,通常集群機器通常為奇數臺。
將mysql連接到mynet網絡
docker network connect mynet zking-mysql --ip 192.168.0.11
此時可以查看mynet網絡的具體配置:
docker network inspect mynet
注: 如果mysql容器還沒有創建,也可以創建mysql容器時指定網絡配置,(上面已經將mysql連接到mynet,所以不用執行此步):
docker run \--name zking-mysql \--net mynet \--ip 192.168.0.11 \-v /data/mysql/conf/my.cnf:/etc/my.cnf \-v /data/mysql/data:/var/lib/mysql \--privileged=true \--restart=always \-e MYSQL_ROOT_PASSWORD=sasa \-d mysql/mysql-server:5.7
nacos集群
-
啟動第一個節點nacos節點
docker run -d \--net net-test \--name nacos01 \--hostname nacos01 \-e PREFER_HOST_MODE=hostname \-e MODE=cluster \-e NACOS_SERVERS="nacos01:8848 nacos02:8848 nacos03:8848" \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=zking-mysql \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=sasa \-e MYSQL_SERVICE_DB_NAME=nacos_config \-e MYSQL_DATABASE_NUM=1 \-e NACOS_APPLICATION_PORT=8848 \--restart=always \nacos/nacos-server:1.4.2
配置參考:
name | description | option |
---|---|---|
MODE | cluster模式/standalone模式 | cluster/standalone default cluster |
NACOS_SERVERS | nacos cluster地址 | eg. ip1,ip2,ip3 |
PREFER_HOST_MODE | 是否支持hostname | hostname/ip default ip |
NACOS_SERVER_PORT | nacos服務器端口 | default 8848 |
NACOS_SERVER_IP | 多網卡下的自定義nacos服務器IP | |
SPRING_DATASOURCE_PLATFORM | standalone 支持 mysql | mysql / empty default empty |
MYSQL_MASTER_SERVICE_HOST | mysql 主節點host | |
MYSQL_MASTER_SERVICE_PORT | mysql 主節點端口 | default : 3306 |
MYSQL_MASTER_SERVICE_DB_NAME | mysql 主節點數據庫 | |
MYSQL_MASTER_SERVICE_USER | 數據庫用戶名 | |
MYSQL_MASTER_SERVICE_PASSWORD | 數據庫密碼 | |
MYSQL_SLAVE_SERVICE_HOST | mysql從節點host | |
MYSQL_SLAVE_SERVICE_PORT | mysql從節點端口 | default :3306 |
MYSQL_DATABASE_NUM | 數據庫數量 | default :2 |
JVM_XMS | -Xms | default :2g |
JVM_XMX | -Xmx | default :2g |
JVM_XMN | -Xmn | default :1g |
JVM_MS | -XX:MetaspaceSize | default :128m |
JVM_MMS | -XX:MaxMetaspaceSize | default :320m |
NACOS_DEBUG | 開啟遠程調試 | y/n default :n |
TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | default :false |
-
啟動第二個第三個 nacos節點
docker run -d \--net net-test \--name nacos02 \--hostname nacos02 \-e PREFER_HOST_MODE=hostname \-e MODE=cluster \-e NACOS_SERVERS="nacos01:8848 nacos02:8848 nacos03:8848" \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=zking-mysql \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=sasa \-e MYSQL_SERVICE_DB_NAME=nacos_config \-e MYSQL_DATABASE_NUM=1 \-e NACOS_APPLICATION_PORT=8848 \--restart=always \nacos/nacos-server:1.4.2
docker run -d \--net net-test \--name nacos03 \--hostname nacos03 \-e PREFER_HOST_MODE=hostname \-e MODE=cluster \-e NACOS_SERVERS="nacos01:8848 nacos02:8848 nacos03:8848" \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=zking-mysql \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=sasa \-e MYSQL_SERVICE_DB_NAME=nacos_config \-e MYSQL_DATABASE_NUM=1 \-e NACOS_APPLICATION_PORT=8848 \--restart=always \nacos/nacos-server:1.4.2
查看nacos啟動信息
docker exec -it nacos01 cat /home/nacos/logs/nacos.log
使用nginx訪問集群
-
創建宿主機掛載目錄
[root@localhost data]# mkdir -p /data/nginx/{conf,log,html}
-
上傳nginx.conf配置文件(在課件中已準備,上傳到/data/nginx/conf目錄即可)
配置文件內容如下:
worker_processes 1; ? events {worker_connections 1024; } ? http {include mime.types;default_type application/octet-stream;sendfile on; ?keepalive_timeout 65;gzip on;upstream nacos-cluster {server ? nacos01:8848 weight=1;server ? nacos02:8848 weight=1;server ? nacos03:8848 weight=1;} ?server {listen ? ? ? 80;#監聽80端口,可以改成其他端口server_name localhost;#當前服務的域名 ?#新增2:用于重定向至nacos集群location /nacos {proxy_pass http://nacos-cluster;} ? ?location / {root ? ? ? ? /usr/share/nginx/html;#將要訪問的網站的目錄try_files $uri $uri/ /index.html;#該句代碼是為解決history路由不能跳轉的問題,在vue-router官網有介紹} ?#location ^~/api/ {#^~/api/表示匹配前綴是api的請求,proxy_pass的結尾有/, 則會把/api/*后面的路徑直接拼接到后面,即移除api#proxy_pass http://tomcats/;#}} }
-
啟動nginx容器:
docker run \--name mynginx \--net mynet \-d -p 80:80 \-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \-v /data/nginx/html:/usr/share/nginx/html \--privileged=true \nginx:latest
-
將mynginx同時連接到bridge網絡,用于與宿主機通訊
[root@localhost ~]# docker network connect bridge mynginx
-
訪問控制臺確認部署:
http://192.168.19.10/nacos部署微服務測試
將微服務注冊地址改為虛擬機主機地址