制實戰(zhàn):用Galera搭建Manticore Search高可用集群)
多主復(fù)制實戰(zhàn)用Galera搭建Manticore Search高可用集群【免費下載鏈接】manticoresearchOpen-source search database for full-text, vector, and hybrid search with real-time indexing and SQL.項目地址: https://gitcode.com/gh_mirrors/ma/manticoresearchManticore Search 是一款開源搜索數(shù)據(jù)庫支持全文、向量與混合搜索并內(nèi)置了基于 Galera 庫的多主復(fù)制能力。借助它你可以用幾行 SQL 就把多臺服務(wù)器組成一個高可用集群任意節(jié)點都能讀和寫數(shù)據(jù)幾乎同步節(jié)點故障還能自動剔除和恢復(fù)。本文帶你從零理解到落地完整走通 Manticore Search 高可用集群的搭建與運維。為什么選 Galera 多主復(fù)制很多搜索引擎的集群其實只是分片或主從復(fù)制寫流量被限制在單一主節(jié)點上。而 Manticore Search 的復(fù)制方案由 Galera 庫 驅(qū)動帶來幾個對生產(chǎn)環(huán)境至關(guān)重要的特性 真正的多主隨時可對集群中任意節(jié)點寫入無需選主幾乎同步復(fù)制無從屬延遲節(jié)點崩潰后不丟數(shù)據(jù)熱備份節(jié)點切換零停機(jī)因為根本沒有故障轉(zhuǎn)移到主這一步自動節(jié)點配置新節(jié)點加入時自動拉取數(shù)據(jù)無需手動備份恢復(fù)自動剔除不可靠節(jié)點并支持基于認(rèn)證的復(fù)制。 復(fù)制支持 Linux 和 macOS覆蓋percolate、rt和distributed表Windows 原生版本暫不支持可通過 WSL 使用。完整機(jī)制見官方中文手冊設(shè)置復(fù)制。開工前3 個必配的配置項在配置文件的searchd段落中確認(rèn)以下三項否則復(fù)制無法啟用data_dir— 數(shù)據(jù)目錄純內(nèi)存模式不支持復(fù)制listen— 必須有一個帶replication類型的端口范圍監(jiān)聽器供集群節(jié)點間通信server_id可選— 為每個節(jié)點設(shè)置唯一值保證集群表 Auto ID 不沖突。searchd { listen 9312 listen 192.168.1.101:9360-9370:replication data_dir /var/lib/manticore/ }如果開啟了身份驗證還要給參與復(fù)制的用戶授予replication權(quán)限如GRANT replication ON posts TO repl_user細(xì)節(jié)參見 設(shè)置復(fù)制。五分鐘上手4 步搭建高可用集群假設(shè)你已有一個名為pq_title的實時表三臺機(jī)器node-a、node-b、node-c都裝好了 Manticore Search。第 1 步在 node-a 上創(chuàng)建集群CREATE CLUSTER posts第 2 步把本地表加入集群ALTER CLUSTER posts ADD pq_title第 3 步讓其余節(jié)點加入在 node-b、node-c 上分別執(zhí)行指向任意一個已建集群的節(jié)點即可JOIN CLUSTER posts AT node-a:9312新節(jié)點加入時會自動進(jìn)行狀態(tài)傳輸SST——由現(xiàn)有節(jié)點提供完整數(shù)據(jù)副本無需你手動備份。傳輸過程中可通過cluster_posts_sst_total變量查看 0 到 100 的進(jìn)度說明見 復(fù)制集群狀態(tài)。第 4 步用集群名:表名的方式寫入INSERT INTO posts:pq_title VALUES ( 3, test me )這一行會在 node-a 上執(zhí)行但數(shù)據(jù)會幾乎同步地出現(xiàn)在所有節(jié)點上。讀取則更靈活——SELECT * FROM pq_title直接查本地表即可任何節(jié)點返回的結(jié)果都一致。創(chuàng)建、加入集群的完整語法參見創(chuàng)建復(fù)制集群、加入復(fù)制集群。監(jiān)控集群健康一條 SHOW STATUS 就夠高可用集群最怕帶病運行。執(zhí)行SHOW STATUS可以查看所有集群狀態(tài)變量重點盯住這幾個變量健康值含義cluster_posts_statusprimary集群仲裁存在可正常讀寫cluster_posts_node_statesynced本節(jié)點已完成同步cluster_posts_size3當(dāng)前在群節(jié)點數(shù)cluster_posts_nodes_view—本節(jié)點實際看到的集群成員此外還能看到 SST 進(jìn)度、conf_id成員變更次數(shù)、last_error等。變量清單的完整解釋在 復(fù)制集群狀態(tài) 一節(jié)配合儀表盤可以構(gòu)建完整的集群監(jiān)控面板。節(jié)點故障了怎么辦恢復(fù)手冊多主復(fù)制的精髓在于把集群當(dāng)作一個邏輯系統(tǒng)。按故障場景對號入座即可場景 1單節(jié)點崩潰存活節(jié)點會短暫保留舊成員列表隨后自動剔除故障節(jié)點并重算法定人數(shù)集群繼續(xù)可寫。故障節(jié)點重啟后自動重新加入——若錯過了的事務(wù)還在其他節(jié)點的復(fù)制緩存里走輕量的增量傳輸IST追趕否則走重量級的快照傳輸SST全量拉取。場景 2所有節(jié)點干凈關(guān)閉如機(jī)房維護(hù)每個節(jié)點關(guān)閉時會把復(fù)制狀態(tài)寫入grastate.dat其中seqno事務(wù)序號和safe_to_bootstrap標(biāo)志決定了誰應(yīng)該先啟動。選seqno最大且safe_to_bootstrap: 1的節(jié)點通常是最后關(guān)閉的用特殊模式拉起它searchd --new-cluster其余節(jié)點再正常啟動自動重新加入。systemd 用戶可直接用manticore_new_cluster命令。場景 3所有節(jié)點崩潰grastate.dat的元數(shù)據(jù)已不可靠選擇數(shù)據(jù)最新的節(jié)點用searchd --new-cluster-force強(qiáng)制引導(dǎo)。場景 4仲裁丟失集群變成 non-primary 拒絕寫入在確認(rèn)另一側(cè)確實離線后只在一側(cè)執(zhí)行SET CLUSTER posts GLOBAL pc.bootstrap 1?? 切記絕不能在腦裂的兩側(cè)都執(zhí)行該命令否則會形成兩個永不自動合并的獨立集群。這套恢復(fù)決策的完整推演值得精讀 集群恢復(fù) 與 重啟集群 兩篇官方文檔。實踐避坑清單一張表只屬于一個集群復(fù)制是按表劃域的規(guī)劃好表與集群的歸屬關(guān)系寫語句必須帶集群前綴漏寫posts:前綴會直接報錯這是新手最常見的坑端口范圍別交叉不同集群的replication監(jiān)聽器端口范圍不能重疊每個集群至少預(yù)留兩個端口節(jié)點數(shù)建議取奇數(shù)3 或 5 個節(jié)點的仲裁更穩(wěn)健偶數(shù)集群在分裂時兩側(cè)可能同時失去法定人數(shù)集群生命周期管理增刪節(jié)點用ALTER CLUSTER ... UPDATE nodes退出集群用EXIT CLUSTER參考 管理復(fù)制節(jié)點。寫在最后Manticore Search 用SQL Galera的組合把過去需要分片框架、自研中間件才能實現(xiàn)的多主高可用壓縮成了幾條CREATE CLUSTER/JOIN CLUSTER語句。對于需要實時寫入、又不想忍受復(fù)制延遲的搜索場景電商、日志、推薦召回這套方案值得直接落地。動手時建議從 3 節(jié)點起步配合SHOW STATUS養(yǎng)成日常巡檢習(xí)慣高可用集群便能長期穩(wěn)定運行 【免費下載鏈接】manticoresearchOpen-source search database for full-text, vector, and hybrid search with real-time indexing and SQL.項目地址: https://gitcode.com/gh_mirrors/ma/manticoresearch創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考