redis-------主从复制、哨兵监控

一、redis是什么?

和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。

二、主从复制的特点

1)采用异步复制;

2)一个主redis可以含有多个从redis;

3)每个从redis可以接收来自其他从redis服务器的连接;

4)主从复制对于主redis服务器来说是非阻塞的,这意味着当从服务器在进行主从复制同步过程中,主redis仍然可以处理外界的访问请求;

5)主从复制对于从redis服务器来说也是非阻塞的,这意味着,即使从redis在进行主从复制过程中也可以接受外界的查询请求,只不过这时候从redis返回的是以前老的数据,    如果你不想这样,那么在启动redis时,可以在配置文件中进行设置,那么从redis在复制同步过程中来自外界的查询请求都会返回错误给客户端;(虽然说主从复制过程中    对于从redis是非阻塞的,但是当从redis从主redis同步过来最新的数据后还需要将新数据加载到内存中,在加载到内存的过程中是阻塞的,在这段时间内的请求将会被阻,    但是即使对于大数据集,加载到内存的时间也是比较多的);

6)主从复制提高了redis服务的扩展性,避免单个redis服务器的读写访问压力过大的问题,同时也可以给为数据备份及冗余提供一种解决方案;

7)为了编码主redis服务器写磁盘压力带来的开销,可以配置让主redis不在将数据持久化到磁盘,而是通过连接让一个配置的从redis服务器及时的将相关数据持久化到磁盘,    不过这样会存在一个问题,就是主redis服务器一旦重启,因为主redis服务器数据为空,这时候通过主从同步可能导致从redis服务器上的数据也被清空。

三、主从复制的部署

实验环境:

Vm4  master  172.25.77.40

Vm5    slave      172.25.77.50

Vm6    slave    172.25.77.60

1.下载安装包:http://download.redis.io/releases/

2.本次实验用   redis-4.0.8.tar.gz 

3.在vm4、vm5、vm6上编译redis 

4.修改master监听本机的所有接口 

5.修改slave中的配置

6. 测试

Master:
[root@vm4 ~]# ls
anaconda-ks.cfg  redis-4.0.8.tar.gz
[root@vm4 ~]# tar zxf redis-4.0.8.tar.gz
[root@vm4 ~]# ls
anaconda-ks.cfg  redis-4.0.8  redis-4.0.8.tar.gz
[root@vm4 ~]# cd redis-4.0.8
[root@vm4 redis-4.0.8]# ls
[root@vm4 redis-4.0.8]# yum install -y gcc
[root@vm4 redis-4.0.8]# make && make install
[root@vm4 redis-4.0.8]# cd utils
[root@vm4 utils]# ./install_server.sh
[root@vm4 utils]# vim /etc/redis/6379.conf 

bind 0.0.0.0

[root@vm4 utils]# systemctl restart redis_6379.service 
[root@vm4 utils]#  netstat -antlp | grep 6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      5949/redis-server 0 

Slave:
[root@vm5 ~]# ls
anaconda-ks.cfg  redis-4.0.8.tar.gz
[root@vm5 ~]# tar zxf redis-4.0.8.tar.gz
[root@vm5 ~]# ls
anaconda-ks.cfg  redis-4.0.8  redis-4.0.8.tar.gz
[root@vm5 ~]# cd redis-4.0.8
[root@vm5 redis-4.0.8]# ls
[root@vm5 redis-4.0.8]# yum install -y gcc
[root@vm5 redis-4.0.8]# make && make install
[root@vm5 redis-4.0.8]# cd utils
[root@vm5 utils]# ./install_server.sh
[root@vm5 utils]# vim /etc/redis/6379.conf 

Slaveof  172.25.77.40 6379

[root@vm5 utils]# systemctl restart redis_6379.service

 

Slave:

[root@vm6 ~]# ls
anaconda-ks.cfg  redis-4.0.8.tar.gz
[root@vm6 ~]# tar zxf redis-4.0.8.tar.gz
[root@vm6 ~]# ls
anaconda-ks.cfg  redis-4.0.8  redis-4.0.8.tar.gz
[root@vm6 ~]# cd redis-4.0.8
[root@vm6 redis-4.0.8]# ls
[root@vm6 redis-4.0.8]# yum install -y gcc
[root@vm6 redis-4.0.8]# make && make install
[root@vm6 redis-4.0.8]# cd utils
[root@vm6 utils]# ./install_server.sh
[root@vm6 utils]# vim /etc/redis/6379.conf 

Slaveof  172.25.77.40 6379

[root@vm6 utils]# systemctl restart redis_6379.service

测试:

Master:
[root@vm4 utils]# redis-cli 
127.0.0.1:6379> set name westos
OK
127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> set user3 123123
OK
127.0.0.1:6379> get user3
"123123"
Slave:
[root@vm5 utils]# redis-cli 

