您的位置:首页 > 数据库 > Redis

redis的主从复制,读写分离,主从切换

2018-03-25 12:13 330 查看
当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。 redis提供了一个master,多个slave的服务。 准备三个redis服务,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不干扰原来的redis服务,我们master使用6000端口。配置文件(redis.conf)master配置修改端口:
port 6000

requirepass 123456
 slave1修改配置: 
  slave2修改配置:  
   requirepass是认证密码,应该之后要作主从切换,所以建议所有的密码都一致, masterauth是从机对主机验证时,所需的密码。(即主机的requirepass)启动主机
启动从机:
redis-server redis1.conf

redis-server redis2.conf
 输入:
ps -ef |grep redis
root      6617     1  0 18:34 ?        00:00:01 redis-server *:6000
root      6647     1  0 18:43 ?        00:00:00 redis-server *:6001
root      6653     1  0 18:43 ?        00:00:00 redis-server *:6002
root      6658  6570  0 18:43 pts/0    00:00:00 grep redis
可以看到主从机的redis已经相应启动。我们来验证下 主从复制。master:
slave1:
slave2:
   可以看到主机执行写命令,从机能同步主机的值,主从复制,读写分离就实现了。  但是万一主机挂了怎么办,这是个麻烦事情,所以redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,类似与zookeeper. 我们配置两个sentinel进程:
vi sentinel.conf
 
 
  启动sentinel服务(到对应的目录执行相应的命令):
 查看日志:
[7014] 11 Jan 19:42:30.918 # +monitor master mymaster 127.0.0.1 6000 quorum 2
[7014] 11 Jan 19:42:30.923 * +slave slave 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6000
[7014] 11 Jan 19:42:30.925 * +slave slave 127.0.0.1:6001 127.0.0.1 6002 @ mymaster 127.0.0.1 6000
从对应的日志观察到,一个master服务,两个slave服务我们现在来kill master进程
 我们观察日志:
 master切换了,当6000端口的这个服务重启的时候,他会变成6001端口服务的slave。  因为sentinel在切换master的时候,把对应的sentinel.conf和redis.conf文件的配置修改。 期间我们还需要关注的一个问题:sentinel服务本身也不是万能的,也会宕机,所以我们还得部署sentinel集群,象我这样多启动几个sentinel。关注这个配置:
 来自:https://www.cnblogs.com/think-in-java/p/5123884.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redis