Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署

2020年4月11日 15点热度 0条评论 来源: 小小工匠

文章目录

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.

  1. 在主从切换的瞬间存在访问瞬断的情况,
  2. 哨兵模式只有一个主节点对外提供服务,没法支持很高的并发
  3. 单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率

集群模式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]$ 

修改内容如下:

  1. daemonize yes

  2. port 8001(分别对每个机器的端口号进行设置)

  3. dir /usr/local/redis‐cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)

  4. cluster‐enabled yes(启动集群模式)

  5. cluster‐config‐file nodes‐8001.conf(集群节点信息文件,这里800x最好和port对应上)

  6. cluster‐node‐timeout 5000

  7. # bind 127.0.0.1(去掉bind绑定访问ip信息)

  8. protected‐mode no (关闭保护模式)

  9. appendonly yes

如果要设置密码需要增加如下配置

  1. requirepass artisan(设置redis访问密码)
  2. 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

至此,就搭建完毕了。

    原文作者:小小工匠
    原文地址: https://blog.csdn.net/yangshangwei/article/details/105023755
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。