k8s-MongoDB 副本集部署

前提準備

一套 k8s 集群

worker 節點上的?/nfs/data 目錄掛載到磁盤

一、NFS 高可用方案(NFS+keepalived+Sersync)

????????本方案 NFS 的高可用方案,應用服務器為 Client ,兩臺文件服務器分別 Master 和 Slave,使用 keepalived 生成一個虛擬 IP,使用 Sersync 進行 Master 與 Slave 之間文件相互同步,確保高可用。

安裝前準備

角色系統版本IP

虛擬 ip(Vip)

192.168.32.116

Client

CentOS Linux 8192.168.32.50

Master

CentOS Linux 8192.168.32.30
SlaveCentOS Linux 8192.168.32.40
  • 在 Master 和 Slave 上創建共享目錄

mkdir /nfs/data
chmod 777 -R /nfs/data
  • 在 Client 上創建掛載目錄

mkdir /qiyuesuodata
  • 關閉 Client 、Master 和 Slave 服務器上的防火墻

# 關閉防火墻
systemctl stop firewalld# 關閉開機自啟
systemctl disable firewalld
  • 在 Client 、Master 和 Slave 服務器上安裝 NFS 服務

yum -y install nfs-utils rpcbind
  • 配置 NFS 共享目錄

在 Master、Slave?上執行

# 其中/data 為共享的目錄,192.168.32.50 為 Client ip,如有多個私有云服務集群可用空格分隔
# 如 echo '/nfs/data 192.168.32.50(rw,sync,all_squash) 192.168.32.40(rw,sync,all_squash)' >> /etc/exportsecho '/nfs/data 192.168.32.50(rw,sync,all_squash) 192.168.32.40(rw,sync,all_squash) 192.168.32.30(rw,sync,all_squash) 192.168.32.20(rw,sync,all_squash) 192.168.32.10(rw,sync,all_squash)' >> /etc/exports# 開啟服務systemctl start rpcbind && systemctl start nfs-server.service# 設置開機自啟systemctl enable rpcbind && systemctl enable nfs-server.service# 出現:Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.即成功
  • 在 Client 上執行掛載測試

# 測試 Master 
# 其中 ip 為 Master 的 ip,/nfs/data為 Master 共享的目錄,/qiyuesuodata 為需要掛載至 Client 的目錄mount -t nfs 192.168.32.30:/nfs/data /qiyuesuodata
# 檢查 
df -Th 
# 出現  192.168.32.30:/nfs/data      nfs4       29G  7.6G   22G  27% /qiyuesuodata 即為成功
# 去除掛載
umount /qiyuesuodata# 測試 Slave
# 其中 ip 為 Slave 的 ip,/nfs/data為 Slave 共享的目錄,/qiyuesuodata 為需要掛載至 Client 的目錄mount -t nfs 192.168.32.40:/nfs/data /qiyuesuodata
# 檢查 
df -Th 
# 出現  192.168.32.40:/nfs/data      nfs4       29G  7.6G   22G  27% /qiyuesuodata 即為成功
# 去除掛載
umount /qiyuesuodata
  • 在 Slave 進行同步 Master 數據

# 安裝 rsync
yum -y install rsync.x86_64# 修改 /etc/rsyncd.conf 如下,其中 hosts allow 填寫 master ip
uid = nfsnobody
gid = nfsnobody
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /nfs/data
auth users = data
secrets file = /etc/rsync_salve.pass
hosts allow = 192.168.32.30# 生成認證文件
echo 'data:data123' > /etc/rsync_salve.pass
chmod 600 /etc/rsync_salve.pass# 修改 文件夾權限
groupadd nfsnobody
useradd -g nfsnobody nfsnobody
chown -R nfsnobody:nfsnobody /data/# 啟動服務rsync --daemon --config=/etc/rsyncd.conf 
  • 在 Master 上測試

yum -y install rsync.x86_64
chown -R nfsnobody:nfsnobody /nfs/data/
echo "data123" > /etc/rsync.pass
chmod 600 /etc/rsync.pass# 創建測試文件,測試推送
cd /nfs/data/
echo "This is test file" > file.txt
rsync -arv /nfs/data/ data@192.168.32.30::data --password-file=/etc/rsync.pass# 在 slave 上測試
ls /nfs/data # 出現 file.txt 即可
  • 在 Master 上配置自動同步

