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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容