redis單機-哨兵-集群模式
單機安裝
安裝包下載
下載地址:https://redis.io/download
新建用戶
# 添加用戶組
groupadd redis
# 添加用戶
useradd -d /home/redis -g redis -G redis -m redis
# 修改用戶密碼
passwd redis
上傳解壓安裝包
# redis用戶新建軟件存放目錄
mkdir /home/redis/software
# 使用文件傳輸工具上傳文件
# 解壓redis安裝包
tar -zxvf redis-5.0.8.tar.gz
# 重命名
mv redis-5.0.8 redis
# 賦權(quán)
chmod -R 755 /home/redis/software/
編譯安裝
# 進入redis安裝目錄
cd /home/redis/software/redis
# 編譯
make MALLOC=libc
# 安裝
cd src && make PREFIX=/home/redis/software/redis-install install
啟動服務(wù)
-
復制配置文件到安裝目錄
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-install/
-
修改配置文件
修改/home/redis/software/redis-install/redis.conf 匣距,將daemonize no修改為daemonize yes
################################# GENERAL ##################################### # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize yes # If you run Redis from upstart or systemd, Redis can interact with your
-
啟動命令
# 啟動命令 /home/redis/software/redis-install/bin/redis-server /home/redis/software/redis-install/redis.conf
[redis@iZuf62iexj3ztw81eg1cnoZ redis-install]$ /home/redis/software/redis-install/bin/redis-server /home/redis/software/redis-install/redis.conf 8802:C 06 Apr 2020 22:08:38.131 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 8802:C 06 Apr 2020 22:08:38.131 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=8802, just started 8802:C 06 Apr 2020 22:08:38.131 # Configuration loaded [redis@iZuf62iexj3ztw81eg1cnoZ redis-install]$
-
客戶端連接
/home/redis/software/redis-install/bin/redis-cli -p 6379
[redis@iZuf62iexj3ztw81eg1cnoZ bin]$ /home/redis/software/redis-install/bin/redis-cli -p 6379 127.0.0.1:6379> set "aa" "bb" OK 127.0.0.1:6379> get "aa" "bb" 127.0.0.1:6379>
-
設(shè)置密碼
# 查看 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "" # 設(shè)置密碼 redis123 127.0.0.1:6379> config set requirepass redis123 OK # 再次查看 127.0.0.1:6379> config get requirepass (error) NOAUTH Authentication required. 127.0.0.1:6379>
-
再次修改配置文件添加密碼
# requirepass redis123
?
注冊系統(tǒng)服務(wù)
使用root用戶操作
-
復制redis配置文件
# 新建/etc/redis mkdir /etc/redis # 復制文件 cp /home/redis/software/redis-install/redis.conf /etc/redis/6379.conf
-
復制redis啟動腳本
cp /home/redis/software/redis/utils/redis_init_script /etc/init.d/redisd
-
修改啟動腳本參數(shù)
# 編輯/etc/init.d/redisd文件,在#!/bin/sh添加如下兩行內(nèi)容 # chkconfig: 2345 10 90 # description: Start and Stop redis # 修改參數(shù),指定redis的安裝路徑 REDISPORT=6379 EXEC=/home/redis/software/redis-install/bin/redis-server CLIEXEC=/home/redis/software/redis-install/bin/redis-cli # 加入密碼 將$CLIEXEC -p $REDISPORT shutdown修改如下 $CLIEXEC -a redis123 -p $REDISPORT shutdown
#!/bin/sh # # chkconfig: 2345 10 90 # description: Start and Stop redis # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. ### BEGIN INIT INFO # Provides: redis_6379 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Redis data structure server # Description: Redis data structure server. See https://redis.io ### END INIT INFO REDISPORT=6379 EXEC=/home/redis/software/redis-install/bin/redis-server CLIEXEC=/home/redis/software/redis-install/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/etc/redis/${REDISPORT}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -a redis123 -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
服務(wù)管理
# 設(shè)為開機啟動
chkconfig redisd on
# 設(shè)為開機關(guān)閉
chkconfig redisd off
# 打開redis命令
service redisd start
# 關(guān)閉redis命令
service redisd stop
redis配置文件說明
# Redis默認不是以守護進程的方式運行梭姓,可以通過該配置項修改,使用yes啟用守護進程
daemonize no
#當Redis以守護進程方式運行時除师,Redis默認會把pid寫入/var/run/redis.pid文件凝化,可以通過pidfile指定
pidfile /var/run/redis.pid
# 指定Redis監(jiān)聽端口,默認端口為6379
port 6379
# 綁定的主機地址
bind 127.0.0.1
# 客戶端閑置多長時間后關(guān)閉連接官辽,如果指定為0蛹磺,表示關(guān)閉該功能
timeout 300
# 指定日志記錄級別,Redis總共支持四個級別:debug同仆、verbose萤捆、notice、warning俗批,默認為verbose
loglevel verbose
# 日志記錄方式俗或,默認為標準輸出,如果配置Redis為守護進程方式運行扶镀,而這里又配置為日志記錄方式為標準輸出蕴侣,則日志將會發(fā)送給/dev/null
logfile stdout
# 設(shè)置數(shù)據(jù)庫的數(shù)量,默認數(shù)據(jù)庫為0臭觉,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫id
databases 16
# 指定在多長時間內(nèi)昆雀,有多少次更新操作辱志,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個條件配合
save <seconds> <changes>
# Redis默認配置文件中提供了三個條件
# 900秒(15分鐘)內(nèi)有1個更改
save 900 1
# 300秒(5分鐘)內(nèi)有10個更改
save 300 10
# 60秒內(nèi)有10000個更改
save 60 10000
# 指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù)狞膘,默認為yes揩懒,Redis采用LZF壓縮,如果為了節(jié)省CPU時間挽封,可以關(guān)閉該選項已球,但會導致數(shù)據(jù)庫文件變的巨大
rdbcompression yes
# 指定本地數(shù)據(jù)庫文件名智亮,默認值為dump.rdb
dbfilename dump.rdb
# 指定本地數(shù)據(jù)庫存放目錄
dir ./
# 設(shè)置當本機為slave服務(wù)時点待,設(shè)置master服務(wù)的IP地址及端口阔蛉,在Redis啟動時状原,它會自動從master進行數(shù)據(jù)同步
slaveof <masterip> <masterport>
# 當master服務(wù)設(shè)置了密碼保護時,slave服務(wù)連接master的密碼
masterauth <master-password>
# 設(shè)置Redis連接密碼苗踪,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼毕莱,默認關(guān)閉
requirepass foobared
# 設(shè)置同一時間最大客戶端連接數(shù)央串,默認無限制,Redis可以同時打開的客戶端連接數(shù)為Redis進程可以打開的最大文件描述符數(shù)稚字,如果設(shè)置 maxclients 0胆描,表示不作限制昌讲。當客戶端連接數(shù)到達限制時短绸,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息
maxclients 128
# 指定Redis最大內(nèi)存限制醋闭,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中证逻,達到最大內(nèi)存后囚企,Redis會先嘗試清除已到期或即將到期的Key棵逊,當此方法處理 后歹河,仍然到達最大內(nèi)存設(shè)置秸歧,將無法再進行寫入操作键菱,但仍然可以進行讀取操作经备。Redis新的vm機制,會把Key存放內(nèi)存纷闺,Value會存放在swap區(qū)
maxmemory <bytes>
# 指定是否在每次更新操作后進行日志記錄犁功,Redis在默認情況下是異步的把數(shù)據(jù)寫入磁盤浸卦,如果不開啟限嫌,可能會在斷電時導致一段時間內(nèi)的數(shù)據(jù)丟失撒穷。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的端礼,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中蛤奥。默認為no
appendonly no
# 指定更新日志文件名,默認為appendonly.aof
appendfilename appendonly.aof
# 指定更新日志條件缅刽,共有3個可選值:
# no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快)
# always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢衰猛,安全)
# everysec:表示每秒同步一次(折衷啡省,默認值)
appendfsync everysec
# 指定是否啟用虛擬內(nèi)存機制,默認值為no结序,簡單的介紹一下笼痹,VM機制將數(shù)據(jù)分頁存放,由Redis將訪問量較少的頁即冷數(shù)據(jù)swap到磁盤上,訪問多的頁面由磁盤自動換出到內(nèi)存中
vm-enabled no
# 虛擬內(nèi)存文件路徑只磷,默認值為/tmp/redis.swap钮追,不可多個Redis實例共享
vm-swap-file /tmp/redis.swap
# 將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲的(Redis的索引數(shù)據(jù) 就是keys),也就是說,當vm-max-memory設(shè)置為0的時候,其實是所有value都存在于磁盤轧叽。默認值為0
vm-max-memory 0
# Redis swap文件分成了很多的page炭晒,一個對象可以保存在多個page上面网严,但一個page上不能被多個對象共享,vm-page-size是要根據(jù)存儲的 數(shù)據(jù)大小來設(shè)定的垢村,作者建議如果存儲很多小對象肝断,page大小最好設(shè)置為32或者64bytes;如果存儲很大大對象趣钱,則可以使用更大的page首有,如果不 確定井联,就使用默認值
vm-page-size 32
# 設(shè)置swap文件中的page數(shù)量,由于頁表(一種表示頁面空閑或使用的bitmap)是在放在內(nèi)存中的蚕脏,驼鞭,在磁盤上每8個pages將消耗1byte的內(nèi)存译隘。
vm-pages 134217728
# 設(shè)置訪問swap文件的線程數(shù),最好不要超過機器的核數(shù),如果設(shè)置為0,那么所有對swap文件的操作都是串行的细燎,可能會造成比較長時間的延遲。默認值為4
vm-max-threads 4
# 設(shè)置在向客戶端應(yīng)答時璧瞬,是否把較小的包合并為一個包發(fā)送嗤锉,默認為開啟
glueoutputbuf yes
# 指定在超過一定的數(shù)量或者最大的元素超過某一臨界值時,采用一種特殊的哈希算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
# 指定是否激活重置哈希访诱,默認為開啟
activerehashing yes
# 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件涡相,而同時各個實例又擁有自己的特定配置文件
include /path/to/local.conf
#禁止外網(wǎng)訪問redis
protected-mode yes
主從模式
編譯安裝同上催蝗,讀寫分離,一主兩從槽袄,主負責寫,從負責讀
項目架構(gòu)
角色 | ip | port |
---|---|---|
master | 127.0.0.1 | 6379 |
slave | 127.0.0.1 | 6380 |
slave | 127.0.0.1 | 6381 |
前期準備
# 創(chuàng)建6379乾戏、6380目錄
mkdir -p /home/redis/software/rwseparation/6379
mkdir -p /home/redis/software/rwseparation/6380
mkdir -p /home/redis/software/rwseparation/6381
# 創(chuàng)建日志目錄
mkdir /home/redis/software/rwseparation/logs
# 復制redis啟動文件
cp /home/redis/software/redis-install/bin/redis-server /home/redis/software/rwseparation/
# 復制配置文件
cp /home/redis/software/redis/redis.conf /home/redis/software/rwseparation/6379
cp /home/redis/software/redis/redis.conf /home/redis/software/rwseparation/6380
cp /home/redis/software/redis/redis.conf /home/redis/software/rwseparation/6381
# 查看
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ ll /home/redis/software/rwseparation/
total 3972
drwxrwxr-x 2 redis redis 4096 Apr 14 17:40 6379
drwxrwxr-x 2 redis redis 4096 Apr 14 17:40 6380
drwxrwxr-x 2 redis redis 4096 Apr 14 17:40 6381
-rwxr-xr-x 1 redis redis 4058096 Apr 14 17:37 redis-server
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$
master
# 進入目錄
cd /home/redis/software/rwseparation/
# 修改6379下的redis.conf文件
daemonize yes
logfile "/home/redis/software/rwseparation/logs/6379.log"
requirepass redis123
masterauth redis123
# bind 127.0.0.1
protected-mode no
# 啟動6379
./redis-server ./6379/redis.conf
slave
# 進入目錄
cd /home/redis/software/rwseparation/
# 修改6380下的redis.conf文件
daemonize yes
logfile "/home/redis/software/rwseparation/logs/6380.log"
replicaof 127.0.0.1 6379
port 6380
requirepass redis123
masterauth redis123
# bind 127.0.0.1
protected-mode no
# 修改6381下的redis.conf文件
daemonize yes
logfile "/home/redis/software/rwseparation/logs/6381.log"
replicaof 127.0.0.1 6379
port 6381
requirepass redis123
masterauth redis123
# bind 127.0.0.1
protected-mode no
# 啟動6380就漾、6381
./redis-server ./6380/redis.conf
./redis-server ./6381/redis.conf
查看
# 查看redis服務(wù)
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ ps -ef|grep redis
redis 9845 1 0 Apr14 ? 00:00:33 ./redis-server 127.0.0.1:6379
redis 9861 1 0 Apr14 ? 00:00:56 ./redis-server 127.0.0.1:6380
root 10758 1032 0 09:36 ? 00:00:00 sshd: redis [priv]
redis 10760 10758 0 09:36 ? 00:00:00 sshd: redis@pts/1
redis 10761 10760 0 09:36 pts/1 00:00:00 -bash
redis 10801 1 0 09:40 ? 00:00:00 ./redis-server 127.0.0.1:6381
redis 10806 10761 0 09:44 pts/1 00:00:00 ps -ef
redis 10807 10761 0 09:44 pts/1 00:00:00 grep --color=auto redis
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$
# 使用redis-cli查看項目主從節(jié)點
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6379
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ /home/redis/software/redis-install/bin/redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=79674,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=79674,lag=1
master_replid:bd94d29dd8f86ea8cd8105643a4ed51c3813d707
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:79674
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:79674
127.0.0.1:6379>
手動模擬主節(jié)點宕機摆出,從節(jié)點切換為主節(jié)點
-
停止主節(jié)點服務(wù)
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6379 shutdown
-
將6380切換為主節(jié)點
登錄6380客戶端命令
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6380
-
切換為主節(jié)點
replicaof no one
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ /home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6380 127.0.0.1:6380> replicaof no one OK 127.0.0.1:6380> info replication # Replication role:master connected_slaves:0 master_replid:a230e183f92e65a1916bc428403d3a06a197bb4c master_replid2:bd94d29dd8f86ea8cd8105643a4ed51c3813d707 master_repl_offset:81536 second_repl_offset:81537 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:81536 127.0.0.1:6380>
-
將6381的主節(jié)點切換為6380
登錄6381客戶端命令
/home/redis/software/redis-install/bin/redis-cli -p 6381
-
切換主節(jié)點命令
replicaof 127.0.0.1 6380
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ /home/redis/software/redis-install/bin/redis-cli -p 6381 127.0.0.1:6381> replicaof 127.0.0.1 6380 OK 127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6380 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:81620 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:a230e183f92e65a1916bc428403d3a06a197bb4c master_replid2:bd94d29dd8f86ea8cd8105643a4ed51c3813d707 master_repl_offset:81620 second_repl_offset:81537 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:81620 127.0.0.1:6381>
主從模式數(shù)據(jù)同步
SYNC
redis2.8版本之前數(shù)據(jù)同步的方法有缆,此方法是一個非常耗費資源的操作
- 主服務(wù)器需要執(zhí)行BGSAVE命令來生成RDB文件杯矩,這個生成操作會耗費主服務(wù)器大量的的CPU菊碟、內(nèi)存和磁盤讀寫資源
- 主服務(wù)器將RDB文件發(fā)送給從服務(wù)器,這個發(fā)送操作會耗費主從服務(wù)器大量的網(wǎng)絡(luò)帶寬和流量
- 請求的時間產(chǎn)生影響:接收到RDB文件的從服務(wù)器在載入文件的過程是阻塞的魄幕,無法處理命令請求
PSYNC
redis2.8版本之后,PSYNC命令具有完整重同步(full resynchronization)和部分重同步(partial resynchronization1)兩種模式
- 完整重同步
- SYNC
- 部分重同步
- 記錄主服務(wù)的復制偏移量(replication offset)和從服務(wù)器的復制偏移量
- redis的操作命令放在復制積壓緩沖區(qū)翼抠,主服務(wù)器的復制積壓緩沖區(qū)(replication backlog),默認大小為1M
- 服務(wù)器的運行ID(run ID),用于存儲服務(wù)器標識阴颖,如從服務(wù)器斷線重新連接钾菊,取到主服務(wù)器的運行ID與重接后的主服務(wù)器運行ID進行對比,從而判斷是執(zhí)行部分重同步還是執(zhí)行完整重同步
停止服務(wù)
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6379 shutdown
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6380 shutdown
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6381 shutdown
Sentinel模式
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案滞详,當用Redis做Master-slave的高可用方案時,假如master宕機了稀火,Redis本身(包括它的很多客戶端)都沒有實現(xiàn)自動進行主備切換凰狞,而Redis-sentinel本身也是一個獨立運行的進程,它能監(jiān)控多個master-slave集群逾冬,發(fā)現(xiàn)master宕機后能進行自動切換
功能
- 監(jiān)控(Monitoring): Sentinel 會不斷地檢查主服務(wù)器和從服務(wù)器是否運作正常
- 提醒(Notification): 當被監(jiān)控的某個 Redis 服務(wù)器出現(xiàn)問題時, Sentinel 可以通過 API 向管理員或者其他應(yīng)用程序發(fā)送通知
- 自動故障遷移(Automatic failover): 當一個主服務(wù)器不能正常工作時嘀趟, Sentinel 會開始一次自動故障遷移操作牛隅, 它會將其中一個從服務(wù)器升級為新的主服務(wù)器媒佣, 并讓失效主服務(wù)器的其他從服務(wù)器改為復制新的主服務(wù)器蒂誉; 當客戶端試圖連接失效的主服務(wù)器時际插, 集群也會向客戶端返回新主服務(wù)器的地址辛辨, 使得集群可以使用新主服務(wù)器代替失效服務(wù)器
項目架構(gòu)
角色 | ip | port |
---|---|---|
master | 139.224.101.91 | 6379 |
slave | 139.224.101.91 | 6380 |
slave | 139.224.101.91 | 6381 |
sentinel | 139.224.101.91 | 26379 |
sentinel | 139.224.101.91 | 26380 |
sentinel | 139.224.101.91 | 26381 |
前期準備
服務(wù)器搭建基于上述主從模式,將服務(wù)器恢復到6378為主僻焚,6380,6381為從
# 創(chuàng)建6379狞山、6380目錄
mkdir -p /home/redis/software/rwseparation/26379
mkdir -p /home/redis/software/rwseparation/26380
mkdir -p /home/redis/software/rwseparation/26381
# 復制sentinel啟動腳本
cp /home/redis/software/redis-install/bin/redis-sentinel /home/redis/software/rwseparation/
# sentinel配置文件
cp /home/redis/software/redis/sentinel.conf /home/redis/software/rwseparation/26379
cp /home/redis/software/redis/sentinel.conf /home/redis/software/rwseparation/26380
cp /home/redis/software/redis/sentinel.conf /home/redis/software/rwseparation/26381
# 查看
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ ll /home/redis/software/rwseparation/
total 7960
drwxrwxr-x 2 redis redis 4096 Apr 15 15:11 26379
drwxrwxr-x 2 redis redis 4096 Apr 15 15:11 26380
drwxrwxr-x 2 redis redis 4096 Apr 15 15:11 26381
drwxrwxr-x 2 redis redis 4096 Apr 15 11:39 6379
drwxrwxr-x 2 redis redis 4096 Apr 15 11:39 6380
drwxrwxr-x 2 redis redis 4096 Apr 15 11:40 6381
-rwxr-xr-x 1 redis redis 4058096 Apr 15 10:27 redis-sentinel
-rwxr-xr-x 1 redis redis 4058096 Apr 14 17:37 redis-server
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$
配置文件
-
相同部分
# daemonize # 后臺啟動 daemonize yes # sentinel monitor <master-name> <ip> <redis-port> <quorum> # 告訴sentinel去監(jiān)聽地址為ip:port的一個master屏鳍,這里的master-name可以自定義孕蝉,quorum是一個數(shù)字超埋,指明當有多少個sentinel認為一個master失效時媒惕,master才算真正失效 # 若項目與redis不在同一臺機器妒蔚,此處配置外網(wǎng)Ip sentinel monitor mymaster 139.224.101.91 6379 2 # 設(shè)置master和slaves的密碼 # 放在sentinel monitor下面 sentinel auth-pass mymaster redis123 # sentinel down-after-milliseconds <master-name> <milliseconds> # 這個配置項指定了需要多少失效時間,一個master才會被這個sentinel主觀地認為是不可用的。 單位是毫秒恍飘,默認為30秒 sentinel down-after-milliseconds mymaster 30000 # sentinel failover-timeout <master-name> <milliseconds> # failover-timeout 可以用在以下這些方面: # 1. 同一個sentinel對同一個master兩次failover之間的間隔時間。 # 2. 當一個slave從一個錯誤的master那里同步數(shù)據(jù)開始計算時間乳怎。直到slave被糾正為向正確的master那里同步數(shù)據(jù)時。 # 3. 當想要取消一個正在進行的failover所需要的時間椿胯。 # 4. 當進行failover時,配置所有slaves指向新的master所需的最大時間廉油。不過,即使過了這個超時嘶炭,slaves依然會被正確配置為指向master眨猎,但是就不按parallel-syncs所配置的規(guī)則來了抑进。 sentinel failover-timeout mymaster 180000 # sentinel parallel-syncs <master-name> <numslaves> # 這個配置項指定了在發(fā)生failover主備切換時最多可以有多少個slave同時對新的master進行 同步,這個數(shù)字越小睡陪,完成failover所需的時間就越長寺渗,但是如果這個數(shù)字越大,就意味著越 多的slave因為replication而不可用兰迫。可以通過將這個值設(shè)為 1 來保證每次只有一個slave 處于不能處理命令請求的狀態(tài)汁果。 sentinel parallel-syncs mymaster 1
-
不同部分
# 26379 端口 port 26379 logfile "/home/redis/software/rwseparation/logs/26379.log" # 26380 端口 port 26380 logfile "/home/redis/software/rwseparation/logs/26380.log" # 26381 端口 port 26381 logfile "/home/redis/software/rwseparation/logs/26381.log"
啟動服務(wù)
redis 主從模式先啟動
# 26379
/home/redis/software/rwseparation/redis-sentinel /home/redis/software/rwseparation/26379/sentinel.conf
# 26380
/home/redis/software/rwseparation/redis-sentinel /home/redis/software/rwseparation/26380/sentinel.conf
# 26381
/home/redis/software/rwseparation/redis-sentinel /home/redis/software/rwseparation/26381/sentinel.conf
查看
# 查看sentinel服務(wù)
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ ps -ef|grep sentinel
redis 11386 1 0 15:28 ? 00:00:00 /home/redis/software/rwseparation/redis-sentinel *:26379 [sentinel]
redis 11391 1 0 15:28 ? 00:00:00 /home/redis/software/rwseparation/redis-sentinel *:26380 [sentinel]
redis 11396 1 0 15:29 ? 00:00:00 /home/redis/software/rwseparation/redis-sentinel *:26381 [sentinel]
redis 11401 10963 0 15:29 pts/2 00:00:00 grep --color=auto sentinel
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$
# 通過redis-cli命令查看
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ /home/redis/software/redis-install/bin/redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$
關(guān)閉服務(wù)
/home/redis/software/redis-install/bin/redis-cli -p 26379 shutdown
/home/redis/software/redis-install/bin/redis-cli -p 26380 shutdown
/home/redis/software/redis-install/bin/redis-cli -p 26380 shutdown
模擬主節(jié)點宕機
手動停止主節(jié)點服務(wù)
/home/redis/software/redis-install/bin/redis-cli -a redis123 -p 6379 shutdown
-
查看26379的sentinel日志
16328:X 16 Apr 2020 16:23:34.755 # +sdown master mymaster 139.224.101.91 6379 16328:X 16 Apr 2020 16:23:34.774 # +new-epoch 1 16328:X 16 Apr 2020 16:23:34.776 # +vote-for-leader d17803e53d5fca31d92b26118d640f96862460a7 1 16328:X 16 Apr 2020 16:23:34.810 # +odown master mymaster 139.224.101.91 6379 #quorum 2/2 16328:X 16 Apr 2020 16:23:34.810 # Next failover delay: I will not start a failover before Thu Apr 16 16:29:35 2020 16328:X 16 Apr 2020 16:23:34.874 * +sentinel-address-switch master mymaster 139.224.101.91 6379 ip 172.19.206.22 port 26380 for 68c5172ec311965273df471178ecbb4c6374ed9e 16328:X 16 Apr 2020 16:23:34.924 # -odown master mymaster 139.224.101.91 6379 16328:X 16 Apr 2020 16:23:35.073 * +sentinel-address-switch master mymaster 139.224.101.91 6379 ip 127.0.0.1 port 26381 for d17803e53d5fca31d92b26118d640f96862460a7 16328:X 16 Apr 2020 16:23:35.165 * +sentinel-address-switch master mymaster 139.224.101.91 6379 ip 172.19.206.22 port 26381 for d17803e53d5fca31d92b26118d640f96862460a7 16328:X 16 Apr 2020 16:23:35.168 # +config-update-from sentinel d17803e53d5fca31d92b26118d640f96862460a7 172.19.206.22 26381 @ mymaster 139.224.101.91 6379 16328:X 16 Apr 2020 16:23:35.168 # +switch-master mymaster 139.224.101.91 6379 139.224.101.91 6381 16328:X 16 Apr 2020 16:23:35.168 * +slave slave 139.224.101.91:6380 139.224.101.91 6380 @ mymaster 139.224.101.91 6381 16328:X 16 Apr 2020 16:23:35.168 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 139.224.101.91 6381 16328:X 16 Apr 2020 16:23:35.168 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 139.224.101.91 6381 16328:X 16 Apr 2020 16:23:35.168 * +slave slave 139.224.101.91:6379 139.224.101.91 6379 @ mymaster 139.224.101.91 6381 16328:X 16 Apr 2020 16:23:35.451 * +sentinel-address-switch master mymaster 139.224.101.91 6381 ip 127.0.0.1 port 26381 for d17803e53d5fca31d92b26118d640f96862460a7
-
重啟6379節(jié)點
[redis@iZuf62iexj3ztw81eg1cnoZ rwseparation]$ ./redis-cli -a redid123 -p 6379 127.0.0.1:6379> info replication # Replication role:slave master_host:127.0.0.1 master_port:6380 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_repl_offset:83568 master_link_down_since_seconds:12 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:74d75a1f73442dd635d6d4f67e948e827246bed9 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:83568 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:83569 repl_backlog_histlen:0 127.0.0.1:6379>
主觀下線:
主觀下線(Subjectively Down鸡号, 簡稱 SDOWN)指的是單個 Sentinel 實例對服務(wù)器做出的下線判斷;如果一個服務(wù)器沒有在 master-down-after-milliseconds 選項所指定的時間內(nèi)须鼎, 對向它發(fā)送 PING 命令的 Sentinel 返回一個有效回復(valid reply), 那么 Sentinel 就會將這個服務(wù)器標記為主觀下線
客觀下線
指的是多個 Sentinel 實例在對同一個服務(wù)器做出 SDOWN 判斷府蔗, 并且通過 SENTINEL is-master-down-by-addr 命令互相交流之后晋控, 得出的服務(wù)器下線判斷。 (一個 Sentinel 可以通過向另一個 Sentinel 發(fā)送 SENTINEL is-master-down-by-addr 命令來詢問對方是否認為給定的服務(wù)器已下線姓赤。)
集群模式
項目架構(gòu)
角色 | ip | port |
---|---|---|
c-1 | 139.224.101.91 | 7001 |
c-2 | 139.224.101.91 | 7002 |
c-3 | 139.224.101.91 | 7003 |
c-4 | 139.224.101.91 | 7004 |
c-5 | 139.224.101.91 | 7005 |
c-6 | 139.224.101.91 | 7006 |
前期準備
redis安裝同單機安裝
# 創(chuàng)建目錄
mkdir -p /home/redis/software/redis-cluster/7001
mkdir -p /home/redis/software/redis-cluster/7002
mkdir -p /home/redis/software/redis-cluster/7003
mkdir -p /home/redis/software/redis-cluster/7004
mkdir -p /home/redis/software/redis-cluster/7005
mkdir -p /home/redis/software/redis-cluster/7006
# 復制配置文件
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-cluster/7001
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-cluster/7002
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-cluster/7003
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-cluster/7004
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-cluster/7005
cp /home/redis/software/redis/redis.conf /home/redis/software/redis-cluster/7006
# 復制redis啟動腳本
cp /home/redis/software/redis-install/bin/redis-server redis-cluster/
# 復制客戶端連接腳本
cp /home/redis/software/redis-install/bin/redis-cli redis-cluster/
配置文件
-
相同部分
# redis后臺運行 daemonize yes # 開啟集群 cluster-enabled yes # 請求超時 cluster-node-timeout 5000 # 開啟aof日志 appendonly yes # 注釋掉綁定ip地址(云服務(wù)器外網(wǎng)訪問) # bind 127.0.0.1 # 開啟遠程訪問 protected-mode no
-
不同部分
# 端口赡译,根據(jù)各節(jié)點配置端口 7001,7002不铆,7003蝌焚,7004,7005誓斥,7006 port 7001 # 集群配置只洒,根據(jù)各節(jié)點配置 nodes-7001.conf,nodes-7002.conf劳坑,nodes-7003.conf毕谴,nodes-7004.conf,nodes-7005.conf距芬,nodes-7006.conf涝开, cluster-config-file nodes-7001.conf # aof文件名稱 appendfilename "appendonly-7001.aof"
啟動服務(wù)
-
各節(jié)點啟動
/home/redis/software/redis-cluster/redis-server /home/redis/software/redis-cluster/7001/redis.conf /home/redis/software/redis-cluster/redis-server /home/redis/software/redis-cluster/7002/redis.conf /home/redis/software/redis-cluster/redis-server /home/redis/software/redis-cluster/7003/redis.conf /home/redis/software/redis-cluster/redis-server /home/redis/software/redis-cluster/7004/redis.conf /home/redis/software/redis-cluster/redis-server /home/redis/software/redis-cluster/7005/redis.conf /home/redis/software/redis-cluster/redis-server /home/redis/software/redis-cluster/7006/redis.conf
-
查看節(jié)點服務(wù)
[redis@iZuf62iexj3ztw81eg1cnoZ redis-cluster]$ ps -ef|grep redis root 11860 1032 0 21:41 ? 00:00:00 sshd: redis [priv] redis 11862 11860 0 21:41 ? 00:00:00 sshd: redis@pts/1 redis 11863 11862 0 21:41 pts/1 00:00:00 -bash redis 12003 1 0 21:54 ? 00:00:00 /home/redis/software/redis-cluster/redis-server *:7001 [cluster] redis 12005 1 0 21:54 ? 00:00:00 /home/redis/software/redis-cluster/redis-server *:7002 [cluster] redis 12007 1 0 21:54 ? 00:00:00 /home/redis/software/redis-cluster/redis-server *:7003 [cluster] redis 12012 1 0 21:54 ? 00:00:00 /home/redis/software/redis-cluster/redis-server *:7004 [cluster] redis 12017 1 0 21:54 ? 00:00:00 /home/redis/software/redis-cluster/redis-server *:7005 [cluster] redis 12028 1 0 21:54 ? 00:00:00 /home/redis/software/redis-cluster/redis-server *:7006 [cluster] redis 12034 11863 0 21:54 pts/1 00:00:00 ps -ef redis 12035 11863 0 21:54 pts/1 00:00:00 grep --color=auto redis [redis@iZuf62iexj3ztw81eg1cnoZ redis-cluster]$ [redis@iZuf62iexj3ztw81eg1cnoZ redis-cluster]$ ps -ef|grep redis root 11860 1032 0 21:41 ? 00:00:00 sshd: redis [priv] redis 11862 11860 0 21:41 ? 00:00:00 sshd: redis@pts/1 redis 11863 11862 0 21:41 pts/1 00:00:00 -bash root 12075 1032 0 22:07 ? 00:00:00 sshd: redis [priv] redis 12077 12075 0 22:07 ? 00:00:00 sshd: redis@pts/2 redis 12078 12077 0 22:07 pts/2 00:00:00 -bash redis 12192 1 0 22:09 ? 00:00:00 /home/redis/software/redis-cluster/redis-server 172.19.206.22:7001 [cluster] redis 12194 1 0 22:09 ? 00:00:00 /home/redis/software/redis-cluster/redis-server 172.19.206.22:7002 [cluster] redis 12199 1 0 22:09 ? 00:00:00 /home/redis/software/redis-cluster/redis-server 172.19.206.22:7003 [cluster] redis 12204 1 0 22:09 ? 00:00:00 /home/redis/software/redis-cluster/redis-server 172.19.206.22:7004 [cluster] redis 12206 1 0 22:09 ? 00:00:00 /home/redis/software/redis-cluster/redis-server 172.19.206.22:7005 [cluster] redis 12217 1 0 22:09 ? 00:00:00 /home/redis/software/redis-cluster/redis-server 172.19.206.22:7006 [cluster] redis 12221 12078 0 22:09 pts/2 00:00:00 ps -ef redis 12222 12078 0 22:09 pts/2 00:00:00 grep --color=auto redis [redis@iZuf62iexj3ztw81eg1cnoZ redis-cluster]$
安裝ruby
使用root用戶
-
安裝ruby
yum -y install ruby ruby-devel rubygems rpm-build gem install redis
-
錯誤1
# 安裝完ruby ruby-devel rubygems 執(zhí)行g(shù)em install redis報錯如下 # 解決:CentOS7 yum庫中ruby的版本支持到 2.0.0,但是gem安裝redis需要最低是2.3.0框仔,采用rvm來更新ruby [redis@iZuf62iexj3ztw81eg1cnoZ ~]$ gem install redis ERROR: Error installing redis: redis requires Ruby version >= 2.3.0. [redis@iZuf62iexj3ztw81eg1cnoZ ~]$
-
安裝rvm
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 curl -L get.rvm.io | bash -s stable
-
錯誤2
# 執(zhí)行curl -L get.rvm.io | bash -s stable 報錯如下 [root@iZuf62iexj3ztw81eg1cnoZ ~]# curl -L get.rvm.io | bash -s stable % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 194 100 194 0 0 179 0 0:00:01 0:00:01 --:--:-- 179 100 24535 100 24535 0 0 7689 0 0:00:03 0:00:03 --:--:-- 20226 Downloading https://github.com/rvm/rvm/archive/1.29.10.tar.gz Downloading https://github.com/rvm/rvm/releases/download/1.29.10/1.29.10.tar.gz.asc gpg: Signature made Thu 26 Mar 2020 05:58:42 AM CST using RSA key ID 39499BDB gpg: Can't check signature: No public key GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.10.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.10/1.29.10.tar.gz.asc'! Try to install GPG v2 and then fetch the public key: gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB or if it fails: command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - command curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import - In case of further problems with validation please refer to https://rvm.io/rvm/security [root@iZuf62iexj3ztw81eg1cnoZ ~]# # 根據(jù)報錯信息執(zhí)行 gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB [root@iZuf62iexj3ztw81eg1cnoZ ~]# gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB gpg: requesting key D39DC0E3 from hkp server pool.sks-keyservers.net gpg: requesting key 39499BDB from hkp server pool.sks-keyservers.net gpg: key D39DC0E3: "Michal Papis (RVM signing) <mpapis@gmail.com>" not changed gpg: key 39499BDB: public key "Piotr Kuczynski <piotr.kuczynski@gmail.com>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 2 gpg: imported: 1 (RSA: 1) gpg: unchanged: 1 [root@iZuf62iexj3ztw81eg1cnoZ ~]#
-
再次安裝rvm
########################################## # https://blog.csdn.net/Gushiyuta/article/details/90770681 ########################################## curl -L get.rvm.io | bash -s stable
[root@iZuf62iexj3ztw81eg1cnoZ ~]# curl -L get.rvm.io | bash -s stable % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 194 100 194 0 0 64 0 0:00:03 0:00:03 --:--:-- 64 100 24535 100 24535 0 0 6358 0 0:00:03 0:00:03 --:--:-- 11.0M Downloading https://github.com/rvm/rvm/archive/1.29.10.tar.gz Downloading https://github.com/rvm/rvm/releases/download/1.29.10/1.29.10.tar.gz.asc gpg: Signature made Thu 26 Mar 2020 05:58:42 AM CST using RSA key ID 39499BDB gpg: Good signature from "Piotr Kuczynski <piotr.kuczynski@gmail.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 7D2B AF1C F37B 13E2 069D 6956 105B D0E7 3949 9BDB GPG verified '/usr/local/rvm/archives/rvm-1.29.10.tgz' Creating group 'rvm' Installing RVM to /usr/local/rvm/ Installation of RVM in /usr/local/rvm/ is almost complete: * First you need to add all users that will be using rvm to 'rvm' group, and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`. * To start using RVM you need to run `source /etc/profile.d/rvm.sh` in all your open shell windows, in rare cases you need to reopen all shell windows. * Please do NOT forget to add your users to the rvm group. The installer no longer auto-adds root or users to the rvm group. Admins must do this. Also, please note that group memberships are ONLY evaluated at login time. This means that users must log out then back in before group membership takes effect! Thanks for installing RVM ? Please consider donating to our open collective to help us maintain RVM. ? Donate: https://opencollective.com/rvm/donate [root@iZuf62iexj3ztw81eg1cnoZ ~]#
-
修改 rvm下載 ruby的源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
-
rvm操作ruby
# 查看ruby版本 rvm list known # 安裝2.3.3版本的ruby rvm install 2.3.3 # 切換ruby版本 rvm use 2.3.3 # 設(shè)置默認版本 rvm use 2.3.3 --default # 卸載其他版本 rvm remove 2.0.0 # 查看ruby版本 rvm -v
集群操作
-
開啟集群
# 如果使用外網(wǎng)訪問云服務(wù)器redis集群舀武,啟動集群時一定使用外網(wǎng)Ip地址,139.224.101.91是阿里云外網(wǎng)地址 /home/redis/software/redis-cluster/redis-cli --cluster create 139.224.101.91:7001 139.224.101.91:7002 139.224.101.91:7003 139.224.101.91:7004 139.224.101.91:7005 139.224.101.91:7006 --cluster-replicas 1
#######################注意:########################## # Can I set the above configuration? (type 'yes' to accept) # 一定填 yes 不要只填一個 y # 不然無法分配hash槽 [redis@iZuf62iexj3ztw81eg1cnoZ redis-cluster]$ /home/redis/software/redis-cluster/redis-cli --cluster create 139.224.101.91:7001 139.224.101.91:7002 139.224.101.91:7003 139.224.101.91:7004 139.224.101.91:7005 139.224.101.91:7006 --cluster-replicas 1 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 139.224.101.91:7005 to 139.224.101.91:7001 Adding replica 139.224.101.91:7006 to 139.224.101.91:7002 Adding replica 139.224.101.91:7004 to 139.224.101.91:7003 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: d029faac54da0e0e2080dbd5ca46ad3a83b1df3a 139.224.101.91:7001 slots:[0-5460] (5461 slots) master M: ae1be08b05cb1646086148f33b5d3535d6480a39 139.224.101.91:7002 slots:[5461-10922] (5462 slots) master M: 2e97876867c4025ba66de865cd7901799902aee6 139.224.101.91:7003 slots:[10923-16383] (5461 slots) master S: d32be47e0cafd0b269f6ecadd5ce40ab1040296b 139.224.101.91:7004 replicates d029faac54da0e0e2080dbd5ca46ad3a83b1df3a S: 54f74c4766acea299cc9f15c7a87f1c115bafd36 139.224.101.91:7005 replicates ae1be08b05cb1646086148f33b5d3535d6480a39 S: 458d1641688413a4057208579426b72fbc7cb065 139.224.101.91:7006 replicates 2e97876867c4025ba66de865cd7901799902aee6 Can I set the above configuration? (type 'yes' to accept): 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 139.224.101.91:7001) M: d029faac54da0e0e2080dbd5ca46ad3a83b1df3a 139.224.101.91:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: ae1be08b05cb1646086148f33b5d3535d6480a39 139.224.101.91:7002 slots:[5461-10922] (5462 slots) master 1 additional replica(s) M: 2e97876867c4025ba66de865cd7901799902aee6 139.224.101.91:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: d32be47e0cafd0b269f6ecadd5ce40ab1040296b 139.224.101.91:7004 slots: (0 slots) slave replicates d029faac54da0e0e2080dbd5ca46ad3a83b1df3a S: 54f74c4766acea299cc9f15c7a87f1c115bafd36 139.224.101.91:7005 slots: (0 slots) slave replicates ae1be08b05cb1646086148f33b5d3535d6480a39 S: 458d1641688413a4057208579426b72fbc7cb065 139.224.101.91:7006 slots: (0 slots) slave replicates 2e97876867c4025ba66de865cd7901799902aee6 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [redis@iZuf62iexj3ztw81eg1cnoZ redis-cluster]$
-
測試集群
/home/redis/software/redis-cluster/redis-cli -c -h 139.224.101.91 -p 7001
-
關(guān)閉集群
/home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7001 shutdown /home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7002 shutdown /home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7003 shutdown /home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7004 shutdown /home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7005 shutdown /home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7006 shutdown
-
查看集群
/home/redis/software/redis-cluster/redis-cli -h 139.224.101.91 -p 7001 cluster nodes | grep master
數(shù)據(jù)分片
Redis 集群有16384個哈希槽离斩,每個key通過CRC16校驗后對16384取模來決定放置哪個槽银舱,集群的每個節(jié)點負責一部分hash槽
節(jié)點操作
- 模擬節(jié)點故障
redis-cli -h 139.224.101.91 -p 7001 debug segfault
- 重哈希
/home/redis/software/redis-cluster/redis-cli --cluster reshard 139.224.101.91:7001
- 添加主節(jié)點:
redis-cli --cluster add-node 139.224.101.91:7006 139.224.101.91:7001
- 添加子節(jié)點
redis-cli --cluster add-node 139.224.101.91:7007 139.224.101.91:7001 --cluster-slave --cluster-master-id 主節(jié)點標識
- 刪除子節(jié)點
redis-cli --cluster del-node 139.224.101.91:7007 子節(jié)點標識
- 刪除主節(jié)點
redis-cli --cluster del-node 139.224.101.91:7006 主節(jié)點標識