Redis集群模式1-主从复制+哨兵机制

Redis集群模式1-主从复制+哨兵机制,第1张

单个Redis服务如果宕机的话,服务就不可用了,为了解决这种问题,redis也提供有集群服务。传统的Redis集群采用的主从复制模式,一般为一主多从,主节点有读写权限,但是从节点只有读的权限。主节点会定期将数据同步到从节点中,保证数据一致性的问题。这种集群方式在运行时存在一些问题:

Redis的哨兵机制就是解决主从复制存在缺陷(选举问题),解决问题保证我们的Redis高可用,实现自动化故障发现与故障转移。
要使用哨兵机制,除了启动Redis服务以外,还要启动哨兵服务来进行监控,会介绍详细步骤。哨兵服务的工作原理如下:

演示集群采用1主2从,采用伪集群,在一台虚拟机中启动,端口暂定6381、6382、6383,集群结构可以选择下面2种,因为数量较少,此次采用普通样式。

主节点配置文件和单机的时候一样,主要修改以下几点

基本和主节点差不多,但要加上 slaveof 配置和主节点账号密码。

哨兵配置文件是 sentinelconf ,因为有3个redis服务,所以启动3个哨兵服务,对应的配置文件分别为: sentinel_26381conf 、 sentinel_26382conf 、 sentinel_26383conf

Redis服务和哨兵服务都启动了,可以测试哨兵的自动选举了,将6381沙雕,等几秒,再查看6382,6382的主从信息

注意:这个时候如果去看redis的配置文件,会发现配置文件中已经自动改好了主节点为6383了;而且哨兵的配置文件中,也改了主节点为6383了。这些都是哨兵帮我们做的

因集群中已有了新主节点,所以6381再启动只能作为从节点。此时6381启动,需要在配置文件中加入主节点信息:

redis版本为redis-3212,使用工具将安装包上传到data目录。

在data目录下创建文件夹redis,将redis安装在此目录。

第一步:解压。

第二步:安装,PREFIX=/data/redis用来设置安装目录。

到此,redis已经安装完成,剩下就是配置和启动服务。

进入redis目录, 创建配置文件conf、日志logs、数据库dump、进程号pid四个目录,用来存放对应的文件,这四个目录也可以存放在其他文件夹,只要与配置文件中的配置一致即可,否则在启动服务时会报错。 其中bin目录就是redis安装成功后的一些命令文件。

redis服务配置一主二从,哨兵模式。注意:如果在实际开发中用不到哨兵模式,redis服务配置一主一从即可。

主Redis配置:redis_6379conf

从Redis配置,redis_6380conf和redis_6381conf,与主Redis配置基本上一样,不一样的地方在于 端口、数据库、日志、pid文件名称 ,都以6380或6381为标志, 最重要的地方是建立主从关系和同步验证。

注意: 对只使用redis服务 ,只需要在主Redis里面配置requirepass,在从Redis里面配置masterauth,密码保持一致,密码尽可能复杂,以免被攻击破解。

注意: 对只使用redis服务 ,如果从Redis也有必要加入访问验证,也可以设置requirepass,而且密码可以与主Redis密码不同。

将配置文件放置到/data/redis/conf目录下,然后就可以启动服务了。

启动服务要按照主从顺序依次启动。

查看服务启动情况:

也可以通过查看日志文件来确认服务是否正常启动。

通过客户端登录Redis验证数据同步情况:

主Redis登录验证,设置数据:

从Redis登录,获取数据:从Redis并没有设置密码,所以无需验证就可以 *** 作。

配置哨兵模式:

Redis Sentinel集群通常由3到5个节点组成,如果个别节点挂了,集群还可以正常运作。Sentinel负责监控Redis集群的 健康 情况。

如果主Redis挂掉,Sentinel集群会通过投票选择一个新的主Redis。 当原来的主Redis恢复时,它会被当做新的主Redis的从Redis重新加入Redis集群。

设置连接master和slave的密码,需要注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码必须设置相同。也就是说主Redis和从Redis都必须设置requirepass和masterauth,而且密码必须相同。

sentinelconf配置信息:

将该配置文件放置到/data/redis/conf目录下,启动sentinel服务:

验证sentinel是否起作用,可以手工shutdown掉主Redis。

这时从Redis想要访问主Redis同步数据就会提示错误信息:

sentinel在监测到主Redis宕机之后,通过选举,将一个从Redis选定为新的主Redis。通过查看sentinel日志可以发现,选定6380为新的主Redis,同时将另外两个Redis作为从Redis。

注意:选定6380为主Redis后,所有的配置文件都会被修改,主要是重新建立主从关系。

6379会新增:slaveof 127001 6380

6380会删掉:slaveof 127001 6379

6381会修改:slaveof 127001 6380

由于6379服务已经关掉,所以虽然sentinel将6379作为6380的从服务,但是没有真正的建立。

重新启动6379服务,这时sentinel会重建建立一次主从关系:

根据下面步骤创建适应业务需求的云数据库Redis版实例。

使用下列方法中任意一种打开购买页:

打开云数据库Redis版产品首页,单击立即购买。

说明 如果尚未登录阿里云账号,单击立即购买后需要先使用阿里云账号和密码登录。

登录Redis管理控制台,单击右上角的创建实例。

设置以下参数。

选择密码设置方式。

立即设置:在下方的输入密码区域设置密码。

稍后设置:创建实例后再修改密码。

设置实例名称、购买数量,如果创建包年包月实例,还需设置时长。

在确认订单页,阅读《云数据库KVStore版服务协议》,确认接受后在服务协议前的选框中单击勾选。
单击去开通。

因为这方面内容较多,这里也写不开那么多内容,所以你可以留言或到我的博客上搜索相关内容,老魏有写过教程,还不止一篇,都挺详细的内容,可以帮助你入门。

redis 分布式,主从同步
张映 发表于 2011-06-27
分类目录: cache, nosql
标签:master, redis, slave, 主从, 分布式, 集群
redis和memcache比较像的,memcache可以实现服务器的集群,redis肯定也是可以的。下面在一台机,实现redis主从复制。
1,copy一下redisconf,生成一个从机的配置
cp /usr/local/redis/redisconf /usr/local/redis/redis_slaveconf
2,修改主服务器的配置redisconf
bind 127001
3,修改从服务器的配置redis_slaveconf
pidfile /usr/local/redis/var/redis_slavepid
port 10002
bind 127001
logfile /usr/local/redis/var/redis_slavelog
dbfilename dump_slaverdb
slaveof 127001 6379
4,启动主服务器,从服务器
redis-server /usr/local/redis/redisconf
redis-server /usr/local/redis/redis_slaveconf
查看一下,redislog文件会有以下内容
[3774] 27 Jun 12:53:32 The server is now ready to accept connections on port 10002
[3774] 27 Jun 12:53:32 - 0 clients connected (0 slaves), 539568 bytes in use
[3774] 27 Jun 12:53:32 Connecting to MASTER
[3772] 27 Jun 12:53:32 - Accepted 127001:33237
[3772] 27 Jun 12:53:32 Slave ask for synchronization
[3772] 27 Jun 12:53:32 Starting BGSAVE for SYNC
[3772] 27 Jun 12:53:32 Background saving started by pid 3775
[3774] 27 Jun 12:53:32 MASTER <-> SLAVE sync started: SYNC sent
[3775] 27 Jun 12:53:32 DB saved on disk
[3772] 27 Jun 12:53:33 Background saving terminated with success
[3772] 27 Jun 12:53:33 Synchronization with slave succeeded
[3774] 27 Jun 12:53:33 MASTER <-> SLAVE sync: receiving 333 bytes from master
[3774] 27 Jun 12:53:33 MASTER <-> SLAVE sync: Loading DB in memory
[3774] 27 Jun 12:53:33 MASTER <-> SLAVE sync: Finished with success
查看一下
root@ubuntu:/usr/local/redis# ps -e|grep redis
3774 00:00:00 redis-server
4148 00:00:00 redis-server
5,测试结果
<php
$redis = new redis();
$redis->connect('127001', 6379);
$redis->set('test',json_encode(array(1,2,3,4)));
print_r(json_decode($redis->get('test')));
>
root@ubuntu:/usr/local/redis# telnet 127001 10002
Trying 127001
Connected to 127001
Escape character is '^]'
get test
$9
[1,2,3,4]
缓存数据是放在6379这个端口的服务器上,代码执行后,登录到10002端口的slave服务器上也可以看到有数据,说明已经同步了。
我尝试了一下,redis的主主同步,但是没有成功,我看了一下log,以从服务器127001 10002为master的时候,同时启动二个端口,怎么也连接不上127001 6379是不支持呢?还是配置有问题,我在网上查了一下,没看到有人配置主主同步的。

来自: >

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13366481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存