MetaQ相關

Metaq相關
-------
在metaq的配置文件 /home/admin/store/config/topics.json 中記錄了線上所有的topic信息,這是真實可靠的,用mqadmin查到的會有正則轉義,需要注意該問題。

-------
metaq-paas限制:
不能跨應用建相同名字的topic,有的業務掛的應用名不一致會出現創建topic失敗的情況

-------
metaq 手動安裝:
1.MetaQ安裝

wget --user=guest --password=gFkh21ezY1oFVcG --dns-timeout=2 --connect-timeout=2 http://info.db.ucweb.com:1221/metaq/install_metaq_tj.sh
Usage: install_metaq.sh [OPTIONS]
--clustername=# (broker必選)集羣標識 如: SZ WX LA
--brokername=# (broker必選)broker名稱, 同組master/slave的唯一標識, 建議: sz_broker_xxx_1
--brokerid=# (可選)broker id 0表示主,>0表示從 默認0
--instflag=# (可選)1代表只安裝name server;2代表只安裝broker;3代表同時安裝name server和broker.默認3
樣例:sh install_metaq_tj.sh --clustername=SZ --brokername=sz_broker_upaas_1 --brokerid=0 --instflag=3

# 以下是設置系統參數的腳本,在初始化時需要執行,修改配置
curl -s --user guest:gFkh21ezY1oFVcG http://info.db.ucweb.com:1221/metaq/set_parameter_and_restartbroker.sh |bash -s

用例:(採坑:同一組broker的brokername要一致,主從在brokerid這裏區分,主從節點會根據brokername自動關聯)
sh install_metaq_tj.sh --clustername=AliyunSG --brokername=aliyun_sg_broker_u_1 --brokerid=0 --instflag=3                    
sh install_metaq_tj.sh --clustername=AliyunSG --brokername=aliyun_sg_broker_u_1 --brokerid=1 --instflag=3                    
sh install_metaq_tj.sh --clustername=AliyunSG --brokername=aliyun_sg_broker_u_2 --brokerid=0 --instflag=3                    
sh install_metaq_tj.sh --clustername=AliyunSG --brokername=aliyun_sg_broker_u_2 --brokerid=1 --instflag=3                    


2.sunfire監控
2.1 安裝sunfire

useradd agent;
useradd jws;
su - agent -c "wget --user=guest --password=gFkh21ezY1oFVcG --dns-timeout=2 --connect-timeout=2 http://info.db.ucweb.com:1221/sunfire_agent_setup.sh;sh sunfire_agent_setup.sh -s forceUpdate '' 148";
sudo usermod -a -G jws agent;
sudo chmod -R 750 /home/jws

2.2 在CMDB中,將MetaQ的服務器的業務分類掛載到“metaQ雲資源”
2.3 sunfire 地址: http://sunfire.ucweb.local/custom/metaqmonitor?fsPath=metaq_cloud_service

-------
metaq新需求
metaqpaas上的信息採集信息是在 腳本coll_broker_na.sh上處理的,
metaqpaasd 腳本:db503:11.5.68.148
metaqpaas後臺庫:db619:11.5.64.178
[root@db503 weijl]# pwd
/home/soft/weijl
1、在數據庫中新增一個metaq-broker-stats-log表,記錄broker的get /put峯值  size,經驗證
2、Topic請求峯值、消費峯值,增加字段


mysql -h11.5.64.178  -ucoll -S /usr/local/mysql/tmp/3306/mysql.sock -pKNDksfj23soaif2i3y

-------
跨機房遷移,需要劉義部署機房之間的消息路由來進行路由同步

-------
禁寫broker時需要通知業務方修改負載均衡策略,否則會出現消費不到消息的情況
pushConsumer.setAllocateMessageQueueStrategy(new AllocateMessageQueueAveragelyByCircle());

-------
宿主機掛了,容器故障,需要這樣操作:
擴容新的broker組,然後將舊的禁寫,下線;

