良玉的博客 点点滴滴,积水成河_良玉的博客_页游、手游linux运维工程师之路

redis 主从

 一、原理

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面是关于redis主从复制的一些特点:

1.master可以有多个slave

2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构

3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余

5.可以在master禁用数据持久化,只需要注释掉master配置文件中的所有save配置,然后只在slave上配置数据持久化。

下面介绍下主从复制的过程

当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。

 

这里我们以本机配置 1台Master + 2台Slave 为例子,其中:

 

Master IP:127.0.0.1  PORT:6379

Slave1 IP:127.0.0.1  PORT:63791

Slave2 IP:127.0.0.1  PORT:63792

 

1:复制两个 Slave 目录,方便管理

cp -r /usr/local/webserver/redis /usr/local/webserver/redis-slave1

cp -r /usr/local/webserver/redis /usr/local/webserver/redis-slave2

 

2:修改 redis-slave1 的配置文件和服务脚本

-- vi /usr/local/webserver/redis-slave1/conf/redis.conf --

port 63791

pidfile /usr/local/webserver/redis-slave1/run/redis.pid

dir /usr/local/webserver/redis-slave1/db

slaveof 127.0.0.1 6379

----------------------------------------------------------

 

-- vi /usr/local/webserver/redis-slave1/start.sh --

#!/bin/bash

/usr/local/webserver/redis-slave1/redis-server/usr/local/webserver/redis-slave1/conf/redis.conf

---------------------------------------------------

 

------- vi /usr/local/webserver/redis-slave1/stop.sh ---------

#!/bin/bash

kill `cat /usr/local/webserver/redis-slave1/run/redis.pid`

--------------------------------------------------------

 

3:修改 redis-slave2 的配置文件和服务脚本

-- vi /usr/local/webserver/redis-slave2/conf/redis.conf --

port 63792

pidfile /usr/local/webserver/redis-slave2/run/redis.pid

dir /usr/local/webserver/redis-slave2/db

slaveof 127.0.0.1 6379

----------------------------------------------------------

 

-- vi /usr/local/webserver/redis-slave2/start.sh --

#!/bin/bash

/usr/local/webserver/redis-slave2/redis-server/usr/local/webserver/redis-slave2/conf/redis.conf

---------------------------------------------------

 

------- vi /usr/local/webserver/redis-slave2/stop.sh ---------

#!/bin/bash

kill `cat/usr/local/webserver/redis-slave2/run/redis.pid`

--------------------------------------------------------

 

4:启动 M/S 服务

/usr/local/webserver/redis/start.sh

/usr/local/webserver/redis-slave1/start.sh

/usr/local/webserver/redis-slave2/start.sh

验证服务是否正常:netstat -nlpt | grep redis-server 有3个端口存在证明成功了

0 0.0.0.0:6379  

0 0.0.0.0:63791 

0 0.0.0.0:63792 

 

5:验证M/S服务是否生效

/usr/local/webserver/redis/redis-cli [默认连接端口:6379 的 Master服务]

>set key1 val1

>quit

 

/usr/local/webserver/redis/redis-cli -p63791 [连接 Slave1 服务]

>get key1

"val1" (数据成功同步了)

 

/usr/local/webserver/redis/redis-cli -p63792 [连接 Slave2 服务]

>get key1

"val1" (数据成功同步了)


标签: redis主从

作者:良玉 分类:Redis 浏览:635 评论:0
留言列表
发表评论
来宾的头像