Redis Cluster集群搭建

目录

1、实验准备

2、编译安装

3、安装准备

3.1 目录准备

3.2 执行文件配置

3.3 配置文件优化

3.4配置其他节点

3.5 service配置

4、集群搭建

4.1 redis启动

4.2 检查启动情况

4.3 集群搭建

4.4 集群检验

5、增加和删除节点

5.1 增加节点

5.1.1 新增/设置主节点

5.1.2 新增/设置从节点

5.2 删除节点

6、常用命令

6.1 内存查看及调整


1、实验准备

hostname

IP

系统

redis版本

node1

172.19.16.7

centos7.6

redis6.2.7

2、编译安装

下载对应版本的redis(下载地址:Index of /releases/)

wget  http://download.redis.io/releases/redis-6.2.7.tar.gz
 

编译安装

tar xf redis-6.2.7.tar.gz  && cd redis-6.2.7/
make && make install

3、安装准备

3.1 目录准备

在/data/redis/目录下创建文件7001

mkdir -p  /data/redis && cd /data/redis
mkdir -p {7001..7006}

3.2 执行文件配置

在7001文件夹下创建相当于文件夹

mkdir -p bin  conf  data  logs  redis-cluster
cd bin
cp -r /usr/local/bin/redis-*  ./

编写启动脚本redis.sh

#!/bin/bash
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

REDIS_HOME="/data/redis/7001"
EXEC="$REDIS_HOME/bin/redis-server"
CLIEXEC="$REDIS_HOME/bin/redis-cli"
CONF="$REDIS_HOME/conf/redis.conf"
REDISPORT=$(awk '/^port/{print $2}' $CONF)
PIDFILE=$(awk '/^pidfile/{print $2}' $CONF)

start() {
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &
        fi
}

stop() {

        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi

}

restart() {

        stop
        sleep 1
        start
}

case "$1" in
    start)
        start;;
    stop)
        stop;;
    restart)
        restart;;
esac

3.3 配置文件优化

编制redis.conf配置文件

#只让本地访问
protected-mode yes
#访问端口7001
port 7001
#最大内存96GB,最大物理内存的四分之三
maxmemory 96GB
#tcp最大连接数,默认511,大于511连接数抛弃
tcp-backlog 511
#单位秒,默认0;如果在一个 timeout 时间内,没有数据的交互,是否断开连接。0代表永不断开
timeout 0
#单位:秒,默认是300;客户端与服务器端如果没有任何数据交互,多少秒会进行一次ping,pong 交互。作用:①用于校验是否有机器已经挂了②保持网络活跃(通讯)
tcp-keepalive 300
#默认值:no;是否开启守护进行启动redis,yes表达开启集群
daemonize yes
#管理Redis守护进程,no:没有监督互动;upstart:通过将Redis置于SIGSTOP模式来启动信号;systemd:signal systemd将READY = 1写入$ NOTIFY_SOCKET;auto :检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量
supervised no
#配置pid文件
pidfile /data/redis/redis_7001.pid
#loglevel :默认值:notice ;redis 服务器日志打印级别,其中:
#1)debug:在开发,调试阶段很有用,大量的日志;
#2)verbose:在debug的基础上,减少连接信息以及内部信息
#3)notice:建议在生产使用
#4)warning:只打印重要、关键的信息
loglevel notice
#配置日志文件
logfile "/data/redis/logs/redis.log"
#默认值:16;redis 数据库的数量,默认使用 0 数据库
databases 16
#是否使用logo,也就是服务启动时命令台打印的那个字符logo
always-show-logo yes
#持久化设置
#15分钟内,至少有1个写操作
save 9000 1
#5分钟内,至少有10个操作
save 3000 10
#30分钟内,至少有10000个写操作
save 1800 10000
#持久化失败后是否禁止新的写入操作
stop-writes-on-bgsave-error yes
#默认值为:yes ; 是否对日志进行压缩,如果服务器磁盘是ssd,但是cpu比较吃紧,可以配置为no,减少cpu的压力
rdbcompression yes
#是否检验rdb文件并自动修复,默认值为:yes
rdbchecksum yes
#默认值:dump.rdb;快照的存储文件
dbfilename dump.rdb
#rdb文件的保存目录
dir /data/redis/data/

replica-serve-stale-data yes
#默认值:yes;从服务器是否只读。
replica-read-only yes
repl-diskless-sync no
#单位:秒,默认值5, 最少异步同步操作的时间
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
#默认值为 no ,不适用append 模式的配置
appendonly no
#默认值:"appendonly.aof",append 模式的日志文件
appendfilename "appendonly.aof"
#默认值:everysec;持久化的频率,always:每一次写操作都持久化;everysec:每隔一秒持久化一次(99%的场景都满足);no:不持久化
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 10
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file /data/redis/redis-cluster/nodes-7003.conf
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 10000
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
#默认是注释掉的,生产建议禁止keys,flushall,flushdb和修改配置等危险操作
rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "redisconf"
masterauth "123456"
#默认是注释掉的,即无密码登录
requirepass "123456"

3.4配置其他节点

把7001文件夹复制到其他文件夹,并将7001端口改成其他的

cd  /data/redis 
cp -r 7001  7002  
cp -r 7001  7003
cp -r 7001  7004
cp -r 7001  7005
cp -r 7001  7006

