redis主从复制、故障切换、集群

1.redis主从复制

安装包:
redis-5.0.3.tar.gz
实验环境:
server1:172.25.13.1
master:172.25.13.2
master:172.25.13.3
###解压安装包:
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz 
[root@server1 ~]# ls
redis-5.0.3  redis-5.0.3.tar.gz
####源码编译:
root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# yum install -y gcc
[root@server1 redis-5.0.3]# make && make install

在这里插入图片描述

###安装:
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ./install_server.sh

在这里插入图片描述

###查看端口:
root@server1 utils]# netstat -antlp

在这里插入图片描述

####更改配置文件:
[root@server1 utils]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf
[root@server1 redis]# vim 6379.conf 
######
bind 0.0.0.0                #监听所有地址

在这里插入图片描述

###重起服务:
[root@server1 redis]# systemctl restart redis_6379

在server2和server3上操作同样以上

在配置文件更改方面不同(但server2和server3相同):
[root@server2 mnt]# cd /etc/redis/
[root@server2 redis]# vim 6379.conf 

在这里插入图片描述
在这里插入图片描述

####重起服务: 
[root@server2~]# systemctl restart redis_6379
####测试:在server1创建内容
 [root@server1 redis]# redis-cli
127.0.0.1:6379> set name westos OK
127.0.0.1:6379> exit
#####在server2 查看创建内容

[root@server2 redis]# redis-cli
127.0.0.1:6379> get name "westos"
127.0.0.1:6379>

在server3同样能同步到创建内容

[root@server3 utils]# redis-cli
127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> 

2.redis的自动故障切换

[root@server1 redis]# cd /mnt/redis-5.0.3/
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis
[root@server1 redis]# ls
6379.conf  sentinel.conf
[root@server1 redis]# vim sentinel.conf 
#####################
 protected-mode no #开启该参数后,redis只会本地进行访问,拒绝外部访问。最好关闭,即设置为no。 
 sentinel monitor mymaster 172.25.66.1 6379 2 #指示Sentinel去监视一个名为mymaster的主服务器,这个主服务器的 IP 地址为 172.25.66.1 ,端口号为 6379 ,而将这个主服务器判断为失效至少需要2个Sentinel同意(只要同意 Sentinel的数量不达标,自动故障迁移就不会执行)。
  sentinel down-after-milliseconds mymaster 10000 #指定了Sentinel认为服务器已经断线所需的毫秒数;默认为30秒,如果你想快速切换,可以设小一点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

####将监控文件发给server2和server3两个节点:
[root@server1 redis]# scp sentinel.conf server2:/etc/redis
The authenticity of host 'server2 (172.25.13.2)' can't be established.
ECDSA key fingerprint is 32:4e:15:d1:1a:08:ee:37:fc:86:8c:80:3f:9c:a7:43.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server2,172.25.13.2' (ECDSA) to the list of known hosts.
root@server2's password: 
Permission denied, please try again.
root@server2's password: 
sentinel.conf                           100% 9709     9.5KB/s   00:00    
[root@server1 redis]# scp sentinel.conf server3:/etc/redis
The authenticity of host 'server3 (172.25.13.3)' can't be established.
ECDSA key fingerprint is 7b:2a:ab:ec:97:9a:29:d2:61:01:ab:0e:c9:4b:f4:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server3,172.25.13.3' (ECDSA) to the list of known hosts.
root@server3's password: 
sentinel.conf                           100% 9709     9.5KB/s   00:00    
#启动sentinel,一直连接不断开==(——在三台主机上-------)==
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel

在这里插入图片描述

######重开一个server1节点,并查看信息

在这里插入图片描述

#####模拟sever1端宕掉:
127.0.0.1:6379> shutdown
not connected> exit
####远程连接server2节点,查看信息:此时server2已接受server1 的master端,只有一个slave即server3
[root@server1 ~]# redis-cli -h 172.25.13.2
172.25.13.2:6379> info

在这里插入图片描述

###在server1开启redis服务
[root@server1 ~]# systemctl start redis_6379
[root@server1 ~]# systemctl status redis_6379

在这里插入图片描述

####查看节点信息,发现此时的server1起来之后为slave节点,不再是master
[root@server1 ~]# redis-cli
127.0.0.1:6379> info

在这里插入图片描述

再查看监控文件信息:
[root@server1 ~]# vim /etc/redis/sentinel.conf ,发现以将server2节点信息录入,实现了故障切换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

###再查看配置文件,发现内容也变化:
[root@server1 ~]# vim /etc/redis/6379.conf

