Redis安裝踩坑大全(不管你踩沒踩過,反正我全踩了)

寫在最前:服務器挖礦親🐴biss

最近開始學redis了,在安裝、配置、使用過程中遇到了不少的坑,在這裏記錄並分享一下解決辦法

Redis安裝

  1. 通過官網下載Redis的壓縮包 https://redis.io/download

    redis目前的最新版本是5.X,我下載的是4.0.14版本的,如果有需要4.0.14版本的redis壓縮包可以在評論中留言
    在這裏插入圖片描述

  2. 在安裝redis之前需要先安裝gcc,目的是爲了編譯文件

    yum install gcc-c++ 
    
  3. 將壓縮包放到服務器(或者虛擬機)中,由於我使用的華爲雲服務器,所以我把壓縮包放到了 /root/software目錄下,然後通過指令解壓壓縮包

    cd /root/software
    tar -zxvf redis-4.0.14.tar.gz
    

    在這裏插入圖片描述

  4. 把解壓的文件copy到 /usr/local/src 目錄下,同時將文件夾名字改爲redis

    cp -r /root/software/redis-4.0.14 /usr/local/src/
    改名
    cd /usr/local/src/
    mv redis-4.0.14  redis
    
  5. 打開 /usr/local/src/redis/deps 進行編譯依賴項

    cd /usr/local/src/redis/deps
    make hiredis lua jemalloc linenoise
    
  6. 打開 /usr/local/src/redis 進行編譯

    cd /usr/local/src/redis
    make
    
  7. 在上面的Redis目錄安裝把它安裝到 /usr/local/redis 裏面

    mkdir /usr/local/redis
    make install PREFIX=/usr/local/redis
    

    在這裏插入圖片描述
    看到圖中的提示說明安裝成功

  8. 驗證安裝是否成功

    cd /usr/local/redis/bin
    ls
    

    在這裏插入圖片描述
    redis-benchmark:redis性能測試工具
    redis-check-aof:檢查aof日誌的工具
    redis-check-dump:檢查rdb日誌的工具
    redis-cli:連接用的客戶端
    redis-server:redis服務進程

    看到如圖的啓動文件就可以了

    到這裏redis已經安裝完成了,不過我多做了一步,將redis的配置文件單獨放到了一個文件夾中

    mkdir /root/myredis
    cp /usr/local/src/redis/redis.conf /root/myredis
    
  9. 啓動Redis

    cd /usr/local/redis/bin
    ./redis-server /root/myredis/redis.conf 
    

    在這裏插入圖片描述注:默認情況,Redis不是在後臺運行,我們需要把redis放在後臺運行

    vi /root/myredis/redis.conf
    

    在這裏插入圖片描述之後再次啓動redis並且查看進程

    # 查看進程
    ps -ef|grep redis
    

    在這裏插入圖片描述
    可以看到在6379端口號已啓動了redis

  10. 客戶端相關操作

    # 連接
    cd /usr/local/redis/bin
    ./redis-cli  默認是-h 127.0.0.1 -p 6379  
    # 查看redis是否通,如果返回PONG說明通了
    ping
    # 停止redis
    cd /usr/local/redis/bin
    ./redis-cli shutdown
    #或者
    pkill redis-server
    # 客戶端內停止redis
    shutdown
    # 退出
    quit
    

    在這裏插入圖片描述

  11. redis設置密碼

    config set requirepass 密碼
    

    在這裏插入圖片描述
    注:如果你是雲服務器的話,redis一定要設置密碼,而且密碼最好是字母+數字+英文特殊符號(這裏一定要是英文的特殊符號,不然後期SpringBoot連接redis會連接不上),不然你的服務器很容易被別人挖礦當成肉雞用,我一天之內被挖了兩次,服務器也重置了兩次,在這裏祝礦工Ⅳ個親🐴

Redis高可用高併發集羣搭建與配置

我使用了7000、7001、7002、7003、7004、7005六個端口搭建集羣,三個主機,三個從機,我先把可能遇到的坑寫在這裏

錯誤一:sorry, can’t connect to node

解決方法:
1、確保你的六個redis是已經啓動的,可以通過 ps -ef | grep redis 命令查看

2、修改redis幾個節點裏面的配置文件,將 protected-mode yes 改爲 protected-mode no。關閉保護模式。同時還有 bin 127.0.0.1 修改爲 0.0.0.0 或者連接 redis 的主機 ip

3、開放端口,由於我是使用的7000、7001、7002、7003、7004、7005端口,然後由於redis內部總線端口通信使用特殊協議,會使用 開放端口+10000 這個端口,所以我們還需要開放17000、17001、17002、17003、17004、17005端口,如果你是雲服務器的話,不要忘記在控制檯安全組中開放相應端口

# 開放端口命令
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
firewall-cmd --zone=public --add-port=17000/tcp --permanent
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
firewall-cmd --zone=public --add-port=17003/tcp --permanent
firewall-cmd --zone=public --add-port=17004/tcp --permanent
firewall-cmd --zone=public --add-port=17005/tcp --permanent
# 重啓防火牆
firewall-cmd --reload
# 查看哪些端口是開啓的
firewall-cmd --list-port

錯誤二:創建集羣時一直處於"Waiting for the cluster to join…"的狀態

