技術(shù)中臺(tái)下終搜技術(shù)解決方案(day01-2)

寫(xiě)在前面:
文章為作者原創(chuàng)
如需轉(zhuǎn)載,請(qǐng)注明出處

2.1 Docker容器化環(huán)境構(gòu)建

image

Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器或Windows 機(jī)器上,也可以實(shí)現(xiàn)虛擬化,容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口

2.1.1 鏡像拉取與啟動(dòng)

1、下載

官網(wǎng)下載Docker:

http://www.docker.com

倉(cāng)庫(kù)下載Docker:

https://hub.docker.com/

2 Docker安裝

**前提條件**
CentOS  安裝Docker
支持以下的CentOS版本:CentOS 7 (64-bit);CentOS 6.5 (64-bit) 或更高的版本
目前,CentOS 僅發(fā)行版本中的內(nèi)核支持 Docker。
Docker 運(yùn)行在 CentOS 7 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 3.10 及以上。
Docker 運(yùn)行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 2.6.32-431 或者更高版本
Docker可以運(yùn)行在MAC、Windows、Centos、UBUNTU等操作系統(tǒng)上,提供社區(qū)版和企業(yè)版,本課程基于Centos安裝Docker。Centos6對(duì)docker支持的不好,使用docker建議使用centos7。

查看版本:
cat /etc/redhat-release 
查看內(nèi)核

以下是在centos7中安裝Docker的步驟:

1、yum源更新,如下圖

sudo yum update
image

3、安裝yum-utils&驅(qū)動(dòng)依賴,如下圖

作用:安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
image

4、 設(shè)置yum源為阿里云,如下圖

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
image

5、 安裝docker,如下圖

sudo yum install -y docker-ce
image

5、 查看docker版本,如下圖

docker -v
image

or

docker  info

6、開(kāi)機(jī)啟動(dòng)

注意:開(kāi)機(jī)先啟動(dòng)docker才能再啟動(dòng)容器

systemctl enable docker

2.1.2 固定Ip設(shè)置

容器ip變化

1、創(chuàng)建自定義網(wǎng)絡(luò)

創(chuàng)建一個(gè)橋接網(wǎng)絡(luò)并指定網(wǎng)段

docker network create --subnet=172.188.0.0/16  czbkNetwork
image

2、指定ip啟動(dòng)

鏡像啟動(dòng)運(yùn)行時(shí)指定自己的網(wǎng)絡(luò)IP

docker run    -p 5001:5001 --name 鏡像名稱(chēng) --net czbkNetwork --ip 172.188.0.2 --privileged=true --restart=always -d 鏡像名稱(chēng)

Docker容器的重啟策略是面向生產(chǎn)環(huán)境的一個(gè)啟動(dòng)策略,在開(kāi)發(fā)過(guò)程中可以忽略該策略

--restart常用參數(shù)有3個(gè)可選值 :

no:容器退出時(shí)不重啟,默認(rèn)
on-failure:容器故障退出(返回值非零)時(shí)重啟
always:容器退出時(shí)總是重啟

3、更新容器參數(shù)

 docker container  update  --restart=always  f3c17f9acfa7

2、為正在運(yùn)行的容器設(shè)置自定義ip

將Docker容器保存為鏡像,使用docker commit命令可以將容器保存為鏡像。

  • -a :提交的鏡像作者;
  • -c :使用Dockerfile指令來(lái)創(chuàng)建鏡像;
  • -m :提交時(shí)的說(shuō)明文字;
  • -p :在commit時(shí),將容器暫停
 #將容器a404c6c174a2 保存為新的鏡像,并添加提交人信息和說(shuō)明信息
 docker commit -a "czbk" -m "install  image" a404c6c174a2  kibana:v1 

此鏡像的內(nèi)容就是當(dāng)前容器的內(nèi)容,接下來(lái)你可以用此鏡像再次運(yùn)行新的容器

2.1.3 Docker環(huán)境遷移

1、遷移

將鏡像文件打包成tar文件

docker  save   -o kibana .tar  kibana 

2、還原

docker load -i kibana.tar

2.2 ElasitciSearch高可用構(gòu)建

