寫(xiě)在前面:
文章為作者原創(chuàng)
如需轉(zhuǎn)載,請(qǐng)注明出處
2.1 Docker容器化環(huán)境構(gòu)建

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

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

4、 設(shè)置yum源為阿里云,如下圖
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、 安裝docker,如下圖
sudo yum install -y docker-ce

5、 查看docker版本,如下圖
docker -v

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

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

2、查看鏡像
docker images

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

啟動(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

啟動(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

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)題

報(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,代表集群搭建成功,如下圖

健康狀況結(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

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

前

后
坑:
最大堆內(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



、
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

2、查看鏡像
docker images

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*

解決問(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

2、然后進(jìn)入 Kibana 容器內(nèi)部,修改 kibana.yml 中的ip
進(jìn)入容器內(nèi)部修改(或者直接修改掛載文件都可以)
docker exec -it 容器id /bin/bash
vi config/kibana.yml

修改下面的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)即可

再次訪問(wèn)kibana

2.4 MySql關(guān)系存儲(chǔ)構(gòu)建
1、拉取鏡像
docker pull mysql:5.7

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

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

4、設(shè)置時(shí)區(qū)(會(huì)話級(jí)別設(shè)置)
查看時(shí)間
SELECT NOW();
查看時(shí)區(qū)
show variables like "%time_zone%";

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

2、查看鏡像
docker images

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

用戶名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

Nacos集群?jiǎn)?dòng)成功
#停止
docker-compose -f /usr/local/nacos/nacos-docker/example/cluster-hostname.yaml stop

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

- 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

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ù)成功

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

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

成功進(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ò)誤提示

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

模板
https://raw.githubusercontent.com/nacos-group/nacos-template/master/nacos-grafana.json
導(dǎo)入成功

Nacos監(jiān)控分為三個(gè)模塊:
nacos monitor展示核心監(jiān)控項(xiàng)
nacos detail展示指標(biāo)的變化曲線
nacos alert為告警項(xiàng)
nacos monitor展示核心監(jiān)控項(xiàng)

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

nacos alert為告警項(xiàng)

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

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ù)警

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、保存

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方式

配置說(shuō)明

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

測(cè)試郵件

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

寫(xiě)在后面:
技術(shù)中臺(tái)下終搜技術(shù)解決方案 課程合計(jì)分為三天
持續(xù)更新
-
第一天內(nèi)容介紹
image
ps:當(dāng)前頁(yè)面為第一天的【第一章節(jié)】
-
第二天內(nèi)容介紹:
image
- 第三天內(nèi)容介紹:


