Redis群集部署

一、Redis群集相关概念
Redis是从3.0版本开始支持cluter的,采用的是hash槽方式,可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散存储到群集中的多个节点上。
Redis的cluster是一个无中心的结构,在群集中,每个master的身份是平等的,每个节点都保存数据和整个群集的状态,并且知道其他节点所负责的槽,也会定时发送心跳信息,能够及时感知群集中异常的节点,并且采取投票的方式来决定该节点是否为不可用,若票数为群集中节点的半数以上,则认为该节点不可用,也正是因为此特点,所以要部署Redis群集,节点数量最少要三个及以上。
群集角色有master和slave,master之间分配slots(槽),槽点编号是0-16383(共16384个)。
默认情况下,每个群集节点有两个TCP端口在监听,一个是6379(用于监听客户端的访问连接),另一个是16379(用于群集之间的节点通信)。注意,防火墙需要放行这两个端口的流量。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。
Redis提供的这两种方式进行持久化,一种是RDB持久化(原理是将Redis在内存中的数据库定时记录dump到磁盘上的RDB持久化),另一种是AOF(append only file)持久化(原理是将Redis的操作日志以追加的方式写入文件)
RDB的优点与缺点
AOF全持久化的优点:
? 可以保证数据的高可用性;
? 写入过程中及时出现宕机现象,也不会破坏日志文件中已经存在的内容,如果在写入过程中宕机,重启Redis后可以通过redis-check-aof工具来解决;
? 如果日志过大,Redis可以自动启用rewrite机制,生成新的文件存储aof日志;
? 该机制可以带来更高的数据安全性,及数据持久性。Redis中提供了三种同步策略,即每秒同步、每修改同步和不同步。
? AOF全持久化的缺点:
? 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB在恢复大数据集时的速度比AOF的恢复速度要快;
? 根据同步策略的不同,AOF在运行效率上往往会慢于RDM,总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。
如果RDB和AOF同时存在,则优先选择AOF方式
二、部署Redis群集
1、环境如下:

总共六台centos服务器,实现三台master分别对应一台slave
为了避免因为物理服务器的宕机而造成整个群集崩溃,也可以在一台服务器上配置多个Redis实例,实现交叉主从复制,所谓交叉就是master在node01,但对应的slave在node02,node02上master对应的slave在node03,而node03对应的slave在node01
上述只是多个服务器部署Redis群集。
但我这里主要是在一台服务器上部署多个节点,所以在node6上会有多个实例
配置前可先下载所需软件包,也可自行下载准备,链接:https://pan.baidu.com/s/1mJGBD7b0QyR_II4mSpdD8Q
提取码:72hi
2、配置Redis实例
这里以node01的配置进行示例,其他节点的配置和node1基本一样

[[email protected] /]# mkdir redis          # 个人习惯而已
[[email protected] /]# cd redis/
[[email protected] redis]# rz            # 上传所需软件包
[[email protected] redis]# ls             # node 节点只需要redis4.0这个包,其余两个包是安装ruby环境所需的
redis-3.3.0.gem  redis-4.0.14.tar.gz  ruby-2.3.1.tar.gz
[[email protected] redis]# tar zxf redis-4.0.14.tar.gz          # 解包
[[email protected] redis]# mv redis-4.0.14 /usr/local/redis          # 移动并改名
[[email protected] redis]# cd /usr/local/redis/          # 进入目录
[[email protected] redis]# make && make install          # 编译并安装
[[email protected] redis]# ./utils/install_server.sh        # 对redis进行初始化
# 初始化的所有选项保持默认,一路回车确认即可,是在确认监听端口、配置文件、日志文件、pid存放Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!

