生产环境redis单机、主从、哨兵、集群、集群扩容、缩容架构的搭建

前言

  因为本文章涉及到集群的搭建,因此至少需要六台机器,这里有条件的可以购买阿里云、百度云、腾讯云等轻量级云服务器(新人很便宜),无条件的可以自己搭建多台虚拟机实例,同时多台实例建议使用相同镜像环境,博主这里使用的是CentOS 7.6(小版本不影响,例如7.5,7.6,7.8),以下列出我所使用的ip。

  ip: 124.221.237.87

  ip: 124.221.246.23

  ip: 121.4.218.158

  ip:  47.103.10.99

  ip:  180.76.177.17

  ip: 124.221.239.69

1. redis单机架构搭建

1.1 gcc环境安装

  准备一台机器(ip: 124.221.237.87),使用远程连接工具连接完成后,若环境没安装gcc,进行安装。

yum install gcc 

1.2 下载安装

  使用wget下载redis 5.0.3版本,并解压,然后删除压缩文件。  

cd /usr/local/ 
wget http://download.redis.io/releases/redis-5.0.3.tar.gz 
tar xzf redis-5.0.3.tar.gz  
rm -rf redis-5.0.3.tar.gz 

1.3 进入到解压好的redis‐5.0.3目录下,进行编译与安装。

cd redis-5.0.3 
make 

1.4 修改配置

vim redis.conf 
# 将以下三个配置进行修改
daemonize yes #后台启动
protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis #bind 127.0.0.1 #需要注释掉bind,bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可
requirepass TXB@cxf123456! #设置redis启动密码(注意:我实际设置的并非此密码)

 1.5 启动redis

src/redis-server redis.conf 
ps -ef | grep redis #验证是否启动成功,若出现下图所示即启动成功 

1.6 进入、退出客户端

src/redis-cli # 进入客户端 
auth TXB@cxf123466! #如果不输入密码无法操作 
quit # 退出客户端 

1.7 开放云服务器安全组

  安全组必须要开放你所配置的redis端口,否则将会被拦截。

  使用连接工具连接信息如下:

 2. redis主从架构搭建

2.1 环境准备

  准备三台机器(ip: 124.221.237.87,ip:124.221.239.69,ip:121.4.218.158),按照单机架构相同的方式先搭建三台单机架构的redis。从节点的配置再添加2.2)。

2.2 配置从节点环境

  在与单机相同的配置下从节点加上以下配置。

replicaof 124.221.237.87 6379 #从124.221.237.87的6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica‐read‐only yes #配置从节点只读  
masterauth TXB@cxf123456! #主从认证密码,否则主从不能同步 

2.3 查看主从架构信息

  进入主节点客户端环境后输入以下命令查看环境。

info replication #查看redis主从信息,出现以下从节点信息即配置成功 

   同时进入从节点输入相同命令可出现以下信息。

 2.4 验证主从是否配置成功

  在主节点写入set字符串,检测从节点是否存在。

set txb 123456 # 主节点写入 
get txb #在从节点获取刚才写入的值,如果能获取得到说明配置成功 

  之后将IP为121.4.218.158的服务器做从节点的相同配置。

   注:如果要配置多个从节点,每一个都做相同配置即可,同时记得每个服务器redis使用端口都加入安全组。

 3. redis哨兵架构搭建

3.1 环境准备

  准备三台机器(ip: 124.221.237.87,ip:124.221.239.69,ip:121.4.218.158),按照主从架构相同的方式先搭建三台架构的redis,同时开启安全组的26379的端口


3.2 添加哨兵配置文件

cd /usr/local/redis-5.0.3/ 
vim sentinel.conf #修改哨兵配置文件如下 
daemonize yes
sentinel monitor mymaster 124.221.237.87 6379 2 # mymaster这个名字随便取,客户端访问时会用到,ip为主节点的ip
sentinel auth-pass mymaster TXB@cxf123456! #设置访问主节点的密码
sentinel announce-ip 124.221.237.87 #sentinel-announce-ip 一定要配置,不然sentinel之间通信使用的是内网地址,无法通信,导致集群通信异常,master故障切换会失败
sentinel announce-port 26379

