redis分布式集群-redis+keepalived+ haproxy

redis分布式集群架構(Redis+Keepalived+Haproxy)至少需要3臺服務器、6個節點,一臺服務器2個節點。

redis分布式集群架構中的每臺服務器都使用六個端口來實現多路復用,最終實現主從熱備、負載均衡、秒級切換的目標。

redis分布式集群架構思路為:keepalived給haproxy做高可用,當一臺haproxy出現故障時,高可用會將另一臺備用的haproxy作為master,繼續給后端提供服務,防止單點故障。

部署redis集群

第一步,環境準備。

redis分布式集群架構至少需要3臺服務器、6個節點,一臺機器2個節點,創建出3個master節點、3個salve節點環境。

第一臺服務器:

私網IP:x.x.x.x?redis-master 6001?redis-slave 6002

第二臺服務器:

私網IP:y.y.y.y?redis-master 6001?redis-slave 6002

第三臺服務器:

私網IP:z.z.z.z?redis-master 6001?redis-slave 6002

第二步,安裝redis。(每臺服務器都安裝)

命令:yum -y install redis

若結果顯示“redis-6.0.5-1.11.al8.x86_64”,則說明成功安裝了redis-6.0.5。

第三步,啟動redis服務。(每臺服務器都啟動)

命令:systemctl start redis

若結果顯示“Active: failed”,則需要把文件/usr/lib/systemd/system/redis.service中的“--daemonize no --supervised systemd”去掉,注釋掉“Type=notify”,最后再次啟動redis,服務狀態為“Active: active (running)。

systemctl stop redis

systemctl restart redis

systemctl daemon-reload

# 設置開機自啟動

命令:systemctl enable redis

# 查看服務狀態是否為“Active: active (running)”

命令:systemctl status redis

ps -ef | grep redis

netstat -nap | grep ?6379

# 服務端啟動成功后,啟動redis 客戶端,查看端口號。

命令:redis-cli

set [key] [value]

get [key]

exit

ps -ef | grep redis

netstat -nap | grep 6379

第四步,在/usr/local中新建/redis/6001/conf、/redis/6001/data、/redis/6001/log、 /redis/6002/conf、/redis/6002/data和/redis/6002/log文件夾。(每臺服務器都新建)

命令:mkdir -p /usr/local/redis/{6001,6002}/{conf,data,log}

第五步,將/etc/redis.conf配置文件復制粘貼到文件夾/usr/local/redis/6001/conf。(每臺服務器都復制)

命令:cp /etc/redis.conf /usr/local/redis/6001/conf

cp /etc/redis.conf /usr/local/redis/6002/conf

步,配置redis.conf(每臺服務器都配置)

redis主編輯配置/usr/local/redis/6001/conf/redis.conf文件,做以下幾處修改:

“bind 127.0.0.1”改為“bind 0.0.0.0”,“protected-mode yes”改為“protected-mode no”,“port 6379”改為“port 6001”,“daemonize no”改為“daemonize yes”,“requirepass foobared”改為requirepass "redis123456",“dir ./”改為“dir /usr/local/redis/6001/data”,“pidfile /var/run/redis_6379.pid”改為“pidfile /usr/local/redis/6001/redis.pid”,“logfile ”改為“logfile /usr/local/redis/6001/log/redis.log”,“appendonly no”改為“appendonly yes”,“# cluster-enabled yes”改為“cluster-enabled yes”,“# cluster-config-file nodes-6379.conf”改為“cluster-config-file /usr/local/redis/6001/conf/nodes.conf”,“# cluster-node-timeout 15000”改為“cluster-node-timeout 5000”。

redis從編輯配置/usr/local/redis/6002/conf/redis.conf文件,做以下幾處修改:

“bind 127.0.0.1”改為“bind 0.0.0.0”,“protected-mode yes”改為“protected-mode no”,“port 6379”改為“port 6002”,“daemonize no”改為“daemonize yes”,“requirepass foobared”改為requirepass "redis123456",“dir ./”改為“dir /usr/local/redis/6002/data”,“pidfile /var/run/redis_6379.pid”改為“pidfile /usr/local/redis/6002/redis.pid”,“logfile ”改為“logfile /usr/local/redis/6002/log/redis.log”,“appendonly no”改為“appendonly yes”,“# cluster-enabled yes”改為“cluster-enabled yes”,“# cluster-config-file nodes-6379.conf”改為“cluster-config-file?/usr/local/redis/6002/conf/nodes.conf”,“# cluster-node-timeout 15000”改為“cluster-node-timeout 5000”。

