前几周就在学习搭建redis集群,照着网上的教程操作了一波,总是遇到各种各样的问题,很难受,最后还是没有搭建成功,像这种情况,我一般先放一放,等一段时间再来试试,今天又来操作了一波,终于成功搭建起了集群。
一.下载安装redis
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -xvf redis-5.0.3.tar.gz
cd redis-5.03/src
make
二.主从复制
1.创建测试文件夹
mkdir redis-slave-test //创建测试文件夹
cd redis-slave-test
mkdir 9000 9001
cp -r ../redis-5.0.3/* 9000 //安装端口为9000和9001的两个redis,9000的为master,9001为slave
cp -r ../redis-5.0.3/* 9001
2. 进行主从配置
vim 9000/redis.conf
做如下修改:
#port 6379
port 9000
#daemonize no
daemonize yes
#pidfile /var/run/redis_6379.pid
pidfile /var/run/redis_9000.pid
vim 9001/redis.conf
修改类比9000,最后面加上 slaveof 127.0.0.1 9000
3. 启动redis并测试
9000/src/redis-server 9000/redis.conf
9000/src/redis-server 9001/redis.conf
9000/src/redis-cli -p 9000
set admin_name xiaoming
exit
9000/src/redis-cli -p 9001 //连接9001
在9000添加的admin_name在9001也存在,尝试在9001删除key,会报错说是只读的
三.哨兵
按照一再创建一个master的slave(配置完成启动后,会自动成为9000的slave)
vim 9000/sentinel.conf
做如下修改
#sentinel monitor mymaster 127.0.0.1 6379 2
sentinel monitor mymaster 127.0.0.1 9000 1
9000/src/redis-sentinel 9000/sentinel.conf //启动哨兵
杀掉9000的进程,等几秒钟后9001成了新的master
查看配置文件,发现
9000/redis.conf中 slaveof 127.0.0.1 9000不见了
9000和9001多了 replicaof 127.0.0.1 9001
说明主从的配置信息已经被持久化了下来,9000重启后也不再是master了,所有redis全部重启后,9000也不是master了
四.集群搭建
创建六个redis实例,配置如下:
cluster-enabled yes
bind 127.0.0.1
port pidfile这些一样地配置,不需要配置slaveof
启动脚本:
#!/bin/bash
parent_path=/home/fengxing/redis-cluster-test
node_dirs=(9000 9001 9002 9003-slave 9004-slave 9005-slave )
for node_dir in ${node_dirs[@]}; do
cd $parent_path
cd $node_dir
src/redis-server redis.conf
done
网上说需要安装ruby,使用redis-trib.rb,但是redis5.0后的版本直接使用redis-cli就可以创建集群了
之前一直没创建成功是因为 直接使用redis-cli,之前 sudo apt-get install redis-server 安装了redis,所以直接使用redis-cli使用的是自动安装的那个redis-cli,但是那个版本是3.0的
9000/src/redis-cli --cluster create 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 --cluster-replicas 1
执行后打印如下日志:
M: 973583c85e6940badf6207bff3589c38e248ad31 127.0.0.1:9000
slots:[0-5460] (5461 slots) master
M: eafd7354fe5b62e20fd21755de278589887f960a 127.0.0.1:9001
slots:[5461-10922] (5462 slots) master
M: ac3045a6c3a841655bd3f6954e2f352c80d879a4 127.0.0.1:9002
slots:[10923-16383] (5461 slots) master
S: 61266bf474ab47dbcef64c025cbeff19f5b2cd49 127.0.0.1:9003
replicates eafd7354fe5b62e20fd21755de278589887f960a
S: b156f35a3c5f3f80b3b17ab79104f709a95e9a62 127.0.0.1:9004
replicates ac3045a6c3a841655bd3f6954e2f352c80d879a4
S: a10919a9a6735b2ca1f920bb274dc14019d3aed1 127.0.0.1:9005
replicates 973583c85e6940badf6207bff3589c38e248ad31
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
......
>>> Performing Cluster Check (using node 127.0.0.1:9000)
M: 973583c85e6940badf6207bff3589c38e248ad31 127.0.0.1:9000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: ac3045a6c3a841655bd3f6954e2f352c80d879a4 127.0.0.1:9002
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: b156f35a3c5f3f80b3b17ab79104f709a95e9a62 127.0.0.1:9004
slots: (0 slots) slave
replicates ac3045a6c3a841655bd3f6954e2f352c80d879a4
S: a10919a9a6735b2ca1f920bb274dc14019d3aed1 127.0.0.1:9005
slots: (0 slots) slave
replicates 973583c85e6940badf6207bff3589c38e248ad31
S: 61266bf474ab47dbcef64c025cbeff19f5b2cd49 127.0.0.1:9003
slots: (0 slots) slave
replicates eafd7354fe5b62e20fd21755de278589887f960a
M: eafd7354fe5b62e20fd21755de278589887f960a 127.0.0.1:9001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
最开始运行没有成功,一直卡在Waiting for the cluster to join......这里,百度说是防火墙的原因
ufw disable
apt-get remove iptables
关闭防火墙后,再次运行确实可以了,但是直接关闭防火墙应该是不稳妥的,正式环境肯定不能直接关闭防火墙,所以以后需要探索更好的解决方案
搭建集群成功后,关机再次重启,集群的配置任然存在,将所有redis实例启动后,集群就可以使用了