背景介紹
為了解決單點(diǎn)故障,在生產(chǎn)環(huán)境中,我們需要搭建es集群來(lái)保證系統(tǒng)的高可用
Elasticsearch天生就支持分布式部署,一個(gè) Elasticsearch 集群由一個(gè)或多個(gè)節(jié)點(diǎn)(Node)組成,每個(gè)集群都有一個(gè)共同的集群名稱(chēng)作為標(biāo)識(shí);通過(guò)集群部署可以提高系統(tǒng)的可用性。

2.2.1 鏡像拉取

1、拉取鏡像

docker pull docker.elastic.co/elasitciSearch/elasitciSearch:7.4.0
image

2、查看鏡像

docker  images
image

2.2.2 集群搭建

cluster name node name IP Addr http端口 / 通信端口
itcast-es eNode1 172.188.0.88 9200 / 9700
itcast-es eNode2 172.188.0.89 9201 / 9800
itcast-es eNode3 172.188.0.90 9202 / 9900

1)掛載目錄創(chuàng)建

1、掛載目錄創(chuàng)建

創(chuàng)建數(shù)據(jù)掛載目錄配置文件(主目錄)

 mkdir  -p  /usr/local/es/config

數(shù)據(jù)目錄(遞歸創(chuàng)建目錄)

 mkdir  -p  /usr/local/es/config/eNodeData1
 mkdir  -p  /usr/local/es/config/eNodeData2
 mkdir  -p  /usr/local/es/config/eNodeData3

日志目錄

 mkdir  -p  /usr/local/es/config/eNodeLog1
 mkdir  -p  /usr/local/es/config/eNodeLog2
 mkdir  -p  /usr/local/es/config/eNodeLog3

分詞器插件掛載目錄(稍后會(huì)講)

 mkdir  -p  /usr/local/es/config/plugins

權(quán)限設(shè)置

chmod  -R  777 /usr/local/es/

2)集群節(jié)點(diǎn)配置

1、節(jié)點(diǎn)一配置

tips:

path.data:

path.log

上面的目錄一定不要寫(xiě)宿主機(jī)

eNode1.yml 內(nèi)容如下

#集群名稱(chēng)
cluster.name: itcast-es
#節(jié)點(diǎn)名稱(chēng)
node.name: eNode1
#是不是有資格主節(jié)點(diǎn)
node.master: true
#是否存儲(chǔ)數(shù)據(jù)
node.data: true
#最大集群節(jié)點(diǎn)數(shù)
node.max_local_storage_nodes: 3 
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9200
#內(nèi)部節(jié)點(diǎn)之間溝通端口
transport.tcp.port: 9700
#es7.x 之后新增的配置,節(jié)點(diǎn)發(fā)現(xiàn)
discovery.seed_hosts: ["172.18.0.88:9700","172.18.0.89:9800","172.18.0.90:9900"]
#es7.x 之后新增的配置,初始化一個(gè)新的集群時(shí)需要此配置來(lái)選舉master
cluster.initial_master_nodes: ["eNode1", "eNode2","eNode3"] #數(shù)據(jù)和存儲(chǔ)路徑
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs

2、節(jié)點(diǎn)二配置

eNode2.yml 內(nèi)容如下

為了方便測(cè)試,itcast2即是數(shù)據(jù)節(jié)點(diǎn)、也是候選節(jié)點(diǎn),暫時(shí)不考慮【腦裂現(xiàn)象】,如果生產(chǎn)環(huán)境,建議角色分離

#集群名稱(chēng)
cluster.name: itcast-es
#節(jié)點(diǎn)名稱(chēng)
node.name: eNode2
#是不是有資格主節(jié)點(diǎn)
node.master: true
#是否存儲(chǔ)數(shù)據(jù)
node.data: true
#最大集群節(jié)點(diǎn)數(shù)
node.max_local_storage_nodes: 3 
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9201
#內(nèi)部節(jié)點(diǎn)之間溝通端口
transport.tcp.port: 9800
#es7.x 之后新增的配置,節(jié)點(diǎn)發(fā)現(xiàn)
discovery.seed_hosts: ["172.18.0.88:9700","172.18.0.89:9800","172.18.0.90:9900"]
#es7.x 之后新增的配置,初始化一個(gè)新的集群時(shí)需要此配置來(lái)選舉master
cluster.initial_master_nodes: ["eNode1", "eNode2","eNode3"] #數(shù)據(jù)和存儲(chǔ)路徑
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs

3、節(jié)點(diǎn)三配置

eNode3.yml 內(nèi)容如下

#集群名稱(chēng)
cluster.name: itcast-es
#節(jié)點(diǎn)名稱(chēng)
node.name: eNode3
#是不是有資格主節(jié)點(diǎn)
node.master: true
#是否存儲(chǔ)數(shù)據(jù)
node.data: true
#最大集群節(jié)點(diǎn)數(shù)
node.max_local_storage_nodes: 3 
#ip地址
network.host: 0.0.0.0
#端口
http.port: 9202
#內(nèi)部節(jié)點(diǎn)之間溝通端口
transport.tcp.port: 9900
#es7.x 之后新增的配置,節(jié)點(diǎn)發(fā)現(xiàn)
discovery.seed_hosts: ["172.18.0.88:9700","172.18.0.89:9800","172.18.0.90:9900"]
#es7.x 之后新增的配置,初始化一個(gè)新的集群時(shí)需要此配置來(lái)選舉master
cluster.initial_master_nodes: ["eNode1", "eNode2","eNode3"] #數(shù)據(jù)和存儲(chǔ)路徑
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs

3)啟動(dòng)集群

復(fù)制容器內(nèi)文件到宿主機(jī)

1、先啟動(dòng)容器

2、開(kāi)始復(fù)制

【eNode1】容器名稱(chēng)---容器路徑---宿主機(jī)路徑

docker cp eNode1:/usr/share/elasticsearch/config/elasticsearch.yml /usr/local/es/config/

啟動(dòng)節(jié)點(diǎn)一

docker run  -d  --restart=always -p 9200:9200 -p 9700:9700 -v  /usr/local/es/config/eNode1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/config/eNodeData1:/usr/share/elasticsearch/data  -v /usr/local/es/config/eNodeLog1:/usr/share/elasticsearch/config/logs  -v /usr/local/es/config/plugins:/usr/share/elasticsearch/plugins  --name eNode1 --net czbkNetwork --ip 172.188.0.88 --privileged=true   dd156dd42341
image

啟動(dòng)節(jié)點(diǎn)二

docker run  -d  --restart=always -p 9201:9201 -p 9800:9800 -v  /usr/local/es/config/eNode2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/config/eNodeData2:/usr/share/elasticsearch/data  -v /usr/local/es/config/eNodeLog2:/usr/share/elasticsearch/config/logs  -v /usr/local/es/config/plugins:/usr/share/elasticsearch/plugins --name eNode2 --net czbkNetwork --ip 172.188.0.89 --privileged=true   dd156dd42341
image

啟動(dòng)節(jié)點(diǎn)三

docker run  -d  --restart=always -p 9202:9202 -p 9900:9900 -v  /usr/local/es/config/eNode3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/config/eNodeData3:/usr/share/elasticsearch/data  -v /usr/local/es/config/eNodeLog3:/usr/share/elasticsearch/config/logs -v /usr/local/es/config/plugins:/usr/share/elasticsearch/plugins --name eNode3 --net czbkNetwork --ip 172.188.0.90 --privileged=true   dd156dd42341
image

4) 驗(yàn)證集群

1、問(wèn)題:在訪問(wèn)elasticsearch前,請(qǐng)確保防火墻是關(guān)閉的,執(zhí)行命令:

#暫時(shí)關(guān)閉防火墻
systemctl  stop  firewalld

或者

#永久設(shè)置防火墻狀態(tài)
systemctl enable firewalld.service  #打開(kāi)防火墻永久性生效,重啟后不會(huì)復(fù)原 
systemctl disable firewalld.service #關(guān)閉防火墻,永久性生效,重啟后不會(huì)復(fù)原 

2、問(wèn)題

image
報(bào)錯(cuò)的意思是:elasticsearch用戶擁有的內(nèi)存權(quán)限太小,至少需要262144;
執(zhí)行命令:

sysctl -w vm.max_map_count=262144

查看結(jié)果:

sysctl -a|grep vm.max_map_count

顯示:

vm.max_map_count = 262144

3、訪問(wèn)

http://172.17.0.225:9200/_cat/health?v
或
http://172.17.0.225:9201/_cat/health?v
或
http://172.17.0.225:9202/_cat/health?v

執(zhí)行上面的任意有一個(gè)URL,查看返回的node.total是3,代表集群搭建成功,如下圖

image

健康狀況結(jié)果解釋?zhuān)?/strong>

cluster 集群名稱(chēng)
status集群狀態(tài) green代表健康;yellow代表分配了所有主分片,但至少缺少一個(gè)副本,此時(shí)集群數(shù)據(jù)仍舊完整;red代表部分主分片不可用,可能已經(jīng)丟失數(shù)據(jù)。
node.total代表在線的節(jié)點(diǎn)總數(shù)量
node.data代表在線的數(shù)據(jù)節(jié)點(diǎn)的數(shù)量
shards 存活的分片數(shù)量
pri 存活的主分片數(shù)量 正常情況下 shards的數(shù)量是pri的兩倍。
relo遷移中的分片數(shù)量,正常情況為 0
init 初始化中的分片數(shù)量 正常情況為 0
unassign未分配的分片 正常情況為 0
pending_tasks準(zhǔn)備中的任務(wù),任務(wù)指遷移分片等 正常情況為 0
max_task_wait_time任務(wù)最長(zhǎng)等待時(shí)間
active_shards_percent正常分片百分比 正常情況為 100%

tips:

這里需要注意的是,如果只啟動(dòng)一個(gè)節(jié)點(diǎn),訪問(wèn)上面的URL,會(huì)報(bào)錯(cuò)【沒(méi)有發(fā)現(xiàn)主節(jié)點(diǎn)異?!?/p>

6、 查看容器ip

查看正在運(yùn)行的容器扎找到id

docker ps

查看ip

docker inspect  容器ID
image

tips

鎖堆

集群搭建鎖堆問(wèn)題

image

image

坑:

最大堆內(nèi)存和最小要相等,否則將鎖住整個(gè)堆

以下為報(bào)錯(cuò)

[1]: initial heap size [2147483648] not equal to maximum heap size [3221225472]; this can cause resize pauses and prevents mlockall from locking the entire heap
image
image
image

systemctl  restart  docker

[圖片上傳失敗...(image-171a17-1606294654412)]

2.3 Kibana監(jiān)控中心與可視化

什么是kibana

Kibana 是為 Elasticsearch設(shè)計(jì)的開(kāi)源分析和可視化平臺(tái)。

可以使用 Kibana 來(lái)搜索,查看存儲(chǔ)在 Elasticsearch 索引中的數(shù)據(jù)并與之交互。

也可以很容易實(shí)現(xiàn)高級(jí)的數(shù)據(jù)分析和可視化,以圖標(biāo)的形式展現(xiàn)出來(lái)。
Kibana 的使用場(chǎng)景,集中在兩方面:

實(shí)時(shí)監(jiān)控

問(wèn)題分析

1、拉取鏡像

docker pull docker.elastic.co/kibana/kibana:7.4.0
image

2、查看鏡像

docker  images
image

3、創(chuàng)建掛載目錄

mkdir -p /usr/local/kibana/config/

2、啟動(dòng)容器

docker run  --name kibana --net czbkNetwork --ip 172.188.0.66 --privileged=true  -p 5601:5601 --restart=always   -v /usr/local/kibana/config/:/usr/share/kibana/config/  -d 52cc1051ff10 

3、訪問(wèn)kibana

幾個(gè)坑需要注意

1、es與kibana版本不一致

2、沒(méi)有配置es的url

3、瀏覽器緩存

4、刪除kibana_task_manager_1索引(重點(diǎn))

5、刪除.kibana_index_1 索引

curl -XDELETE或者postman

DELETE : http://172.17.0,225:9200/.kibana*

image

解決問(wèn)題

我們?cè)谠L問(wèn) Kibana 的時(shí)候,有可能會(huì)出先 Kibana server is not ready yet 的問(wèn)題 ,原因是因?yàn)?/p>

