Redis 下载地址
下载地址: http://redis.io/download
历史版本: http://download.redis.io/releases/
之前装过4.0.11 ----> Redis-02Redis在linux下的安装及常见问题
Redis 5.x 单节点 编译安装
第一步 : 安装gcc 5.0.3 只需要依赖gcc即可。
# 安装gcc yum install gcc
第二步 下载、解压、编译安装
[root@artisan ~]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz [root@artisan ~]# tar -xvzf redis-5.0.3.tar.gz [root@artisan ~]# cd redis-5.0.3 [root@artisan redis-5.0.3]# make
Hint: It's a good idea to run 'make test' ;) make[1]: Leaving directory `/home/redis/redis-5.0.3/src'
如果你要make test (可选),有报错的话 ,安装下tcl依赖包,执行如下命令
yum install tcl tcl-devel -y
再重新执行
[redis@artisan src]$ make test .... .... .... 282 seconds - unit/obuf-limits \o/ All tests passed without errors!
为了方便维护,建议启动脚本放到bin , 配置文件放到etc, 数据文件放到data,日志放到log目录… (可选)
[redis@artisan redis-5.0.3]$ [redis@artisan redis-5.0.3]$ mkdir etc [redis@artisan redis-5.0.3]$ mkdir bin [redis@artisan redis-5.0.3]$ mkdir data [redis@artisan redis-5.0.3]$ mkdir log [redis@artisan redis-5.0.3]$ mv redis.conf etc/ [redis@artisan redis-5.0.3]$ mv sentinel.conf etc/ [redis@artisan redis-5.0.3]$ [redis@artisan redis-5.0.3]$ cd src/ [redis@artisan src]$ mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb ../bin
整理完成后 如下
这里我们把redis安装到redis用户下(建议)
Redis 启停
通过配置文件来启动(建议)
redis‐server redis.conf
停止Redis
pkill redis‐server kill 进程号 redis‐cli shutdown (建议)
Redis Cluster 4.x VS Redis Cluster 5.x
Redis 5.0以前的版本 部署Redis Cluster 需要ruby脚本。 Redis 5.0以后的版本 直接使用 redis 官方提供的 redis cli即可完成集群的部署。
4.x版本的搭建请移步: Redis-21Redis集群模式-Centos6.5上3台主机3主3从的配置及通过代码访问集群
这里我们讨论5.x版本的集群部署
演进之路 ( Master/Slave— > Sentinel-----> Cluster )
主从 — > 哨兵 -----> Cluster
粗略的说下
2.8以前 ,Redis官方并没有高可用框架, 主从模式的弊端非常明显,从节点仅能作为数据备份,无法做到高可用,当主节点宕机以后,需要手动切换. 或者依赖第三方的框架,比如codis 等等
2.8 官方给出了 Sentinel模式,解决了主节点宕机,从节点自动提升并接管集群的功能
哨兵模式下,是中心化的,主节点的压力大时,节点无法扩容
3.0 官方提供了Cluster模式,这样数据就分片存储,节点可扩容,这行一个节点写的压力就小了很多~
Sentinel VS Cluster
这里我们重点比对 Sentinel VS Cluster
哨兵模式Sentinel
redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master.
- 在主从切换的瞬间存在访问瞬断的情况,
- 哨兵模式只有一个主节点对外提供服务,没法支持很高的并发
- 单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率
集群模式Cluster
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性.
Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能 .
需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。
redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单.
Redis 5.x Cluster 搭建
PreView
redis集群需要至少要三个master节点.
我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,3主3从,共6个redis节点。
虚拟机紧张,这里用三台机器部署6个redis实例
ip ---------------------------- port
192.168.18.131 ---- 8001 | 8004
192.168.18.132 ---- 8002 | 8005
192.168.18.133 ---- 8003 | 8006
Step1 安装单节点的redis
首先131 132 133 上按照 上面 Redis 5.x 单节点 编译安装 部署好 。
Step2 编写redis cluster的配置文件
为了方便管理,我们 新建个目录 redis-cluster , 在该目录下 建立 之前规划好的几个端口
3台主机都要操作 ,如下
130主机的操作
把 redis-5.0.3 中 etc目录下的 redis.conf配置文件copy到8001 目录
[redis@artisan ~]$ ls redis-5.0.3 redis-5.0.3.tar.gz redis-cluster [redis@artisan ~]$ cp redis-5.0.3/etc/redis.conf ./redis-cluster/8001 [redis@artisan ~]$ cd ./redis-cluster/8001 [redis@artisan 8001]$ ls redis.conf [redis@artisan 8001]$
修改内容如下:
- daemonize yes
- port 8001(分别对每个机器的端口号进行设置)
- dir /usr/local/redis‐cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
- cluster‐enabled yes(启动集群模式)
- cluster‐config‐file nodes‐8001.conf(集群节点信息文件,这里800x最好和port对应上)
- cluster‐node‐timeout 5000
# bind 127.0.0.1
(去掉bind绑定访问ip信息)- protected‐mode no (关闭保护模式)
- appendonly yes
如果要设置密码需要增加如下配置
- requirepass artisan(设置redis访问密码)
- masterauth artisan(设置集群节点间访问密码,跟上面一致)
这俩参数都要配置。
把修改后的配置文件,copy到8004,修改第2、3、5项里的端口号,批量替换
sed -i s/8001/8004/g redis.conf
Step3 其余两台重复第一台的操作
另外两台机器也需要做上面几步操作
第二台机器用8002和8005
第三台机器用8003和8006
[redis@artisan 8004]$ sed -i s/8001/8004/g redis.conf
Step4 启动6个实例
分别启动6个redis实例,然后检查是否启动成功
Step5 用redis‐cli创建整个redis集群
redis5以前的版本集群是依靠ruby脚本redis‐trib.rb实现 . 5.0以后的版本直接使用redi-cli即可。
redis-cli的帮助命令
[redis@artisan bin]$ ./redis-cli --help
集群的帮助命令
[redis@artisan bin]$ ./redis-cli --cluster help Cluster Manager Commands: create host1:port1 ... hostN:portN --cluster-replicas <arg> check host:port --cluster-search-multiple-owners info host:port fix host:port --cluster-search-multiple-owners reshard host:port --cluster-from <arg> --cluster-to <arg> --cluster-slots <arg> --cluster-yes --cluster-timeout <arg> --cluster-pipeline <arg> --cluster-replace rebalance host:port --cluster-weight <node1=w1...nodeN=wN> --cluster-use-empty-masters --cluster-timeout <arg> --cluster-simulate --cluster-pipeline <arg> --cluster-threshold <arg> --cluster-replace add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id <arg> del-node host:port node_id call host:port command arg arg .. arg set-timeout host:port milliseconds import host:port --cluster-from <arg> --cluster-copy --cluster-replace help For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster. [redis@artisan bin]$
下面命令里的 1 代表为每个创建的主服务器节点创建一个从服务器节点
执行这条命令需要确认三台机器之间的redis实例要能相互访问,可以先简单把所有机器防火墙关掉,如果不关闭防火墙则需要打开redis服务端口和集群节点gossip通信端口
CENTOS7 关闭防火墙
systemctl stop firewalld # 临时关闭防火墙 systemctl disable firewalld # 禁止开机启动
[redis@artisan bin]$ ./redis-cli -a artisan --cluster create --cluster-replicas 1 192.168.18.131:8001 192.168.18.131:8004 192.168.18.132:8002 192.168.18.132:8005 192.168.18.133:8003 192.168.18.133:8006 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.18.132:8005 to 192.168.18.131:8001 Adding replica 192.168.18.131:8004 to 192.168.18.132:8002 Adding replica 192.168.18.133:8006 to 192.168.18.133:8003 >>> Trying to optimize slaves allocation for anti-affinity [OK] Perfect anti-affinity obtained! M: 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001 slots:[0-5460] (5461 slots) master S: c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004 replicates 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b M: 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002 slots:[5461-10922] (5462 slots) master S: 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005 replicates 80618eaa0de9524cf439294b7cb6df1a34d3ad22 M: 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003 slots:[10923-16383] (5461 slots) master S: 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006 replicates 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 Can I set the above configuration? (type 'yes' to accept):
输入 yes
>>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.18.132:8005 to 192.168.18.131:8001 Adding replica 192.168.18.131:8004 to 192.168.18.132:8002 Adding replica 192.168.18.133:8006 to 192.168.18.133:8003 >>> Trying to optimize slaves allocation for anti-affinity [OK] Perfect anti-affinity obtained! M: 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001 slots:[0-5460] (5461 slots) master S: c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004 replicates 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b M: 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002 slots:[5461-10922] (5462 slots) master S: 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005 replicates 80618eaa0de9524cf439294b7cb6df1a34d3ad22 M: 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003 slots:[10923-16383] (5461 slots) master S: 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006 replicates 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join .... >>> Performing Cluster Check (using node 192.168.18.131:8001) M: 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005 slots: (0 slots) slave replicates 80618eaa0de9524cf439294b7cb6df1a34d3ad22 M: 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004 slots: (0 slots) slave replicates 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b M: 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006 slots: (0 slots) slave replicates 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [redis@artisan bin]$
Step6 验证集群
连接任意一个客户端即可:./redis‐cli ‐c ‐h ‐p (‐a访问服务端密码,‐c表示集群模式,-h 指定ip地址 -p 端口号)
进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
[redis@artisan bin]$ ./redis-cli -a artisan -c -h 192.168.18.131 -p 8001 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.18.131:8001> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:2777 cluster_stats_messages_pong_sent:2440 cluster_stats_messages_sent:5217 cluster_stats_messages_ping_received:2435 cluster_stats_messages_pong_received:2777 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:5217 192.168.18.131:8001> CLUSTER NODES 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005@18005 slave 80618eaa0de9524cf439294b7cb6df1a34d3ad22 0 1586663803774 5 connected 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002@18002 master - 0 1586663804782 3 connected 5461-10922 c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004@18004 slave 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 0 1586663804580 3 connected 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001@18001 myself,master - 0 1586663802000 1 connected 0-5460 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003@18003 master - 0 1586663804000 5 connected 10923-16383 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006@18006 slave 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 0 1586663804580 6 connected 192.168.18.131:8001>
进行数据操作验证
192.168.18.131:8001> set artisanKey artisanValue -> Redirected to slot [6941] located at 192.168.18.132:8002 OK 192.168.18.132:8002> get artisanKey "artisanValue"
关闭集群则需要逐个进行关闭,使用命令
[redis@artisan bin]$ ./redis-cli -a artisan -c -h 192.168.18.131 -p 8001 shutdown
至此,就搭建完毕了。