操作系统:centos6.5 x86_64
redis:5.0.0
在一台虚拟机上验证集群配置,通过不同的端口,启动不同的redis实例
1、使用源码安装redis
cd /opt
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -xfv redis-5.0.0.tar.gz
cd redis-5.0.0
make
#指定安装的位置
make PREFIX=/usr/local/redis install
2、集群需要至少6个节点,拷贝出6份配置文件
#建立配置文件路径
mkdir -p /etc/redis/cluster/conf.d
#将通用配置放到配置文件目录
cd /etc/redis/cluster
cp /opt/redis-5.0.0/redis.conf common.conf
3、建立个性化配置
cd /etc/redis/cluster/conf.d
vi 7000.conf
#配置文件要差异化,跟端口有关的都要分开配置,以7000端口为例,将以下内容写入7000.conf
#包含通用配置
include /etc/redis/cluster/common.conf
#指定端口
port 7000
#指定集群配置文件名称,该文件记录集群运行时信息
#注意:可以用绝对路径,但必须保证路径已经存在,否则启动失败;如果只有文件名称的话,文件生成在工作路径下
cluster-config-file /etc/redis/cluster/run/nodes-7000.conf
#指定进程pid文件
pidfile /var/run/redis_7000.pid
#指定日志文件
logfile /var/log/redis_7000.log
#指定数据库文件存放路径
dir /var/lib/redis/7000
#appendonly日志文件
appendfilename appendonly-7000.aof
4、按同样的方式建立7001.conf~7005.conf
sed 's/7000/7001/g' 7000.conf > 7001.conf
sed 's/7000/7002/g' 7000.conf > 7002.conf
sed 's/7000/7003/g' 7000.conf > 7003.conf
sed 's/7000/7004/g' 7000.conf > 7004.conf
sed 's/7000/7005/g' 7000.conf > 7005.conf
5、修改common.conf
1)关于个性化的配置前加#屏蔽掉
2)cluster-enabled改为 yes
3)appendonly改为yes
4)daemonize 改为 yes,使得服务后台运行
6、建立数据库文件路径
mkdir -p /var/lib/redis/7000
mkdir -p /var/lib/redis/7001
mkdir -p /var/lib/redis/7002
mkdir -p /var/lib/redis/7003
mkdir -p /var/lib/redis/7004
mkdir -p /var/lib/redis/7005
7、建立集群配置文件路径,cluster-config-file的路径
mkdir -p /etc/redis/cluster/run
8、编写启动脚本/etc/init.d/redis_cluster
可以参考4.0.2 https://blog.csdn.net/gw85047034/article/details/78689885
9、启动集群实例,/etc/init.d/redis_cluster start
10、配置集群
cd /opt/redis-5.0.0/utils/create-cluster
执行./create-cluster create来创建集群,但执行之前,需要修改一下create-cluster脚本
将PORT=30000改为PORT=7000
将以下标红位置顺序调换一下,那样才是正确的端口列表7000~7005
if [ "$1" == "create" ]
then
HOSTS=""
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
HOSTS="$HOSTS 127.0.0.1:$PORT"
done
../../src/redis-cli --cluster create $HOSTS --cluster-replicas $REPLICAS
exit 0
fi
然后执行./create-cluster create
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
如果要重新配置集群,先停止集群,然后将cluster-config-file配置的所有文件删除,再重新启动集群,就可以重新配置集群
如果提示[ERR] Node 192.168.2.17:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0. 就在将dir配置的数据库目录下,各个端口子目录清空,注意,端口子目录不能删除,否则无法启动
注意:此时创建的集群里面,slots的地址都是127.0.0.1,要创建实际地址的集群,需要以下配置方式
1)修改common.conf,将bind的实际地址放前面,127.0.0.1放后面
注意,127.0.01要保留,因为本机上的操作,以及启动脚本,默认都是连接此地址,否则要指定IP
bind 192.168.2.17 127.0.0.1
2)修改create-cluster脚本HOSTS="$HOSTS 127.0.0.1:$PORT" 中的127.0.0.1为实际地址
14、设置集群的密码
先将集群实例停止,/etc/init.d/redis_cluster stop
修改common.conf,将requirepass打开,并设置密码,同时将masterauth打开,密码设置与requirepass一样
15、重新启动集群,至此,集群配置完毕
16、验证集群
./redis-cli -p 7000
127.0.0.1:7000> cluster nodes
此时,7000、7001、7002是master,其他三个是slave
在另外一个会话窗口停掉7002
/etc/init.d/redis_cluster stop 7002
再次查看cluster状态
/etc/init.d/redis_cluster restart
此时,7002变成failed?,7005变为master
17、验证数据存取
./redis-cli -p 7000
127.0.0.1:7000> set key5 7005
(error) MOVED 9057 127.0.0.1:7001
登录的时候,必须加上-c参数,才会自动重定向到另外一个实例
./redis-cli -c -p 7000
再次执行,又出现(error) NOAUTH Authentication required.
登录的时候,必须加上密码参数-a,这样就不用要求输入密码了,或者使用auth password登录