在这里插入图片描述
3.集群
####.创建redis实例
[root@server1 redis]# cd /usr/local/
[root@server1 local]# mkdir rediscluster
[root@server1 local]# cd rediscluster/
[root@server1 rediscluster]# ls
[root@server1 rediscluster]# mkdir 700{1…6}
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006
[root@server1 rediscluster]# cd 700
7001/ 7002/ 7003/ 7004/ 7005/ 7006/
[root@server1 rediscluster]# cd 7001
[root@server1 7001]# ls
[root@server1 7001]# vim redis.conf
########
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes

在这里插入图片描述

####重新读取配置文件
    [root@server1 7001]# redis-server redis.conf
    16205:C 14 Aug 2019 04:05:46.738 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    16205:C 14 Aug 2019 04:05:46.738 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=16205, just started
    16205:C 14 Aug 2019 04:05:46.738 # Configuration loaded
####同样文件在每个创建的目录里写入并更改端口,再重新读取配置文件:
[root@server1 7001]# cp redis.conf ../7002
[root@server1 7001]# cp redis.conf ../7003
[root@server1 7001]# cp redis.conf ../7004
[root@server1 7001]# cp redis.conf ../7005
[root@server1 7001]# cp redis.conf ../7006
[root@server1 7001]# cd ..
[root@server1 rediscluster]# ls 
7001  7002  7003  7004  7005  7006
[root@server1 rediscluster]# cd 7002
[root@server1 7002]# vim redis.conf 

在这里插入图片描述

[root@server1 7002]# redis-server redis.conf
16227:C 14 Aug 2019 04:07:51.880 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16227:C 14 Aug 2019 04:07:51.880 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=16227, just started
16227:C 14 Aug 2019 04:07:51.880 # Configuration loaded
    ######查看进程;这就相当于创建了6个reids实例
    [root@server1 7006]# ps ax | grep redis

在这里插入图片描述

####3将创建的6个实例添加到redis集群中,会自动分配3个master和3个slave;create表示创建集群
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

在这里插入图片描述

    #####redis集群:是去中心化的,每个节点都是对等的,连接哪个节点都可以获取和设置数据。
    [root@server1 7006]# redis-cli -c -p 7001
    127.0.0.1:7001> info

在这里插入图片描述

 ####在7002节点设置数据,在其他节点都能获取数据。
127.0.0.1:7001> set name westos
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002> set name westos###节点自动切换
OK
127.0.0.1:7002> get name
"westos"
127.0.0.1:7002> 
   ####在3节点查看到2节点设置的数据
   [root@server1 7006]# redis-cli -c -p 7003
   127.0.0.1:7003> get name
   -> Redirected to slot [5798] located at 127.0.0.1:7002
   "westos"
   127.0.0.1:7002> set name syc
   OK
   127.0.0.1:7002> get name
   "syc"
   127.0.0.1:7002> 

#####在6节点查看到在2节点设置的数据
[root@server1 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"syc"
127.0.0.1:7002> 
#####127.0.0.1表示本机ip:
[root@server1 7006]# redis-cli --cluster check 127.0.0.1:7006

在这里插入图片描述

#info表示查看信息 ,端口7001-7006均可(访问任何一个入口都能进入reis集群,即无中心化
[root@server1 7006]# redis-cli --cluster info 127.0.0.1:7006

在这里插入图片描述
测试故障自动切换:

####先进一步检测主从关系: 
[root@sever1 ~]# redis-cli -c -p 7001
127.0.0.1:7001> info

在这里插入图片描述

[root@sever1 ~]# redis-cli -c -p 7002
127.0.0.1:7002> info

在这里插入图片描述

[root@sever1 ~]# redis-cli -c -p 7003
127.0.0.1:7003> info

在这里插入图片描述
redis集群的主从关系如下:

masterslave
70037005
70027004
70017006
#####模拟master(7002)宕机
[root@sever1 ~]# redis-cli -c -p 7002
127.0.0.1:7002> shutdown
not connected> exit
发现7004接管master(在7002宕机之前,7004是7002的slave)

[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001

在这里插入图片描述

###再模拟7004宕机

[root@sever1 ~]# redis-cli -c -p 7004
127.0.0.1:7004> shutdown
not connected> exit
###此时发现这个master会彻底崩溃,因此redis集群中便少了一个master
[root@sever1 ~]# redis-cli --cluster info 127.0.0.1:7001

在这里插入图片描述

####恢复集群结点
[root@sever1 ~]# cd /usr/local/rediscluster/
[root@sever1 rediscluster]# ls
7001  7002  7003  7004  7005  7006
[root@sever1 rediscluster]# cd 7002
#1.启动redis-server(7002)发现此时7002为slave节点
[root@sever1 7002]# redis-server redis.conf 
 [root@sever1 7002]# cd ../7004
 #2.启动redis-server(7004)此时7004为7002的master
 [root@sever1 7004]# redis-server redis.conf
root@sever1 ~]# redis-cli -c -p 7004
127.0.0.1:7004> info

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值