天天看点

redis主从复制【master-slave集群】

一、集群的作用

1: 主从备份 防止主机宕机

2: 读写分离,分担master的任务

3: 任务分离,主从服务器分别分担备份工作与计算工作

二、集群的搭建方式

第一种方式:星型方式,即多台从服务器围绕着主服务器配置

redis主从复制【master-slave集群】

第二种方式:线性方式

redis主从复制【master-slave集群】

这种方式搭建集群有一个优点,当master宕机后,可直接切换到slave1上。

三、主从通信过程

流程图如下:

redis主从复制【master-slave集群】

简述一下上面的通信过程:

当我们为一个主服务器设置了slave从服务器的时候,主服务器就需要和从服务器同步,主服务器发生改变的时候会dump出rdb(一大整块快照)到slave中,在主服务器和从服务器同步的时候,主服务器有时会发生修改,所以需要通过缓冲aof日志文件到从服务器实现同步,然后通过replicationFeedSlaves这一进程进行通信。

四、搭建redis集群

下面,我们来动手搭建redis集群,我们会启动三台服务器,一台master,两台slave,master端口6379,一台slave服务器端口号6380,另一台端口号6381,为了降低redis的io流的负担,我们master关闭rdb,slave1开启aof,slave2关闭rdb与aof。

1.首先,复制两个slave的配置文件。

root@myhadoop:/myredis# cp redis.conf redis6380.conf
root@myhadoop:/myredis# cp redis.conf redis6381.conf
           

2.然后修改redis6380.conf文件

pidfile /var/run/redis_6380.pid
...
port 
...
#做6379端口主服务器的slave
slaveof localhost    
#关闭aof
appendonly no
#设置从服务器为只读,防止从服务器被修改主从不一致
slave-read-only yes
           

同理修改redis6381.conf文件

pidfile /var/run/redis_6381.pid
...
port 
...
#做6379端口主服务器的slave
slaveof localhost    
#关闭aof
appendonly no
#关闭rdb
#save 900 1
#save 300 10
#save 60 10000
#设置从服务器为只读,防止从服务器被修改主从不一致
slave-read-only yes
           

master配置文件redis.conf只需要关闭rdb即可。

至此,我们就搭建完了redis集群,下面我们来测试集群是否搭建成功。

启动三台服务器:

redis主从复制【master-slave集群】

连接服务器:

redis主从复制【master-slave集群】
redis主从复制【master-slave集群】
redis主从复制【master-slave集群】

怎么证明我们集群搭建好了呢?我们先在主服务器写入数据,然后我们在从服务器中如果可以读到相应的数据说明我们集群搭建成功了。

redis主从复制【master-slave集群】
redis主从复制【master-slave集群】
redis主从复制【master-slave集群】

从图中可以看出我们集群已经搭建成功了。

五、主从复制的缺陷

每次salave断开后,(无论是主动断开,还是网络故障)再连接master,都要master全部dump出来rdb,再aof,即同步的过程都要重新执行1遍.所以要记住,多台slave不要一下都启动起来,否则master可能IO剧增,致使master宕机瘫痪。

最后,还有一点需要说一下,有时候会需要为我们的集群来设置密码,当然在内网中访问大可不必设置密码,这里简单提一下。

在主服务器中设置密码,如下面设置主服务器密码为123。

requirepass 123
           

然后在两台从服务器上设置认证密码即可。

masterauth 123
           

在再次启动服务器的时候,主服务器需要通过 “”auth 密码“命令连接服务器才能获取数据,从服务器不需要输入秘密即可访问。

至此,我们讨论完怎么搭建简单的redis集群实现主从复制。

继续阅读