基於tensorflow for迴圈 while迴圈案例
List
CentOS7.3
prometheus-2.2.1.linux-amd64.tar.gz
haproxy_exporter-0.11.0.linux-amd64.tar.gz
節點名 | IP | 軟體版本 | 硬體 | 網路 | 說明 |
---|---|---|---|---|---|
Prometheus | 192.168.43.144 | list 裡面都有 | 2C4G | Nat,內網 | 測試環境 |
RabbitMQ | 192.168.43.213 | list 裡面都有 | 2C4G | Nat,內網 | 測試環境 |
RabbitMQ | 192.168.43.251 | list 裡面都有 | 2C4G | Nat,內網 | 測試環境 |
部署Prometheus
部署Promehteus請看我前面寫的文章
https://www.cnblogs.com/you-men/p/12839535.html
部署RabbitMQ
修改主機名
由於 RabbitMQ 叢集連線是通過主機名來連線服務的,必須保證各個主機名之間可以 ping 通
hostnamectl set-hostname rabbitmq-2 hostnamectl set-hostname rabbitmq-1 echo "192.168.43.213 rabbitmq-1" >> /etc/hosts echo "192.168.43.251 rabbitmq-2" >> /etc/hosts scp /etc/hosts rabbitmq-2:/etc/
安裝RabbitMQ
# 更新 yum源
yum install epel-release
yum -y install rabbitmq-server
同步Erlang cookie
RabbitMQ 叢集是通過 Erlang 的叢集實現的,當叢集中的節點進行通訊時,Erlang 節點會進行認證。如果節點之間的 Erlang cookie 不相同,則會認證失敗。因此,需要在叢集中的所有節點上同步 cookie 檔案
這裡將 rabbitmq-1 的該檔案複製到 rabbitmq-2,由於這個檔案許可權是 400 為方便傳輸,先修改許可權,非必須操作,所以需要先修改 rabbitmq-2 中的該檔案許可權為 777
[root@rabbitmq-1 ~]# service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service
[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
KNTAXWSNMNNODXVTCRZZ
# 用scp 拷貝到rabbitmq-2
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq-2:/var/lib/rabbitmq/.erlang.cookie
# 我們到另一臺機器發現拷貝過來的許可權有問題,所以需要修改
[root@rabbitmq-2 ~]# ls -l /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 root root 20 May 7 23:27 /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start
組成叢集
在rabbitmq-2執行如下命令
[root@rabbitmq-2 ~]# rabbitmqctl stop_app # 停止rabbitmq服務
[root@rabbitmq-2 ~]# rabbitmqctl reset # 清空節點狀態
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1 # node2和node1構成叢集,node2必須能通過node1的主機名ping通
[root@rabbitmq-2 ~]# rabbitmqctl start_app # 開啟rabbitmq服務
# 接下來我們到任意一臺機器上面檢視叢集狀態:
[root@rabbitmq-2 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-1' ...
[{nodes,[{disc,['rabbit@rabbitmq-1','rabbit@rabbitmq-2']}]},
{running_nodes,['rabbit@rabbitmq-2','rabbit@rabbitmq-1']},
{cluster_name,<<"rabbit@rabbitmq-1">>},
{partitions,[]}]
...done.
RabbitMQ常用命令
rabbitmqctl list_users
# 檢視rabbitmq使用者列表,預設使用者名稱密碼都為guest
rabbitmqctl add_user admin1 123
# 新增使用者
rabbitmqctl set_user_tags admin1 administrator
# 設定使用者admin1為管理員級別
# 其他命令
rabbitmqctl add_user <username> <password>
rabbitmqctl delete_user <username>
rabbitmqctl change_password <username> <newpassword>
rabbitmqctl clear_password <username>
rabbitmqctl authenticate_user <username> <password>
rabbitmqctl set_user_tags <username> <tag> ...
rabbitmqctl list_users
配置rabbitmq使用者管理介面
# 開啟web視覺化介面
rabbitmq-plugins enable rabbitmq_management
# 需要重啟rabbitmq
service rabbitmq-server restart
# 接下來瀏覽器訪問IP:15672即可
rabbitmq從3.3.0開始禁止使用guest/guest許可權通過除localhost外的訪問,否則會報錯
需要在
/etc/rabbitmq/rabbitmq.config檔案中需要新增
{loopback_users, []}配置:
[{rabbit, [
{loopback_users, []}
]}].
設定記憶體節點
如果節點需要設定成記憶體節點,則加入叢集的命令如下:
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
# –ram指的是作為記憶體節點,如果不加,那就預設為記憶體節點。
如果節點在叢集中已經是磁碟節點了,通過以下命令可以將節點改成記憶體節點:
rabbitmqctl stop_app # 停止rabbitmq服務
rabbitmqctl change_cluster_node_type ram # 更改節點為記憶體節點
rabbitmqctl start_app # 開啟rabbitmq服務
映象佇列
當節點發生故障時,儘管所有元資料資訊都可以從磁碟節點上將元資料拷貝到本節點上,但是佇列的訊息內容就不行了,這樣就會導致訊息的丟失,那是因為在預設情況下,佇列只會儲存在其中一個節點上,我們在將叢集佇列時也說過。
聰明的 RabbitMQ 早就意識到這個問題了,在 2.6以後的版本中增加了,佇列冗餘選項:映象佇列。映象佇列的主佇列(master)依然是僅存在於一個節點上,其餘從主佇列拷貝的佇列叫從佇列(slave)。如果主佇列沒有發生故障,那麼其工作流程依然跟普通佇列一樣,生產者和消費者不會感知其變化,當釋出訊息時,依然是路由到主佇列中,而主佇列通過類似廣播的機制,將訊息擴散同步至其餘從佇列中,這就有點像 fanout 交換器一樣。而消費者依然是從主佇列中讀取訊息。
一旦主佇列發生故障,叢集就會從最老的一個從佇列選舉為新的主佇列,這也就實現了佇列的高可用了,但我們切記不要濫用這個機制,在上面也說了,佇列的冗餘操作會導致不能通過擴充套件節點增加儲存空間,而且會造成效能瓶頸。
命令格式如下
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
# -p Vhost: 可選引數,針對指定vhost下的queue進行設定
# Name: policy的名稱
# Pattern: queue的匹配模式(正則表示式)
# Definition: 映象定義,包括三個部分ha-mode, ha-params, ha-sync-mode
# ha-mode: 指明映象佇列的模式,有效值為 all/exactly/nodes
# all: 表示在叢集中所有的節點上進行映象
# exactly: 表示在指定個數的節點上進行映象,節點的個數由ha-params指定
# nodes: 表示在指定的節點上進行映象,節點名稱通過ha-params指定
# ha-params: ha-mode模式需要用到的引數
# ha-sync-mode: 進行佇列中訊息的同步方式,有效值為automatic和manual
# priority: 可選引數,policy的優先順序
案例
以下示例宣告名為ha-all的策略,它與名稱以”ha”開頭的佇列相匹配,並將映象配置到叢集中的所有節點:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
上述命令會將所有的佇列冗餘到所有節點上,一般可以拿來測試。
策略的名稱以”two”開始的佇列映象到群集中的任意兩個節點,並進行自動同步:
rabbitmqctl set_policy ha-two "^two." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
以”node”開頭的佇列映象到叢集中的特定節點的策略:
rabbitmqctl set_policy ha-nodes "^nodes." '{"ha-mode":"nodes","ha-params":["rabbit@nodeA", "rabbit@nodeB"]}'
叢集負載均衡
HAProxy 提供高可用性、負載均衡以及基於 TCP 和 HTTP 應用的代理,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。
叢集負載均和架構圖:
安裝haproxy
yum -y install haproxy
編輯HaProxy
vim /etc/haproxy/haproxy.cfg
#繫結配置
listen rabbitmq_cluster 0.0.0.0:5670
#配置TCP模式
mode tcp
#加權輪詢
balance roundrobin
#RabbitMQ叢集節點配置
server rabbitmq-1 192.168.171.134:5672 check inter 2000 rise 2 fall 3
server rabbitmq-2 192.168.171.135:5672 check inter 2000 rise 2 fall 3
#haproxy監控頁面地址
listen monitor 0.0.0.0:8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s
啟動HaProxy
systemctl restart haproxy
瀏覽器訪問IP:8100/stats
部署node_exporter
下載haproxy_exporter
wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.11.0/haproxy_exporter-0.11.0.linux-amd64.tar.gz
下載RabbitMQ_exporter
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC7/rabbitmq_exporter-1.0.0-RC7.linux-amd64.tar.gz
wget https://github.com/deadtrickster/prometheus_rabbitmq_exporter/releases/download/rabbitmq-3.6.12-pre18/prometheus_rabbitmq_exporter-v3.6.12.1.ez
部署rabbitmq_exporter
cp prometheus_rabbitmq_exporter-v3.6.12.1.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/
# 啟動rabbitmq_exporter
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=json PUBLIC_PORT=9090 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter &
tail -1000f nohup.
# 引數說明
# RABBIT_USER:rabbit使用者名稱
# RABBIT_PASSWORD:rabbit密碼
# RABBIT_URL:rabbit服務地址和埠
# OUTPUT_FORMAT:輸出格式
# PUBLIC_PORT:暴露埠
# 驗證服務埠
lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rabbitmq_ 1682 root 3u IPv6 23446 0t0 TCP *:9419 (LISTEN)
配置prometheus加入rabbitmq_exporter
tail -7 /usr/local/prometheus/prometheus.yml
- job_name: 'rabbitmq_1'
static_configs:
- targets: ['192.168.43.213:9419']
- job_name: 'rabbitmq_2'
static_configs:
- targets: ['192.168.43.251:9419']
配置grafana
預警指標
序號 | 預警名稱 | 預警規則 | 描述 |
---|---|---|---|
1 | 叢集狀態預警 | 當叢集狀態不符合預期【!=1】時進行預警 | |
2 | 節點狀態預警 | 當節點狀態不符合預期【!=1】時進行預警 | |
3 | 等待消費預警 | 當等待消費的訊息數量達到閾值【>1000】時進行預警 | 延遲消費 |
4 | 消費預警 | 當消費中的訊息數量達到閾值【>1000】時進行預警 | 消費速度慢 |
部署Haproxy_exporter
tar xvf haproxy_exporter-0.11.0.linux-amd64.tar.gz
cd haproxy_exporter-0.11.0.linux-amd64/
./haproxy_exporter --haproxy.scrape-uri="http://192.168.43.251:8100/stats;csv"
(https://img2020.cnblogs.com/blog/1871335/202006/1871335-20200630180351993-1052219626.png)