修改bin/redis.sh配置文件夹位置,修改conf/redis.conf配置端口

3.5 service配置

/usr/lib/systemd/system/redis.service配置如下:

[Unit]
Description=redis
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/data/redis/bin/redis.sh  start
ExecReload=/data/redis/bin/redis.sh restart
ExecStop=/data/redis/bin/redis.sh  stop

[Install]
WantedBy=multi-user.target

4、集群搭建

4.1 redis启动

/data/redis/7001/bin/redis.sh  start

4.2 检查启动情况

netstat -tnlp | grep redis

4.3 集群搭建

/data/redis/bin/redis-cli --cluster create 172.19.16.7:7001  172.19.16.7:7002 172.19.16.7:7003 172.19.16.7:7004  172.19.16.7:7005 172.19.16.7:7006 --cluster-replicas 1   -a 123456

中间的一些询问输入 yes

4.4 集群检验

/data/redis/bin/redis-cli -a 123456 -h 172.19.16.7 -p 7003 -c
172.19.16.7:7003> cluster nodes
b5690448509f531a7235fb1f2f18ef32e8298d0c 172.19.16.7:7001@17001 slave 671aacc092a2f6eea9ef5bab8a1cc6dddb843af5 0 1653817019625 1 connected
093ad4be077cfb0a1d6ce1d9fdf9a3a9378f56c1 172.19.16.7:7002@17002 master - 0 1653817018022 2 connected 5461-10922
671aacc092a2f6eea9ef5bab8a1cc6dddb843af5 172.19.16.7:7003@17003 myself,master - 0 1653817019000 1 connected 0-5460
bf5bc1e6ffc7c7a8269e1e7ba9dbf137847f5545 172.19.16.7:7004@17004 slave 093ad4be077cfb0a1d6ce1d9fdf9a3a9378f56c1 0 1653817019123 2 connected
d8c5389916af476bcad5f066a4cef3d0ee3f2bab 172.19.16.7:7005@17005 slave 4ac60c99f996a724982a67e81bdeaba728731a68 0 1653817018117 3 connected
4ac60c99f996a724982a67e81bdeaba728731a68 172.19.16.7:7006@17006 master - 0 1653817018620 3 connected 10923-16383

5、增加和删除节点

5.1 增加节点

启动新的两个节点8001和8002

/data/redis/8001/bin/redis.sh  start
/data/redis/8002/bin/redis.sh  start

5.1.1 新增/设置主节点

任意连接一台集群中的节点,然后使用cluster meet将 8001和8002 添加到集群中。

[root@VM-16-7-centos ~]# /data/redis/bin/redis-cli -a 123456 -h 172.19.16.7 -p 7003 -c
172.19.16.7:7003> cluster meet  172.19.16.7  8001
OK
172.19.16.7:7003> cluster meet  172.19.16.7  8002
OK
172.19.16.7:7003> cluster nodes

分配槽位

[root@VM-16-7-centos ~]# /data/redis/bin/redis-cli --cluster reshard 172.19.16.7:8001 -a 123456

需要输入的内容:

1、算出来每个 master 的槽数:4096(原本三个 master,加一个变四个 maste,16384/4=4096)。

2、填写接收槽位的172.19.16.7:8001节点 ID:36efcd23eecc5c4238711c4e680026fea1a71e6d。

3、填写槽位来源节点 Source node 为 all,表示从其他所有 master 节点迁移槽位。

5.1.2 新增/设置从节点

任意连接一台集群中的节点,然后使用cluster meet将8002 添加到集群中。

[root@VM-16-7-centos ~]# /data/redis/bin/redis-cli -a 123456 -h 172.19.16.7 -p 7003 -c
172.19.16.7:7003> cluster meet  172.19.16.7  8002
OK

CTRL+D退出,登录172.19.16.7:8002设置为从节点,使用cluster replicate + 主节点ID(指定主节点8002)就能指定当前节点为目标节点的从节点:

[root@VM-16-7-centos ~]# /data/redis/bin/redis-cli -a 123456 -h 172.19.16.7 -p 8002 -c
172.19.16.7:8002> cluster replicate 36efcd23eecc5c4238711c4e680026fea1a71e6d
OK
172.19.16.7:8002> cluster nodes

5.2 删除节点

停止redis服务

/data/redis/bin/redis.sh  stop

删除节点,命令redis-cli --cluster del-node 节点:端口 节点ID -a 密码

[root@VM-16-7-centos ~]# /data/redis/bin/redis-cli --cluster del-node 172.19.16.7:8001 36efcd23eecc5c4238711c4e680026fea1a71e6d -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Removing node 36efcd23eecc5c4238711c4e680026fea1a71e6d from cluster 172.19.16.7:8001 
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.

6、常用命令

6.1 内存查看及调整

1、redis默认内存:如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存。

2、生产上内存设置:一般推荐redis设置内存为最大物理内存的四分之三。

3、内存修改的两种方式

3.1 通过redis.conf配置文件修改

格式:maxmemory 字节

举例:maxmemory 104857600

3.2 通过config命令修改

格式:config set maxmemory 字节

举例:config set maxmemory 104857600

查看内存命令:config get maxmemory

4、查看redis内存使用情况的命令:info memory

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值