目錄
一、工具版本
- redis 5.0.7
- VMware-workstation-full-14.1.7-12989993
- CentOS-7-x86_64-DVD-1908
- putty_V0.63.0.0.43510830
- FileZilla_3.37.4_win64-setup_bundled
二、排除問題及解決方案
如果是新安裝的CentOS-7系統,需要下載安裝一些命令,不然會遇到各種報錯,下面是我遇到的一些問題及解決方案,提前貼出來,在執行的時候方面查詢!
- -bash wget:未找到命令
# -bash wget:未找到命令
# 安裝wget,在下載redis包時提示錯誤信息
yum install wget
- gcc:命令未找到
# 執行make命令時出錯
yum -y install gcc automake autoconf libtool make
- redis編譯報致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
# 執行make命令時出第二個錯
make MALLOC=libc
分配器allocator, 如果有MALLOC 這個 環境變量, 會有用這個環境變量的 去建立Redis。
而且libc 並不是默認的 分配器, 默認的是 jemalloc, 因爲 jemalloc 被證明 有更少的 fragmentation problems 比libc。
但是如果你又沒有jemalloc 而只有 libc 當然 make 出錯。 所以加這麼一個參數,運行如下命令:
原文鏈接:https://blog.csdn.net/honchou56/article/details/53994708
- netstat: 未找到命令
yum -y install net-tools
三、開始安裝
首先選擇redis安裝目錄,我是用的是/usr/local
1.下載和解壓
cd /usr/local/
mkdir redis
cd redis
# 此處出錯查看------>排除問題及解決方案 1
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar xzvf redis-5.0.7.tar.gz
cd redis-5.0.7
# 此處出錯查看------>排除問題及解決方案 2、3
make
2.處理節點配置文件
由於一個系統配置6個節點的僞集羣,我們需要把這6個節點配置文件放置到不同的文件夾裏
#建立配置文件文件夾,目前目錄在redis-5.0.7下
mkdir 7000 7001 7002 7003 7004 7005
3.配置文件redis.conf
#端口
port 7000
#此redis實例作爲集羣的一個節點
cluster-enabled yes
#節點能夠失聯的最大時間
cluster-node-timeout 15000
#集羣配置文件,系統自動維護,不能人工編輯,主要記錄集羣中有哪些節點,狀態等參數
cluster-config-file nodes-7000.conf
#後臺運行
daemonize yes
#持久化
appendonly yes
#非保護模式,設置爲no此時外部網絡可以直接訪問否則需要bind ip
protected-mode no
#redis以守護進程方式運行時
pidfile /var/run/redis_7000.pid
強調: 網絡上很多教程沒有說 cluster-config-file 也需要跟着不同文件改變,導致我最初失敗了很多次,只能啓動一個節點。
port 、 cluster-config-file 、 pidfile 三個配置根據不同文件夾進行更改,最後放入對應的文件夾中。
4、啓動節點
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7000/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7001/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7002/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7003/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7004/redis.conf
/usr/local/redis/redis-5.0.7/src/redis-server /usr/local/redis/redis-5.0.7/7005/redis.conf
啓動提示如圖:
查看所有redis進程,可以看到已經啓動的節點
# 這裏提示netstat: 未找到命令 查看------>排除問題及解決方案 4
netstat -ap | grep redis
進入/var/run/目錄下 可以看到每個節點對應的pid文件
5.開啓集羣
5.1 獲取ip
通過ip addr 來獲取ip,如果ens33下沒有inet 地址,請查看下面地址開啓網絡服務Centos 7 輸入ip addr 沒有ip問題
5.2 創建集羣
# 這裏後面的ip是linux系統的ip,自行更改成剛纔獲取到的ip地址
/usr/local/redis/redis-5.0.7/src/redis-cli --cluster create 192.168.122.128:7000 192.168.122.128:7001 192.168.122.128:7002 192.168.122.128:7003 192.168.122.128:7004 192.168.122.128:7005 --cluster-replicas 1
提示如下圖時,集羣已經搭建完畢!
至此已經搭建成功!
四、 測試
1.登錄到一個節點
redis-cli -c -h host -p port -a password
- -c表示集羣
- -h表示地址
- -a表示auth,沒有可省略
/usr/local/redis/redis-5.0.7/src/redis-cli -c -h 192.168.122.128 -p 7000
2.查看集羣信息
cluster nodes
在節點7005插入aa=123,切換登錄到節點7000後get aa 得到123,認證完畢!
五、加入新的節點
- 像前幾步新建7006文件夾,把對應配置文件改好後放進去,啓動節點
#添加7006節點至7000集羣,後面的7000可以是集羣內任意節點,
/usr/local/redis/redis-5.0.7/src/redis-cli --cluster add-node 192.168.122.128:7006 192.168.122.128:7002
有可能會報錯Node 192.168.122.128:7006 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
進入這個新創的節點執行flushdb解決
進入任意一個節點,執行命令
/usr/local/redis/redis-5.0.7/src/redis-cli -c -h 192.168.122.128 -p 7003
cluster nodes
可以查看到7006已經在裏面
六、 拓展
#查看某節點信息
/usr/local/redis/redis-5.0.7/src/redis-cli -h 127.0.0.1 -p 7006 info
#7007節點添加至cluster-master-id爲7006的從節點
/usr/redis/bin/redis-cli --cluster add-node 192.168.195.128:7007 192.168.195.128:7000 --cluster-slave --cluster-master-id ac42afe9091f1f18a8ab609c06b9c64123e97f9b
#分配卡槽
/usr/redis/bin/redis-cli --cluster reshard 192.168.195.128:7000
#還原卡槽
/usr/redis/bin/redis-cli --cluster reshard 192.168.195.128:7000 --cluster-from ac42afe9091f1f18a8ab609c06b9c64123e97f9b --cluster-to 7630463201989e4226421779400e1b31aca74757 --cluster-slots 4096
#關於防火牆如果在虛擬機外部鏈接redis集羣報錯,可能是因爲防火牆問題,比如這個錯誤:
redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
#查看防火牆狀態
#執行後可以看到綠色字樣標註的“active(running)”,說明防火牆是開啓狀態
systemctl status firewalld.service
#關閉運行的防火牆
systemctl stop firewalld.service
#查看防火牆狀態
systemctl status firewalld.service
#永久關閉防火牆
systemctl disable firewalld.service
七、Amazing
剛纔reids官網掛了