cd /usr/local/wget https://dl.qiyuesuo.com/private/nfs/sersync2.5.4_64bit_binary_stable_final.tar.gztar xvf sersync2.5.4_64bit_binary_stable_final.tar.gzmv GNU-Linux-x86/ sersynccd sersync/# 修改配置文件
sed -ri 's#<delete start="true"/>#<delete start="false"/>#g' confxml.xmlsed -ri '24s#<localpath watch="/opt/tongbu">#<localpath watch="/nfs/data">#g' confxml.xmlsed -ri '25s#<remote ip="127.0.0.1" name="tongbu1"/>#<remote ip="192.168.32.30" name="data"/>#g' confxml.xmlsed -ri '30s#<commonParams params="-artuz"/>#<commonParams params="-az"/>#g' confxml.xmlsed -ri '31s#<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>#<auth start="true" users="data" passwordfile="/etc/rsync.pass"/>#g' confxml.xmlsed -ri '33s#<timeout start="false" time="100"/><!-- timeout=100 -->#<timeout start="true" time="100"/><!-- timeout=100 -->#g' confxml.xml#啟動Sersync
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
  • 測試

# 在 master 中的/nfs/data 目錄創建文件
touch test
# 查看 salve 中的 /nfs/data 是否有該文件

以上就做完了 salve 同步 master 的文件,但是當 master 宕機后恢復,master 無法同步 salve 文件,所以要配置 master 同步 salve 文件

  • 在 Master 進行同步 slave 數據

# 安裝 rsync
yum -y install rsync.x86_64# 修改 /etc/rsyncd.conf 如下,其中 hosts allow 填寫 slave ip
uid = nfsnobody
gid = nfsnobody
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /nfs/data
auth users = data
secrets file = /etc/rsync_salve.pass
hosts allow = 192.168.32.40# 生成認證文件
echo 'data:data123' > /etc/rsync_salve.pass
chmod 600 /etc/rsync_salve.pass# 修改 文件夾權限
groupadd nfsnobody
useradd -g nfsnobody nfsnobody
chown -R nfsnobody:nfsnobody /data/# 啟動服務rsync --daemon --config=/etc/rsyncd.conf 
  • 在 Slave 上測試

yum -y install rsync.x86_64
chown -R nfsnobody:nfsnobody /nfs/data/
echo "data123" > /etc/rsync.pass
chmod 600 /etc/rsync.pass# 創建測試文件,測試推送
cd /nfs/data/
echo "This is test file" > test.txt
rsync -arv /nfs/data/ data@192.168.32.40::data --password-file=/etc/rsync.pass# 在 master 上測試
ls /nfs/data # 出現 test.txt 即可
  • 在 Slave 上配置自動同步

# 安裝 rsync
yum -y install rsync.x86_64# 修改 /etc/rsyncd.conf 如下,其中 hosts allow 填寫 master ip
uid = nfsnobody
gid = nfsnobody
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /nfs/data
auth users = data
secrets file = /etc/rsync_salve.pass
hosts allow = 192.168.32.30# 生成認證文件
echo 'data:data123' > /etc/rsync_salve.pass
chmod 600 /etc/rsync_salve.pass# 修改 文件夾權限
groupadd nfsnobody
useradd -g nfsnobody nfsnobody
chown -R nfsnobody:nfsnobody /data/# 啟動服務rsync --daemon --config=/etc/rsyncd.conf 

至此我們已經做好了主從相互同步的操作

  • 安裝 Keepalived

在 Master 上執行

