寫在最前:服務器挖礦親🐴biss
最近開始學redis了,在安裝、配置、使用過程中遇到了不少的坑,在這裏記錄並分享一下解決辦法
Redis安裝
-
通過官網下載Redis的壓縮包 https://redis.io/download
redis目前的最新版本是5.X,我下載的是4.0.14版本的,如果有需要4.0.14版本的redis壓縮包可以在評論中留言
-
在安裝redis之前需要先安裝gcc,目的是爲了編譯文件
yum install gcc-c++
-
將壓縮包放到服務器(或者虛擬機)中,由於我使用的華爲雲服務器,所以我把壓縮包放到了 /root/software目錄下,然後通過指令解壓壓縮包
cd /root/software tar -zxvf redis-4.0.14.tar.gz
-
把解壓的文件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
-
打開 /usr/local/src/redis/deps 進行編譯依賴項
cd /usr/local/src/redis/deps make hiredis lua jemalloc linenoise
-
打開 /usr/local/src/redis 進行編譯
cd /usr/local/src/redis make
-
在上面的Redis目錄安裝把它安裝到 /usr/local/redis 裏面
mkdir /usr/local/redis make install PREFIX=/usr/local/redis
看到圖中的提示說明安裝成功 -
驗證安裝是否成功
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
-
啓動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 -
客戶端相關操作
# 連接 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
-
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集羣搭建過程:
-
在 /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
-
準備六個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
-
修改新準備的六個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行
-
同時啓動所有的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
-
使用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
注:集羣連接代碼必須要在同一行
-
集羣設置密碼
如果你需要使用外部主機連接集羣,這裏最好要設置密碼,而且要設置強密碼(字母+數字+英文特殊符號),不然你會被挖礦工瘋狂挖礦,嚴重的還會導致你的服務器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
-
測試集羣環境
# 連接7000 ./redis-cli -c -p 7000 -a 密碼
可以發現插入的數據會存放到不同的redis中,到此集羣搭建完成