redis主从复制

1.redis主从同步

  • Redis集群中的数据库复制是通过主从同步来实现的

  • 主节点(Master)把数据分发从节点(slave)

  • 主从同步的好处在于高可用,Redis节点有冗余设计

  • 原理:

    1. 从服务器向主服务器发送 SYNC 命令。
    2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
    3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
    4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。 1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
    2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
    3、2.8以后实现PSYNC的机制,实现断线重连

2.环境准备

  • redis支持多实例的功能,一台机器上,可以运行多个单个的redis数据库
  • 环境准备,准备3个redis数据库,达到1主 2从配置
主库:6379
从库:6380
从库:6381 1.创建一个文件夹:
[root@xujunk data]#mkdir msredis
[root@xujunk data]#cd msredis
2.创建配置文件:6379.conf 6380.conf 6381.conf
[root@xujunk msredis]#vim 6379.conf
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
#将6379.conf 里面6379更改,生成新的文件
[root@xujunk msredis]#sed "s/6379/6380/g" 6379.conf > 6380.conf
[root@xujunk msredis]#sed "s/6379/6381/g" 6379.conf > 6381.conf 3.创建文件夹:用于存放数据,日志
mkdir -p /data/{6379,6380,6381}

3.具体实现:

1.启动redis: 在当前配置目录下
[root@xujunk msredis]#redis-server 6379.conf
[root@xujunk msredis]#redis-server 6380.conf
[root@xujunk msredis]#redis-server 6381.conf 2.检查启动情况:#表示启动成功
[root@xujunk msredis]#ps -ef|grep redis
"""
root 28228 1 0 20:04 ? 00:00:00 redis-server *:6379
root 28244 1 0 20:04 ? 00:00:00 redis-server *:6380
root 28252 1 0 20:04 ? 00:00:00 redis-server *:6381
""" #连接之前先学几个命令:
[root@xujunk msredis]#redis-cli -p 6379 info
"""
...
# Replication
role:master 主节点是master
connected_slaves:0 从节点 连接数为0
master_replid:91eb4ec34cb636f61c88c36b3c8736078598644f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
...
"""
#此方法也可以查看库从属信息
[root@xujunk msredis]#redis-cli info replication
"""
# Replication
role:master 主节点是master
connected_slaves:0 从节点 连接数为0
master_replid:91eb4ec34cb636f61c88c36b3c8736078598644f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
"""
3.开启主从复制功能(将3个不同端口库连接起来)
#在6380 和6381数据库上 ,配置主从信息,通过参数形式修改配置,临时生效,注意要写入配置文件
#将6380,6381设置6379从库
[root@xujunk msredis]#redis-cli -p 6380 slaveof 127.0.0.1 6379
OK
[root@xujunk msredis]#redis-cli -p 6381 slaveof 127.0.0.1 6379
OK 4.此时检查6379复制信息,以及6380 6381的复制信息
[root@xujunk msredis]#redis-cli -p 6379 info replication
"""
# Replication
role:master #主节点
connected_slaves:2 #2个从节点
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=98,lag=1
master_replid:562912ec0c945d538bc093fa93e1e02841666070
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98
"""
#连接redis-cli 6379主库
[root@xujunk msredis]#redis-cli -p 6379
127.0.0.1:6379> set title "hello world" #连接redis-cli 6380从库
[root@xujunk msredis]#redis-cli -p 6380
127.0.0.1:6380> keys *
1) "title" #从库只能读,主库可写入,达到读写分离
  • 刚才介绍是通过参数修改情况下达到读写分离,只是临时的,更改配置文件方式,也很简单:
#6380.conf

port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
slaveof 127.0.0.1 6379
appendonly yes #实现持久化存储的
appendfsync everysec #实现持久化存储的 #6381.conf
port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
slaveof 127.0.0.1 6379
appendonly yes #实现持久化存储的
appendfsync everysec #实现持久化存储的

4.模拟主从故障,手动切换master-slave身份

1.杀死主库
[root@xujunk msredis]#kill -9 30159
2.手动切换 6381为新的主库,需要先关闭它的从库身份
[root@xujunk msredis]#redis-cli -p 6381 slaveof no one
OK
3.修改6380的新主库是 6381
[root@xujunk msredis]#redis-cli -p 6380 slaveof 127.0.0.1 6381
OK

Part_four:redis主从复制的更多相关文章

  1. [原]Redis主从复制各种环境下测试

    Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...

  2. NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  3. 【转】 NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  4. redis+Keepalived实现Redis主从复制

    redis+Keepalived实现Redis主从复制: 环境:CentOs6.5Master: 10.10.10.203Slave:   10.10.10.204Virtural IP Addres ...

  5. 深入剖析 redis 主从复制

    主从概述 redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据.特殊的,一个 从机同样可以 ...

  6. 谈谈redis主从复制的重点

    Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.下面是关于Redis主从复制的几点重要内容: Redis使用异步复制.但从Redis 2.8开始,从服务器会周期性的应答从复制流 ...

  7. 配置Redis主从复制

    [构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一.什么是redis主从复制? 主从复制,当用户往Mas ...

  8. Redis主从复制及状态监测

    参考链接:http://www.cnblogs.com/morvenhuang/p/4184262.html #配置redis主从复制: #安装redis- master slave #修改slave ...

  9. Redis主从复制(Master/Slave)

    Redis主从复制(Master/Slave) 修改配置文件 拷贝多个redis.conf文件分别配置如下参数: 开启daemonize yes pidfile port logfile dbfile ...

随机推荐

  1. 如何SpringBoot项目改为外置Tomcat启动

    正常情况下,我们开发 SpringBoot 项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成 jar 包,就可以运行了 (使用内置 Tomcat 的话,可以在 appl ...

  2. unused function warning message(转)

    這篇的對象是 static function,static function 若沒有其它 function 去存取的話,在 compile 時,會發生 unused error,可以在 functio ...

  3. 生成Nginx服务器SSL证书和客户端证书

    Nginx服务器SSL证书 生成pass key 下面的命令用于生成一个2048bit的pass key, -passout pass:111111 用于避免交互式输入密码 [tomcat@a02 t ...

  4. Centos7搭建FTP服务详细过程

    Centos7搭建FTP服务详细过程https://blog.csdn.net/sinat_30802291/article/details/81706152

  5. mysql 5.6配置

    简洁版: [client] port = 3306 socket = /weyeedata/mysql/run/mysql.sock [mysqld] innodb_buffer_pool_size ...

  6. (5)Flask项目会员登录页

    一.添加登录和登出的路由 修改app/home/views.py内容,增加登录("/login/")和登出("/logout/")的路由: # coding:u ...

  7. Oracle11g R2客户端安装图文详解过程

    转: Oracle11g R2客户端安装图文详解过程 2018-06-17 13:30:26 大话JAVA的那些事 阅读数 4129更多 分类专栏: Oracle   版权声明:本文为博主原创文章,遵 ...

  8. Robotics Education and Research at Scale - A Remotely Accessible Robotics Development Platform

    张宁  Robotics Education and Research at Scale - A Remotely Accessible Robotics Development Platform链接 ...

  9. [LeetCode] 207. Course Schedule 课程安排

    There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

  10. -bash: /usr/bin/rm: 参数列表过长

    解决方法: find ./ -type f -name "*.nasl"|xargs rm -f find ./ -type f -name "*.*"|xar ...