Redis主从配置

1、为什么使用master-slave

        单个服务器的情况下,如果这个服务器发生故障,那数据肯定就GG了。整个服务器要承受所有的请求负载,所以redis提供了复制功能(replication)功能。将数据库复制多个副本,然后放在不同的服务器上(放在一个服务器上,就是不同的redis实例咯)。这样即使一台数据库出现故障,其他的还是能提供服务,保证了数据的可靠性redis复制中,数据库有两种,一种就做主数据库(可读可写),另一种叫做从数据库(一般就是只读的,但是可以接受从主数据库同步过来的数据)。主从复制图如下:

                                                                                            

 

2、redis的Master-Slave的原理

          当一个从数据库启动后,会向主数据库发送sync命令。主数据库接收到命令之后会在后台(fork当前进程)进行RDB快照,以及缓存执行快照期间执行的命令,快照完成之后,将数据发送给从数据库。从数据库接收到数据之后,将数据写入临时文件中,写入完成之后,用新的RDB文件替换旧的RDB文件,接下来RDB持久化启动恢复,再接着执行缓存的命令。至此,复制初始化的过程完成。从此以后,主数据库每当执行写命令时,会将该命令发送给它的所有从数据库,从而完成数据同步。
 
3、实战配置master-slave
         为了方便我这里就用了一个redis,监听多个端口实现的。既然是redis的master-slave架构,那肯定是要已经安装了redis啦,我们就默认已经把redis装好了~~~
        开始配置:
 
 
 
               首先配置master。在装好的redis文件夹里面一般有一个redis.conf,我的被我更名成了6379.conf。
               1、为master设置密码,打开6379.conf找到requirepass
               
             去掉requirepass前面的#,后面设置为自己的密码,requirepass前面不能有空格,后面master,slave需要用到密码。
              2、如果不是仅仅本地使用,我们还要去修改配置文件里面绑定的ip地址,找到bind,redis初始值是绑定的127.0.0.1我这里改成了都可以访问,毕竟在主机上用桌面工具查看数据更舒服嘛
             

            接下来配置两个slave,将6379.conf复制两份,分别重命名为slave_1.conf,slave_2.conf。因为6379.conf的requirepass,bind已经改成了123456和0.0.0.0,那么现在slave_1.conf,slave_2.conf的requirepass和bind也都是0.0.0.0啦~~~~

            

 

 

             配置slave_1.conf,修改端口号,本实例的监听端口

            

             修改slaveof,(这里master如果是其他的机器,可以换成其他的ip地址和端口,必须是master的ip和端口

             

            修改masterauth,注意这里masterauth的密码需要和master的密码一样

            

 

 

 

             配置slave_2.conf修改端口号,本实例的监听端口

            

 

            修改slaveof,(这里如果master是其他的机器,可以换成其他的ip地址和端口,必须是master的ip和端口

            

           修改masterauth,注意这里masterauth的密码需要和master的密码一样

            

简单的单体,master-slave配置完毕了,见证效果的时候了~~~~~~~~~~~~~~~~~

3、测试master-slave效果

      1、开启master,slave_1,slave_2服务。(以前我每次开启redis服务都会有很多信息,还必须开启一个窗口放那里,其实redis只需要设置为守护进程就可以了下下面这样。我们只需要打开配置文件找到daemonize将默认的no改成yes就可以了,只怪学艺不精咯~~)

       

 

       我们看看redis的进程。

           

 

           服务已经顺利开启了,离我们的目标越来越近啦 ,嘿嘿嘿..................有点小激动~~~

       2、客户端连接redis,测试是否真的能够主从同步了。  

              先看master有没有数据,keys*是没有数据的。(客户端连接服务器的时候 -p指定端口,--raw可以防止redis客户端中文乱码

                      

             我们看看slave_1.conf,slave_2.conf是否有数据

             

          现在master,slave_1,slave_2都没有数据。我先把6381服务停掉,先想master里面写入数据,然后观察slave_1,再启动slave_2,观察slave_2中的数据。

           

           

          我要开始向master里面写数据了,请注意仔细看咯:

           

 

         我们去看看slave_1中数据是什么样的

               

 

         数据真的全部同步过来啦,开心~~~~

        我的slave_2好像还是关闭的,我赶紧开启看看:

          

 

     哇哦,刚才slave_2我没有开启,现在也自动同步过来了,redis果然强悍,膜拜~~~~~~~~~~~~~~~~~~~~

    我删两个数据看看(注意:这里slave默认是设置的readonly,只能在master上去操作,slave只能被master同步,保证数据的一致性。如果想slave也能读写就需要修改conf配置文件中的slave-read-only,将yes改为no,slave改成可读写后,如果操作了slave的数据,是不会被同步到master的)

                

 

果然删除一样的同步了,可靠性确实是高。

      

 总结:1、我起初开启slave_1,关闭slave_2,然后再开启slave_2,数据与master完全一致,可以看出redis将db完整的同步到了slave。 

          2、我们设置master,slave设置为readonly,这样可以实现redis数据的读写分离了。

          3、主从配置也可以达到容灾,数据备份作用。

posted on 2020-02-25 15:27  JPGer  阅读(115)  评论(0)    收藏  举报

导航