yum -y install keepalived.x86_64
# 修改 /etc/keepalived/keepalived.conf
# 其中 ens192 為綁定網卡名稱,可以使用 ip addr 命令查看
# 其中 192.168.32.116  為虛擬 ip ,注意不要和其它 ip 沖突global_defs {router_id master   # 一般是主機名稱,通過hostname獲取  
}#定義腳本。固定間隔時間執行
vrrp_script chk_mysql {script "killall -0 mysqld"  # 檢測haproxy狀態,若無對應進程,則權重降級,備用keepalived啟用interval 2weight -30fall 5rise 5
}# 定義主機信息
vrrp_instance VI_1 {state MASTER  # 主機填寫MASTERinterface ens192  # 設置實例綁定的網卡garp_master_delay 1virtual_router_id 10  # 虛擬路由器id號。主從必須一致priority 100  # 定義優先級,數字越大,優先級越高 advert_int 1  # 心跳頻率unicast_src_ip 192.168.32.30 # 本機ip
unicast_peer {192.168.32.40 # 對端ip
}authentication {auth_type PASSauth_pass zuanlan1437xi
}
virtual_ipaddress {#192.168.112.210 dev ens33 label ens33:0192.168.32.116  # 虛擬 ip(vip)
}#執行上面定義的腳本
track_script {chk_mysql
}
}# 啟動服務
systemctl start  keepalived.service && systemctl enable keepalived.service

在 Slave 上執行

global_defs {router_id salve   # 一般是主機名稱,通過hostname獲取
}#定義腳本。固定間隔時間執行
vrrp_script chk_mysql {script "killall -0 mysqld"  # 檢測haproxy狀態,若無對應進程,則權重降級,備用keepalived啟用interval 2weight -30fall 5rise 5
}# 定義主機信息
vrrp_instance VI_1 {state BACKUP  # 主機填寫MASTERinterface ens192  # 設置實例綁定的網卡garp_master_delay 1virtual_router_id 10  # 虛擬路由器id號。主從必須一致priority 90  # 定義優先級,數字越大,優先級越高advert_int 1  # 心跳頻率unicast_src_ip 192.168.32.40 # 本機ip
unicast_peer {192.168.32.30 # 對端ip
}authentication {auth_type PASSauth_pass zuanlan1437xi
}
virtual_ipaddress {#192.168.112.210 dev ens33 label ens33:0192.168.32.116  # 虛擬 ip(vip)
}#執行上面定義的腳本
track_script {chk_mysql
}
}# 啟動服務
systemctl start  keepalived.service && systemctl enable keepalived.service
  • 在 Master 上執行 查看 vip?

ip a | grep  ens
# 出現
# inet 192.168.32.116/32 scope global enp0s3
# 即成功
  • vip 漂移、搶占 測試

# 關閉 master 上的 keepalive 服務
systemctl stop keepalived# 在 salve 上查看 vip
ip a | grep ens
出現 32.116 即為漂移成功# 測試搶占模式,啟動 master 上的 keepalive 服務
systemctl start keepalive# 查看 vip 是否回到本機
ip a | grep ens
出現 32.116 即為搶占成功
  • VIP 掛載測試,在 Client 上通過 vip 掛載測試

mount -t nfs 192.168.32.116:/nfs/data /qiyuesuodata# 如 /qiyuesuodata 目錄中有共享目錄中文件則說明掛載成功
umount /qiyuesuodata/
  • 設置 keepalived 腳本

????????因為 ip 的漂移是根據 keepalived 的存活來判斷的,所以在 nfs 宕機之后需要手動停止 keepalived 服務來進行 ip 的切換,這里在 Master 上編寫一個定時任務來檢測 nfs 服務是否宕機

cd /usr/local/sbin
# 生成文件check_nfs.sh
#!/bin/sh
# 每秒執行一次
step=1 #間隔的秒數,不能大于60 
for (( i = 0; i < 60; i=(i+step) )); do ###檢查nfs可用性:進程和是否能夠掛載/sbin/service nfs status &>/dev/nullif [ $? -ne 0 ];then###如果服務狀態不正常,先嘗試重啟服務/sbin/service nfs restart/sbin/service nfs status &>/dev/nullif [ $? -ne 0 ];then# 如服務仍不正常,停止 keepalivedsystemctl stop keepalived.servicefifisleep $step 
done 
  • 加入定時任務

chmod 777 /usr/local/sbin/check_nfs.sh
crontab -e
# 輸入定時任務
* * * * *  /usr/local/sbin/check_nfs.sh &> /dev/null
  • 在 Client 添加定時任務,當 Master 宕機時進行重新掛載