# NS變更注意事項:
ns如果有變更,需要通知永立修改各個機房的address server;

採坑:新起的metaq單元註冊paas平臺時,不僅要將ns添加到本機房的address服務,還要加到metaq-paas所在的機房的address服務

本機房更改兩個地址的,一個本地的(nsaddr),一個全局的(nsaddr-sf):
curl http://address.uae.uc.local/rocketmq/nsaddr
curl http://address.uae.uc.local/rocketmq/nsaddr-in?nofix=1

其他機房更新全局的(nsaddr-sf):
curl http://address.uae.uc.local/rocketmq/nsaddr-sf?nofix=1

# NS機制講解
ns中保存這broker和topic的路由對應表,metaq的客戶端上也會緩存一份,新的訂閱者發起請求的過程是先去ns獲取map信息,然後根據map信息再去直連broker,因此替換的時候,只要沒有新的訂閱者,是可以直接替換的,爲了穩妥,本地地址服務的信息需要先追加,稍等5min,讓broker註冊之後在摘除要下線的機器。
----操作信息
操作集羣是:metaq印度公共集羣, 
分兩步操作:
1、先將 11.6.165.75、11.6.164.248  追加到原有的ns列表後面;
2、等5min後,刪除原列表中的11.6.204.3、11.6.203.17 

操作完後的地址應該是三個:“11.6.165.5、11.6.165.75、11.6.164.248”
注意原列表中還有一個老ns的ip:11.6.165.5,保持這個在第一位

步驟需要修改的有印度機房的本地地址  http://address.uae.uc.local/rocketmq/nsaddr
以及需要同步全局的地址  http://address.uae.uc.local/rocketmq/nsaddr-in?nofix=1

本地機房需要按照步驟等5min,全局的直接替換即可
----

故障容器強制刪除指令:
kubectl delete pod sf-broker-a-m-sda-prod-sfgrp-0  -n jcyffw

kubectl delete pod mca-service-gf4z6 -n kube-system
 
排查節點基礎組件應用
kubectl get pod --all-namespaces -o wide | grep "\bin-grpdk006\b" | grep -v 'log-sender-[0-9a-z]*' | grep -v 'mca-service-[0-9a-z]*' | grep -v 'node-problem-detector-[0-9a-z]*' | grep -v 'pod-problem-detector-[0-9a-z]*' | grep -v 'uae-node-service-[0-9a-z]*' | grep -v 'logsearch-ignite-[0-9a-z]*' | grep -v 'prometheus-node-exporter-[0-9a-z]*'

# 刪除PV
kubectl delete po `kubectl get pod --all-namespaces -o wide | grep "\bin-grpdk006\b" | grep 'uae-node-service' | awk '{print $2}'` -n kube-system
kubectl get pv | grep "\bin-grpdk006\b"
 
# 最終摘除節點
systemctl stop kubelet.service
systemctl disable kubelet.service
systemctl stop kube-router.service
systemctl disable kube-router.service
kubectl delete node in-grpdk006
systemctl stop docker.service
systemctl disable docker.service
 
# 摘除節點checklist
kubectl get pod --all-namespaces -o wide | grep ${HOSTNAME}
kubectl get node ${HOSTNAME}
kubectl get pv | grep ${HOSTNAME}
docker ps


-------
同步主機名:
/home/puppet-uc/bin/ruby /home/puppet-uc/bin/puppet agent --confdir=/home/puppet-uc/conf --test

-------
下線broker:
1、禁寫的broker72h
2、在metaq-paas上刪除禁寫節點
3、在“擴容按鈕中刪除下線的broker”
4、刪uae2上的實例,先從後主
5、如果是宿主機下線,還需要摘除k8s的node節點

-------
mqadmin相關指令:
查看幫助

在mqadmin 下可以查看有哪些命令

sh mqadmin

查看具體命令的使用

sh mqadmin help 命令名稱

例如,查看updateTopic 的使用

