LAMP架构之redis(2):redis集群服务

目录

一、redis主从复制集群

(1)redis主从复制说明

(2)min-slaves-to-write=2的参数说明

二、redis高可用集群搭建(主从切换)

(1)实验环境:redis一主两从(节点一般是奇数,方便投票)

(2)主从集群搭建

(3)效果测试

三、redis自带集群

(1)自带集群部署

 (2)自带集群的主从切换测试

 (3)集群节点的增删

 (4)redis自带集群的删除


一、redis主从复制集群

(1)redis主从复制说明

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546L5aSa6bG85oiR5piv5L2g5LqM54i3,size_15,color_FFFFFF,t_70,g_se,x_16

          首先,经过auth认证的slave端发送同步请求sync给master,master端接收到请求后会把数据进行备份,生成快照rdb,发送给slave段。

          此时的数据同步分为两种情况。一种叫做同步复制(save),他是master端停下手头工作,开始生成rdb快照发给slave端,这时就会造成堵塞,因为其他的业务就无法办理,异步模式(bgsave)是开启一个新的线程负责备份和发送给slave端,这样原有的线程不受影响。

         在slave端接收到数据包之前,会通过flushall命令刷新自己原有的数据库(和格式化差不多),然后将rdb导入到自己的数据库中。

         同时master端在经过备份后的所有新操作会形成cache,cache以命令的形式,通过replicationfeedslave()函数发送给slave,从而保持数据的同步。这个过程的同步速度比mysql快很多。

(2)min-slaves-to-write=2的参数说明

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546L5aSa6bG85oiR5piv5L2g5LqM54i3,size_17,color_FFFFFF,t_70,g_se,x_16

sebtinel是哨兵,负责redis的健康检测

        假设masters和slave端全都挂掉了,哨兵就会阻止客户端继续往数据库写入数据

       假设master断出现了故障,slave之间就会通过投票机制,最后投出新的master。用户写入的数据就会存入到新的master。此时数据库主从关系会发生变化,原有的master消失。

        假如原来的master恢复了,那么此时的数据库主从关系已经发生变化了,旧master只能以slave角色进入到主从复制中,此时master必须要经过一个flash all来格式化,这么一来,旧master中原有的数据也会消失。

        因此设置一个最小slave数,防止出现这种问题。

 CONFIG SET min-slaves-to-write 2  设置参数

 CONFIG GET min-slaves-to-write 查询

CONFIG GET min-replicas-max-lag 这个参数用来设置最大时延

 

二、redis高可用集群搭建(主从切换)

(1)实验环境:redis一主两从(节点一般是奇数,方便投票)

实验环境这里要是有问题,直接看前边的redis安装部署

server1上         scp -r redis-6.2.4 root@server3:~

server3:       make USE_SYSTEMD=yes

                         make install

                         cd utils/  里边有一个启动脚本  install_server.sh,./install_server.sh 执行

                         配置文件修改          /etc/redis/6379.conf

                                                      (1) 76 bind 0.0.0.0

                                                      (2) replicaof 172.25.73.1 6379

                         /etc/init.d/redis_6379  restart 

server1查看redis集群部署情况

[root@server1 ~]# redis-cli
127.0.0.1:6379> info

(2)主从集群搭建

拷贝配置文件  sentinel.conf  并编辑

cp sentinel.conf /etc/redis/

 配置文件参数解释如下,在这里只修改两处

 84 sentinel monitor mymaster 172.25.73.1 6379 2

125 sentinel down-after-milliseconds mymaster 10000

26 daemonize no  是否打入后台,no就是不打入

84 sentinel monitor mymaster 172.25.73.1 6379 2   这里的ip是master的ip,端口6379,得到两个投票则判定master端出了问题

125 sentinel down-after-milliseconds mymaster 10000  master端时延超过10秒,就算有问题

0 sentinel parallel-syncs mymaster 1 可以同时同步数据的slave数量,slave同步数据时不让别人访问,这个数设置的越大,主从切换时不能访问的slave就越多。

     这里要注意,配置文件修改好立刻复制到其他节点 ,等到master启动后,哨兵会往配置文件中加入新内容,此时再拷贝就会出错。

scp sentinel.conf root@server2:/etc/redis/

 scp sentinel.conf root@server3:/etc/redis/

 启动redis,先在server1上启动一下

redis-sentinel  /etc/redis/sentinel.conf

server2\3也开启, cd /etc/redis/

redis-sentinel  /etc/redis/sentinel.conf

(3)效果测试

重新开一个窗口连上server1并进入redis, SHUTDOWN   停掉server1的redis服务

ps ax查看进程,只剩下哨兵进程

 此时在三个节点都能看到,master改为server2了

重新启动server1的redis :      /etc/init.d/redis_6379 start

此时sever1就变成了slave

三、redis自带集群

(1)自带集群部署

       redis本身就具有一下子开启多个实例,并组成一个集群的功能。接下来我们首先要找到这个能够建立redis实例集群的脚本

 /etc/init.d/redis_6379 stop 首先停掉前边实验的redis

在这里为了方便演示,我们只用server1操作,以下的操作除了特殊说明,均再server1。

/root/redis-6.2.4/utils/create-cluster中,有create-cluster脚本,就是本实验要用的脚本

 ./create-cluster start     启动脚本

可以看到生成了六个实例,但此时这六个实例并未形成集群关系,因此用

./create-cluster create 来创造集群,输入yes

 检查集群的部署情况,    redis-cli --cluster check 127.0.0.1:30001

可以看到3个master和3个slave

 如果想单独看某个集群 的情况,用

 redis-cli -c(选择集群模式) -p 30001(要查看的实例号)

        这里的redis集群属于无中心集群,如下图在节点一上设置的名字,它会存到节点二的哈希槽中。哈希槽一共有16383个,少了一个,整个集群都会崩溃。

 (2)自带集群的主从切换测试

127.0.0.1:30002> SHUTDOWN  停掉节点2

 redis-cli --cluster check 127.0.0.1:30001 查看集群情况,发现master从1、2、3变成1、3、5

节点5本来是节点2的从节点,2出错后5直接变为master

 重启脚本    ./create-cluster start

ps ax查看后台进程,可以看到节点2启动了

 

 redis-cli --cluster check 127.0.0.1:30001

可以看到节点2变成节点5的slave

 (3)集群节点的增删

加入6个结点不够,我们想让节点增加为8个

vim create-cluster  在脚本文件中修改以下参数

  8 NODES=8

 ./create-cluster start 

 redis-cli --cluster check 127.0.0.1:30001   此时并未出现八个节点,这是因为我们没有添加

 此时我们分别把节点7和8作为master和slave来添加到集群

redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001   这是添加master的命令

redis-cli --cluster check 127.0.0.1:30001  检查添加情况,发现节点7已经成为新的master

 接下来我们把节点8添加为节点7的slave

 redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id 192cec14615140c2977897a3e8fd8d1846945332(节点7的id)

redis-cli --cluster check 127.0.0.1:30001  检查添加情况,发现节点8成为节点7的slave

 如果想给新的节点分配哈希槽,

redis-cli --cluster reshard 127.0.0.1:30001
输入3000、节点的id和all,最后是yes,这样每个结点都分出一些哈希曹给节点七

redis-cli --cluster check 127.0.0.1:30001查看是否成功

 

 (4)redis自带集群的删除

./create-cluster stop

./create-cluster clean


再次查看该目录下,啥也没有,就是成功了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值