redis安装及相关

安装

按官方的安装方式:

$ wget https://download.redis.io/releases/redis-6.2.5.tar.gz 
$ tar xzf redis-6.2.5.tar.gz 
$ cd redis-6.2.5 
$ make

启动

cd redis-6.2.5/src/

后台运行,不带配置:

nohup ./redis-server &

后台运行,带配置:

nohup ./redis-server /root/redis-6.2.5/redis.conf &

后台运行,修改配置文件:

vim redis.conf
找到 daemonize no   改为  daemonize yes
保存后启动
./bin/redis-server ./redis.conf

停止

./redis-cli shutdown

进入内置终端

不带密码进入:

./redis-cli -p 6379 

设置密码

第一种方式

这种方式设置的密码,重启后失效
首先进入redis,查看当前redis有没有设置密码

config get requirepass

显示:

1) "requirepass"
2) ""

则未设置密码
设置密码

config set requirepass 123

再次查看当前redis就提示需要密码:

(error) NOAUTH Authentication required.

第二种方式

这种方式设置的密码是永久有效的
修改redis.conf配置文件

# requirepass foobared
requirepass 123  -- 指定密码123

保存后重启redis就可以了
设置了密码后,再次进入内置终端就需要带密码:

./redis-cli -a 123

停止:

./redis-cli -a 123 shutdown

若无法远程访问,先注释掉redis.conf文件中的bind(bind 127.0.0.1 -::1)属性设置,再把redis.conf文件中的protected-mode属性设置no

自启动

sudo vi /etc/init.d/redis

复制以下脚本

#!/bin/bash
#
# chkconfig: 2345 10 90  
# description: Start and Stop redis   
PATH=/usr/local/bin:/sbin:/usr/bin:/bin   
REDISPORT=6379  
EXEC=/home/vagrant/redis/redis-7.0.4/bin/redis-server
REDIS_CLI=/home/vagrant/redis/redis-7.0.4/bin/redis-cli
PIDFILE=/var/run/redis.pid   
CONF="/home/vagrant/redis/6379.conf"                 
AUTH="123456"
case "$1" in   
        start)   
                if [ -f $PIDFILE ]   
                then   
                        echo "$PIDFILE exists, process is already running or crashed."  
                else
                        echo "Starting Redis server..."  
                        $EXEC $CONF   
                fi   
                if [ "$?"="0" ]   
                then   
                        echo "Redis is running..."  
                fi 
                ;;   
        stop)   
                if [ ! -f $PIDFILE ]   
                then   
                        echo "$PIDFILE exists, process is not running."  
                else  
                        PID=$(cat $PIDFILE)   
                        echo "Stopping..."
                       $REDIS_CLI -p $REDISPORT  SHUTDOWN    
                        sleep 2  
                       while [ -x $PIDFILE ]   
                       do  
                                echo "Waiting for Redis to shutdown..."
                               sleep 1  
                        done   
                        echo "Redis stopped"  
                fi   
                ;;   
        restart|force-reload)   
                ${0} stop   
                ${0} start
                ;;   
        *)   
               echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2  
                exit 1  
esac

修改EXEC和REDIS_CLI为自己路径
赋权

sudo chmod 755 /etc/init.d/redis

启动

/etc/init.d/redis start

开启redis服务

sudo chkconfig redis on

关闭redis服务

sudo chkconfig redis off

持久化配置

RDB持久化配置

# 时间策略:当满足每900s/300s/60s内至少1/10/10000次写操作,则会触发bgsave命令进行持久化,三个策略中只需要满足其中任何一条即可持久化
save 900 1
save 300 10
save 60 10000
 
# 文件名称
dbfilename dump.rdb
 
# 文件保存路径
dir /home/redis/data/
 
# 如果持久化出错,主进程是否停止写入:是为了保证数据的一致性,工作进程(子进程)持久化出错后,主进程停止写入请求
stop-writes-on-bgsave-error yes
 
# 是否压缩
rdbcompression yes
 
# 导入时是否检查
rdbchecksum yes

AOF持久化配置

# 是否开启aof
appendonly yes
 
# 文件名称
appendfilename "appendonly.aof"
 
# 同步方式
appendfsync everysec
 
# aof重写操作是否同步,yes则不进行同步,no则同步
no-appendfsync-on-rewrite no
 
# 重写触发配置
auto-aof-rewrite-percentage 100 # 当前AOF文件大小是上次日志重写时的AOF文件大小两倍时,发生BGREWRITEAOF操作。
auto-aof-rewrite-min-size 64mb # 当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF。
 
# 加载aof时如果有错如何处理,忽略最后一条可能存在问题的指令
aof-load-truncated yes
# Redis4.0新增RDB-AOF混合持久化格式。
aof-use-rdb-preamble no

集群配置

1.create:创建一个集群环境host1:port1 … hostN:portN
2.call:可以执行redis命令
3.add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
4.del-node:移除一个节点
5.reshard:重新分片
6.check:检查集群状态

以6个redis,3主3从为例
创建/home/vagrant/redis/rediscluster,将redis的基础redis.conf复制进去,并关闭AOF功能

# 关闭AOF功能
appendonly no

创建集群配置文件
创建文件:redis6379.conf,添加内容:

include /home/vagrant/redis/rediscluster/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"

# 开启集群模式
cluster-enabled yes

