Redis集群安裝(三主三從一哨兵)
一,搭建環境
? 在三臺服務器上分別搭建redis并測試是否能啟動(搭建方法)
二,Redis cluster三主三從
配置環境變量
vim /etc/profile
#添加如下內容
export REDIS_HOME=/usr/local/redis/redis-6.0.5
export PATH=$PATH:$REDIS_HOME/bin
1.搭建節點
以一臺為例子,其他可以節點一樣,重復操作即可。建議在三臺機器上搭建,一臺機器一主一從
①創建文件夾
mkdir -p /usr/local/redis/redis_cluster/6380/conf/ mkdir -p /usr/local/redis/redis_cluster/6380/logs/ mkdir -p /usr/local/redis/redis_cluster/6380/data/mkdir -p /usr/local/redis/redis_cluster/6381/conf/mkdir -p /usr/local/redis/redis_cluster/6381/logs/ mkdir -p /usr/local/redis/redis_cluster/6381/data/
②創建配置文件
6380節點
vim /usr/local/redis/redis_cluster/6380/conf/redis.conf
文件內容:
# bind 127.0.0.1 這一行給注釋掉,這里的bind指的是只有指定的網段才能遠程訪問這個redis,注釋掉后,就沒有這個限制了。
#bind 127.0.0.1
# 設置端口,區分集群中Redis的實例
port 6380
# 后臺運行
daemonize yes
# pid進程文件名,以端口號命名
pidfile /var/run/redis-6380.pid
# 日志文件名稱,以端口號為目錄來區分
logfile /usr/local/redis/redis_cluster/6380/logs/redis.log
# 數據文件存放地址,以端口號為目錄名來區分
dir /usr/local/redis/redis_cluster/6380/data
# 啟用集群
cluster-enabled yes
# 配置每個節點的配置文件,同樣以端口號為名稱
cluster-config-file nodes_6380.conf
# 配置集群節點的超時時間
cluster-node-timeout 15000
# 啟動AOF增量持久化策略
appendonly yes
# 發生改變,則記錄日志
appendfsync always#900 秒內至少有 1 個 key 被改變
save 900 1
#300 秒內至少有 300 個 key 被改變
save 300 10
#60 秒內至少有 10000 個 key 被改變
save 60 10000
# 后臺存儲錯誤停止寫。
stop-writes-on-bgsave-error yes
# 存儲至本地數據庫時(持久化到 rdb 文件)是否壓縮數據,默認為 yes
rdbcompression yes
# RDB 文件的是否直接偶像 chcksum
rdbchecksum yes
# 本地持久化數據庫文件名,默認值為 dump.rdb
dbfilename dump.rdb
# 密碼,注意集群各節點密碼要保持一致
requirepass cquisse
6381節點
vim /usr/local/redis/redis_cluster/6381/conf/redis.conf
文件內容:
# bind 127.0.0.1 這一行給注釋掉,這里的bind指的是只有指定的網段才能遠程訪問這個redis,注釋掉后,就沒有這個限制了。
#bind 127.0.0.1
# 設置端口,區分集群中Redis的實例
port 6381
# 后臺運行
daemonize yes
# pid進程文件名,以端口號命名
pidfile /var/run/redis-6381.pid
# 日志文件名稱,以端口號為目錄來區分
logfile /usr/local/redis/redis_cluster/6381/logs/redis.log
# 數據文件存放地址,以端口號為目錄名來區分
dir /usr/local/redis/redis_cluster/6381/data
# 啟用集群
cluster-enabled yes
# 配置每個節點的配置文件,同樣以端口號為名稱
cluster-config-file nodes_6381.conf
# 配置集群節點的超時時間
cluster-node-timeout 15000
# 啟動AOF增量持久化策略
appendonly yes
# 發生改變,則記錄日志
appendfsync always#900 秒內至少有 1 個 key 被改變
save 900 1
#300 秒內至少有 300 個 key 被改變
save 300 10
#60 秒內至少有 10000 個 key 被改變
save 60 10000
# 后臺存儲錯誤停止寫。
stop-writes-on-bgsave-error yes
# 存儲至本地數據庫時(持久化到 rdb 文件)是否壓縮數據,默認為 yes
rdbcompression yes
# RDB 文件的是否直接偶像 chcksum
rdbchecksum yes
# 本地持久化數據庫文件名,默認值為 dump.rdb
dbfilename dump.rdb
# 密碼,注意集群各節點密碼要保持一致
requirepass cquisse
2.設置開機啟動
vim /etc/rc.local
#添加如下內容
/usr/local/redis/redis-6.0.5/bin/redis-server /usr/local/redis/redis_cluster/6380/conf/redis.conf
/usr/local/redis/redis-6.0.5/bin/redis-server /usr/local/redis/redis_cluster/6381/conf/redis.conf
如果開機啟動不生效,可以執行 chmod +x /etc/rc.d/rc.local
3.啟動各個節點,創建集群,檢查狀態
redis-server /usr/local/redis/redis_cluster/6380/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/6381/conf/redis.conf
查看啟動情況
ps -ef|grep redis root 1535085 1 0 18:05 ? 00:00:32 redis-server [ip]6380 [cluster] root 1535625 1 2 18:08 ? 00:01:22 redis-server [ip]:6381 [cluster] root 1546480 19893 0 19:10 pts/0 00:00:00 grep --color=auto redis
創建集群,這里的IP是外網IP,-a后面是密碼,2>/dev/null 是將標準錯誤忽略。要確保加入的節點是empty。如果不為空,連接節點執行flushall \ flushdb\ cluster reset
在Redis集群中,連接節點執行flushall / flushdb命令或者cluster reset命令都會對數據進行清除或者重置,但是它們的作用不一樣。 flushall 命令會清空當前Redis 實例中的所有數據庫,包括主庫和從庫中的所有數據,是一個危險的命令,會導致所有數據的丟失. flushdb命令會清空當前Redis實例中指定的數據庫,如果沒有指定參數,則默認清空的是所有數據庫中的數據。 cluster reset命令會使Redis集群回到初始狀態,重置集群中所有的節點,包括主節點、從節點和插槽分配情況等,此命令也是一個危險命令,會導致所有數據的丟失。 這些命令通常在進行Redis.集群的測試、部署、維護等工作時使用,但一定要在謹慎的情況下使用,以免造成數據的意外丟失。
redis-cli --cluster create [IP1]:6380 [IP1]:6381 [IP2]:6380 [IP2]:6381 [IP3]:6380 [IP3]:6381 --cluster-replicas 1 -a cquisse 2>/dev/null
檢查狀態
redis-cli --cluster check [IP1]:6380 -a cquisse 2>/dev/null
xxx.xxx.xxx.xxx:6379 (3a81002e…) -> 0 keys | 5461 slots | 1 slaves. xxx.xxx.xxx.xxx:6380 (dfe7994a…) -> 0 keys | 5461 slots | 1 slaves. xxx.xxx.xxx.xxx:6380 (c4e9009c…) -> 0 keys | 5462 slots | 1 slaves. [OK] 0 keys in 3 masters. 0.00 keys per slot on average.
Performing Cluster Check (using node xxx.xxx.xxx.xxx:6379) M: 3a81002e6a20133d44895f3f0e72e0ee16028ccf xxx.xxx.xxx.xxx:6380 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 57bfa604ff4c27de83a5c37540078d4262b293fc xxx.xxx.xxx.xxx:6381 slots: (0 slots) slave replicates 3a81002e6a20133d44895f3f0e72e0ee16028ccf S: baabb58a937192d87dbc83518da94f990c9533a6 xxx.xxx.xxx.xxx:6381 slots: (0 slots) slave replicates c4e9009cbe6ea4c2a439777d16021fecd754a2ba M: dfe7994a2457a87fec7409064358d750d48e8e39 xxx.xxx.xxx.xxx:6380 slots:[10923-16383] (5461 slots) master 1 additional replica(s) M: c4e9009cbe6ea4c2a439777d16021fecd754a2ba xxx.xxx.xxx.xxx:6380 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 7ba2ab130e5c6917635888ee8577fa5cf3ea2838 xxx.xxx.xxx.xxx:6381 slots: (0 slots) slave replicates dfe7994a2457a87fec7409064358d750d48e8e39 [OK] All nodes agree about slots configuration. Check for open slots… Check slots coverage… [OK] All 16384 slots covered.
至此,集群搭建完成
三,哨兵
1.創建sentinel相關的文件夾
mkdir -p /usr/local/redis/redis_cluster/27001/conf/
mkdir -p /usr/local/redis/redis_cluster/27001/logs/
mkdir -p /usr/local/redis/redis_cluster/27001/data/
2.創建配置文件
cd /usr/local/redis/redis_cluster/27001/conf/
vim sentinel.conf
根據集群狀態中的主節點來配置,即 M:開頭的
bind 0.0.0.0
port 27001
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile /usr/local/redis/redis_cluster/27001/logs/redis-sentinel.log
dir /usr/local/redis/redis_cluster/27001/datasentinel monitor mymaster1 xxx.xxx.xxx.xxx 6380 2
sentinel monitor mymaster2 xxx.xxx.xxx.xxx 6380 2
sentinel monitor mymaster3 xxx.xxx.xxx.xxx 6380 2sentinel down-after-milliseconds mymaster1 10000
sentinel down-after-milliseconds mymaster2 10000
sentinel down-after-milliseconds mymaster3 10000sentinel parallel-syncs mymaster1 1
sentinel parallel-syncs mymaster2 1
sentinel parallel-syncs mymaster3 1sentinel failover-timeout mymaster1 15000
sentinel failover-timeout mymaster2 15000
sentinel failover-timeout mymaster3 15000
啟動哨兵
redis-sentinel /usr/local/redis/redis_cluster/27001/conf/sentinel.conf
查看redis-sentinel進程
ps -ef|grep sentinel