kibana文件中的ELASTICSEARCH_URL 配置的應(yīng)該是容器的 ip,而不是本地ip。

1、首先我們查看 ElasticSearch 的容器內(nèi)部 ip:

docker inspect    容器ID
image

2、然后進(jìn)入 Kibana 容器內(nèi)部,修改 kibana.yml 中的ip

進(jìn)入容器內(nèi)部修改(或者直接修改掛載文件都可以)

 docker exec -it   容器id   /bin/bash
 
 vi config/kibana.yml 
image

修改下面的ip(集群中的節(jié)點(diǎn))

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://172.18.0.88:9200","http://172.18.0.89:9201","http://172.18.0.90:9202" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

修改完成之后退出容器,重新啟動(dòng)即可

image

再次訪問(wèn)kibana

image

2.4 MySql關(guān)系存儲(chǔ)構(gòu)建

1、拉取鏡像

docker pull mysql:5.7
image

2、查看鏡像

docker  images

3、創(chuàng)建掛載目錄

將本地的mysql.conf.d掛載的mysql.conf.d

主要是設(shè)置時(shí)區(qū)

mkdir -p /usr/local/mysql/config/

配置文件內(nèi)容

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-time-zone = '+8:00'

2、創(chuàng)建容器

-p 代表端口映射,格式為 宿主機(jī)映射端口:容器運(yùn)行端口

-e 代表添加環(huán)境變量 MYSQL_ROOT_PASSWORD 是root用戶的登陸密碼

docker run --name mysql57-test --net czbkNetwork --ip 172.18.0.15 --restart=always --privileged=true  -v /usr/local/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf      -p 33066:3306 -e MYSQL_ROOT_PASSWORD=root  -d 413be204e9c3 
image

3、同步數(shù)據(jù)

image

4、設(shè)置時(shí)區(qū)(會(huì)話級(jí)別設(shè)置)

查看時(shí)間

SELECT NOW();

查看時(shí)區(qū)

show variables like "%time_zone%";
image

time_zone說(shuō)明mysql使用system的時(shí)區(qū),system_time_zone說(shuō)明system使用UTC時(shí)區(qū)

set global time_zone = '+8:00';
set time_zone = '+8:00';
FLUSH PRIVILEGES;

分別進(jìn)行全局時(shí)間和當(dāng)前會(huì)話時(shí)間的設(shè)置,這里是設(shè)置為東八區(qū)

2.5 Nacos注冊(cè)發(fā)現(xiàn)與配置高可用構(gòu)建

2.5.1 Nacos單點(diǎn)

1、下載鏡像

docker pull nacos/nacos-server:1.1.3
image

2、查看鏡像

docker  images
image

2、啟動(dòng)鏡像

docker run  --name nacos --env MODE=standalone  --net czbkNetwork --ip 172.188.0.44 --privileged=true  -p 8848:8848 --restart=always   -d 8cb51161b062 

3、訪問(wèn)nacos

http://ip:8848/nacos
image

用戶名nacos密碼nacos

2.5.2 Nacos集群

  • 單機(jī)模式 - 用于測(cè)試和單機(jī)試用。

    在0.7版本之前,在單機(jī)模式時(shí)nacos使用嵌入式數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),

    不方便觀察數(shù)據(jù)存儲(chǔ)的基本情況。0.7版本增加了支持mysql數(shù)據(jù)源能力

  • 集群模式 - 用于生產(chǎn)環(huán)境,確保高可用。

  • 多集群模式 - 用于多數(shù)據(jù)中心場(chǎng)景

集群安裝約束:

1. 64 bit OS Linux/Unix/Mac,推薦使用Linux系統(tǒng)。

2. 集群需要依賴mysql,單機(jī)可不必;在0.7版本之前,在單機(jī)模式時(shí)nacos使用嵌入式數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),不方便觀察數(shù)據(jù)存儲(chǔ)的基本情況。0.7版本增加了支持mysql數(shù)據(jù)源能力,具體的操作步驟

3. 3個(gè)或3個(gè)以上Nacos節(jié)點(diǎn)才能構(gòu)成集群

搭建Nacos高可用集群步驟:

