Redis集群部署,三主三从

一文读懂Redis的四种模式单机、主从、哨兵、集群

参考来源:https://www.cnblogs.com/zhonglongbo/p/13128955.html

 

Redis主从就是常见的主从模式,从节点自动同步主节点数据,实现数据的热备份。

 

Redis哨兵就是在Redis主从上添加了一个监控系统(Redis Sentinel系统),实现故障转移,Redis哨兵会监控Redis主从节点运行状态,当主节点故障下线后,Redis哨兵会选择一个从节点充当新的主节点,继续提供服务。

 

Redis集群在Redis主从上添加了监控机制和数据分片机制(Redis中是分槽位),实现故障转移和数据水平扩展,Redis集群中组合了多个Redis主从,并且每个Redis主节点都负责存储集群中的一部分数据,当某个主节点故障下线后,Redis集群会选择该节点的一个从节点充当新的主节点,继续提供服务。

 

生产环境很少使用单纯的Redis主从,如果数据量比较少,可以考虑使用哨兵模式,但Redis集群的稳定性、可扩展性都优于哨兵模式,所以使用Redis集群的场景是最多的。

 

 === 这里以安装redis 5.0.x版本为例。

 一、源码编译安装

  • 获取源码包,并解压
wget -c http://download.redis.io/releases/redis-5.0.5.tar.gz
tar -zxvf redis-5.0.5.tar.gz
cd redis-5.0.5

解压后可以看到,在当前目录下已经有Makefile文件了,说明已经预编译好了,我们只需要make安装即可。但是需要注意,既然已经预编译过了,那么这里即可以通过修改安装路径(Makefile文件就放在当前目录下的src目录下),又可以在安装时指定安装路径。

  •  编译安装

注意:安装过程中可能需要依赖库支持。

#依赖库安装
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

 

方式一:先修改Makefile配置文件安装路径,再make安装(推荐)。

# 先修改安装目录
vim src/Makefile
#再安装

 make && make install

 

 方式二:不用修改Makefile配置文件,直接安装,但是需要指定安装路径。

make  PREFIX=/usr/local/redis install

 

  • 拷贝Redis配置文件
cp redis.conf  /usr/local/redis/

到这一步,redis已经安装好了。

 

  • 启动Redis
/usr/local/redis/bin/redis-server  /usr/local/redis/redis.conf

 ---

二、警告信息处理

由上图可见,已经启动redis服务了。但是,启动之后redis日志可能会出现一些警告信息:

1)第一个报错是backlog参数导致的,backlog主要控制的是三次握手的时候,server端收到客户端ack确认的队列长度,如果队列满了,客户端将收到错误提示。

vim /etc/sysctl.conf
net.core.somaxconn=512

2)第二个报错是因为vm.overcommit_memory=0,0表示内核会检查有没有多的内存给进程使用,如果没有,内存的申请失败,并将错误返回给进程。可以设置为1,表示内核允许分配所有的物理内存给进程。还可以设置为2,表示所有的物理内存和swap全部给进程。

vim /etc/sysctl.conf
vm.overcommit_memory=1

3)第三个报错是开启了大页内存动态分配,可以设置关闭,让redis负责内存管理。

echo never > /sys/kernel/mm/transparent_hugepage/enabled

上述修改后,执行一下sysctl -p命令,重启redis就不会提示警告信息了!!

 

三、设置systemd自启动

注意:上述启动方式会占用我们的shell窗口,只是临时测试,关闭shell窗口后,redis服务也会随之关闭;我们可以加上nohup命令,让它在后台运行。也可以设置systemd开机自启动模式。这里以systemd模式为例:

# 设置systemd自启动
vim /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
PrivateTmp=true
#User=www
#Group=www

[Install]
WantedBy=multi-user.target
  • 启动Redis
systemctl enable redis && systemctl start redis && systemctl status redis

 

==========================---=============================

四、集群环境搭建

 Redis 集群的优势:

  • l 自动分割数据到不同的节点上。
  • l 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

 要让集群正常运作至少需要三个主节点,为了实现主节点的高可用, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

 ---

  •  redis cluster部署

这里我就以6 Redis 实例为例(若资源充裕,分别在6台机器上部署Redis即可)。

# 创建六个实例目录
cd  /usr/local/redis/
mkdir 6379 6380 6381 6382 6383 6384

# 用初始化脚本,快速创建实例配置文件
/usr/local/src/redis-5.0.5/utils/install_server.sh

 初始化完成后,默认会启动Redis服务。可通过netstat -nltp 或 ps -aux 查看redis进程及端口。

此时就可以通过命令来 关闭/启动/重启 6redis实例服务了。初始化后默认启动。

/etc/init.d/redis_6379 stop/start/restart

 

  • 开启redis集群模式
# 在每个redis实例的配置文件中,开启如下参数:
vim /usr/local/redis/6379/6379.conf        //依次修改6个实例6379/6380/6381/6382/6383/6384
cluster-enabled yes //开启集群功能,默认是关闭的 cluster-config-file nodes-6379.conf //集群配置文件 cluster-node-timeout 15000 //集群超时时间,默认15s appendonly yes //开启aof

6个集群实例配置完成后,需重启这6个实例服务。

/etc/init.d/redis_6379 restart
/etc/init.d/redis_6380 restart
/etc/init.d/redis_6381 restart
....

 

  • 查看redis集群帮助

下述介绍为了方便,我们可以用alias取个别名。

# alias别名
alias redis-cli='/usr/local/redis/bin/redis-cli'
# 查看帮助
redis-cli --cluster help

 

  • 创建redis集群

现在已经有了六个正在运行中的 Redis 实例, 接下来就可以直接使用这些实例来创建集群, 并为每个节点编写配置文件。

如果使用的是Redis 5.x的版本,可以直接使用redis-cli命令创建新集群,检查或重新硬化现有集群等等。

对于Redis版本34,使用redis-trib.rb创建集群,它是一个Ruby程序。可以在Redis源代码的src目录下找到它。

#创建集群
/usr/local/redis/bin/redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1

 说明:

--cluster-replicas 1 表示为集群中的每个主节点创建一个从节点。

其中指定了6redisipport,3master3slave

以上命令回车后,当我们输入yesredis-cli就会将这份配置应用到集群当中,让各个节点开始互相通讯。

 

  • 查看集群信息或状态
# 可以在任意一个节点上查看状态信息
/usr/local/redis/bin/redis-cli -p 6381 cluster info

# 查看集群节点
/usr/local/redis/bin/redis-cli -p 6381 cluster nodes

 

  • 测试数据交互
redis-cli -p 6381 -c

 由图可见:通过6381服务器无法将数据写入,哈希槽5798不能存放这个值,查看nodes节点可知,5798哈希槽值的范围应该在6380服务器上存放。

这是因为我们没有开启集群交互模式,通过 -c 参数开启,可以帮我们自动重定向写入。必须以集群交互模式操作。

 

  • 检查节点运行状态
redis-cli -p 6381 --cluster check 127.0.0.1:6381

 

 

--- over---

 

posted @ 2022-05-23 10:04  i潘小潘  阅读(3932)  评论(0编辑  收藏  举报