sh mqadmin help updateTopic

創建一個訂閱組:
./mqadmin  updateSubGroup  -c metaq-ecs -n localhost:9876 -g tx-mq-cons
創建一個topic:
 ./mqadmin  updateTopic -n localhost:9876 -c metaq-ecs -t tx-mq-test
#如果加的是  -c,則topic或consumer創建於整個集羣,如果是 -b 則只創建於一個broker


查看當前的topic列表:
./mqadmin  topicList  -n 11.7.193.28:9876|grep hubble_task_result|sort|uniq -c

查看當前的topic狀態
./mqadmin   topicStatus -t  tx-mq-test  -n localhost:9876

查看所有消費組group:

sh mqadmin consumerProgress -n 192.168.23.159:9876

./mqadmin updateSubGroup  -n localhost:9876 -g tx-mq-cons
./mqadmin   -b localhost:10911

新增topic

sh mqadmin updateTopic –n 10.45.47.168 –c SF –t hubble_task_result

刪除topic

sh mqadmin deleteTopic –n 11.7.193.28:9876 –c SF –t ‘hubble_job\nhubble_job_result\nhubble_task\nhubble_task_result\nhubble_crawl_req\nhubble_crawl_rsp\nhubble_page_struct’
————————————————

工單審批標準:數據量小於500G,每秒消息產生總量小於1w,既可以通過;

metaq是uae2部署,報警存儲不足時,需要擴容;ns只需一組既可,擴容主要擴充broker,一般擴充是一主一從進行擴容;
1、先找到機器,重裝uae2系統:系統:ALiOS/7U2/x86-64  模板:ali_uc_docker.cfg  模式:阿里模式

2、初始化機器:http://ok.ucweb.local/pages/viewpage.action?pageId=34210328,注意這一步執行前要確認機器是否在有docker的網段的機櫃裏,如果沒有,進行搬遷後,一定要到cmdb的機櫃信息更新後,這步初始化才能順利完成。
    a、升級內核:sh update_kernel_to_4-9.sh
    b、第一步docker、k8s安裝:sh k8s_uae2_install.sh --home1=1
    c、第二步服務初始化以及系統校驗:sh k8s_uae2_install_s2.sh --cluster=ingrp --nodevip=dpaas --net=11 --label=metaqm4 --home1=1
    #-- home1=0 表示只有一塊盤,沒有home1盤
----------------
uae2機器初始化步驟
----------------
mkdir -p /root/scripts
cd /root/scripts
curl -s --user guest:gFkh21ezY1oFVcG http://info.db.ucweb.com:1221/weijl/k8s_uae2_install.sh > k8s_uae2_install.sh
sh k8s_uae2_install.sh
#註銷後執行
cd /root/scripts
curl -s --user guest:gFkh21ezY1oFVcG http://info.db.ucweb.com:1221/weijl/k8s_uae2_install_s2.sh > k8s_uae2_install_s2.sh
sh k8s_uae2_install_s2.sh
sh k8s_uae2_install_s2.sh --cluster=sz --nodevip=dpaas --net=11 --label=metaqs3


uae2新集羣
參考:http://ok.ucweb.local/pages/viewpage.action?pageId=35817229
(1)升級4.9內核
# 如果內核版本不對的話,升級內核到4.9,root用戶
mkdir -p /root/tmp/`date +"%F"`_kernel_update
cd /root/tmp/`date +"%F"`_kernel_update
wget http://mytool-uae2.uc.local/script/kernel_update/update_kernel_to_4-9.sh
sh update_kernel_to_4-9.sh
 
(2)安裝k8s等

mkdir -p /root/scripts
cd /root/scripts

#修改 主機名爲“in-grpdk025”這個格式,並安裝基礎組件
wget http://mytool-uae2.uc.local/script/machine_init_4-9/uae2_machine_init_4-9.sh
echo "in-grpdk024 in-grpdk024" > hostname.txt
echo "in-grpdk025 in-grpdk025" >> hostname.txt
sh uae2_machine_init_4-9.sh -f hostname.txt