3.3 启动sentinel哨兵实例

src/redis‐sentinel sentinel.conf 
src/redis‐cli ‐p 26379 #连接客户端 

  之后,将剩下两台服务器做相同配置即可。

info #查看sentinel的info信息,可以看到Sentinel的info里已经识别出了redis的主从与哨兵 

  同时通过以下命令也可测试是否哨兵环境搭建成功。

cat /usr/local/redis-5.0.3/sentinel.conf 

   其中sentinel known‐replica mymaster 124.221.239.69 6379 #代表主节点的从节点信息

  sentinel known‐sentinel mymaster 172.17.0.15 26379 5b2da10eff43d38b2c4398c7b108de58837839dc #代表感知到的其它哨兵节点

3.4 哨兵架构在Spring Boot项目中的使用

  项目代码以及讲解如下所示:

  链接:https://pan.baidu.com/s/12n_S7Ol1vQaY0YjKs10B2w

  提取码:txbq

  在该项目中,使用while循环往redis哨兵架构中一直写入数据,在操作成功后,我们将主节点给手动kill掉进程,看看redis哨兵是否能帮我们继续选举出新的master节点。                           

   

  由上图可见,redis循环设置值成功,此时我们将主节点的redis进程杀死。   

  我们发现程序报错了,无法连接上redis。

  但是过了一会我们发现程序又继续连接上,而且连接的节点变成了124.221.239.69,此时使用 info replication命令查看信息发现master_host确实变成了124.221.239.69,至此哨兵结构搭建完成。

 4. 集群架构搭建

4.1 集群环境准备

  redis集群需要至少三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用三台机器部署6个redis实例,每台机器一主一从,因此我们将使用前言中给出的六台服务器,同时添加安全组的16379端口

4.2 修改配置文件

  在单机模式的配置文件中再追加以下配置:

cluster‐enabled yes #启动集群模式
cluster‐config‐file nodes‐6379.conf #集群节点信息文件
cluster‐node‐timeout 10000 #集群连接超时时间
appendonly yes #开启AOF持久化 
cluster-announce-ip 124.221.237.87 # 集群节点 IP,这里需要特别注意一下,如果要对外提供访问功能,需要填写宿主机的IP
cluster-announce-port 6379 #集群节点映射端口
cluster-announce-bus-port 16379 # 集群节点总线端口 

配置完成后,分别启动六台redis实例,并检查redis是否启动成功。

 ps -ef | grep redis 

   可以看出redis以集群的方式已启动。

4.3 创建redis集群

   从以上信息可看出redis预备创建集群的节点信息,其中M为主节点,S为从节点,输入yes确定创建。

  由上可见,集群已分配成功分为三主三从948fd140cda364778e694b5d4c18acf016f3178c 124.221.237.87:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s)

948fd140cda364778e694b5d4c18acf016f3178c为该节点在集群中的唯一id,slots:[0-5460] (5461 slots)代表0-5460这5461个槽位落在该节点上。redis在写入程序时会经过hash运算,最终判断由哪个节点存 储数据。

4.4 验证集群

  连接任意一个客户端即可:./redis‐cli ‐c ‐h ‐p (‐a访问服务端密码,‐c表示集群模式,指定ip地址 和端口号)

src/redis-cli -a TXB@cxf123456! -c -h 124.221.237.87 -p 6379 
cluster info # 查看集群信息 
cluster nodes #查看集群节点信息 

   由此上信息可知,大功告成,代表集群已建立成功。

   在124.221.237.87主机中设置txb1的值发现经过hash运算其落在12823这个槽位,因此自动为我们切换到124.221.246.23这个主机。

4.5 Redis的Cluster架构在Spring Boot中的使用

  代码以及讲解如下所示:

  yml按照上述配置进行配置即可,其中lettuce这一块内容后面有空会出一期博客讲解。

   访问成功,而且不同的key落在不同的集群节点上,具体如下。

      

 5. Cluster的扩容、缩容操作

