单机下redis之高可用的哨兵模式和主从复制

一.主从复制有什么好处呢

1.读写分离,不仅可以提高服务器的负载能力,并且可以根据读请求的规模自由增加或减少从库的数量;

2.数据被赋值了好几份,就算有一台机器出现故障,也可以使用其他的机器的数据快速恢复

注:但是主从复制也带来一些问题,比如当主节点出现故障,我们需要手动选择一个从节点代替它,此时不仅要修改应用方的主节点地址,还要命令其他从节点复制新的主节点,整个过程都需要人工干预。其次,主节点的读写能力、存储能力都受制于单机。

二.哨兵模式

哨兵是对Redis的系统的运行情况的监控,它是一个独立进程,它会独立运行,功能有二个
  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

 

三.哨兵模式下的主从复制

两个slave从库是复制master主库,他们的数据是同步

slave从库只能作为副本被读取,并不能写入数据,而master主库却可以,利用他的这一特点我们可以做读写分离,提高服务器的负载能力

但当主库出现故障时,我们需要手动去切换主库,哨兵模式的作用就在这了

从图中我们可以看出redis三个库都受到sentinel哨兵的监控,当其中一个库出现问题,哨兵就会告知另外两个库。如果是主库会出现问题,那么哨兵就会从两个从库中重新选出一个当做主库,无需我们手动去切换

大致流程

1 多个sentinel发现并确认master有问题

2 选举触一个sentinel作为领导

3 选取一个slave作为新的master

4 通知其余slave成为新的master的slave

5 通知客户端主从变化

6 等待老的master复活成为新master的slave

四.创建主从复制

 1.安装redis  (自行百度安装,或者参考这里https://www.cnblogs.com/marvinn/p/11081106.html

 

 2.创建多个redis数据库

  复制redis目录下的redis.conf  我这里复制多两份并且分别命名为redis6380.conf redis6381.conf

  cp redis.conf redis6380.conf

  cp redis.conf redis6381.conf

  修改redis6380.conf配置

  vim redis6380.conf

  #修改端口

  port 6380

  #关闭保护模式

  protected-mode  no

  #开启守护进程

  daemonize yes

  #进程文件

  pidfile "/var/run/redis_6380.pid"

  #日志文件

  logfile   这个地址你自己存 不要和redis.conf redis6381.conf填写到一起 到时出现问题好排查  

  #数据文件名

 dbfilename  这个也是自己写  一般直接写文件名就好 会自动创建  如"dump6380.rdb"

 ESC + :wq  保存配置并退出

redis6381.conf的配置方法也是同上  但是不要一味复制

 启动redis实例

 redis-server redis.conf

 redis-server redis6380.conf

 redis-server redis6381.conf

 输入 netstat -nplt  查看进程中是否有三个redis进程

我是因为修改了配置文件中的bind  所以显示0.0.0.0  你们如果是显示127.0.0.1的就代表启动成功

 

3.配置主从复制

任意选取两个库作为从库  我这边是以redis6380.conf  redis6381.conf为从库

所以我在redis6380.conf  redis6381.conf的加入

slaveof 127.0.0.1 6379

这个话的意思是你认127.0.0.1:6379为主,你作为从属

重启下三个redis实例

进入6379客户端   redis-cli

随便设置个值  set test 1111

然后退出客户端

进入6380客户端  redis-cli -p 6380

获取test的值   get test

如果得到1111那么说明你配置成功了

 

五,启动哨兵模式

复制redis下的sentinel.conf文件  我这里复制多两份并且分别命名为sentinel6380.conf sentinel6381.conf  

  cp sentinel.conf sentinel6380.conf

  cp sentinel.conf sentinel6381.conf

  修改sentinel6380.conf配置

  vim sentinel6380.conf

  port 26380    #此端口号是该哨兵文件的端口号,每个哨兵文件的端口号不同

  daemonize yes
  dir /root/data 
  protected-mode no
  bind 0.0.0.0
  logfile "redis6380_sentinel.log"
  #sentinel monitor代表监控,mymaster是给主库取得别名,ip地址代表监控的主库,6379是主库的端口号,2代表有两个或者两个以上的    哨兵认为主库不可用时,才会进行换库
  sentinel monitor mymaster 127.0.0.1 6380 2 
  #此配置指需要多少时间,一个master才会被sentinel主观认定是不可用的,单位是毫秒,默认是30秒  
  sentinel down-after-milliseconds mymaster 30000
  #此配置值在发生故障时,最多可以有几个slave同时对新的master进行同步,这个数字越小完成故障处理的时间越短
  sentinel parallel-syncs mymaster 1

  sentinel failover-timeout mymaster 180000
  #failover-timeout可以用在以下这些方面
  #1. 同一个sentinel对同一个master两次failover之间的间隔时间。   
  #2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。    
  #3.当想要取消一个正在进行的failover所需要的时间。    
  #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向       master,但是就不按parallel-syncs所配置的规则来了。

ESC + :wq  保存配置并退出

sentinel6381.conf的配置方法也是同上  但是不要一味复制

启动哨兵

redis-sentinel sentinel.conf

redis-sentinel sentinel6380.conf

redis-sentinel sentinel6381.conf

 

类似这样子  代表你的哨兵启动成功

 

此时我们可以进入6379控制台   redis-cli

查询当前redis信息

127.0.0.1:6379>info replication  

其中的role代表你的身份  master是主库

connected_slaves代表你有多少个从库

此时如果我们的主库进程被杀死/主库停止了

redis-cli -p 6379 shutdown

我们在进入6381或者6380的客户端  输入info replication  会发现其中的6380或者6381被自动切换成主库   此时你的主从和哨兵就都搭建完成了

六 redis的一些配置信息注释

daemonize:如需要在后台运行,把该项的值改为yes

pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址

bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请 求,在生产环节中最好设置该项

port:监听端口,默认为6379 timeout:设置客户端连接时的超时时间,单位为秒

loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice

logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上

database:设置数据库的个数,默认使用的数据库是0 save:设置redis进行数据库镜像的频率

rdbcompression:在进行镜像备份时,是否进行压缩

dbfilename:镜像备份文件的文件名 dir:数据库镜像备份的文件放置的路径

slaveof:设置该数据库为其他数据库的从数据库

masterauth:当主数据库连接需要密码验证时,在这里设定

requirepass:设置客户端连接后进行任何其他指定前需要使用的密码

maxclients:限制同时连接的客户端数量

maxmemory:设置redis能够使用的最大内存

appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态

appendfsync:设置appendonly.aof文件进行同步的频率

vm_enabled:是否开启虚拟内存支持 vm_swap_file:设置虚拟内存的交换文件的路径

vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0

vm_page_size:设置虚拟内存页的大小

vm_pages:设置交换文件的总的page数量

vm_max_thrrads:设置vm IO同时使用的线程数量

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP小渣渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值