127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> get user3
"123123"

Slave:
[root@vm6 utils]# redis-cli 

127.0.0.1:6379> get name
"westos"
127.0.0.1:6379> get user3
"123123"

四、sentinel的配置(哨兵机制)

sentinel是redis高可用的解决方案,sentinel系统(N个sentinel实例,N >= 1)可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
 

1.#对master上的sentinel.ocnf文件参数进行修改,然后将master上的修改文件复制到slave的/etc/redis/

[root@vm4 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@vm4 redis-4.0.8]# cp sentinel.conf /etc/redis/
[root@vm4 redis-4.0.8]# cd /etc/redis/
[root@vm4 redis]# vim sentinel.conf 

protected-mode no
sentinel monitor mymaster 172.25.62.1 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel parallel-syncs mymaster 1

                                    ##修改以上参数
[root@vm4 redis]# scp  sentinel.conf root@172.25.77.50:/etc/redis/  ##将修改之后的文件复制到slave上
[root@vm4 redis]# scp  sentinel.conf root@172.25.77.60:/etc/redis/  ##将修改之后的文件复制到slave上

2.用redis-server /path/to/sentinel.conf --sentinel命令来启动sentinel(哨兵)监控,依次在vm4、vm5、vm6运行。

[root@vm4 redis]# redis-server /etc/redis/sentinel.conf --sentinel
2123:X 19 Jan 21:52:14.122 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2123:X 19 Jan 21:52:14.122 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=2123, just started
2123:X 19 Jan 21:52:14.122 # Configuration loaded
2123:X 19 Jan 21:52:14.123 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 2123
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

2123:X 19 Jan 21:52:14.124 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2123:X 19 Jan 21:52:14.183 # Sentinel ID is d8b29c7d559a64cb38bf19e989b776a66521ccb2
2123:X 19 Jan 21:52:14.183 # +monitor master mymaster 172.25.77.40 6379 quorum 2
2123:X 19 Jan 21:52:14.185 * +slave slave 172.25.77.50:6379 172.25.77.50 6379 @ mymaster 172.25.77.40 6379
2123:X 19 Jan 21:52:14.294 * +slave slave 172.25.77.60:6379 172.25.77.60 6379 @ mymaster 172.25.77.40 6379
2123:X 19 Jan 21:52:20.796 * +sentinel sentinel 89d58d6ff2a64c8bf7c76c058a9bda5c389e3364 172.25.77.50 26379 @ mymaster 172.25.77.40 6379
2123:X 19 Jan 21:52:23.890 * +sentinel sentinel 1f7c6a2c7427404e8fafde46ae133344479bfa89 172.25.77.60 26379 @ mymaster 172.25.77.40 6379
2123:X 19 Jan 21:52:24.240 # +sdown slave 172.25.77.50:6379 172.25.77.50 6379 @ mymaster 172.25.77.40 6379
2123:X 19 Jan 21:52:24.311 # +sdown slave 172.25.77.60:6379 172.25.77.60 6379 @ mymaster 172.25.77.40 6379

3.测试:

重新打开一个终端,连接上master,

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

 

[kiosk@foundation77 Desktop]$ ssh root@172.25.77.40
[root@vm4 ~]# redis-cli 
127.0.0.1:6379> info
# Replication
role:master
connected_slaves:2
slave0:ip=172.25.77.50,port=6379,state=online,offset=27806,lag=0
slave1:ip=172.25.77.60,port=6379,state=online,offset=27806,lag=0
master_replid:96892f0a8f8942fe88a79d58aba155f493b4ffc6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28084
127.0.0.1:6379> SHUTDOWN
not connected> 

4.打开vm4,将vm4做成slave加入到主从复制服务中去。

[root@vm4 ~]# /etc/init.d/redis_6379 start 
Starting Redis server...
[root@vm4 ~]# vim /etc/redis/6379.conf 

slaveof 172.25.77.60 6379

 
[root@vm4 ~]# redis-cli 
127.0.0.1:6379> INFO

# Replication
role:slave
master_host:172.25.77.60
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:119657
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:91e585975362bdf96f125c38fabb547d8869f674
master_replid2:0000000000000000000000000000000000000000

 

等10秒左右的时间,看见以master转换到了172.25.77.60上。(master宕机,根据哨兵机制投票选举,在slave中随机选取为172.25.77.60)

[root@vm6 ~]# redis-cli 
127.0.0.1:6379> INFO
# Replication
role:master
connected_slaves:2
slave0:ip=172.25.77.50,port=6379,state=online,offset=129737,lag=1
slave1:ip=172.25.77.40,port=6379,state=online,offset=129878,lag=0
master_replid:91e585975362bdf96f125c38fabb547d8869f674
master_replid2:80f7f62ac2852b630e8390718ba5e2f04cf45204
master_repl_offset:129878
second_repl_offset:9555

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值