Starting Redis server...
Installation successful!
路径等信息            # 当出现这些信息说明初始化成功
[[email protected] redis]# echo "512" > /proc/sys/net/core/somaxconn            # 接下做一些优化
[[email protected] redis]# echo  "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[[email protected] redis]# sysctl -p
vm.overcommit_memory = 1
[[email protected] redis]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[[email protected] redis]# vim /etc/redis/6379.conf           # 编辑配置文件
bind 0.0.0.0          #找到没有被注释的这一行,修改为0.0.0.0
daemonize yes    #若有注释符号,需要删除注释符号,以便生效
cluster-enabled yes            # 如有注释,需要去掉注释符号
cluster-node-timeout 5000         # 修改
appendonly yes         # 改为 yes
[[email protected] redis]# /etc/init.d/redis_6379 restart        # 重启服务使配置生效
[[email protected] redis]# netstat -anput | grep 6379        # 确定已经监听6379和16379两个端口
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      44263/redis-server
tcp        0      0 0.0.0.0:16379           0.0.0.0:*               LISTEN      44263/redis-server
在其他节点服务器上将上述配置依次进行即可,node6除外
3、配置node06主机的多Redis实例
node06这个节点上,我将配置其运行多个Redis数据库实例,所以与前面五个节点的配置并不是完全一样,小心配置
[[email protected] /]# mkdir redis
[[email protected] /]# cd redis/
[[email protected] redis]# rz
[[email protected] redis]# tar zxf redis-4.0.14.tar.gz
[[email protected] redis]# mv redis-4.0.14 /usr/local/redis
[[email protected] redis]# cd /usr/local/redis/
[[email protected] redis]# make && make install            # 编译并安装,安装完毕后无需初始化
[[email protected] redis]# redis-server         # 执行此命令启动会出现3个警告,这三个警告就是我们需要优化的三个选项
[[email protected] redis]# echo "512" > /proc/sys/net/core/somaxconn
[[email protected] redis]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[[email protected] redis]# sysctl -p
vm.overcommit_memory = 1
[[email protected] redis]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[[email protected] redis]# vim redis.conf          # 编辑配置文件
bind 0.0.0.0
port 7000          # redis的默认端口是6379,这里我修改为7000,为了方便识别
daemonize yes        #开启后台守护进程,以便后台运行
cluster-enabled yes        #开启群集
cluster-node-timeout 5000     #群集节点间的超时时间,单位是毫秒
appendonly yes       #是否开启同步到磁盘
appendfilename "appendonly-7000.aof"     #aof日志的名字,因为本台主机上拥有多个实例,所以各个端口是不一样的,所以使用端口来命名日志名称
[[email protected] redis]# mkdir -p /usr/local/redis-cluster/{7000..7004}
#以上是打算运行几个Redis实例,就创建几个目录即可,这里我以实例的端口号给目录命名(暂时打算运行4个Redis实例)
#以下是将修改后的配置文件复制到指定的目录下一份
[[email protected] redis]# cp redis.conf /usr/local/redis-cluster/7000/
[[email protected] redis]# cp redis.conf /usr/local/redis-cluster/7001/
[[email protected] redis]# cp redis.conf /usr/local/redis-cluster/7002/
[[email protected] redis]# cp redis.conf /usr/local/redis-cluster/7003/
[[email protected] redis]# cp redis.conf /usr/local/redis-cluster/7004/

#然后下面将复制过去的各个配置文件中改为与Redis实例对应的端口号

[[email protected] redis]# cd /usr/local/redis-cluster/
[[email protected] redis-cluster]# ls
7000  7001  7002  7003  7004
[[email protected] redis-cluster]# sed -i s/7000/7001/g 7001/redis.conf
[[email protected] redis-cluster]# sed -i s/7000/7002/g 7002/redis.conf
[[email protected] redis-cluster]# sed -i s/7000/7003/g 7003/redis.conf
[[email protected] redis-cluster]# sed -i s/7000/7004/g 7004/redis.conf
[[email protected] redis-cluster]# cd 7000/         # 进入到7000实例目录中
[[email protected] 7000]# redis-server redis.conf         # 启动该实例
8142:C 13 Feb 10:44:17.501 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8142:C 13 Feb 10:44:17.501 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=8142, just started
8142:C 13 Feb 10:44:17.501 # Configuration loaded
# 来就是依次进入到各个实例目录中,启动实例,这里我就不演示了


4、主机node01安装配置ruby的运行环境,便于管理Redis群集

[[email protected] /]# yum -y install rpm-build openssl openssl-devel       # 安装所需依赖包
[[email protected] /]# cd /redis/
[[email protected] redis]# ls
redis-3.3.0.gem  redis-4.0.14.tar.gz  ruby-2.3.1.tar.gz
[[email protected] redis]# tar zxf ruby-2.3.1.tar.gz         # 解包
[[email protected] redis]# cd ruby-2.3.1/
[[email protected] ruby-2.3.1]# ./configure --prefix=/usr/local/ruby && make && make install          # 此环境编译时间较长
[[email protected] ruby-2.3.1]# ln -s /usr/local/ruby/bin/* /usr/local/bin/         # 为命令做软连接
[[email protected] ruby-2.3.1]# ln -s /usr/local/redis/src/redis-trib.rb /usr/local/bin/
[[email protected] ruby-2.3.1]# ln -s /usr/local/ruby/bin/* /usr/bin/
[[email protected] ruby-2.3.1]# cd ..
[[email protected] redis]# gem install redis-3.3.0.gem       # 回到有gem文件的目录,进行安装
Successfully installed redis-3.3.0
Parsing documentation for redis-3.3.0
Installing ri documentation for redis-3.3.0
Done installing documentation for redis after 0 seconds
1 gem installed
# 范围如上信息则表示安装成功

5、配置群集中的各个节点

[[email protected] /]# redis-cli -p 6379          # 登录到ben‘di本地实例
127.0.0.1:6379> CLUSTER MEET 192.168.171.134 6379       # 将各个节点添加到群集中
OK
127.0.0.1:6379> CLUSTER MEET 192.168.171.135 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.171.136 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.171.137 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.171.138 7000     # 这块是因为node6修改过端口号
OK
127.0.0.1:6379> set test aaa             # 由于并没有分配hash槽,所以并不能添加数据
(error) CLUSTERDOWN Hash slot not served
127.0.0.1:6379> CLUSTER INFO           # 查看群集的状态
cluster_state:fail                   # 会发现这里是fail失败的
cluster_slots_assigned:0
127.0.0.1:6379> exit

# 下来我们分配槽点,要小心配置
#虽然可以将命令中的“add”换为“del”,但是我没有成功
#一定要将0至16383完全分配出去,最好是等份分配
#只需给作为master的节点分配即可,我这里node01至node03为master
[[email protected] /]# redis-cli -h 192.168.171.133 -p 6379 cluster addslots {0..5461}
OK
[[email protected] /]# redis-cli -h 192.168.171.134 -p 6379 cluster addslots {5462..10922}
OK
[[email protected] /]# redis-cli -h 192.168.171.135 -p 6379 cluster addslots {10923..16383}
OK
[[email protected] /]# redis-cli -p 6379 -c          # 进入群集,需要添加-c选项
127.0.0.1:6379> CLUSTER NODES            # 查看群集节点信息
#接下来是将各个slave从节点与master进行绑定
#node04作为node01的从节点,node05作为node02的从节点,node06的6379实例作为node03的从节点
#需要配置哪个从节点,就需要登录到哪个实例
127.0.0.1:6379> CLUSTER NODES     #可以先执行此命令,查看相应节点的ID,以便接下来指定
[[email protected] /]# redis-cli -h 192.168.171.136 -p 6379        # 登录到node4
192.168.171.136:6379> CLUSTER REPLICATE 4397bb3e5e43fdf1700551d0a2587f502e6c02a8
OK
#以上添加的是node1的节点id
192.168.171.136:6379> exit       # 退出该节点
[[email protected] /]# redis-cli -h 192.168.171.137 -p 6379
192.168.171.137:6379> CLUSTER REPLICATE 1eca51f415ba5194a95d5400176daa5713d64990
OK
#以上添加的是node2的节点id
192.168.171.137:6379> exit
[[email protected] /]# redis-cli -h 192.168.171.138 -p 7000
192.168.171.138:7000> CLUSTER REPLICATE ee71a2fd995f35992ce69328096ccd50fc68f89e
OK
#以上添加的是node3的节点id

至此,群集即可正常读写数据了,如下:
[[email protected] /]# redis-cli -h 192.168.171.133 -p 6379 -c
192.168.171.133:6379> set test aaa
-> Redirected to slot [6918] located at 192.168.171.134:6379
OK
192.168.171.134:6379> get test
"aaa"
192.168.171.134:6379>
6、使用ruby安装的命令管理Redis群集
[[email protected] /]# redis-trib.rb check 127.0.0.1:637

