阿里雲Polardb國產資料庫高可用部署實踐
一、背景介紹
自從阿里於2010年發動了IOE運動,2013年因美國一起安全事件,將去IOE重要性重新推上另一個高度。政府部門、銀行、電信行業、製造業等各類企業紛紛進行各自的去IOE試點。近些年國內資料庫軟體越來越成熟,資料庫國產化成了熱門話題。企業都開始選擇成熟國產資料庫軟體來國產化,讓自己的業務資料庫不再對現有的資料庫軟體有更強的依賴性。
本次某省移動資訊科技部門挑選了一個業務系統做國產化資料庫試點上線,最終選用了高度相容Oracle的阿里雲Polardb-O資料庫。此次國產化試點上線本人有幸重度參與專案其中。接下來的分享會為各位讀者精心挑選阿里雲Polardb-O資料庫運維場景並續集的形式來介紹, 高可用部署、軟體版本升級、功能維護性測試、高可用測試、日常巡檢、效能監控、應急演練、應急保障、備庫與恢復、備份策略、Polardb常見問題等常見場景。
二、資料庫系統規劃
本方案高可用部署採用阿里雲Poardb-O 11.2版本部署搭建1主1備高可用叢集。主備節點之間採用流複製將pg_wal日誌檔案進行主備資料庫實時同步,確保主從節點資料一致性。同時透過 Cluster Mangaer叢集管控軟體來管理主從資料庫節點,實現主備庫之間能自動與手動切換,確保主備資料庫切換資料不丟失情況,還能提供資料庫高可用服務。
2.1 主機資訊
2.2 網路卡配置需求
考慮到備份、高可用方面的需要,建議萬兆網及以上。
2.3 架構圖
2.4 安裝部署規劃
三、 基礎軟體部署
3.1 環境準備
1 關閉OS透明大頁
# 透過引數關閉大頁 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local # 驗證是否關閉了透明大頁 grep HugePages_Total /proc/meminfo cat /proc/sys/vm/nr_hugepages |
2 核心引數調優
修改核心引數誰的 /etc/sysctl.conf ,增加以下內容後,執行 sudo sysctl -p 生效。
vm.dirty_expire_centisecs=3000 net.ipv4.tcp_synack_retries=2 net.core.rmem_default=262144 vm.dirty_background_bytes=409600000 net.core.wmem_default=262144 vm.mmap_min_addr=65536 vm.overcommit_ratio=90 kernel.shmmni=819200 net.core.rmem_max=4194304 vm.dirty_writeback_centisecs=100 fs.file-max=76724600 net.core.somaxconn=4096 fs.aio-max-nr=1048576 net.ipv4.tcp_max_tw_buckets=262144 vm.swappiness=0 fs.nr_open=20480000 net.ipv4.tcp_fin_timeout=5 net.ipv4.ip_local_port_range=40000 65535 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_mem=8388608 12582912 16777216 kernel.shmmax = 329853488332 kernel.shmall=80530636 kernel.shmmni = 4096 kernel.msgmax = 65536 kernel.msgmni = 2005 kernel.msgmnb = 65536 kernel.sem=4096 2147483647 2147483646 512000 net.ipv4.tcp_keepalive_intvl=20 net.ipv4.tcp_keepalive_time=60 vm.overcommit_memory=0 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_max_syn_backlog=4096 net.ipv4.tcp_timestamps=1 net.ipv4.tcp_rmem=8192 87380 16777216 net.ipv4.tcp_wmem=8192 65536 16777216 net.core.wmem_max=4194304 vm.dirty_ratio=80 net.core.netdev_max_backlog=10000 vm.zone_reclaim_mode=0 net.ipv4.tcp_tw_reuse=1 vm.nr_hugepages=192000 vm.nr_overcommit_hugepages=1000000 vm.overcommit_memory = 2 |
建立 /etc/security/limits.d/polardb_limits.conf ,內容如下:
* soft nofile 655360 * hard nofile 655360 * soft nproc 655360 * hard nproc 655360 * soft memlock unlimited * hard memlock unlimited * soft core unlimited * hard core unlimited |
3 關閉防火牆和selinux
-- 關閉防火牆 systemctl stop firewalld systemctl disable firewalld -- 關閉 selinux vi /etc/selinux/config SELINUX=disabled -- 修改為disabled |
4 建立polardb使用者和組
groupadd polardb;useradd -g polardb polardb echo " 密碼 " | passwd polardb --stdin |
5 設定polardb使用者使用sudo許可權
1 先檢視系統是否安裝sudo,可以使用命令 rpm -qa sudo 檢視,若沒有安裝,可以使用yum安裝 yum -y install sudo
#rpm -qa sudo sudo-1.8.6p7-16.el7.x86_64 |
2、把polardb使用者加入wheel組,加入此組才有sudo許可權
#usermod -aG wheel polardb # id polardb uid=1002(polardb) gid=1005(polardb) groups=1005(polardb),10(wheel) |
3 、把如下 polardb使用者加入配置檔案/etc/sudoers
polardb ALL=(ALL) NOPASSWD: ALL |
4
、遠端sudo ssh
開啟(
這一項特別注意不操作會影響後面節點加入
CM
)
sudo sed -i 's/Defaults requiretty/#Defaults requiretty/g' /etc/sudoers sudo cat /etc/sudoers | grep requiretty |
3.2 安裝polardb軟體
這裡軟體包是用 rpm 二進位制方式安裝
s udo rpm -ivh t-polarstore-pfsd-san-1.1.41-20200830160257.alios7.x86_64.rpm sudo rpm -ivh PolarDB-O-0200-2.0.0-20200902034114.alios7.x86_64.rpm |
3.3 配置polardb使用者環境變數
為 polardb 使用者配置環境變數,切換 polardb 使用者,在 .bash_profile 檔案中新增如下內容,最後使用命令 source .bash_profile 生效環境變數。
3.4 安裝與配置PFS軟體
PFS 檔案系統用於儲存 Polardb-O 資料庫資料,本方案提供了四塊 sd* 裸盤,採集 LVM 磁碟管理方式來管理這 4 塊盤,後續磁碟擴容直接使用 LVM 擴容,建立邏輯卷方式用於 PFS 磁碟配置。這裡詳細描述如何裸盤如何採用 LVM 來建立邏輯卷,詳細配置過程請參考方案《 Polardb-O linux LVM 邏輯卷管理配置》。 這裡以建立好的邏輯卷 /vda/data 為例來配置 PFS 檔案系統。配置安裝 PFS 時需要佔用名稱為 $PFSDISK 的裝置。在安裝過程中過程中會格式化該裝置,如果 /dev/$PFSDISK 已經掛載過了,要 umount 該裝置。依次執行以下命令進行初始化:
1. 以 polardb 使用者登入,執行以下命令,格式化 $PFSDISK 裝置 sudo /usr/local/bin/pfs -C disk mkfs -u 30 -l 1073741824 -f $PFSDISK 2. 等待一段時間,回顯輸出 pfs mkfs succeeds! 後,執行以下命令,啟動 PFS 服務 sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p $PFSDISK 3. 執行以下命令,建立 PFS 的資料庫目錄 sudo /usr/local/bin/pfs -C disk mkdir $PFSDIR |
3.5 配置polardb資料庫
3.5.1 初始化資料庫叢集
PolarDB-O 在資料庫啟動之前需要執行初始化資料庫叢集,請用 polardb 使用者登入,執行如下初始化資料庫命令:
initdb -D $PGDATA -E UTF8 --locale=C -U polardb |
3.5.2 初始化PFS資料
如下命令請用 polardb 使用者操作,下面命令用途是將本地 $PGDATA 下面的資料複製到 PFS 磁碟上。後續資料庫載入直接讀寫 PFS 磁碟檔案。
sudo /usr/local/polardb_o_current/bin/polar-initdb.sh $PGDATA/ $PFSDIR/ disk |
3.5.3 調整引數檔案
初始化資料庫叢集后,資料庫的引數檔案 postgresql.conf 檔案中都是預設引數,使用者可以根據自身需要進行修改,如下以記憶體 100 規格為例,需要修改的核心配置引數如下:
引數名 |
引數值 |
說明 |
autovacuum_max_workers |
8 |
指定同時執行的 最大的 autovacuum 程式,預設為3 個。 |
autovacuum_work_mem |
8G |
每個worker 可使用的最大記憶體數 |
effective_cache_size |
220GB |
提供可用於磁碟快取記憶體的記憶體量的估計值 |
maintenance_work_mem |
4GB |
用於維護任務的記憶體設定。預設值為64MB 。 |
max_connections |
36100 |
資料庫最大連線數 |
max_parallel_maintenance_workers |
16 |
支援內建的過程使用並行的方式工作,例如建立索引,預設設定為2 |
max_parallel_workers |
32 |
資料庫允許的最大並行程式數 |
max_parallel_workers_per_gather |
24 |
支援並行的查詢使用的執行緒數 |
max_sync_workers_per_subscription |
32 |
每個訂閱者的最大同步模式的工作執行緒數 |
max_wal_size |
128GB |
在自動WAL 檢查點使得WAL 增長到最大尺寸。 |
min_wal_size |
64GB |
只要WAL 磁碟使用率低於這個設定,舊的WAL 檔案總數被回收,以供將來檢查點使用 |
shared_buffers |
220GB |
資料庫服務使用的共享記憶體緩衝區 |
wal_buffers |
16MB |
將其WAL (預寫日誌)記錄寫入緩衝區,然後將這些緩衝區重新整理到磁碟 |
work_mem |
64MB |
每個程式可以使用的工作記憶體空間 |
特別注意:
如果在修改 Polardb 資料庫引數檔案 postgresql.conf 之前啟動過資料庫,請先確認檔案 $PGDATA/polar_node_static.conf 是否存在,若存在請將其 $PGDATA/polar_node_static.conf 檔案刪除後再啟動資料庫,否則會影響 Polardb-O 資料庫正常啟動。
為了實現其他機器對 PolarDB for O 資料庫的訪問,還需要修改訪問控制檔案,即 pg_hba.conf ,一般是放開所有的 ipv4 的訪問,尾部新增如下配置:
vi $PGDATA/pg_hba.conf host all all 0.0.0.0/0 md5 host replication all 0.0.0.0/0 md5 |
3.5.4 啟停資料庫軟體
在修改完配置檔案之後, polardb 使用者可以執行命令如下,啟動資料庫:
pg_ctl start -D $PGDATA pg_ctl stop -D $PGDATA |
3.6 檢查資料庫安裝
3.6.1 資料庫檢查
資料庫啟動之後,使用 polardb 使用者可以透過 PolarDB-O 核心二進位制包中自帶的 psql 客戶端進行連通測試,執行如下命令:
psql -h$PGDATA -p$PGPOR T -c “select 1” psql -h$PGDATA -p$PGPORT -c"select version()" |
3.6.2 服務程式檢查
資料庫啟動成功之後,會在資料庫目錄下生成一個 postmaster.pid ,其中第一行是 PolarDB forO 守護程式 pid ,使用者可以透過 ps -a|grep 守護程式 pid 檢查 PolarDB-O 程式情況,如需要檢查 polar-postgres 、logger 、checkpoin ter 、 walwriter 、 autovacuum … 等程式
四、Polardb主備高可用部署安裝
4.1 初始化主節點
初化主節點需要進行如下操作:
主庫初始化操作需要完成以上第三章節的3.2~3.6章節內容。
4.2 建立主庫流複製賬號
使用 polardb 使用者可以透過 psql 客戶端建立流複製使用者 。
psql -h$PGDATA -p$PGPORT -c"create user replicator password ' 密碼 ' superuser; " |
4.3 備庫初始化
初化化備節點需要進行如下操作:
1、對軟硬體環境進行安裝配置,請完成第3章節,3.1環境準備、3.2polardb-O資料庫軟體安裝、3.3配置使用者環境、3.4配置安裝PFS。
2、在備份執行pg_basebackup命令,使用主庫資料目錄和PFS初始化備庫資料目錄。(注意$PGDATA目錄不能提前建立,只建立字首目錄/app)
polar_basebackup -h< 主庫 IP> -p5432 -U replicator -D $PGDATA --polardata=$PFSDIR --polar_storage_cluster_name=disk --polar_disk_name=$PFSDISK --polar_host_id=2 -X stream --progress --write-recovery-conf -v |
3、修改備庫postgresql.conf檔案中的引數 $PFSDISK 替換成 PFS 實際檔案目錄, $PFSIR 替換成實際的裝置盤名稱
polar_hostid = 2 polar_disk_name = $PFSDISK polar_datadir = $PFSDIR polar_storage_cluster_name = 'disk' |
4、 啟動和檢查備庫節
點 啟動與檢查備節點可驗證資料庫是否連線成功。具體操作如下:
pg_ctl -c start -D $PGDATA psql -h$PGDATA -p$PGPORT |
如果能連通,則證明資料庫安裝成功,並且啟動成功。
4.4 檢查主庫流複製狀態
備節點啟動之後,可使用psql 連線主節點,檢查流複製狀態。在主庫使用如下sql 確認流複製建立成功:
psql -h$PGDATA -p$PGPORT -c"select * from pg_stat_replication;" |
如果看到standby1 節點建立的流複製節點,則說明主備搭建成功。
4.5 cluster manager 叢集管控部署
4.5.1 CM主機初始化配置
安裝 CM 軟體前需要對 CM 主機程式作業系統預配置準備,請參考第 三 章節,配置完成 3.1 小節下面的環境準備。
4.5.2 叢集節點主機互信關係建立
CM 需要遠端管理主備節點,需要打通CM 到主備兩臺主機之間戶型關係。這裡統一用polardb 使用者來建立戶信關係,polardb 使用者執行如下命令
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub polardb 節點 1 ssh-copy-id -i ~/.ssh/id_rsa.pub polardb 節點 2 # 測試互信關係是否配置好,執行如下命令不需要輸密碼,說明互信已打通。 ssh polardb 節點 1 date;ssh polardb 節點 2 date; |
4.5.3 CM軟體安裝
在cm 節點上安裝cluster_manager ,如下所示:
rpm -ivh polardb_cluster_manager-1.0.0-1.x86_64.rpm |
4.5.4 CM服務配置
1 、配置探針使用者
在主庫主機上建立aurora 探測使用者:
/usr /local/polardb_o_current/bin/createuser -p $PGPORT -h $PGDATA --login aurora -P -s # 這裡密碼配置為“ 密碼 ” |
2
、建立配置檔案
在CM 伺服器上面,使用polardb 使用者建立一個配置目錄
mkdir -p /app/polardb_cluster_manager/ /conf #polardb_cluster_manager.conf 檔案中新增如下內容: vi /app/polardb_cluster_manager/ conf/polardb_cluster_manager.conf { "work_mode":"PolarPure", "consensus":{ "port":5001 }, "account_info":{ "aurora_user":"aurora", "aurora_password":" 密碼 ", "replica_user":"replicator", "replica_password":" 密碼 " }, "cluster_info":{ "port":5000 } } |
4.5.5 CM服務管理
1、 啟動服務
在CM 主機上使用polardb 使用者啟動CM 服務
/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py /app/polardb_cluster_manager start |
2、 停止服務
/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py /app/polardb_cluster_manager stop |
3、
檢視服務
/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py /app/polardb_cluster_manager status |
4.6 CM叢集管理
4.6.1 配置資料庫節點資訊
在Cluster Manager 節點將主庫節點加入CM管控
curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/app/polardb_data\",\"ip\":\" < 主庫 IP>\",\"port\":\"5432\",\"type\":\" Master\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"} " |
在 Cluster Manager 節點將備庫節點加入CM管控
curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/app/polardb_data\",\"ip\":\" < 備 IP>\",\"port\":\"5432\",\"type\":\" Standby \",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}" |
4.6.2 配置HA VIP地址
在高可用方式下,對外提供資料庫伺服器的主機除了有一個真實 IP 外還有一個虛擬 IP ,使用這兩個 IP 都可以連線到該主機,所有專案中資料庫連結配置的都是到虛擬 IP ,當伺服器發生故障無法對外提供服務時,動態將這個虛 IP 切換到備用主機。
curl -H "Content-Type:application/json" -X POST --data "{\"vip\":\" <VIP 地址 >\",\"mask\":\"255.255.255.0\",\"interface\":\"team0\"} " |
4.6.3 叢集狀態檢查
使用如下命令可以檢查主備庫在活狀態,VIP 漂流具體節點。
curl -H "Content-Type:application/json"
4.6.4 手動切換主從關係
在CM 主機上透過如下命令可以完成手動主備切換
curl -H "Content-Type:application/json" -X POST --data "{\"from\":\" < 主庫 IP>:5432\",\"to\":\"< 備庫 IP>:5432\"}" |
五、總結
經過此次國產化資料庫專案實踐經驗總結,我們在軟體功能性測試、業務改造和高可用等功能場景上花了很多時間來研究與測試,測試過程中碰到了很多坑,也積累了很多國產化資料庫經驗,避免國產化資料庫新手踩坑,有興趣的朋友可以一起來交流與探討。
有需要的朋友可以關注我的公眾號,文章每日一更
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2728303/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 阿里雲Polardb國產資料庫補丁升級 實踐阿里資料庫
- Oracle資料庫遷移至PolarDb(阿里雲資料庫)Oracle資料庫阿里
- KubeBlocks完成阿里雲PolarDB資料庫產品生態整合認證BloC阿里資料庫
- KubeBlocks 完成阿里雲 PolarDB 資料庫產品生態整合認證啦!BloC阿里資料庫
- 把雲資料庫帶回家!阿里雲釋出POLARDB Box資料庫一體機資料庫阿里
- 阿里雲原生資料庫POLARDB壓力測試報告阿里資料庫測試報告
- 重磅 | 把雲資料庫帶回家!阿里雲釋出POLARDB Box資料庫一體機資料庫阿里
- openGauss資料庫部署實踐(華為雲開發者雲實驗)資料庫
- 阿里雲PolarDB-X資料庫透過分散式資料庫金融標準驗證阿里資料庫分散式
- 阿里雲釋出第七代ECS、雲原生資料庫PolarDB-X等重磅新產品阿里資料庫
- MSSQL·最佳實踐·RDSSDK實現資料庫遷移上阿里雲RDSSQLServerSQL資料庫阿里Server
- 乾貨|上雲了,如何保障雲資料庫的高可用?資料庫
- MySQL資料庫高可用方案MySql資料庫
- ES資料庫高可用配置資料庫
- 國泰產險引入阿里雲Lindorm資料庫 實現儲存成本降低75%阿里ORM資料庫
- 阿里雲黃貴:PolarDB-X:雲原生時代資料庫的新可能性阿里資料庫
- GaussDB跨雲容災:實現跨地域的資料庫高可用能力資料庫
- 阿里雲DataWorks實踐:資料整合+資料開發阿里
- 使用阿里雲PolarDB替代Oracle資料庫,申通完美扛過618業務高峰阿里Oracle資料庫
- posgresql資料庫高可用方案-patroniSQL資料庫
- 天翼雲高可用虛擬IP(HAVIP)實踐
- 雲中SQL Server高可用性最佳實踐SQLServer
- 阿里雲王林平:一站式資料庫上雲最佳實踐阿里資料庫
- CapitalOne - Artifactory高可用叢集的自動化部署實踐API
- 深度解析國內首個雲原生資料庫POLARDB的“王者榮耀”資料庫
- 乾貨 | 京東雲資料庫RDS SQL Server高可用概述資料庫SQLServer
- 分庫分表中介軟體的高可用實踐
- 國產瀚高資料庫簡單實踐 及 authentication method 13 not supported 錯誤解決方法資料庫
- Centos 7 搭建MariaDB 資料庫高可用CentOS資料庫
- 資料庫高可用性簡史資料庫
- 主流零售ISV全面整合阿里雲PolarDB資料庫 助力零售企業加速上雲阿里資料庫
- Gitlab倉庫管理系統-高可用部署Gitlab
- 前沿分享|阿里雲高階技術專家 王若(百潤): 資料庫遊戲行業最佳實踐阿里資料庫遊戲行業
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構
- 企業級雲資料庫最佳實踐資料庫
- HBase可用性分析與高可用實踐
- PolarDB資料庫LVM管理配置資料庫LVM
- 華為雲FunctionGraph構建高可用系統的實踐Function