1.Redis官网
redis.io
2.操作流程
2.1下载版本5.0.14
cd /data/
#下载
wget https://download.redis.io/releases/redis-5.0.14.tar.gz
#解压
tar xf redis-5.0.14.tar.gz
mv redis-5.0.14 /usr/local/redis
2.2安装
cd /usr/local/redis/
make
2.3配置环境变量
cat>>/etc/profile<<'EOF'
export PATH=/usr/local/redis/src:$PATH
EOF
tail -1 /etc/profile
source /etc/profile
echo $PATH
#安装部分工具
cd /usr/local/redis/src
[root@localhost src]# make install
CC Makefile.dep
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
2.4启动redis
#后台启动
redis-server &
#检查端口
[root@localhost ~]# netstat -lntup|grep 6379
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 23805/redis-server
tcp6 0 0 :::6379 :::* LISTEN 23805/redis-server
2.5连接测试
[root@localhost ~]# redis-cli
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"
2.6Redis基本管理操作
2.6.1基础配置文件
1)创建数据文件目录
mkdir /data/6379 -p
2)生成配置文件
cat > /data/6379/redis.conf<<EOF
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
EOF
cat /data/6379/redis.conf
3) 配置文件说明
daemonize yes #是否后台运行
port 6379 #默认端口
logfile /var/log/redis.log #日志文件位置
dir /data/6379 #持久化文件存储位置
dbfilename dump.rdb #RDB持久化数据文件
4) 重启
#关闭
redis-cli shutdown
#启动
redis-server /data/6379/redis.conf
netstat -lnp|grep 6379
测试:
[root@oldboy redis]# redis-cli
127.0.0.1:6379> set name gxf
OK
127.0.0.1:6379> get name
"gxf"
127.0.0.1:6379> exit
2.6.2使用systemd管理redis
1)关闭
redis-cli shutdown
2)创建用户并授权
useradd redis -M -s /sbin/nologin
chown -R redis:redis /data/63*
3)生成启动文件
cat >/usr/lib/systemd/system/redis6379.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/redis/src/redis-server /data/6379/redis.conf --supervised systemd
ExecStop=/usr/local/redis/src/redis-cli shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
4)设置开机自启动,并启动检查
[root@db01 redis]# systemctl enable redis6379
[root@db01 redis]# systemctl start redis6379
[root@db01 redis]# netstat -lntup|grep 637
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 6832/redis-server *
tcp6 0 0 :::6379 :::* LISTEN 6832/redis-server *
2.6.3 redis安全配置
redis默认开启了保护模式,只允许本地回环地址登录并访问数据库。
protected-mode yes #保护模式,是否只允许本地访问
取消:CONFIG SET protected-mode no
可以通过指定ip或者设置密码解决
(1)Bind :指定IP进行监听
vim /data/6379/redis.conf
bind 192.168.122.152 127.0.0.1
(2)增加requirepass {password}
vim /data/6379/redis.conf
requirepass 123
检查配置文件
[root@localhost ~]# cat /data/6379/redis.conf
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
bind 192.168.122.152 127.0.0.1
requirepass 123
重启
[root@localhost ~]# redis-cli shutdown
[root@localhost ~]# redis-server /data/6379/redis.conf
验证密码
方法1
[root@localhost ~]# redis-cli -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set b 1
OK
127.0.0.1:6379> get b
"1"
方法2
[root@localhost ~]# redis-cli
127.0.0.1:6379> set c 1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123
OK
127.0.0.1:6379> set c 1
OK
127.0.0.1:6379> get c
"1"
2.6.4 在线查看和修改参数
参数修改:
1)配置文件。
2)在线查看和修改参数
在线查看
CONFIG GET *
CONFIG GET pro*
在线设置密码:
config set requirepass hc123456
2.7 redis持久化
redis持久化方式:RDB、AOF
1)RDB持久化
在指定时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。
缺点:会有数据丢失
rdb持久化核心配置参数:
vim /data/6379/redis.conf
dir /data/6379
dbfilename dump.rdb
save 900 1
save 300 10
save 60 10000
---
配置分别表示:
900秒(15分钟)内有1个更改
300秒(5分钟)内有10个更改
60秒内有10000个更改
2)AOF持久化(append-only log file)
记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
AOF文件中的命令全部以Redis协议格式来保存,新命令会被追加到文件的末尾。
优点:可以最大程度保证数据不丢
缺点:日志记录量级比较大
配置:
vim /data/6379/redis.conf
appendonly yes
appendfsync everysec
3. redis cluster 搭建
3.1 介绍
实现高性能
1.在多分片redis节点中,将16384个内存槽位,均匀分布到多个Redis分片节点中。
2.存数据时,将key做crc16(key)计算生成一个数字,然后和16384进行取模,得出槽位值(0-16383之间)。
3.根据计算得出的槽位值,找到相对应的分片节点的主节点,到相应槽位上存取数据。
4.如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储
高可用
1.在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能。
2.同时当主节点宕机,实现类似于sentinel的自动failover功能,所有分片节点参与投票选举。
3.redis会有多组分片构成(一般至少3组)。
4.redis cluster使用固定个数slot存储数据(一共16384个slot)
5.每组分片节点分得1/3槽位,slot个数分别(0-5500/5501-11000/11001-16383)
6.基于CRC16(key)%16384计算的值,对应相应的槽位号存取数据。
3.2 搭建过程
1)规划
-
6个redis实例,放到3台硬件服务器。
- 注:一组redis分片的主从节点要分到不同物理机,防止硬件主机宕机造成的整个分片数据丢失。
-
端口号:7000-7005共6个节点
2)配置
#创建各节点数据目录
mkdir /data/700{0..5}
#导入各节点配置文件
cat > /data/7000/redis.conf <<EOF
port 7000
daemonize yes
pidfile /data/7000/redis.pid
loglevel notice
logfile "/data/7000/redis.log"
dbfilename dump.rdb
dir /data/7000
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >> /data/7001/redis.conf <<EOF
port 7001
daemonize yes
pidfile /data/7001/redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dbfilename dump.rdb
dir /data/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >> /data/7002/redis.conf <<EOF
port 7002
daemonize yes
pidfile /data/7002/redis.pid
loglevel notice
logfile "/data/7002/redis.log"
dbfilename dump.rdb
dir /data/7002
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >> /data/7003/redis.conf <<EOF
port 7003
daemonize yes
pidfile /data/7003/redis.pid
loglevel notice
logfile "/data/7003/redis.log"
dbfilename dump.rdb
dir /data/7003
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >> /data/7004/redis.conf <<EOF
port 7004
daemonize yes
pidfile /data/7004/redis.pid
loglevel notice
logfile "/data/7004/redis.log"
dbfilename dump.rdb
dir /data/7004
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >> /data/7005/redis.conf <<EOF
port 7005
daemonize yes
pidfile /data/7005/redis.pid
loglevel notice
logfile "/data/7005/redis.log"
dbfilename dump.rdb
dir /data/7005
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
3)启动各节点
redis-server /data/7000/redis.conf
redis-server /data/7001/redis.conf
redis-server /data/7002/redis.conf
redis-server /data/7003/redis.conf
redis-server /data/7004/redis.conf
redis-server /data/7005/redis.conf
[root@localhost ~]# ps -ef|grep redis|grep 700
root 9242 1 0 10:08 ? 00:00:00 redis-server *:7000 [cluster]
root 9244 1 0 10:08 ? 00:00:00 redis-server *:7001 [cluster]
root 9246 1 0 10:08 ? 00:00:00 redis-server *:7002 [cluster]
root 9254 1 0 10:08 ? 00:00:00 redis-server *:7003 [cluster]
root 9262 1 0 10:08 ? 00:00:00 redis-server *:7004 [cluster]
root 9268 1 0 10:08 ? 00:00:00 redis-server *:7005 [cluster]
4) 节点加入集群管理
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
#--replicas 1 是每个分片从节点的个数
5) 运行结果
6)集群主从结果查看
集群主节点状态
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep master
集群从节点状态
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep slave
3.3 集群的节点管理
1)增加新的节点
增加主节点
[root@localhost ~]# redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
已知节点放在后面
讲7007设置为7006的从节点
[root@localhost ~]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave
2)手动分配slots
- 因为redis 5现在还不支持自动平衡slot,所以需要自行计算需要移动的slot数量,并手动执行命令
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from 3fc495b14e672aeedc1f86dc0d2c5962d2337978 --cluster-to cd42bc4322f00c76266745b3bc841b439e7e1ca1 --cluster-slots 1365 --cluster-yes
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from aa699303ec27f88ad93b86cbaf42e45b43c3629c --cluster-to cd42bc4322f00c76266745b3bc841b439e7e1ca1 --cluster-slots 1365 --cluster-yes
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from 035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf --cluster-to cd42bc4322f00c76266745b3bc841b439e7e1ca1 --cluster-slots 1365 --cluster-yes
- 检查分配结果
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep master
035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf 127.0.0.1:7002@17002 master - 0 1663210343000 3 connected 12288-16383
3fc495b14e672aeedc1f86dc0d2c5962d2337978 127.0.0.1:7000@17000 myself,master - 0 1663210343000 1 connected 1365-5460
cd42bc4322f00c76266745b3bc841b439e7e1ca1 127.0.0.1:7006@17006 master - 0 1663210343000 8 connected 0-1364 5461-6825 10923-12287
aa699303ec27f88ad93b86cbaf42e45b43c3629c 127.0.0.1:7001@17001 master - 0 1663210343000 2 connected 6826-10922
3)移除节点
#先找出所有主节点的信息
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep master
035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf 127.0.0.1:7002@17002 master - 0 1663210343000 3 connected 12288-16383
3fc495b14e672aeedc1f86dc0d2c5962d2337978 127.0.0.1:7000@17000 myself,master - 0 1663210343000 1 connected 1365-5460
cd42bc4322f00c76266745b3bc841b439e7e1ca1 127.0.0.1:7006@17006 master - 0 1663210343000 8 connected 0-1364 5461-6825 10923-12287
aa699303ec27f88ad93b86cbaf42e45b43c3629c 127.0.0.1:7001@17001 master - 0 1663210343000 2 connected 6826-10922
- 此时7006节点用了0-1364 5461-6825 10923-12287槽位
执行命令
redis-cli --cluster reshard 127.0.0.1:7006
How many slots do you want to move (from 1 to 16384)? 4096 ##一共转移多少个槽位16384/分片个数
What is the receiving node ID? 65f2a7d26a8a1f9da54eef8eea04ca4716b327b3 #新加的主 7006
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 ##从哪些分片节点获取槽位
#一次恢复一个节点的槽位,
检查删除结果
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep master
035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf 127.0.0.1:7002@17002 master - 0 1663211539000 13 connected 10923-16383
3fc495b14e672aeedc1f86dc0d2c5962d2337978 127.0.0.1:7000@17000 myself,master - 0 1663211539000 11 connected 0-5460
cd42bc4322f00c76266745b3bc841b439e7e1ca1 127.0.0.1:7006@17006 master - 0 1663211540000 8 connected
aa699303ec27f88ad93b86cbaf42e45b43c3629c 127.0.0.1:7001@17001 master - 0 1663211539971 12 connected 5461-10922
3.4 设置redis最大内存和最大连接数
config set maxmemory 102400000
127.0.0.1:6379> CONFIG GET maxmemory
- "maxmemory"
- "0" ###默认使用物理内存,用多大就占多大。
config set maxclients 16384 #最大连接数
标签:127.0,6379,0.1,Redis,redis,cluster,data From: https://www.cnblogs.com/anslinux/p/16831018.html127.0.0.1:6379> CONFIG GET maxmemory
5) "maxclients"
6) "4064" #默认4096