驗證checklist,這個執行完會進入這個docker,需要退出再繼續後面的步驟
docker run --net=host  -it  -l DiskQuota='/=2g;/storage=1g' -v /home1/tmp:/storage docker-hub.ucweb.com:5000/uae-common/centos:6.6 bash


systemctl daemon-reload
systemctl restart docker 
systemctl restart kubelet

#第一步安裝
curl -s --user guest:gFkh21ezY1oFVcG http://info.db.ucweb.com:1221/weijl/k8s_uae2_install_fy.sh > k8s_uae2_install.sh
sh k8s_uae2_install.sh --home1=1
#-- home1=0 表示只有一塊盤,沒有home1盤,這一步報錯可以不管直接下一步
#第二步安裝
#如果是f53機型,在安裝初始化時,需要在 執行 “install_node_grp.sh” 腳本時 添加參數 “-f $HOSTNAME”
cd /root/scripts
curl -s --user guest:gFkh21ezY1oFVcG http://info.db.ucweb.com:1221/weijl/k8s_uae2_install_s2_fy.sh > k8s_uae2_install_s2.sh
sh k8s_uae2_install_s2.sh --cluster=ingrp --nodevip=dpaas  --label=vmateqf53in --home1=1
# nodevip 這個選項就用dapaas,代表metaq-paas專用池子 ,重裝需要新加 --overwrite 選項

------- end --------
3、登錄uae2的metaq雲服務添加實例進行擴容


資源池擴容步驟:
擴容的機器必須是有docker網段的才能被識別;且注意,如果機器搬遷到docker機櫃,一定要鄭薇將機櫃信息更新了才能最終識別;這一步很關鍵。

--------------------
metaq壓測服務搭建過程
--------------------

wget 11.3.170.172:8000/app.tgz
依賴jws跟jdk,跟之前壓測tair那個一樣

解壓之後,進入app目錄,啓動 sh start.sh,檢查33333端口有沒有監聽,監聽就ok了

需要在metaq的機器上模擬一個http的dns,可以用 python -m  SimpleHTTPServer 
需要創建文件:rocketmq/nsaddr  rocketmq/nsaddr-test
"test" 爲測試消費時的“unit”配置
其中內容爲ns的ip:port:,多個以分號相隔“;”
172.18.34.108:9876;172.18.34.107:9876


生產-壓測:
curl 'http://172.18.34.105:33333/Application/testRocketMQ?topic=BenchmarkTest&loop=1000&nameSrv=172.18.34.108:9876&size=1024'

loop:一個http請求循環發送幾次metaq消息 
size:發送的metaq消息大小

metaq,手動創建topic指令:
創建一個名爲"tx-mq-TOPIC" 的主題:
./mqadmin updateTopic -n localhost:9876  -b localhost:10911  -t tx-mq-TOPIC
創建一個cid:
./mqadmin    updateSubGroup -n localhost:9876  -b localhost:10911 -g tx-mq-cons


消費-壓測:
curl  'http://172.18.34.105:33333/Application/Subscribe?topic=BenchmarkTest&onlyStop=true&group=tx-mq-cons&unit=test'

onlyStop: true 則只停止訂閱,不再啓動訂閱;false:如果當前有在訂閱,會先停止訂閱,再啓動訂閱
group: 就是消費使用的cid
unit=test 就是你前面nsaddr新增的文件的後綴

--------------
metaq資源sql查詢

登錄dbplay,找到metaq_paas  查詢集羣信息

sql:
SELECT a.region_id, a.group_name, b.broker_id, c.number, substring_index(c.address, ':', 1) AS ipadd
    , substring_index(c.address, ':', -1) AS bport
FROM broker_group a, broker_group_info b, broker c
WHERE a.group_id = b.group_id
    AND b.broker_id = c.broker_id


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章