第七步,重新啟動redis服務。(每臺服務器都重啟)

# 關閉redis服務

命令:systemctl stop redis

ps -ef | grep redis

或??ss -tnlp|grep redis

# 重新啟動redis服務

命令:/usr/bin/redis-server /usr/local/redis/6001/conf/redis.conf

/usr/bin/redis-server /usr/local/redis/6002/conf/redis.conf

第八步,檢查redis啟動情況。(每臺服務器都檢查)

命令:ps -ef | grep redis

或????ss -tnlp|grep redis

?

?

第九步,創建redis集群。

命令:/usr/bin/redis-cli --cluster create x.x.x.x:6001 x.x.x.x:6002 y.y.y.y:6001 y.y.y.y:6002 z.z.z.z:6001 z.z.z.z:6002 --cluster-replicas 1

ps -ef|grep redis

第十步,redis集群驗證。

# 連接集群

命令:redis-cli -c -p 6001 -a redis123456

部署keepalived

第一步,環境準備。

redis分布式集群架構選擇任意兩個節點進行配置,實現主從熱備和秒級切換。

keepalived主服務器私網IP:x.x.x.x?redis-master 6001?redis-slave 6002

keepalived備服務器私網IP:y.y.y.y?redis-master 6001?redis-slave 6002

高可用虛擬IP:v.v.v.v

第二步,安裝keepalived。(keepalived主、備服務器都安裝)

命令:yum -y install keepalived

若結果顯示“keepalived-2.2.4-6.al8.x86_64”,則說明成功安裝了keepalived-2.2.4。

第三步,配置keepalived.conf文件。(keepalived主、備服務器都配置)

1)配置Keepalived主服務器中的/etc/keepalivedkeepalived.conf文件,代碼如下:

global_defs {router_id redis-master}vrrp_script redis_check {script "/etc/keepalived/scripts/haproxy_check.sh"interval 4weight -5fall 3rise 2}vrrp_instance VI_REDIS {state MASTERinterface eth0virtual_router_id 51priority 150advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy}virtual_ipaddress {v.v.v.v}}

2)先利用命令“mkdir -p /etc/keepalived/scripts”在Keepalived主服務器創建文件夾。然后在新建文件夾中創建haproxy_check.sh腳本,在腳本中寫入下面代碼:

#!/bin/bashsystemctl status haproxy | grep runningif [ $? -ne 0 ];thensystemctl stop keepalivedfi

3)配置Keepalived備服務器中的/etc/keepalivedkeepalived.conf文件,代碼如下:

global_defs {router_id redis-slave}vrrp_script redis_check {script "/etc/keepalived/scripts/haproxy_check.sh"interval 4weight -5fall 3rise 2}vrrp_instance VI_REDIS {state BAKCUPinterface eth0virtual_router_id 51priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy}virtual_ipaddress {v.v.v.v}}

4)先利用命令“mkdir -p /etc/keepalived/scripts”在Keepalived備服務器創建文件夾。然后在新建文件夾中創建haproxy_check.sh腳本,在腳本中寫入下面代碼:

#!/bin/bashsystemctl status haproxy | grep runningif [ $? -ne 0 ];thensystemctl stop keepalivedfi

