20181219-PostgreSQL 流複製監控腳本

来源:https://www.cnblogs.com/piggybaba/archive/2018/12/19/pg_stream.html
-Advertisement-
Play Games

PostgreSQL 流複製監控腳本 https://github.com/AndyYHM/Writing/blob/PostgreSQL/20181219 PostgreSQL%20Stream%20MON.md _整理之前的腳本文檔,搬家至博客園,梳理一下之前寫的shell腳本_ _適用於Pos ...


PostgreSQL 流複製監控腳本

https://github.com/AndyYHM/Writing/blob/PostgreSQL/20181219-PostgreSQL%20Stream%20MON.md

整理之前的腳本文檔,搬家至博客園,梳理一下之前寫的shell腳本

適用於PostgreSQL版本10、版本9替換函數名稱即可,系統centos 7驗證

_xlog_location<=> _wal_lsn

_location <=> _lsn

1. 腳本輸出效果

1.1 主節點顯示效果

        STREAM_ROLE    : Master         
        ------------------------------
        Replication Client Info:
        ------------------------------
        PID            : 25424          
        CLIENT_ADDR    : 20.9.6.213     
        SYNC_STATE     : async          
        STATE          : streaming      
        WRITE_DIFF     : 0bytes         
        FLUSH_DIFF     : 0bytes         
        REPLAY_DIFF    : 0bytes         

        Replication Client Info:
        ------------------------------
        PID            : 24586          
        CLIENT_ADDR    : 20.9.6.212     
        SYNC_STATE     : sync           
        STATE          : streaming      
        WRITE_DIFF     : 0bytes         
        FLUSH_DIFF     : 0bytes         
        REPLAY_DIFF    : 0bytes

1.2 從節點效果

STREAM_ROLE    : Slave          
------------------------------
Replication Info
------------------------------
CLUSTER_STATE  : in_archive_recovery
SERVER_ADDR    : 20.9.6.219     
USER           : replicator     
APP_NAME       : node12         
TARGET_TIMELINE:                
READ_ONLY      : on  

2. 功能說明

  • 判定主機角色
  • 如果為Master節點,則顯示覆制節點信息,及與主節點差值
  • 如果為Replication節點,則顯示為本節點相關信息

3. 使用說明

  • 根據實際環境修改腳本pgdata=""
  • postgres系統用戶執行,保證有執行許可權
  • 本地執行腳本sh pg10_stream.sh

4. pg10_stream.sh腳本內容

#!/bin/bash
################################
## Author: [email protected]
## Version: 1.0
## Date:    20181219
################################
clear

host_var="/tmp"

pgdata="/pgdb/pgdata"

work_dir=$(cd `dirname $0`;pwd)

cd $work_dir

is_master=$(psql -h $host_var -c 'select  pg_is_in_recovery();'| sed -n 3p)