原文地址:https://blog.51cto.com/14306186/2471127

时间: 2024-08-24 16:02:45

Redis群集部署的相关文章

Redis群集部署详解

博文大纲:一.Redis群集相关概念二.部署Redis群集 1.部署环境 2.配置Redis实例 3.配置node06主机的多Redis实例 4.主机node01安装配置ruby的运行环境,便于管理Redis群集 5.配置群集中的各个节点 6.使用ruby安装的命令管理Redis群集 7.将node06的6380实例添加节点到Redis群集中 8.为新加入的master分配从节点 9.删除主节点操作 一.Redis群集相关概念 Redis是从3.0版本开始支持cluter的,采用的是hash槽方

Redis 群集部署

一.Redis群集相关概念Redis是从3.0版本开始支持cluter的,采用的是hash槽方式,可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散存储到群集中的多个节点上. Redis的cluster是一个无中心的结构,在群集中,每个master的身份是平等的,每个节点都保存数据和整个群集的状态,并且知道其他节点所负责的槽,也会定时发送心跳信息,能够及时感知群集中异常的节点,并且采取投票的方式来决定该节点是否为不可用,若票数为群集中节点的半数以上,则认为该节点不可用,也正是因为

缓存数据库Redis——Redis群集部署

实验环境 用两台服务器模拟6台服务器(添加网卡) 主服务器Redis1: ens33: 192.168.52.150 ens36: 192.168.52.153 ens37: 192.168.52.154 从服务器Redis2: ens33: 192.168.52.148 ens36: 192.168.52.155 ens37: 192.168.52.156 1.在两台服务器上都安装Redis(操作相同,只演示一台) [[email protected] ~]# yum install gcc

Windows 部署 Redis 群集

1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/redis/releases当前我使用的是 3.0.501 2,下载 RubyInstallerhttp://rubyinstaller.org/downloads/ 安装时,勾选 Install Td/Tk Support Add Ruby executables to your PATHAssociate .rb and .rbw files

Windows 部署 Redis 群集(转)

1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/redis/releases当前我使用的是 3.0.501 2,下载 RubyInstallerhttp://rubyinstaller.org/downloads/ 安装时,勾选 Install Td/Tk Support Add Ruby executables to your PATHAssociate .rb and .rbw files

Codis 3.0 Release (密码验证) 群集部署文档

前言: Codis 3.x 由以下组件组成: Codis Server:基于 redis-2.8.21 分支开发.增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令.具体的修改可以参考文档 redis 的修改. Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议. 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy). 对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例:

基于Twemproxy的群集部署方案

概述 本文描述的twemproxy基于nutcracker-0.2.4版本. twemproxy是memcached 和redis的协议层面的代理,其提供的features如下: 注: twemproxy不会增加redis的性能指标数据,据业界测算,使用twemproxy相比直接使用redis会带来~10%的性能下降.   但是单个redis进程的内存管理能力有限.据测算,单个redis进程内存超过20G之后,效率会急剧下降.目前,我们给出的建议值是单个redis最好配置在8G以内.8G以上的r

centos 7之Redis群集详解及参数调优(内附搭建群集案例)

博文目录:一.关系型数据库与非关系型数据库的区别.二.Redis数据库介绍.三.Redis的安装部署.四.Redis命令工具及常用命令五.Redis群集配置实例. 一.关系型数据库与非关系型数据库的区别: Redis数据库是一个非关系型数据库,和oracle.mysql.sql server等关系型数据库不是同一类型.NoSQL是非关系型数据库的总称,主流的NoSQL数据库有redis.MongBD等.NoSQL的存储方式.存储结构以及使用的场景都是完全不同的.NoSQL数据库凭借着其非关系型.

基于centos 7的Redis群集原理及配置

博文大纲:一.Redis群集原理二.Redis群集架构细节三.redis-cluster选举四.部署Redis群集环境 关于Redis的性能调优参数的说明,可以参考博文:centos 7之Redis数据库详解及参数调优一.Redis群集原理: 1)Redis集群架构: Redis Cluster采用虚拟槽分区,将所有的数据根据算法映射到0~16384整数槽内 Redis Cluster是一个无中心的结构 每个节点都保存数据和整个集群的状态2)集群角色 Master:Master之间分配slots