步,給新建的腳本加上可執行權限。(keepalived主、備服務器都加上

命令:chmod +x /etc/keepalived/scripts/*.sh

第五步,開啟服務驗證

關掉Keepalived主服務器的keepalived服務之后,VIP可以漂移Keepalived備服務器。

部署haproxy

第一步,環境準備。

redis分布式集群架構選擇安裝keepalived的兩個服務器來部署haproxy,haproxy訪問6379端口時,輪詢訪問六個節點。

keepalived主服務器私網IP:x.x.x.x?redis-master 6001?redis-slave 6002

keepalived備服務器私網IP:y.y.y.y?redis-master 6001?redis-slave 6002

高可用虛擬IP:v.v.v.v

第二步,安裝haproxy。

命令:yum -y install haproxy

第三步,配置haproxy.cfg文件。

配置/etc/haproxy/haproxy.cfg文件,在文件中寫入下面代碼:

globallog ????????????????????127.0.0.1 local0chroot ?????????????????/var/lib/haproxypidfile ????????????????/var/run/haproxy.pidmaxconn ????????????????4000user ???????????????????nobodygroup ??????????????????nobodydaemondefaultsmode ????????????????????httplog ?????????????????????globaloption ??????????????????dontlognullretries ?????????????????3maxconn ?????????????????3000contimeout ??????????????50000clitimeout ??????????????50000srvtimeout ??????????????50000listen statsbind ???????????????????*:8888stats ??????????????????enablestats ??????????????????hide-versionstats uri ??????????????/haproxystats realm ????????????Haproxy\ statsstats auth ?????????????admin:adminstats admin ????????????if TRUElisten ?redisbind *:6379mode tcpbalance roundrobinserver redis1 x.x.x.x:6001 checkserver redis2 x.x.x.x:6002 checkserver redis3 y.y.y.y:6001 checkserver redis4 y.y.y.y:6002 checkserver redis5 z.z.z.z:6001 checkserver redis6 z.z.z.z:6002 check

第四步,配置haproxy rsyslog.conf文件。

vim /etc/rsyslog.conf

在/etc/rsyslog.conf文件中做出如下修改:

“# Provides UDP syslog reception# for parameters see http://www.rsyslog.com/doc/imudp.html#module(load="imudp") # needs to be done just once#input(type="imudp" port="514")”修改為“# Provides UDP syslog reception$ModLoad imudp$UDPServerRun 514”;“# Provides TCP syslog reception# for parameters see http://www.rsyslog.com/doc/imtcp.html#module(load="imtcp") # needs to be done just once#input(type="imtcp" port="514")”修改為“# Provides TCP syslog reception$ModLoad imtcp$InputTCPServerRun 514”;添加“# haproxy loglocal0.* ????????????????/var/log/haproxy.log”。

第五步,haproxy訪問6379端口時,輪詢訪問六個節點

命令:redis-cli -c -p 6379 -h v.v.v.v?-a redis123456

測試

經測試,keepalived優先級最高的服務器(私網:x.x.x.x?keepalived主+haproxy)中的兩個redis節點不能同時被殺死,否則集群會馬上停止,但是重啟該服務器,集群就會馬上恢復。

另兩臺服務器中的任何一臺服務器發生宕機(或者兩個redis節點掛掉)都不會影響redis集群的使用。

redis集群負載比較低。

需要注意redis集群缺點:

redis集群模式下只能選擇db0,選擇其他庫會出現類似“(error) ERR SELECT is not allowed in cluster mode”的異常。

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

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

相關文章

使用Edge和chrom擴展工具(GoFullPage)實現整頁面截圖或生成PDF文件

插件GoFullPage下載:點擊免費下載 如果在瀏覽網頁時,有需要整個頁面截圖或導出PDF文件的需求,這里分享一個Edge瀏覽器的擴展插件:GoFullPage。 這個工具可以一鍵實現頁面從上到下滾動并截取。 一、打開“管理擴展”(…

網絡設備(防火墻、路由器、交換機)日志分析監控

外圍網絡設備(如防火墻、路由器、交換機等)是關鍵組件,因為它們控制進出公司網絡的流量。因此,監視這些設備的活動有助于 IT 管理員解決操作問題,并保護網絡免受攻擊者的攻擊。通過收集和分析這些設備的日志來監控這些…

Python 3 使用Hadoop 3之MapReduce總結

MapReduce 運行原理 MapReduce簡介 MapReduce是一種分布式計算模型,由Google提出,主要用于搜索領域,解決海量數據的計算問題。 MapReduce分成兩個部分:Map(映射)和Reduce(歸納)。…

tauri-react:快速開發跨平臺軟件的架子,支持自定義頭部和窗口陰影效果

tauri-react 一個使用 taurireacttsantd 開發跨平臺軟件的模板,支持窗口頭部自定義和窗口陰影,不用再自己做適配了,拿來即用,非常 nice。 開原地址:GitHub - Sjj1024/tauri-react: 一個最基礎的使用tauri和react開發…

生成式 AI 在泛娛樂行業的應用場景實踐 – 助力風格化視頻內容創作

感謝大家閱讀《生成式 AI 行業解決方案指南》系列博客,全系列分為 4 篇,將為大家系統地介紹生成式 AI 解決方案指南及其在電商、游戲、泛娛樂行業中的典型場景及應用實踐。目錄如下: 《生成式 AI 行業解決方案指南與部署指南》《生成式 AI 在…

一個概率論例題引發的思考

浙江大學版《概率論與數理統計》一書,第13章第1節例2: 這個解釋和模型比較簡單易懂。 接下來,第13章第2節的例2也跟此模型相關: 在我自己的理解中,此題的解法跟上一個題目一樣,其概率如下面的二維矩陣&a…

聊聊計算機技術

目錄 1.計算機的概念 2.計算機的發展過程 3.計算機的作用 4.計算機給人類帶來的福利 1.計算機的概念 計算機是一種用于處理和存儲數據的電子設備。它能夠執行各種操作,比如計算、邏輯操作、數據存儲和檢索等。計算機由硬件和軟件兩部分組成。 計算機的硬件包括中…

Go 語言并發編程 及 進階與依賴管理

1.0 從并發編程本質了解Go高性能的本質 1.1 Goroutine 協程可以理解為輕量級線程; Go更適合高并發場景原因之一:Go語言一次可以創建上萬協成; “快速”:開多個協成 打印。 go func(): 在函數前加 go 代表 創建協程; time.Sleep():…

基于深度信念網絡的西儲大學軸承故障分類識別,基于EMD+DBN的西儲大學軸承故障識別,LCD+DBN,LMD+DBN

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) (EMD,LCD,LMD)+DBN的深度信念網絡的西儲大學軸承故障分類識別 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類…

Nacos使用SpringCloudAlibaba+Dubbo實現

Nacos簡介 Nacos是阿里的一個開源產品,它是針對微服務架構中的服務發現、服務治理、配置管理的綜合型解決方案。 官方介紹是這樣的: Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、…

CSDN編程題-每日一練(2023-08-14)

CSDN編程題-每日一練(2023-08-14) 一、題目名稱:小股炒股二、題目名稱:王子闖閘門三、題目名稱:圓小藝 一、題目名稱:小股炒股 時間限制:1000ms內存限制:256M 題目描述: …

Linux學習之防火墻概述

防火墻分類: 軟件防火墻:常用于數據包的過濾,比如限制某些ip或者端口,進行某些數據的轉發或者傳送 硬件防火墻:防御地域攻擊 軟件防火墻的分類: 包過濾防火墻:控制比較寬泛,防御效果…

ISIS技術(第三十七課)

1 分享一下華為官網上的一張地圖 官網地址:https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0000001501534705 2 路由的分類 -直連路由 直接連接的路由,且配置了IP地址之后(在同一網段內),就是直連路由。 -非直連路由 -靜態路由…

Shell命令之eval命令

1、基本作用 二次執行命令 2、基本格式 eval command-line3、例如 以下命令無法執行 pipe"|" ls $pipe wc -l ls: -l: No such file or directory ls: wc: No such file or directory ls: |: No such file or directory以下命令可以執行 eval ls $pipe wc -lSh…

Apache Dubbo概述

一、課程目標 1. 【了解】軟件架構的演進過程 2. 【理解】什么是RPC 3. 【掌握】Dubbo架構 4. 【理解】注冊中心Zookeeper 5. 【掌握】Zookeeper的安裝和使用 6. 【掌握】Dubbo入門程序 7. 【掌握】Dubbo管理控制臺的安裝和使用 8. 【理解】Dubbo配置二、分布式RPC框架Apache …

2021年06月 C/C++(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

第1題:數字放大 給定一個整數序列以及放大倍數x,將序列中每個整數放大x倍后輸出。 時間限制:1000 內存限制:65536 輸入 包含三行: 第一行為N,表示整數序列的長度(N ≤ 100); 第二行為N個整數(不超過整型范圍…

(css)點擊前隱藏icon圖表 點擊后顯示

(css)點擊前隱藏icon圖表 點擊后顯示 效果 html <liv-for"(item,index) in sessionList":key"index"class"liClass":class"{ active: change2 index }"tabindex"2">...<el-tooltip class"item" effec…

c++病毒/惡搞代碼大全( 下 )

注&#xff1a;以下代碼應勿用于非法&#xff08;Dev-c5.11實測可用&#xff09; 警告:以下為危險/永久性程序&#xff0c;請慎重使用 8. 效果:禁用任務管理器 提示:可能被殺毒軟件攔截 #include <stdio.h> #include <windows.h> int main() {HKEY hkey;DWORD …

Neo4j之OPTIONAL MATCH基礎

OPTIONAL MATCH 是 Neo4j 查詢語言 Cypher 中的一種關鍵字&#xff0c;用于在查詢中執行可選的模式匹配。它允許你在匹配節點和關系的過程中&#xff0c;即使匹配失敗也不影響整個查詢結果。OPTIONAL MATCH 允許你查找與指定模式匹配的數據&#xff0c;如果匹配失敗&#xff0c…

分布式監控平臺——Zabbix

市場上常用的監控軟件&#xff1a; 傳統運維&#xff1a;zabbix、 Nagios 一、zabbix概述 作為一個運維&#xff0c;需要會使用監控系統查看服務器狀態以及網站流量指標&#xff0c;利用監控系統的數據去了解上線發布的結果&#xff0c;和網站的健康狀態。 利用一個優秀的監…