這個錯誤是因爲端口問題引起的,解決方法參考錯誤一

錯誤三:Node 121.36.17.228:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解決方法:
1、將每個節點下aof、rdb、nodes.conf本地備份文件刪除;

2、172.168.63.201:7001> flushdb #清空當前數據庫(可省略)

3、再次執行腳本,正常情況下成功執行

錯誤四:ERR Slot 0 is already busy (Redis::CommandError)

錯誤提示是說:slot插槽被佔用了、這是因爲 搭建集羣前時,以前redis的舊數據和配置信息沒有清理乾淨。

解決方法:用 redis-cli 登錄到每個節點執行 flushall 和 cluster reset
在這裏插入圖片描述之後再次執行創建集羣命令

redis集羣搭建過程:

  1. 在 /root 路徑下新建文件夾 redis-cluster,同時將 redis-server 和 redis-cli 拷貝進去

    cd /root
    mkdir redis-cluster
    
    cp /usr/local/redis/bin/redis-server  /root/redis-cluster/redis-server
    cp /usr/local/redis/bin/redis-cli  /rootredis-cluster/redis-cli
    
  2. 準備六個redis配置文件

    cd /root/redis-cluster
    mkdir redis-1
    mkdir redis-2
    mkdir redis-3
    mkdir redis-4
    mkdir redis-5
    mkdir redis-6
    
    cp /root/myredis/redis.conf /root/redis-cluster/redis-1/redis.conf
    cp /root/myredis/redis.conf /root/redis-cluster/redis-2/redis.conf
    cp /root/myredis/redis.conf /root/redis-cluster/redis-3/redis.conf
    cp /root/myredis/redis.conf /root/redis-cluster/redis-4/redis.conf
    cp /root/myredis/redis.conf /root/redis-cluster/redis-5/redis.conf
    cp /root/myredis/redis.conf /root/redis-cluster/redis-6/redis.conf
    
  3. 修改新準備的六個redis配置文件

    # Redis-1文件夾中redis.conf配置文件修改
    bind 0.0.0.0                    69行
    protected-mode no				88行
    port 7000                       92行
    daemonize yes                   136行
    # 打開aof 持久化
    appendonly yes                  672行 
    # 開啓集羣
    cluster-enabled yes             814行
    # 集羣的配置文件,該文件自動生成   
    cluster-config-file nodes-7000.conf  822行
    # 集羣的超時時間
    cluster-node-timeout 5000         828行
    

    其他五個配置文件除了端口號之外其他和第一個配置文件修改相同,例如

    # Redis-2文件夾中redis.conf配置文件修改
    bind 0.0.0.0                    69行
    protected-mode no				88行
    port 7001                       92行
    daemonize yes                   136行
    # 打開aof 持久化
    appendonly yes                  672行 
    # 開啓集羣
    cluster-enabled yes             814行
    # 集羣的配置文件,該文件自動生成   
    cluster-config-file nodes-7001.conf  822行
    # 集羣的超時時間
    cluster-node-timeout 5000         828行
    
  4. 同時啓動所有的redis

    cd /root/redis-cluster
    ./redis-server /root/redis-cluster/redis-1/redis.conf
    ./redis-server /root/redis-cluster/redis-2/redis.conf
    ./redis-server /root/redis-cluster/redis-3/redis.conf
    ./redis-server /root/redis-cluster/redis-4/redis.conf
    ./redis-server /root/redis-cluster/redis-5/redis.conf
    ./redis-server /root/redis-cluster/redis-6/redis.conf
    
  5. 使用docker 下載redis-trib的鏡像運行

    # 安裝Docker
    yum install docker
    # 啓動docker
    systemctl start docker
    # A: 下載鏡像
    docker pull inem0o/redis-trib
    

    之後運行創建集羣命令(192.168.120.129是服務器或者虛擬機密碼,記得更換成你自己的)

    docker run -it --net host inem0o/redis-trib create --replicas 1 192.168.120.129:7000 192.168.120.129:7001 192.168.120.129:7002 192.168.120.129:7003 192.168.120.129:7004 192.168.120.129:7005
    

    注:集羣連接代碼必須要在同一行

  6. 集羣設置密碼
    如果你需要使用外部主機連接集羣,這裏最好要設置密碼,而且要設置強密碼(字母+數字+英文特殊符號),不然你會被挖礦工瘋狂挖礦,嚴重的還會導致你的服務器ip被封禁(挖礦工沒🐴就完了)

    # 進入各個實例進行設置    -c 表示連接集羣
    ./redis-cli -c -p 7000 
    config set masterauth 密碼
    config set requirepass 密碼
    config rewrite 
    

    之後分別使用 ./redis-cli -c -p 7001,./redis-cli -c -p 7002 … 給每個節點設置上密碼。

    注:各個節點密碼都必須一致,否則Redirected就會失敗, 推薦這種方式,這種方式可以在redis啓動的時候把密碼寫入到redis.conf裏面去,且不用重啓redis

  7. 測試集羣環境

    # 連接7000
    ./redis-cli -c -p 7000 -a 密碼
    

    在這裏插入圖片描述
    可以發現插入的數據會存放到不同的redis中,到此集羣搭建完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章