# 指定节点文件名称
cluster-config-file nodes-6379.conf

# 指定节点超时时间
cluster-node-timeout 15000

复制 redis6379.conf,分别命名为redis6380.conf,redis6381.conf,redis6389.conf,redis6390.conf,redis6391.conf,并修改每个文件中的配置,即都将6379替换成对应文件名上的数字,也就是端口号。
开启集群

/home/vagrant/redis/redis-7.0.4/bin/redis-server /home/vagrant/redis/rediscluster/redis6379.conf
/home/vagrant/redis/redis-7.0.4/bin/redis-server /home/vagrant/redis/rediscluster/redis6380.conf
/home/vagrant/redis/redis-7.0.4/bin/redis-server /home/vagrant/redis/rediscluster/redis6381.conf
/home/vagrant/redis/redis-7.0.4/bin/redis-server /home/vagrant/redis/rediscluster/redis6389.conf
/home/vagrant/redis/redis-7.0.4/bin/redis-server /home/vagrant/redis/rediscluster/redis6390.conf
/home/vagrant/redis/redis-7.0.4/bin/redis-server /home/vagrant/redis/rediscluster/redis6391.conf

批量关闭redis-server

ps -ef | grep -v grep | grep redis |  awk -F' ' '{print $2}' | xargs kill -9

创建集群
–cluster create: 创建集群
–cluster-relicas: 集群副本数。 这里是1,是1主机1从机的模式,如果设置为2(即:2台从机)会失败。因为集群中至少要有3个主机,所以设置2台从机时,至少需要9个节点才可以。
最后的参数中列出全部的redis主机IP地址和端口号。

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.56.104:6379 192.168.56.104:6380 192.168.56.104:6381 192.168.56.104:6389 192.168.56.104:6390 192.168.56.104:6391

执行后出现以下界面:


image.png

输入yes


image.png

集群搭建成功
进入集群
./../redis-7.0.4/bin/redis-cli -a 123456 -c -p 6379

-c : 集群模式
输入cluster nodes查看集群信息

cluster nodes
image.png

添加节点
继续复制 redis6379.conf,分别命名为redis6392conf,redis6393.conf,修改对应配置,然后分别启动6392、6393服务
配置6392为集群主节点,使用add-node命令新增一个主节点6392(master),前面的ip:port为新增节点,后面的ip:port为已知存在节点

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster add-node 192.168.56.104:6392 192.168.56.104:6379
image.png

查看集群状态


image.png

可以看到新加的节点没有分配hash槽,需要为新节点手工分配hash槽,该节点才能正常工作。
为新节点分配hash槽
使用redis-cli命令为6392分配hash槽,找到集群中的任意一个主节点,对其进行重新分片工作。

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster reshard 192.168.56.104:6379

会出现以下信息
How many slots do you want to move (from 1 to 16384)? 600
(需要多少个槽移动到新的节点上,自己设置,比如600个hash槽)
What is the receiving node ID? 68a92a9a88820333e646004383cfc7f952b838a8
(ps:把这600个hash槽移动到哪个节点上去,需要指定节点id)
Please enter all the source node IDs.
Type ‘all’ to use all the nodes as source nodes for the hash slots.
Type ‘done’ once you entered all the source nodes IDs.
Source node 1:all
(输入all为从所有主节点(6381,6380,6379)中分别抽取相应的槽数指定到新节点中,抽取的总槽数为600个)
… …
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(输入yes确认开始执行分片任务)
完成后再次查询节点状态,6392已经分配了hash槽


image.png

添加6393为6392的从节点,先将6393添加到集群中

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster add-node 192.168.56.104:6393 192.168.56.104:6379

查询节点状态,6393依旧是主节点


image.png

需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的6393节点的客户端,然后使用集群命令进行操作,把当前的6393(slave)节点指定到一个主节点下(这里使用之前创建的6392主节点)


image.png

再次查看节点状态,配置成功
image.png

删除节点
删除从节点
用del-node删除从节点6393,指定删除节点ip和端口,以及节点id

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster del-node 192.168.56.104:6393 6c58d4990da2e007c180efeb5b1f5b9b83790aae
image.png

节点已经删除


image.png

删除主节点
因为主节点上有hash槽,需要重新分配hash槽

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster reshard 192.168.56.104:6392

出现以下信息
How many slots do you want to move (from 1 to 16384)? 600
What is the receiving node ID? d13d800d1e0ecc0c2ec58c5771428b01e638bc48
(这里是需要把数据移动到哪?6379的主节点id)
Please enter all the source node IDs.
Type ‘all’ to use all the nodes as source nodes for the hash slots.
Type ‘done’ once you entered all the source nodes IDs.
Source node 1:68a92a9a88820333e646004383cfc7f952b838a8
(这里是需要数据源,也就是我们的6392节点id)
Source node 2:done
(这里直接输入done 开始生成迁移计划)
Do you want to proceed with the proposed reshard plan (yes/no)? Yes
(这里输入yes开始迁移)
迁移完毕后,查看节点状态,发现6492上的hash草槽已经迁移走了


image.png

执行del-node命令删除主节点

./../redis-7.0.4/bin/redis-cli -a 123456 --cluster del-node 192.168.56.104:6392 68a92a9a88820333e646004383cfc7f952b838a8

查看节点状态,已经删除成功


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容