Redis構建緩存服務器

環境信息:
redis-master----192.168.12.135
redis-slave-1-----192.168.12.136
redis-slave-2-----192.168.12.137

單機版Redis

安裝Redis

yum install -y gcc make jemalloc jemalloc-devel gcc-c++ wget tcl
yum groupinstall -y "Development Tools"
wget http://download.redis.io/releases/redis-8.0.2.tar.gz
tar xzf redis-8.0.2.tar.gz -C /usr/local/
mv /usr/local/redis-8.0.2  /usr/local/redis
cd /usr/local/redis
mkdir /usr/local/redis/data
vim redis.conf
#找到以下內容進行修改
bind 0.0.0.0    #監聽ip地址
protected-mode no    #關閉保護模式
daemonize yes    #后臺運行
logfile "/var/log/redis.log"   #日志存放位置
save 3600 1 300 100 60 10000    #RDB持久化觸發設置
dir /usr/local/redis/data    #持久化生成文件存放位置
appendonly yes    #開啟AOF持久化make MALLOC=libc
make MALLOC=libc install

編寫使用system管理

vim /lib/systemd/system/redis.service    #編寫使用system管理
[Unit]
Description=Redis
After=network.target[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf  --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown[Install]
WantedBy=multi-user.target

連接數據庫

systemctl daemon-reload    #重新加載system
systemctl start redis    #啟動redis
systemctl status redis    #查看redis是否啟動
netstat -tnlp    #查看6379端口是否監聽
cd /usr/local/redis/src/
./redis-cli -h 192.168.12.135 -p 6379    #連接數據庫
#輸入ping,返回pong測試連接成功

Redis主從

設置主從

從節點根據單機版先進行安裝redis

#以下操作在兩個從節點進行操作
cd /usr/local/redis/
vim redis.conf
replicaof 192.168.12.135 6379    #添加主節點ip及端口號
protected-mode no    #關閉保護模式
#保護模式單節點部署已經關閉systemctl restart redis.service

測試主從

#主節點
cd /usr/local/redis/src/
./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name Disallow
OK
127.0.0.1:6379> get name
"Disallow"
#從節點
127.0.0.1:6379> get name
"Disallow"

查看復制狀態

#主節點
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.12.137,port=6379,state=online,offset=1469,lag=0
slave1:ip=192.168.12.136,port=6379,state=online,offset=1469,lag=0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455#從節點
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.12.135
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_read_repl_offset:1469
slave_repl_offset:1469
replica_full_sync_buffer_size:0
replica_full_sync_buffer_peak:0
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455

Redis哨兵

設置哨兵

#三臺機器都操作
cd /usr/local/redis/
vim sentinel.conf
daemonize yes    #設置哨兵放后臺運行
logfile "/var/log/sentinel.log"    #設置哨兵日志
sentinel monitor mymaster 192.168.12.135 6379 2    #當集群中有2個sentinel認為master死了時,才能真正認為該master已經不可用了。 (slave上面寫的是master的ip,master寫自己ip)
sentinel down-after-milliseconds mymaster 3000    #單位毫秒,默認是30000,根據自己需求修改
sentinel failover-timeout mymaster 10000    ##若sentinel在該配置值內未能完成failover(故障轉移)操作(即故障時master/slave自動切換),則認為本次failover失敗
protected-mode no    #關閉加密模式--新添加到sentinel配置文件中  ----老版本中需需要添加./src/redis-sentinel sentinel.conf    #運行redis 
#老版本:./src/redis-sentinel sentinel.conf & 

測試哨兵

#主節點停止redis
systemctl stop redis.service    
#從節點登錄數據庫查看主從狀態
cd /usr/local/redis/src
./redis-cli
127.0.0.1:6379> info replication

Redis集群搭建

本次搭建使用3臺機器搭建,每臺機器上面兩個redis實例,一個master一個slave,第一列做主庫,第二列做備庫。
redis-cluster1 192.168.12.135 7000、7001
redis-cluster2 192.168.12.136 7002、7003
redis-cluster3 192.168.12.137 7004、7005

Redis安裝及配置文件修改

三臺機器Redis安裝按照單機版先進行按照

#分別在三臺機器創建集群目錄、持久化目錄、配置文件及修改配置文件
#redis-cluster1
mkdir -p /usr/local/redis/cluster/{7000,7001}
mkdir -p /usr/local/redis/data/{7000,7001}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7000
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7001
vim /usr/local/redis/data/7000/redis.conf
bind 192.168.12.135    #每個實例的配置文件修改為對應節點的ip地址
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid    #pid文件,運行多個實例時,需要指定不同的pid文件
logfile /var/log/redis_7000.log    #日志文件位置,運行多實例時,需要將文件修改的不同。
dir /usr/local/redis/data/7000
appendonly yes    #開啟AOF持久化
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes    #啟用集群
cluster-config-file nodes-7000.conf    #集群配置文件,由redis自動更新,不需要手動配置,運行多實例時請注修改為對應端口
cluster-node-timeout 15000    #單位毫秒。集群節點超時時間,即集群中主從節點斷開連接時間閾值,超過該值則認為主節點不可以,從節點將有可能轉為master
cluster-replica-validity-factor 10    #在進行故障轉移的時候全部slave都會請求申請為master,但是有些slave可能與master斷開連接一段時間了導致數據過于陳舊,不應該被提升為master。該參數就是用來判斷slave節點與master斷線的時間是否過長。
cluster-migration-barrier 1    #一個主機將保持連接的最小數量的從機,以便另一個從機遷移到不再被任何從機覆蓋的主機
cluster-require-full-coverage yes  #集群中的所有slot(16384個)全部覆蓋,才能提供服務#7001配置文件將7000內的所有7000更換成7001即可#redis-cluster2
mkdir -p /usr/local/redis/cluster/{7002,7003}
mkdir -p /usr/local/redis/data/{7002,7003}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7002
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7003#7002配置文件將7000內配置文件bind改為‘redis-cluster2’機器的ip,同時將配置文件內7000改為7002即可,7003同理#redis-cluster3
mkdir -p /usr/local/redis/cluster/{7004,7005}
mkdir -p /usr/local/redis/data/{7004,7005}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7004
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7005#7004配置文件將7000內配置文件bind改為‘redis-cluster3’機器的ip,同時將配置文件內7000改為7004即可,7005同理

Redis啟動及集群創建

#啟動三臺機器上面的每個節點
#redis-cluster1
cd /usr/local/redis/src/
./redis-server ../cluster/7000/redis.conf 
./redis-server ../cluster/7001/redis.conf#redis-cluster2
cd /usr/local/redis/src/
./redis-server ../cluster/7002/redis.conf 
./redis-server ../cluster/7003/redis.conf#redis-cluster3cd /usr/local/redis/src/
./redis-server ../cluster/7004/redis.conf 
./redis-server ../cluster/7005/redis.conf#創建集群:在其中一個節點操作就可以
#redis節點搭建起來后,需要完成redis cluster集群搭建,搭建集群過程中,需要保證6個redis實例都是運行狀態。Redis是根據IP和Port的順序,確定master和slave的,所以要排好序,再執行。
cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005
#--cluster-replicas 1:表示為集群中的每個主節點創建一個從節點.書寫流程:主節點ip+port 對應一個從節點ip+port(正常是前面三個節點為主節點,后面的為從節點)

查看Redis集群狀態

cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005

執行完這個顯示類似如下內容則集群部署成功,中途需要輸入yes確認

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.12.136:7003 to 192.168.12.135:7000
Adding replica 192.168.12.137:7005 to 192.168.12.136:7002
Adding replica 192.168.12.135:7001 to 192.168.12.137:7004
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000slots:[0-5460] (5461 slots) master
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001replicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002slots:[5461-10922] (5462 slots) master
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003replicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004slots:[10923-16383] (5461 slots) master
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005replicates e0370608cd33ddf5bb6de48b5627799e181de3b6
Can I set the above configuration? (type 'yes' to accept): yes  #寫yes同意
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.12.135:7000)
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001slots: (0 slots) slavereplicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003slots: (0 slots) slavereplicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005slots: (0 slots) slavereplicates e0370608cd33ddf5bb6de48b5627799e181de3b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看集群狀態可連接集群中的任一節點,此處連接了集群中的節點192.168.12.135:7000