cd /usr/local/sbin
# 生成文件check_mount.sh#!/bin/sh
# 每秒執行一次
step=1 #間隔的秒數,不能大于60 
for (( i = 0; i < 60; i=(i+step) )); do mount=`df -Th|grep qiyuesuodata`if [ $mount = "" ];thenumount /qiyuesuodatamount mount -t nfs 192.168.32.116:/data /qiyuesuodatafisleep $step 
done 
  • 加入定時任務

chmod 777 /usr/local/sbin/check_mount.sh
crontab -e
# 輸入定時任務
* * * * *  /usr/local/sbin/check_nfs.sh &> /dev/null

未完待續。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92875.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92875.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92875.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BI 系統數據看板全解析:讓數據可視化驅動業務決策

BI 系統數據看板全解析&#xff1a;讓數據可視化驅動業務決策在 BI 系統中&#xff0c;數據看板是連接原始數據與業務洞察的 “橋梁”。它將零散的業務指標轉化為直觀的可視化圖表&#xff0c;讓產品經理、運營人員等角色能快速把握業務動態。一個設計精良的數據看板&#xff0…

圖機器學習(14)——社交網絡分析

圖機器學習&#xff08;14&#xff09;——社交網絡分析0. 前言1. 數據集分析1.1 數據集介紹1.2 使用 networkx 加載數據集2. 網絡拓撲和社區檢測2.1 網絡拓撲2.2 社區檢測0. 前言 社交網站的崛起是近年來數字媒體領域最活躍的發展趨勢之一&#xff0c;數字社交互動已經融入人…

深入解析Hadoop MapReduce中Reduce階段排序的必要性

MapReduce概述與Reduce階段簡介MapReduce作為Hadoop生態系統的核心計算框架&#xff0c;其設計思想源自Google論文&#xff0c;通過"分而治之"的理念實現海量數據的并行處理。該模型將計算過程抽象為兩個關鍵階段&#xff1a;Map階段負責數據分解和初步處理&#xff…

7月23日華為機考真題第二題-200分

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ bishipass.com 02. 圖書館資源分配系統 問題描述 A先生是一位圖書館管理員,負責管理圖書采購和分配工作。圖書館收到了來自不同出版社的圖書批次,同時有多位讀者代表排隊申請圖書…

基于深度學習的圖像分類:使用ResNet實現高效分類

最近研學過程中發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊鏈接跳轉到網站人工智能及編程語言學習教程。讀者們可以通過里面的文章詳細了解一下人工智能及其編程等教程和學習方法。下面開始對正文內容的…

JVM:工具

JVMjpsjstatjmapjhatjstackjconsolejvisualvmjps jps&#xff08; Java Virtual Machine Process Status Tool &#xff09;&#xff0c;是 JDK 中的一個命令行工具&#xff0c;用于列出當前正在運行的 JVM 實例的信息。其對于監控和管理運行在多個 JVM 上的 Java 應用程序特別…

Elasticsearch Circuit Breaker 全面解析與最佳實踐

一、Circuit Breaker 簡介 Elasticsearch 是基于 JVM 的搜索引擎&#xff0c;其內存管理十分重要。為了避免單個操作或查詢耗費過多內存導致節點不可用&#xff0c;Elasticsearch 引入了 Circuit Breaker&#xff08;熔斷器&#xff09;機制。當內存使用達到熔斷器預設閾值時&a…

ARM-定時器-定時器函數封裝配置

以TIMER7為例&#xff0c;對定時器函數進行封裝注意事項&#xff1a;GD32中TIMER7是高級定時器&#xff0c;相關詳細請參考上一篇文章。main.c//main.c#include "gd32f4xx.h" #include "systick.h" #include <stdio.h> #include "main.h" …

【日志】unity俄羅斯方塊——邊界限制檢測

Bug修復記錄 項目場景 嘗試使用Unity獨自制作俄羅斯方塊&#xff08;也許很沒有必要&#xff0c;網上隨便一搜就有教程&#xff09; 問題描述 俄羅斯方塊的邊緣檢測出錯了&#xff0c;對方塊進行旋轉后&#xff0c;無法到達最左側或者最下側的位置&#xff0c;以及其他問題。演…

C++ string:準 STL Container

