微系列:2、在Centos中,搭建Redis集群

2023-01-09 18:52:01 浏览数 (2)

一、编译Redis

  1. 下载Redis(5.0.8版本)源码并解压 https://redis.io/download/、https://github.com/redis/redis/
  2. 安装gcc, yum install gcc
  3. 进入src目录,执行 make MALLOC=libc 进行编译
  4. 生成的redis-server和redis-cli为可执行文件

二、修改配置

在Redis源码目录中,有配置文件redis.conf,打开并修改如下配置

代码语言:javascript复制
# 端口
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拷贝到新建的文件夹中

执行命令

代码语言:javascript复制
./redis-server redis.conf &

启动该节点

搭建多个节点,可以复制5800文件夹,修改相关配置,并依次启动

设置防火墙

代码语言:javascript复制
firewall-cmd --add-port=5800/tcp --permanent
firewall-cmd --reload

使用redis-cli搭建集群

代码语言:javascript复制
./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节点

代码语言:javascript复制
./redis-cli -h 192.168.0.1 -p 5800 -a ansonredis cluster nodes | grep master

停止某个Redis节点

代码语言:javascript复制
./redis-cli -h 192.168.0.1 -p 5800 -a ansonredis shutdown

重新将某个节点加入集群

代码语言:javascript复制
# 移除节点
./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脚本,写入以下内容,以下为启动两个节点

代码语言:javascript复制
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

0 人点赞