1、需要去Nacos官網(wǎng)clone Nacos集群項(xiàng)目nacos-docker

2、nacos-docker是使用的Docker Compose對(duì)容器進(jìn)行編排,所以首先需要安裝Docker Compose

詳細(xì)信息可參照Nacos官網(wǎng):https://nacos.io/zh-cn/docs/quick-start-docker.html

1)安裝Docker Compose

什么是Docker Compose

Compose項(xiàng)目是Docker官方的開(kāi)源項(xiàng)目,負(fù)責(zé)實(shí)現(xiàn)對(duì)Docker容器集群的快速編排。

是一個(gè)定義和運(yùn)行多容器的docker應(yīng)用工具。

Compose目前已經(jīng)完全支持Linux、Mac OS和Windows,在我們安裝Compose之前,需要先安裝Docker。下面我們以編譯好的二進(jìn)制包方式安裝在Linux系統(tǒng)中。

1、安裝

#在Linux下下載(下載到/usr/local/bin)
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


# 設(shè)置文件可執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose

# 查看版本信息
docker-compose --version

看到版本信息,說(shuō)明安裝成功。

2.卸載

# 二進(jìn)制包方式安裝的,刪除二進(jìn)制文件即可
rm /usr/local/bin/docker-compose

常見(jiàn)問(wèn)題:

如果安裝完成后,查看版本頻繁報(bào)錯(cuò),如下

Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg

可使用下面的解決方案

1、切換到/usr/local/bin,刪除之前的下載/docker-compose

2、切換到/usr/local/bin執(zhí)行下面的命令

wget https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-Linux-x86_64

3、下載完畢后重命名為docker-compose

mv docker-compose-Linux-x86_64 docker-compose

4、賦權(quán)限

5、查看版本成功

2)克隆Nacos-docker項(xiàng)目

如果本機(jī)沒(méi)有安裝git

請(qǐng)使用 yum install git安裝

#切換到自定義目錄
cd /usr/local/nacos
#開(kāi)始clone
git clone https://github.com/nacos-group/nacos-docker.git

3)運(yùn)行nacos-docker腳本

#執(zhí)行編排命令
docker-compose -f /usr/local/nacos/nacos-docker/example/cluster-hostname.yaml up 

上面的編排命令主要下載mysql鏡像和nacos鏡像,自動(dòng)完成鏡像下載/容器啟動(dòng)

? Pulling from nacos/nacos-mysql,版本是5.7(執(zhí)行初始化腳本)

? Pulling nacos3 (nacos/nacos-server:latest)最新版本,目前是1.2.1(啟動(dòng)nacos123)

4)停止、啟動(dòng)

#啟動(dòng) 
docker-compose -f  /usr/local/nacos/nacos-docker/example/cluster-hostname.yaml start
image

Nacos集群?jiǎn)?dòng)成功

#停止
docker-compose -f  /usr/local/nacos/nacos-docker/example/cluster-hostname.yaml stop
image

nacos所有節(jié)點(diǎn)、mysql成功終止(停止容器)

5)文件講解

services:
  nacos1:
    hostname: nacos1
    container_name: nacos1
    image: nacos/nacos-server:latest
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9555:9555"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql

  nacos2:
    hostname: nacos2
    image: nacos/nacos-server:latest
    container_name: nacos2
    volumes:
      - ./cluster-logs/nacos2:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql
  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:latest
    container_name: nacos3
    volumes:
      - ./cluster-logs/nacos3:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql
  mysql:
    container_name: mysql
    image: nacos/nacos-mysql:5.7
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"

6)訪問(wèn)Nacos

http://172.17.0.225:8848/nacos
http://172.17.0.225:8849/nacos
http://172.17.0.225:8850/nacos
image
  • Leader:負(fù)責(zé)接收客戶端的請(qǐng)求
  • Candidate:用于選舉Leader的一種角色
  • Follower:負(fù)責(zé)響應(yīng)來(lái)自Leader或者Candidate的請(qǐng)求

【集群管理】---【節(jié)點(diǎn)列表】可查看Nacos集群節(jié)點(diǎn)信息

2.5.3 集群實(shí)時(shí)監(jiān)控中心