[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.136:7002> cluster info  #查看集群信息
cluster_state:ok  #集群狀態
cluster_slots_assigned:16384 #分配的槽
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6 #集群實例數
......192.168.12.135:7000> cluster nodes  #查看集群實例

集群操作

客戶端登陸–測試鏈接redis,存取數據(鏈接集群中任意一臺機器就可以。)

[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.135:7000> set name qianfeng
-> Redirected to slot [5798] located at 192.168.12.136:7002
OK
192.168.12.136:7002>[root@redis-cluster3 src]# ./redis-cli -h 192.168.12.136 -c -p 7002
192.168.12.136:7002> ping 
PONG
192.168.12.136:7002> get name
"qianfeng"
192.168.12.136:7002> exists name  #查看某一個key是否存在
(integer) 1

主從切換

將節點內主節點關閉,登錄從節點查看執行CLUSTER nodes查看是否主從切換成功

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

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

相關文章

vscode python debugger關閉編輯器內的變量值自動顯示

vscode 的python debugger調試器的最新版本2025.8.0, 會默認把變量的值顯示出來, 如下圖所示關閉的方法: 打開vscode的settings.json, 左下角點擊齒輪按鈕, 選擇setting(設置), 然后在右上角三個按鈕最中間的那個(open setting json), 輸入 "debug.inlineValues": &q…

App爬蟲工具篇-appium配置

接著上篇文章App爬蟲工具篇-Appium安裝,安裝好了之后,還是不夠的,要讓其能夠驅動手機端,還需要配置。這節課就深入說說如何配置Appium。 安卓手機 如果我們要使用 Android 設備做 App 抓取的話,還需要下載和配置 Android SDK,這里推薦直接安裝 Android Studio,其下載地…

SpringAI系列 - 基于Spring AI 1.0.0 的AI助手實現示例

目錄 一、基于 Spring AI 1.0.0 的AI助手實現示例二、AI助手架構設計2.1 系統范圍與上下文 C12.2 容器圖 C22.3 AI助手組件圖 C3三、注意事項四、快速啟動五、如何啟用MCP一、基于 Spring AI 1.0.0 的AI助手實現示例 結合前文系列的介紹,本專欄提供了一個基于Spring AI 1.0.0…

電池預測 | 第33講 Matlab基于CNN-LSTM-Attention的鋰電池剩余壽命預測,附鋰電池最新文章匯集

電池預測 | 第33講 Matlab基于CNN-LSTM-Attention的鋰電池剩余壽命預測,附鋰電池最新文章匯集 目錄電池預測 | 第33講 Matlab基于CNN-LSTM-Attention的鋰電池剩余壽命預測,附鋰電池最新文章匯集預測效果基本描述程序設計參考資料源碼地址: 電…

軟考(軟件設計師)數據庫原理-SQL

一、SQL基本數據類型 SQL 數據類型速查表類別數據類型說明范圍/示例適用場景整數類型INT / INTEGER標準整數類型-2 到 2-1 (-2,147,483,648 到 2,147,483,647)ID、年齡、數量等SMALLINT小范圍整數-32,768 到 32,767小范圍數值BIGINT大范圍整數-2? 到 2?-1大額訂單號、時間戳T…

docker 安裝數據集成平臺 Apache SeaTunnel 服務

獲取官方鏡像 從 Docker Hub 上拉取最新的 Apache SeaTunnel 鏡像: docker pull apache/seatunnel:latest創建目錄 sudo mkdir -p /data/{conf,logs} # 需要 root 權限創建 /data 目錄 sudo chown -R $USER:$USER /data # 將目錄權限給當前用戶(可選&a…

數據結構:數組:線性查找(Linear Search)

目錄 什么是線性查找? 時間復雜度分析 🧠 線性查找的優化 方法一:Move to Front(哨兵) 方法二:Transportation(向前交換一步) 什么是線性查找? 我們先問&#xf…

石子入水波紋效果:UV擾動著色器實現

利用UV坐標擾動來模擬水面是一種常見且有效的技術手段,上述效果主要通過對水面紋理的UV坐標進行動態偏移或擾動,從而模擬水波的流動和波紋效果。資源下載具體實現和原理如下: 基本思路:通過對水面紋理的UV坐標加上時間相關的擾動函數(如正弦波、余弦波、噪聲函數等),使紋…

Java Lambda 類型推斷詳解:filter() 方法與 Predicate<? super T>

一、問題核心解析1. 代碼示例分析List<String> strings Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered strings.stream().filter(string -> !str…

XSS:xss.haozi.me靶場練習

超鏈接:alert(1) 知識點: html <&#xff01;--被注釋的內容--> <&#xff01;--被注釋的內容!--> php /*被注釋的內容*/ //被注釋的內容 javascript /*被注釋的內容*/ //被注釋的內容 MySQL …

ubuntu 20.04 安裝中文輸入法 (sougou pin yin)

安裝搜狗輸入法包 參照官方指南完成 如果提示沒有找到相關依賴&#xff0c;添加一下源&#xff1a; sudo add-apt-repository universe sudo apt update重啟。

(DETR)End-to-End Object Detection with Transformers論文精讀(逐段解析)

(DETR)End-to-End Object Detection with Transformers論文精讀&#xff08;逐段解析&#xff09; 論文地址&#xff1a;https://arxiv.org/abs/2005.12872 CVPR 2020 Facebook AI 發布 Abstract. We present a new method that views object detection as a direct set pred…

[linux][shell]通過分析 Nginx 的訪問日志,檢測異常 IP 地址并使用iptables 將其封禁

這段腳本的作用是通過分析 Nginx 的訪問日志&#xff0c;檢測異常的 IP 地址&#xff0c;并使用 iptables 封禁這些 IP。#!/bin/bash# 配置變量 LOG_FILE"/usr/local/nginx/logs/access.log" THRESHOLD10 DROP_LOG_FILE"/tmp/drop_ip.log" DATE$(date &quo…

stm32cube ide如何將工具鏈替換成arm-none-eabi-gcc

在 STM32Cube IDE 中替換工具鏈為GNU Arm Embedded Toolchain (arm-none-eabi-gcc)&#xff0c;可按以下步驟操作&#xff1a; 1. 檢查是否已安裝工具鏈 首先確認系統中是否已安裝 arm-none-eabi-gcc&#xff1a; Windows&#xff1a;檢查環境變量 PATH 中是否包含工具鏈路徑…

Linux 系統 /etc/ 配置

在Linux系統中&#xff0c;/etc/ 目錄是系統配置文件的核心存放位置&#xff0c;包含了各種系統服務、應用程序和硬件的配置信息。以下是該目錄下常見的重要配置文件和子目錄&#xff1a; 核心系統配置文件 /etc/hostname 系統主機名配置&#xff0c;直接決定當前系統的名稱。/…

【跟著PMP學習項目管理】項目管理 之 成本管理知識點

目錄 一、估算成本 1、知識點匯總 2、輸入 3、工具 4、輸出 二、預算成本 1、知識點匯總 2、輸入 3、工具 4、輸出 三、控制成本 1、知識點匯總 2、輸入 3、工具 4、輸出 一、估算成本 1、知識點匯總 1) 估算工具的用法 2、輸入 范圍基準、人力資源計劃、項…

TCP相關實驗

目錄 TCP相關實驗 理解CLOSE_WAIT狀態 理解???TIME_WAIT狀態 解決TIME_WAIT狀態引起的bind失敗的方法 理解listen的第二個參數 ?編輯 使用Wireshark分析TCP通信流程 TCP與UDP TCP與UDP對比 用UDP實現可靠傳輸&#xff08;經典面試題&#xff09; TCP相關實驗 理解…

Spring Boot項目初始化:官方與阿里云服務地址對比指南

服務提供商 官方&#xff08;start.spring.io Spring&#xff09; 官方提供的服務&#xff0c;由Pivotal&#xff08;VMware&#xff09;維護&#xff0c;是標準的初始化工具。 阿里云&#xff08;start.aliyun.com&#xff09; 阿里云提供的國內鏡像服務&#xff0c;針對中國開…

創客匠人創始人IP案例:從個人品牌到企業增長的全鏈路拆解

認知破局&#xff1a;為什么創客匠人創始人IP能撬動企業增長&#xff1f;在知識付費工具競爭同質化的當下&#xff0c;創客匠人創始人老蔣以“IP變現領軍人”的IP形象&#xff0c;為企業打開了差異化增長通道。當同行還在比拼“功能數量”時&#xff0c;老蔣通過《領導者請停止…

UVC(USB Video Class,USB 視頻類)協議

UVC&#xff08;USB Video Class&#xff0c;USB 視頻類&#xff09;協議并非專門僅用于相機&#xff0c;但其核心應用場景集中在視頻采集設備&#xff0c;相機是最典型的代表。其適用設備除了常見的 USB 相機&#xff08;包括 webcam、工業相機、監控攝像頭等&#xff09;&…