安装
按官方的安装方式:
$ 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
执行后出现以下界面:
输入yes
集群搭建成功
进入集群
./../redis-7.0.4/bin/redis-cli -a 123456 -c -p 6379
-c : 集群模式
输入cluster nodes查看集群信息
cluster nodes
添加节点
继续复制 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
查看集群状态
可以看到新加的节点没有分配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槽
添加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依旧是主节点
需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的6393节点的客户端,然后使用集群命令进行操作,把当前的6393(slave)节点指定到一个主节点下(这里使用之前创建的6392主节点)
再次查看节点状态,配置成功
删除节点
删除从节点
用del-node删除从节点6393,指定删除节点ip和端口,以及节点id
./../redis-7.0.4/bin/redis-cli -a 123456 --cluster del-node 192.168.56.104:6393 6c58d4990da2e007c180efeb5b1f5b9b83790aae
节点已经删除
删除主节点
因为主节点上有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草槽已经迁移走了
执行del-node命令删除主节点
./../redis-7.0.4/bin/redis-cli -a 123456 --cluster del-node 192.168.56.104:6392 68a92a9a88820333e646004383cfc7f952b838a8
查看节点状态,已经删除成功