5.1 环境准备

    这里我们再在上述集群的基础上再增加一主一从的结构,因此我们还需要两台服务器(ip:121.4.214.68, ip:124.221.243.252 ),同时开放这两台机器的6379端口与16379端口,然后按照4.2配置启动单个redis实例。

5.2 添加集群节点

src/redis-cli -a TXB@cxf123456! --cluster add-node 124.221.243.252:6379 124.221.237.87:6379 

   说明:前面的ip:port为新增加的ip端口,后面的ip:port为之前存在的ip端口,当出现New node added correctly即为添加成功。

  进入客户端查看集群情况。

src/redis-cli -a TXB@cxf123456! -c -h 124.221.237.87 -p 6379 
 cluster nodes 

  信息如下,可以看出124.221.243.252已经加入集群,但是并未给其分配插槽,所以该节点目前也无数据。


   我们需要为新节点手工分配hash槽位。

src/redis-cli -a TXB@cxf123456! --cluster reshard 124.221.237.87:6379 

   需要多少个槽移动到新的节点上,自己设置,比如600个hash槽。

   把这600个hash槽移动到哪个节点上去,需要指定节点id,这里指定刚配置的节点。

   其中输入all为从所有主节点中分别抽取相应的槽数指定到新节点中,抽取的总槽数为600个。

   输入yes确认开始执行分片任务。

  我们再进入客户端查看集群分片情况如下。

   我们可以看到新加的节点中为其分配了0-198,5461-5661 10923-11121这600的槽位,至此新增主节点成功,我们再来新增从节点。

   按照新增第一个节点的方式先将节点添加入集群。

src/redis-cli -a TXB@cxf123456! --cluster add-node 121.4.214.68:6379 124.221.237.87:6379 

  进入该节点的客户端

src/redis-cli -a TXB@cxf123456! -c -h 121.4.214.68 -p 6379 

  查看集群节点信息

  此处依然是未分配节点的主节点信息,我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的121.4.214.68节点的客户端,然后使用集群命令进行 操作,把当前的从节点指定到一个主节点下(这里使用之前创建的124.221.243.252主节点)。

cluster replicate 5f8fa2af74cfcd0c0a13bb6c512b80b48403c791 #后面的id为新增主节点的id 

 

  由上看出该节点已变成124.221.243.252的从节点,至此集群扩容结束。

5.3 删除集群节点

  删除节点需要先删除从节点,再删除主节点。

src/redis-cli -a TXB@cxf123456! --cluster del-node 121.4.214.68:6379 96b6ad28c1344006b3eb6352ab507c2c2471da0c 

   ip:port后面的id为当前节点id。

   由此可见从节点删除成功,接下来删除主节点,删除主节点比较麻烦,因为主节点中分配了Hash槽位,我们需要先将hash槽位归还。

src/redis-cli -a TXB@cxf123456! --cluster reshard 124.221.243.252:6379 

   需要移动多少节点?这里输入600,因为我们刚才分配了600个节点。

   用什么节点id来接收他? 这里输入一个其他主节点的id。

   这里是需要数据源,也就是我们的新加主节点节点id,然后输入done开始生成归还Hash槽位计划。

   输入yes,开始归还Hash槽位。

   归还成功后,该节点没有Hash槽位了,然后删除其节点就行了。

 src/redis-cli -a TXB@cxf123456! --cluster del-node 124.221.243.252:6379 5f8fa2af74cfcd0c0a13bb6c512b80b48403c791 

  ip:port后面的id为需要删除节点的id。

   再查看节点信息如下,只剩六个节点了,至此Cluster的缩容结束。美滋滋。

   不用docker等容器安装相对麻烦,但只有如此才能更加深刻的理解其中的奥秘,后续会出一份docker安装的博客。

     

posted @ 2022-03-27 16:48  檀潇兵  阅读(3154)  评论(0编辑  收藏  举报