Nacos 0.8.0版本完善了監(jiān)控系統(tǒng),支持通過(guò)暴露metrics數(shù)據(jù)接入第三方監(jiān)控系統(tǒng)監(jiān)控Nacos運(yùn)行狀態(tài),目前支持prometheus、elastic search和influxdb,

下面結(jié)合prometheus和grafana如何監(jiān)控Nacos 

1)監(jiān)控端點(diǎn)暴露

監(jiān)控前準(zhǔn)備

配置application.properties文件,暴露metrics數(shù)據(jù)

vi  /usr/local/nacos/nacos-docker/example/init.d/custom.properties

開(kāi)啟端點(diǎn)

management.endpoints.web.exposure.include=*

訪問(wèn){ip}:8848/nacos/actuator/prometheus,看是否能訪問(wèn)到metrics數(shù)據(jù)

http://172.17.0.225:8848/nacos/actuator/prometheus
或者
http://172.17.0.225:8849/nacos/actuator/prometheus
或者
http://172.17.0.225:8850/nacos/actuator/prometheus
image

2)Prometheus服務(wù)監(jiān)控

采集Nacos metrics數(shù)據(jù)

1、什么是Prometheus

Prometheus是一套開(kāi)源的服務(wù)監(jiān)控&報(bào)警&時(shí)間序列數(shù)據(jù)庫(kù)的組合,通過(guò)HTTP協(xié)議從遠(yuǎn)程的機(jī)器收集數(shù)據(jù)并存儲(chǔ)在本地的時(shí)序數(shù)據(jù)庫(kù)上;主要是負(fù)責(zé)存儲(chǔ)、抓取、聚合、查詢;

可通過(guò)第三方可視化界面進(jìn)行分析與監(jiān)控

起始是由SoundCloud公司開(kāi)發(fā)的。隨著發(fā)展,越來(lái)越多公司和組織接受采用Prometheus,社會(huì)也十分活躍。

2、創(chuàng)建掛載目錄

用于掛載prometheus.yml文件

mkdir /usr/local/prometheus

3、docker安裝

docker pull prom/prometheus

4、創(chuàng)建配置文件

#切換到掛載目錄
cd  /usr/local/prometheus
#修改配置文件
vi prometheus.yml

增加下面的配置用來(lái)采集Nacos metrics數(shù)據(jù)

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
    
    
   #用來(lái)采集Nacos metrics數(shù)據(jù) 
  - job_name: nacos
    metrics_path: '/nacos/actuator/prometheus'
    static_configs:
      - targets: ['172.17.0.225:8848','172.17.0.225:8849','172.17.0.225:8850']

5)運(yùn)行

docker run --name prometheus  -v /usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml   --net czbkNetwork --ip 172.188.0.11    --restart=always --privileged=true  -p 9090:9090     -d prom/prometheus:latest

注意:

進(jìn)入容器使用

docker exec -it b29da0b770cd /bin/sh

6)訪問(wèn)

http://172.17.0.225:9090/graph

通過(guò)訪問(wèn)http://{ip}:9090/graph可以看到prometheus的采集數(shù)據(jù),在搜索欄搜索nacos_monitor可以搜索到Nacos數(shù)據(jù)說(shuō)明采集數(shù)據(jù)成功

image

3) Grafana度量分析

步驟

1、鏡像拉取與啟動(dòng)

2、配置數(shù)據(jù)源(Proemtheus)

3、配置監(jiān)控模板

4、配置告警

什么Grafaana
Grafana是一個(gè)開(kāi)源的度量分析與可視化套件。
有著非常漂亮的圖表和布局展示,功能齊全的度量?jī)x表盤(pán)和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus等數(shù)據(jù)源

經(jīng)常被用作基礎(chǔ)設(shè)施的時(shí)間序列數(shù)據(jù)和應(yīng)用程序分析的可視化 

1、拉取鏡像

 docker  pull grafana/grafana

2、啟動(dòng)

docker run --name grafana  --net czbkNetwork --ip 172.188.0.12    --restart=always --privileged=true  -p 3000:3000     -d grafana/grafana

3.訪問(wèn)

http://172.17.0.225:3000/login

