温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

redis主从复制和集群配置

发布时间:2020-08-10 19:17:51 来源:网络 阅读:357 作者:张孝国 栏目:系统运维

配置Redis主从复制和集群配置详解

1. 配置redis主从复制。

1.1. 应用场景

一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下:

a) 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

b) 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。

1.2. 基本原理

电商网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是"多读少写"。

对于这种场景,我们可以使如下这种架构:

redis主从复制和集群配置

1.3. 详细配置

1) 规划主备网络信息,主机192.168.153.164 备机192.168.153.165.保证两台机器互联。

画图说明

redis主从复制和集群配置

2) 安装redis,并配置,可以参考前天的redis安装步骤。

a) 修改yum源,增加redis的yum配置

b) yum install epel-release -y yum install redis -y

c) 修改配置文件/etc/redis.conf

3) 修改备机配置在备机192.168.153. 165的redis.conf中加下面配置

4) slaveof 192.168.153. 164 6379

5) 测试效果

a) 在主机上设值chenjian=666

redis主从复制和集群配置

b) 在备机上取值get chenjian,正常显示

redis主从复制和集群配置

redis主从复制和集群配置

c) 注意点:要保证主机先启动。

1.4. redis主从复制的特点。

通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点

a) master可以有多个slave

b) 除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构

c) 主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

d) 主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余

e) 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

2. 配置redis集群

2.1. 应用场景

当主备复制场景,无法满足主机的单点故障时,需要引入集群配置。

redis主从复制和集群配置

2.2. 基本原理

哨兵选举机制,如果有半数节点发现某个异常节点,共同决定改异常节点的状态,如果该节点是主节点,对应的备节点自动顶替为主节点。Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

2.3. 详细配置

1) 步骤一,规划网络。

用一台虚拟机模拟6个节点,一台机器6个节点,创建出3 master、3 salve 环境。虚拟机是 CentOS6.9 ,ip地址192.168.153.164

2) 步骤二,下载redis的源码包

wget http://download.redis.io/releases/redis-3.2.11.tar.gz将包中的 redis-trib.rb 复制到 /usr/local/bin 目录下

3) 步骤三, 创建 Redis 节点

首先在 192.168.153.164 机器上 /usr/local 目录下创建 redis_cluster 目录;

mkdir redis_cluster  

在 redis_cluster 目录下,创建名为7001、7002,7003、7004、7005,7006的目录,

mkdir 7001 7002 7003 7004 7005 7006

并将 redis.conf 拷贝到这三个目录中,拷贝之前,先修改redis.conf

redis.conf文件按照下面8项修改内容,然后分别拷贝到6个不同的目录7001,7002,7003,7004,7005,7006中。

port 7000 //端口7000,7002,7003

bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群

daemonize yes //redis后台运行

pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002

cluster-enabled yes //开启集群 把注释#去掉

cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002

cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置

appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 

redis主从复制和集群配置

4) 步骤四,启动各个节点

redis-server /usr/local/redis_cluster/7001/redis.conf

redis-server /usr/local/redis_cluster/7002/redis.conf

redis-server /usr/local/redis_cluster/7003/redis.conf

redis-server /usr/local/redis_cluster/7004/redis.conf

redis-server /usr/local/redis_cluster/7005/redis.conf

redis-server /usr/local/redis_cluster/7006/redis.conf

检查节点启动状态

redis主从复制和集群配置

5) 步骤五,创建集群

创建集群的命令:

/usr/local/bin/redis-trib.rb create --replicas 1 192.168.153.164:7001 192.168.153.164:7002 192.168.153.164:7003 192.168.153.164:7004 192.168.153.164:7005 192.168.153.164:7006

redis主从复制和集群配置

此错误是操作系统没有安装ruby

解决方法:安装ruby

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis 报错

redis主从复制和集群配置

##升级ruby

gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

curl -L get.rvm.io | bash -s stable

source /usr/local/rvm/scripts/rvm

rvm list known

rvm install 2.3.3

rvm use 2.3.3

rvm use 2.3.3 --default

ruby --version

redis主从复制和集群配置

再次执行,成功!

gem install redis

redis主从复制和集群配置

6) 验证集群

redis-cli -c -h 192.168.153.164 -p 7001 其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号

redis主从复制和集群配置

redis主从复制和集群配置

保存数据,chenjian保存到12007的槽位,12007所在的节点是7003端口对应的节点。

redis主从复制和集群配置

在其他节点,例如7006上获取chenjian。

redis主从复制和集群配置

验证主节点异常时,备节点自动顶替主节点

redis主从复制和集群配置

redis主从复制和集群配置

杀死7002对应的进程,即让主节点7002异常,检查7005是否顶替成为主节点。

redis主从复制和集群配置

2.4. 集群的特点(1)所有的redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带宽; (2)节点的fail 是通过集群中超过半数的节点检测失效时才生效; (3)客户端与redis 节点直连,不需要中间proxy 层。客户端不需要连接集群所有节点,连接集群中任何一 个可用节点即可; (4)redis-cluster把所有的物理节点映射到[0-16383]个slot(哈希槽)上,cluster 负责维护 node<->slot<->value 。

2.5. 集群选举容错

(1):什么时候整个集群不可用(cluster_state:fail)? A:如果集群任意master 挂掉,且当前master 没有slave。集群进入fail 状态,也可以理解成集群的 slot 映射[0-16383]不完整时进入fail 状态。 ps : redis-3.0.0.rc1 加入 cluster-require-full- coverage 参数,默认关闭,打开集群兼容部分失败; B:如果集群超过半数以上master 挂掉,无论是否有slave集群进入fail 状态。ps:当集群不可用时, 所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI