一、编译Redis
-
下载Redis(5.0.8版本)源码并解压 https://redis.io/download/、https://github.com/redis/redis/
-
安装gcc, yum install gcc
-
进入src目录,执行 make MALLOC=libc 进行编译
-
生成的redis-server和redis-cli为可执行文件.
二、修改配置
在Redis源码目录中,有配置文件redis.conf,打开并修改如下配置
# 端口
port 5800
# 绑定ip
bind xxx.xxx.xxx.xxx
# 后台运行
daemonize yes
# 进程号文件位置
pidfile /var/run/redis_5800.pid
# 日志文件位置
logfile "/var/log/redis_5800.log"
# 数据文件目录
dir "/opt/redis-cluster/5800"
# 连接master认证密码
masterauth ansonredis
# 认证密码
requirepass ansonredis
# 开启集群模式
cluster-enabled yes
# 集群配置文件名称,启动集群后自动生成
cluster-config-file nodes-5800.conf
三、搭建集群
新建文件夹5800,将redis-server、redis-cli、redis.conf拷贝到新建的文件夹中
执行命令
./redis-server redis.conf &
启动该节点
搭建多个节点,可以复制5800文件夹,修改相关配置,并依次启动
设置防火墙
firewall-cmd --add-port=5800/tcp --permanent
firewall-cmd --reload
使用redis-cli搭建集群
./redis-cli --cluster create 192.168.0.1:5800 192.168.0.1:5801 \
192.168.0.2:5802 192.168.0.2:5803 \
192.168.0.3:5804 192.168.0.3:5805 \
--cluster-replicas 1 -a ansonredis
执行完以上命令,redis会自动分配master节点及replica节点供我们确认,输入yes,完成集群搭建
查看master节点
./redis-cli -h 192.168.0.1 -p 5800 -a ansonredis cluster nodes | grep master
停止某个Redis节点
./redis-cli -h 192.168.0.1 -p 5800 -a ansonredis shutdown
重新将某个节点加入集群
# 移除节点
./redis-cli -h 192.168.0.1 -p 5800 -a xxx cluster forget 节点id
# 重启
# 将节点加入集群
./redis-cli -a xxx --cluster add-node 192.168.0.3:5805 192.168.0.3:5804 --cluster-slave
四、设置开机启动
由于搭建集群时,Redis会自动生成集群配置文件,由cluster-config-file参数指定,所以,重启Redis时,会自动加入集群
为了重启电脑Redis可以正常启动,我们需要设置Redis开机启动,
在/etc/rc.d/init.d新建redisc脚本,写入以下内容,以下为启动两个节点
IP=192.168.0.3
PWD=ansonredis
REDISPORT1=5804
REDISPORT2=5805
# redis-server可执行脚本所在目录
EXEC=/usr/local/bin/redis-server
# redis-cli可执行脚本所在目录
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE1=/var/run/redis_${REDISPORT1}.pid
PIDFILE2=/var/run/redis_${REDISPORT2}.pid
CONF1="/etc/redis/${REDISPORT1}.conf"
CONF2="/etc/redis/${REDISPORT2}.conf"
case "$1" in
start)
if [ -f $PIDFILE1 ]
then
echo "$PIDFILE1 exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF1
$EXEC $CONF2
echo "Redis Cluster started"
fi
;;
stop)
if [ ! -f $PIDFILE1 ]
then
echo "$PIDFILE1 does not exist, process is not running"
else
PID=$(cat $PIDFILE1)
echo "Stopping ..."
$CLIEXEC -h $IP -p $REDISPORT1 -a $PWD shutdown
$CLIEXEC -h $IP -p $REDISPORT2 -a $PWD shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
添加可执行权限 chmod +x /etc/rc.d/init.d/redisc
注册为系统服务 chkconfig --add redisc
添加开机自启动 chkconfig redisc on
启动服务 service redisc start
停止服务 service redisc stop