網上已經有很多類似教程,我只是簡單記錄一下其主要過程和遇到的問題。
1 軟件準備
虛擬機:centos 7.x
redis版本:4.0.9
ruby版本:ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
軟件準備遇到的問題:
安裝ruby過程中:
Error running 'requirements_centos_libs_install autoconf automake bison libffi-devel libtool readline-devel sqlite-devel zlib-devel libyaml-devel
openssl-devel',
解決:一頓yum install 缺少的lib
2 redis.conf配置文件
複製出6份redis_8001conf、redis_8002conf、redis_8003conf、redis_8004conf、redis_8005conf、redis_8006conf
爲什麼要6份呢?因爲集羣要求(最少3主),如果每個主節點需要1個備份而集羣少於6個節點則報錯如下:
>>> Creating cluster
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 4 nodes and 1 replicas per node.
*** At least 6 nodes are required.
配置文件每份內容大致如下:
daemonize yes
port 8001
bind 你的ip
pidfile /var/run/redis_8001.pid
dir /data/redis_data/8001
cluster-enabled yes
cluster-config-file nodes_8001.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
appendonly yes
3 啓動redis服務
分別啓動6個redis服務
$ cd redis/src
$ ./redis-server ../redis_8001.conf
每個redis服務啓動成功的話:
11815:C 01 Jun 11:59:32.966 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11815:C 01 Jun 11:59:32.966 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=11815, just started
11815:C 01 Jun 11:59:32.966 # Configuration loaded
查詢redis進程ps -ef|grep redis,redis進程後有[cluster]標記:
user 11801 1 0 11:59 ? 00:00:02 ./redis-server xxx.xx.xx.xx:8001[cluster]
4 啓動redis集羣
Redis的實例全部運行之後,還需要redis-trib.rb
工具來完成集羣的創建。
redis-trib.rb
二進制文件在Redis包主目錄下的src
目錄中,運行該工具依賴Ruby(yum -y install ruby rubygems)
環境和gem(gem install redis)
,因此需要提前安裝。(引自:https://blog.csdn.net/huwh_/article/details/79242625)
$ cd redis/src
$ ./redis-trib.rb create --replicas 1 ip:8001 ip:8002 ip:8003 ip:8004 ip:8005 ip:8006
成功的話:
此處遇到的問題:
cluster啓動報錯:
>>> Creating cluster
[ERR] Sorry, can't connect to node xxx.xx.xx.xxx:8001
解決:1、查看redis配置文件bind參數的ip和啓動時的命令中的ip是否一致 2、查看redis配置文件有沒有添加密碼驗證,有則取消。3、網上所說的ruby版本過低??
5 驗證集羣
很簡單,測試以集羣方式登錄某一節點,創建一個key,去另一個節點get等等驗證方式。
集羣登錄節點方式:
$ cs redis/src
$ ./redis-cli -c -h 127.0.0.1 -p 8001
6 集羣密碼
以上方式創建的集羣是無密碼的,直接可以拿來用。
給集羣添加密碼1234 方式如下:
依次登陸每個節點添加集羣認證(masterauth)和單個服務自己的密碼(requirepass)且要保持一致:
$ redis-cli -c -h 127.0.0.1 -p 8001
> config set masterauth 1234
OK
> config set requirepass 1234
OK
> quit
$ redis-cli -c -h 127.0.0.1 -p 8001 -a 1234
> config rewrite
密碼登錄集羣節點的命令:
redis-cli -c -h 127.0.0.1 -p 8001 -a 1234
7 集羣重啓遇到的問題
由於服務器重啓,之前的redis集羣服務未停止。後來在啓動集羣時,集羣可以啓動成功,但是新增key值,報錯:
CLUSTERDOWN Hash slot not served
解決辦法:
修復意外停止的集羣,每一個節點執行:redis-trib.rb fix IP:端口