1. 下载安装

#下载redis的最新版本
wget http://download.redis.io/releases/redis-7.2.4.tar.gz

yum -y install openssl-devel zlib-devel libtool automake autoconf make gcc gcc-c++

#解压:
tar -zxvf redis-7.2.4.tar.gz
#编译:
cd redis-7.2.4                                     
make PREFIX=/usr/local/redis install
cp -rf redis.conf /usr/local/redis/bin/
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli

2. 编辑配置文件

 vi /usr/local/redis/bin/redis.conf
  • daemonize no 修改为 daemonize yes
    默认值no,该参数设置redis服务是否以守护模式运行
  • 注释掉bind,不再添加任何IP,避免出现问题.
  • protected-mode yes 修改为 protected-mode no 不同网段的服务器才可以连接该redis服务,例10.0.200.109访问10.0.8.148:6379. protected-mode是为了限制不同网段访问redis
  • 修改dump文件目录
# dump 数据文件名
dbfilename dump.rdb

# dump文件保存路径
dir /usr/local/redis
  • 修改内存大小以及失效模式
    maxmemory 4gb
    maxmemory-policy volatile-lru
    Redis在运行时,不重启使用redis-cli修改配置
    CONFIG SET maxmemory 4gb
  • 批量删除keys 批量删除包含 "_2016" 的key,每次删除500条
redis-cli  EVAL "local keys = redis.call('keys', ARGV[1]) for i=1,#keys,500 do redis.call('del', unpack(keys, i, math.min(i+499, #keys))) end return #keys" 0 *_2016*  

或者自从redis2.8以后就开始支持scan命令,批删除大量的key

redis-cli --scan --pattern "*_2016*" | xargs -L 500 redis-cli DEL 
  • 修改pidfile的路径
pidfile /usr/local/redis/redis.pid

3. 测试Redis

#启动redis
 /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
#测试redis: 
/usr/local/redis/bin/redis-cli 
127.0.0.1:6379> set foo springrain
OK
127.0.0.1:6379> get foo
"springrain"
#关闭redis
/usr/local/redis/bin/redis-cli shutdown

4. 注册服务

添加 /etc/systemd/system/redis.service 文件

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl 注册服务

 systemctl daemon-reload
 systemctl enable redis.service

5. Redis主从配置

Redis的主从比较简单,只需要修改slave的配置
修改slaveof master的ip master的端口
slaveof 192.168.0.88 6379

6. 集群

参考资料:https://redis.io/topics/cluster-tutorial

6.1 集群配置和脚本

cluster.zip

#解压到/usr/local/redis/ 目录下
#添加执行权限:
chmod 755 /usr/local/redis/cluster/*.sh
#启动6个redis节点:
/usr/local/redis/cluster/redis-start.sh 
#创建集群:
/usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 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 127.0.0.1:7006 
#关闭6个节点:
/usr/local/redis/cluster/redis-stop.sh
#清除集群数据:
/usr/local/redis/cluster/redis-clear.sh 

6.2 维护

#连接集群:
/usr/local/redis/bin/redis-cli -c -p 7001
#集群节点查看:
/usr/local/redis/bin/redis-cli -p 7001 cluster nodes
#集群检查
/usr/local/redis/bin/redis-cli --cluster check 127.0.0.1:7001

6.3 添加新的master节点到集群

redis-server 新节点.conf
-redis-cli --cluster add-node 新节点IP:新节点PORT 集群中任一IP:7001
例子:# redis-cli --cluster add-node 127.0.0.1:8001 127.0.0.1:7001
说明:
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点
新节点没有包含任何数据,也没有包含任何slot.
当集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中,同时新的主节点因为没有包含任何slot,不参加选举和failover.
为新节点分配slot
-redis-cli --cluster reshard 新节点IP:新节点PORT

6.4 添加新的slave节点到集群

启动新节点
redis-server 新节点.conf
方法一.
语法:-redis-cli --cluster add-node -slave 新节点IP:新节点PORT 集群中任一IP:7001
例子:# redis-cli --cluster add-node -slave 127.0.0.1:8011 127.0.0.1:7001
方法二.
语法:redis-cli --cluster add-node -slave -master-id MASTER_ID 新节点IP:PORT 任意存在节点:PORT
例子:# redis-cli --cluster add-node -slave -master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:8011 127.0.0.1:7001
说明:
-master-id xxxx 主节点的 ID
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点
例子:
注意:在线添加slave 时,需要bgsave整个master数据,并传递到slave,再由 slave加载rdb文件到内存,rdb生成和传输的过程中消耗Master大量内存和网络IO,以此不建议单实例内存过大,线上小心操作.

6.5 在线reshard数据

对于负载/数据不均匀的情况,可以在线reshard slot来解决,方法与添加新master的reshard一样,只是需要reshard的master节点是已存在的老节点.
语法:redis-cli --cluster reshard master节点IP:PORT
例子:redis-cli --cluster reshard 127.0.0.1:7003

6.6 删除一个slave节点

语法:redis-cli --cluster del-node ip:port ''
例子:redis-cli --cluster del-node 127.0.0.1:7001 'c7ee2fca17cb79fe3c9822ced1d4f6c5e169e378'
说明:
ip:port 集群中已有的任意一节点(不是被删除的节点) 被删除节点的 ID

6.7 删除一个master 节点

删除master节点之前首先要使用reshard移除master的全部slot,然后再删除当前节点. (目前redis-cli --cluster只能把被删除master的slot对应的数据迁移到一个节点上).

6.8 改变从节点的隶属关系

# redis-cli -p 7013
127.0.0.1:7013> cluster replicate 2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835
#说明:2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835  为新的主节点的 ID

7. Redis容错说明

Redis集群需要超过一半的Master存活才能正常运行,所以集群生存性存在风险,建议一台服务器一个redis实例. 例如两台服务器,3主3从. A服务器2主1从,B服务器2从1主.如果A宕机,集群就会异常.如果B宕机,A就会有3个主,即便B恢复了,A也不能宕机.建议6台机器进行集群,每台1个redis实例.