redis单机部署主从复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis单机部署主从复制相关的知识,希望对你有一定的参考价值。

一、单机版radis部署

1、安装gcc

yum install gcc

2、安装redis

tar -zxvf redis-3.2.9.tar.gz -C /usr/src/
cd /usr/src/redis-3.2.9/
make
cd src && make install

3、创建redis目录存放命令和配置文件

mkdir -p /usr/local/redis/{etc,bin}

4、移动文件

cd /usr/src/redis-3.2.9/
mv redis.conf /usr/local/redis/etc
cd src
mv?mkreleasehdr.sh?redis-benchmark?redis-check-aof?redis-check-rdb?redis-cli?redis-server?redis-sentinel?redis-trib.rb?/usr/local/redis/bin

5、配置环境变量

echo ‘PATH=${PATH}:/usr/local/redis/bin/‘ >> /etc/profile
source /etc/profile

6、启动服务

启动redis服务需要指定配置文件的,后台启动的话需要修改redis.conf文件,daemonize no ---- >daemonize yes。redis服务端默认链接端口是6379,最好也将IP绑定为本机IP。


redis-server /usr/local/redis/etc/redis.conf 

7、客户端连接

redis-cli -h 192.168.118.137 -p 6379

8、停止redis服务

192.168.118.137:6379> shutdown

或者:
[[email protected] bin]# ps -ef|grep redis
root      49245   2816  0 10:39 pts/1    00:00:00 redis-server 127.0.0.1:6379
root      49559   2816  0 10:59 pts/1    00:00:00 grep --color=auto redis
[[email protected] bin]# kill -9 49245

二、主从复制

1、复制简述

redis的复制可以实现当一台数据库中的数据更新后,自动将新数据复制到其他数据库上;复制过程本身是异步的,也就是说,在有客户端对master执行写命令时,master在执行完命令后立即将结果返回客户端,并异步的将命令同步给slave,而不会等slave接收到命令在返回给客户端结果;这是一种乐观复制的策略,即容忍在一定时间内主从的数据不一致,但两者最终会数据同步,redis正是采用了乐观复制(optimistic replication)。

2、主从

redis分为两类,一类是主数据库(master),另一类是从数据库(slave)。master可以对数据进行读和写的操作,同时在有新的数据写入时,根据配置文件的设置将数据复制给slave,slave是只读的,所以一般对于数据库的写操作在master上,占据大量IO的读操作在slave上。

3、主从复制的原理

下面我们用一个图来讲解redis主从复制的过程。
?
技术图片
?
Redis主从复制过程示意图
?
?
从上面的示意图可以看出,主服务器与从服务器建立连接之后,Redis主从复制过程主要有下面几步:
(1)从服务器都将向主服务器发送一个 SYNC 命令。
(2)主服务器接到 SYNC 命令后开启一个后台子进程并开始执行 BGSAVE,并在保存操作执行期间, 将所有新执行的写入命令都保存到一个缓冲区里面。
(3)当 BGSAVE 执行完毕后, 主服务器将执行保存操作所得的 .rdb 文件发送给从服务器, 从服务器接收这个 .rdb 文件, 并将文件中的数据载入到内存中。
(4)主服务器会以 Redis 命令协议的格式, 将写命令缓冲区中积累的所有内容都发送给从服务器。
从上面的主从复制过程中,有两个问题:一是当主从断开时BGSAVE操作是一次完整复制;二是每一次BGSAVE操作master都会将RDB文件保存在硬盘上,基于这两点,2.8以后的版本引入了无硬盘复制和增量复制

无硬盘复制
redis的复制是基于RDB方式的持久化实现的,即master接到SYNC后保存RDB快照文件,并将rdb文件复制给slave。这种方式在复制初始化时需要在硬盘上创建RDB文件,当硬盘性能变低时,就会导致复制性能降低,所以无硬盘复制就是master不再保存RDB文件在硬盘上,而是直接将RDB文件网络传输给slave。

增量复制:
当主从数据库断开连接时,slave发送SYNC时,master会进行一次完整复制操作,这时可能总从数据库的数据基本一致,即使这样,也要将完整的rdb文件传给slave;这种情况下,增量复制可以让每次主从中断时不对数据进行全量复制,减少了资源消耗,提高了效率;设置为增量复制时,slave发送给master的是PSYNC命令。

4、主从复制的结构

最基础的redis主从是有一台主数据库,N台从数据库
技术图片

不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器
技术图片
图中的master会将数据同步至slave-master1和slave1,slave-master1会将数据同步至slave2和slave3,向slave-master1写入数据只会同步到slave2和slave3中,不会同步到master和slave1中。

三、主从部署

1、从数据库部署

重复第一步,并复制redis.conf为redis-repl.conf
redis配置一个从服务器非常简单, 只要在从服务器的配置文件redis-repl.conf中增加主服务器的IP地址和端口号就可以,如果主服务器设置了客户端密码,还需要在从服务器中配置主服务器的密码,如下

slaveof 192.168.118.137 6379
#masterauth 123456

2、启动从服务器

redis-server /usr/local/redis/etc/redis-repl.conf

3、主从验证

技术图片
主可写,从可查
技术图片
从不可写
技术图片
slave上查看状态

技术图片

以上是关于redis单机部署主从复制的主要内容,如果未能解决你的问题,请参考以下文章

redis简单了解一:(部署/主从复制)

实现Redis主从复制

Redis Cluster的部署与维护

Redis主从复制

redis主从复制

Redis主从复制(单机版,不集群)