歷史STL 最初是一套獨立的泛型庫&#xff08;Alexander Stepanov 等人貢獻&#xff09;&#xff0c;后來被吸納進 C 標準庫&#xff1b;std::basic_string 則是早期 C 標準&#xff08;Cfront / ARM 時代&#xff09;就存在的“字符串類”&#xff0c;并非 STL 原生物。std::st…

Golang學習筆記--語言入門【Go-暑假學習筆記】

目錄 基礎語法部分相關概念 基礎語法部分概念詳解 可見性 導包 內部包 運算符 轉義字符 函數 風格 函數花括號換行 代碼縮進 代碼間隔 花括號省略 三元表達式 數據類型部分相關概念 數據類型部分概念詳解 布爾類型 整型 浮點型 復數類型 字符類型 派生類型…

linux中kill 命令使用詳解

在Linux系統里&#xff0c;kill命令的主要功能是向進程發送信號&#xff0c;以此來控制進程的運行狀態。下面為你詳細介紹它的使用方法&#xff1a; 基礎語法 kill [選項] [進程ID]進程ID也就是PID&#xff0c;可通過ps、pgrep或者top等命令來獲取。 常用信號及其含義 信號可以…

Nginx 安裝與 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服務器

Nginx 安裝與 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服務器 一、Nginx安裝 1. 安裝依賴項 sudo yum groupinstall "Development Tools" -y # 非必須 sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y2.下載Nginx wget http://n…

寫個 flask todo app,簡潔,實用

- 此項目雖然看起來簡單&#xff0c;實際上&#xff0c;修改成自己喜歡的樣子&#xff0c;也是費時間的。 - 別人都搞AI 相關的項目&#xff0c;而我還是搞這種基礎的東西。不要灰心。 - 積累。不論項目大小&#xff0c;不論難易&#xff0c;只看是否有用。項目地址&#xff1a…

4麥 360度定位

要在 ESP32 上用 4 個麥克風實現 360 聲源定位&#xff0c;通常思路是通過 時延估計&#xff08;TDOA&#xff09; 幾何計算&#xff0c;核心流程&#xff1a;陣列布置將 4 個麥克風等間距布置成正方形&#xff08;或圓形&#xff09;。記陣列中心為原點&#xff0c;麥克風編號…

使用yolov10模型檢測視頻中出現的行人,并保存為圖片

一、使用yolov10模型檢測視頻中出現的行人&#xff0c;并保存為圖片&#xff0c;detect_person.py代碼如下&#xff1a;from ultralytics import YOLOv10 import glob import os import cv2 import argparsedef detect_person(videoPath, savePath):if not os.path.exists(save…

現在希望用git將本地文件crawler目錄下的文件更新到遠程倉庫指定crawler目錄下,命名相同的文件本地文件將其覆蓋

git checkout main git pull origin main $source “D:\黑馬大數據學習\crawler” $dest Join-Path (Get-Location) “crawler” if (-not (Test-Path $dest)) { New-Item -ItemType Directory -Path $dest | Out-Null } Copy-Item -Path $source* -Destination $dest -Recur…

網絡調制技術對比表

&#x1f4ca; 網絡調制技術全維度對比表?調制技術??簡稱??頻譜效率??抗噪性??功率效率??復雜度??關鍵特性??典型應用場景??幅度鍵控?ASK低差高低/低電路簡單&#xff0c;易受干擾遙控器、光通信(OOK)?頻移鍵控?FSK低-中中中中/中抗噪較好&#xff0c;頻譜…

優化 Elasticsearch JVM 參數配置指南

一、概述 Elasticsearch 是基于 JVM 的搜索和分析引擎。JVM 參數的合理配置直接影響著 Elasticsearch 的性能和穩定性。盡管 Elasticsearch 已經提供了默認的 JVM 設置&#xff0c;但在某些特定場景下&#xff0c;我們可能需要進行適當的調整和優化。 本文將詳細講述如何安全、…

Python, Go 開發如何進入心流狀態APP

要開發一款基于Python和Go語言、幫助用戶進入“心流”狀態&#xff08;高度專注、高效愉悅的心理狀態&#xff09;的應用&#xff0c;需結合兩種語言的技術優勢&#xff08;Go的高并發與性能、Python的靈活性與AI生態&#xff09;及心流觸發機制&#xff08;清晰目標、即時反饋…