默認(rèn)用戶和密碼均為admin

image

輸入用戶名、密碼進(jìn)入

image

成功進(jìn)入到Granfana后,我們需要做三件事情

1、配置prometheus數(shù)據(jù)源
2、導(dǎo)入Nacos grafana監(jiān)控模版
3、配置grafana告警

1、配置prometheus數(shù)據(jù)源

最后點(diǎn)擊Save,要注意的是Name是prometheus而不是prometheus,否則后續(xù)可能會(huì)有錯(cuò)誤提示

image

2、導(dǎo)入Nacos grafana監(jiān)控模版

image

模板

https://raw.githubusercontent.com/nacos-group/nacos-template/master/nacos-grafana.json

導(dǎo)入成功

image

Nacos監(jiān)控分為三個(gè)模塊:

nacos monitor展示核心監(jiān)控項(xiàng)

nacos detail展示指標(biāo)的變化曲線

nacos alert為告警項(xiàng)

nacos monitor展示核心監(jiān)控項(xiàng)


image

nacos detail展示指標(biāo)的變化曲線

image

nacos alert為告警項(xiàng)

image

3、配置grafana告警(18種方式預(yù)警)

步驟:

1、配置SMTP服務(wù)器(email)

2、配置預(yù)警規(guī)則

3、配置監(jiān)控通道

1、配置SMTP服務(wù)器(email)

登錄容器(此處進(jìn)入容器修改)

 docker exec  -it -u root  150724ac86fd /bin/bash

修改配置文件

vi /usr/share/grafana/conf/defaults.ini
image

1、enabled:開(kāi)啟email發(fā)送配置
2、host 設(shè)置郵箱smtp地址(加端口)
3、user 發(fā)送郵箱賬戶
4、password 郵箱密碼或者smtp客戶端驗(yàn)證碼
5、from_address郵箱地址

重啟容器

docker  restart 150724ac86fd

http://172.17.0.225:3000/login

2、配置預(yù)警規(guī)則

進(jìn)入到監(jiān)控主頁(yè)面;選擇【Nacos alert】選擇需要配置的項(xiàng)目,此處配置內(nèi)存預(yù)警

image

1、Name這個(gè)是alert預(yù)警名稱(chēng),可以自定義。
2、Evaluate every執(zhí)行的頻率,默認(rèn)每60s檢測(cè)一次

Conditions:告警觸發(fā)條件

3、WHEN [avg0],默認(rèn)平均值計(jì)算(可以修改最大、最小、匯總等)

4、query(A,5m,now),字母A代表選擇的metrics中設(shè)置的PromQL 指標(biāo)數(shù)據(jù),也可以選擇其它在metrics中設(shè)置的,但這里是單選。5m代表從現(xiàn)在起往之前的5分鐘,now為時(shí)間的結(jié)束點(diǎn),此外這里可以自己手動(dòng)輸入時(shí)間。
5、保存


image

3、配置監(jiān)控通道

創(chuàng)建郵件發(fā)送規(guī)則,Email addresses中多個(gè)收件人以英文分號(hào)隔開(kāi)。例:xxx@163.com;xxx@qq.com
創(chuàng)建成功后,點(diǎn)擊Send Test 按鈕,測(cè)試郵件是否能發(fā)送成功。(如果發(fā)送不成功,可在grafana.log中查看日志信息

當(dāng)Nacos運(yùn)行出現(xiàn)問(wèn)題時(shí),需要grafana告警通知相關(guān)負(fù)責(zé)人。grafana支持多種告警方式,常用的有郵件,釘釘和webhook方式

image

配置說(shuō)明


image

可以通過(guò)【Save Test】發(fā)送測(cè)試郵件

image

測(cè)試郵件


image

內(nèi)存預(yù)警郵件

image

寫(xiě)在后面:
技術(shù)中臺(tái)下終搜技術(shù)解決方案 課程合計(jì)分為三天
持續(xù)更新

  • 第一天內(nèi)容介紹
    image

ps:當(dāng)前頁(yè)面為第一天的【第一章節(jié)】

  • 第二天內(nèi)容介紹:
    image
  • 第三天內(nèi)容介紹:
image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容