Redis單機-哨兵-集群模式

redis單機-哨兵-集群模式

單機安裝

安裝包下載

下載地址:https://redis.io/download

redis-download.png

新建用戶

# 添加用戶組
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é)點標識
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘪匿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纵朋,更是在濱河造成了極大的恐慌柿顶,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件操软,死亡現(xiàn)場離奇詭異嘁锯,居然都是意外死亡,警方通過查閱死者的電腦和手機聂薪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門家乘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人藏澳,你說我怎么就攤上這事仁锯。” “怎么了翔悠?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵业崖,是天一觀的道長。 經(jīng)常有香客問我蓄愁,道長双炕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任撮抓,我火速辦了婚禮妇斤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丹拯。我一直安慰自己站超,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布乖酬。 她就那樣靜靜地躺著死相,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剑刑。 梳的紋絲不亂的頭發(fā)上媳纬,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音施掏,去河邊找鬼钮惠。 笑死,一個胖子當著我的面吹牛七芭,可吹牛的內(nèi)容都是我干的素挽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼狸驳,長吁一口氣:“原來是場噩夢啊……” “哼预明!你這毒婦竟也來了缩赛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撰糠,失蹤者是張志新(化名)和其女友劉穎酥馍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阅酪,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡旨袒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了术辐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砚尽。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辉词,靈堂內(nèi)的尸體忽然破棺而出必孤,到底是詐尸還是另有隱情,我是刑警寧澤瑞躺,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布敷搪,位于F島的核電站,受9級特大地震影響幢哨,放射性物質(zhì)發(fā)生泄漏购啄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一嘱么、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顽悼,春花似錦曼振、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至木羹,卻和暖如春甲雅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坑填。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工抛人, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脐瑰。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓妖枚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苍在。 傳聞我的和親對象是個殘疾皇子绝页,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容