if [ "$is_master" == " f" ];then

    rep=$(psql  -h $host_var -c 'select  pid, client_addr, sync_state, state,pg_size_pretty( pg_wal_lsn_diff(pg_current_wal_lsn(),write_lsn)) as write_diff, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),flush_lsn)) as flush_diff, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),replay_lsn)) as replay_diff      from pg_stat_replication;'| sed -n '3,$'p |tac  | sed -n '3,$'p | sed s/" *"//g )
    if [ ! "$rep" ];then
      echo "Waring! No Replication Client Found"
    else
      printf "\n\t%-15s: %-15s\n" "STREAM_ROLE" "Master"
      echo  -e "\t------------------------------"

      echo "$rep" | while read i
        do
          echo  -e "\tReplication Client Info:\n\t------------------------------"
          a=(null PID CLIENT_ADDR SYNC_STATE STATE WRITE_DIFF FLUSH_DIFF REPLAY_DIFF)
          for j in `seq 7`
            do
              k=${a[j]}
              echo -e "$i" | awk -v k=$k -v j=$j -F"|" '{printf "\t%-15s: %-15s\n",k,$j}'
            done
          echo ""
        done


      client_check_info=(`psql -h $host_var -c 'select client_addr from pg_stat_replication;' | sed -n '3,$'p |tac  | sed -n '3,$'p | sed s/" *"//g`)
      if [ ! -f pg_stream_client ]; then
        echo "$client_check_info" > pg_stream_client
      else
        client_before=(`cat pg_stream_client`)
        if [ ${#client_before[*]} -gt 0 ]; then
          for i in `seq ${#client_before[*]}`
            do
              index=$(expr $i - 1)
              if [ "${client_check_info[$index]}"x !=  "${client_before[$index]}"x ];then
                printf  "\tWarning! Replication Client Lost.\n"
              else
                echo "$client_check_info" > pg_stream_client

              fi
            done
         else
           printf  "\tAttention! No Client Info found in pg_stream_client.\n"
         fi
      fi
    fi


elif [ "$is_master" == " t" ];then


    declare -A connect_info_dict

    conninfo=$(cat $pgdata/recovery.conf| grep -i "^primary_conninfo" | awk -F"'" '{print $2}' |sed s/"  *"/" "/g |sed s/"="/"\"]=\""/g | sed s/" "/"\" [\""/g | sed s/^/"[\""/g |sed s/$/"\""/g|sed s/" "/"\n"/g)


    eval "connect_info_dict=($conninfo)"

    cluster_state=$(pg_controldata  | grep cluster | sed s/"  *"/" "/g | cut -d ":" -f2| sed s/"^ "//g|  sed s/" "/"_"/g)
    server_addr=${connect_info_dict["host"]}
    user=${connect_info_dict["user"]}
    application_name=${connect_info_dict["application_name"]}
    recovery_target_timeline=${connect_info_dict["recovery_target_timeline"]}
    read_only=$(psql  -h $host_var -c 'show  transaction_read_only;' | sed -n '3p')


    output(){
      printf "\t%-15s: %-15s\n" $1 $2
    }



    printf "\n\t%-15s: %-15s\n" "STREAM_ROLE" "Slave"
    echo  -e "\t------------------------------"
    echo  -e "\tReplication Info\n\t------------------------------"
    output "CLUSTER_STATE" $cluster_state
    output "SERVER_ADDR" $server_addr
    output "USER" $user
    output "APP_NAME" $application_name
    output "TARGET_TIMELINE" $recovery_target_timeline
    output "READ_ONLY" $read_only
    echo ""

else

    echo "Warning! Can't Connect to Database. Please Check Database Status "
fi

exit 0

psql  -c 'select application_name,client_addr ,sync_state from pg_stat_replication;' | sed -n '3,$'p |tac  | sed -n '3,$'p | sed s/" *"//g

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建用戶登錄註意事項 密碼是區分大小寫的。 只有創建SQL Server登錄時,才支持對密碼預先進行哈希運算。 如果指定MUST_CHANGE,則CHECK_EXPIRATION和 CHECK_POLICY必須設置為 ON。 否則,該語句將失敗。 不支持CHECK_POLICY=OFF和 CHECK ...
  • 在上篇文章 淺談SQL Server內部運行機制 中,與大家分享了SQL Server內部運行機制,通過上次的分享,相信大家已經能解決如下幾個問題: 1.SQL Server 體繫結構由哪幾部分組成? 2.SQL Server 體繫結構各模塊之間關係是怎樣的? 3.SQL Server 體繫結構內部 ...
  • 有時候給一些普通用戶授予查詢系統對象(例如dynamic performance views)許可權時會遇到“ORA-02030: can only select from fixed tables/views”,如下所示: SQL> grant select on v$session to test... ...
  • MySQL 使用 查看 執行計劃,該執行計劃不一定完全正確但是可以參考。 select_type | 說明 : : | : : SIMPLE | 簡單查詢 PRIMARY | 最外層查詢 SUBQUERY | 映射為子查詢 DERIVED | 子查詢 UNION | 聯合 UNION RESULT ...
  • 公眾號:SAP Technical 本文作者:matinal 原文出處:http://www.cnblogs.com/SAPmatinal/ 原文鏈接:【HANA系列】SAP HANA XS使用JavaScript數據交互詳解 前言部分 我們都知道web程式都有潛在的安全隱患問題,那麼SAP HAN ...
  • 公眾號:SAP Technical 本文作者:matinal 原文出處:http://www.cnblogs.com/SAPmatinal/ 原文鏈接:【HANA系列】SAP HANA XS使用JavaScript數據交互詳解 前言部分 在第一篇的時候,我們說過如下內容: SAP HANA XS支持 ...
  • 公眾號:SAP Technical 本文作者:matinal 原文出處:http://www.cnblogs.com/SAPmatinal/ 原文鏈接:【HANA系列】SAP HANA XS使用JavaScript數據交互詳解 前言部分 下麵幾篇文章來詳細瞭解一下SAP HANA XS的內容。 HA ...
  • 存儲過程和存儲函數類似於面向對象程式設計語言中的方法,可以簡化代碼,提高代碼的重用性。本文主要介紹如何創建存儲過程和存儲函數,以及存儲過程與函數的使用、修改、刪除等操作。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...