1、什么是redis主从复制?主从复制,当用户向Master端写入数据时,通过RedisSync机制将数据文件发送给Slave,Slave会进行相同的操作,保证数据的一致性;而且实现Redis主从复制非常简单。二、redis主从复制的特点1、同一个Master可以有多个Slave。2、Master下的Slave也可以接受同一架构下其他Slave的连接和同步请求,实现数据的级联复制,即Master->Slave->Slave模式;3、Master以非阻塞方式向Slave同步数据。这将意味着Master会继续处理一个或多个slave的读写请求;4、slave端的数据同步也可以修改为非阻塞的方式。当slave在进行新的同步时,仍然可以使用旧的数据,否则当slave与master失去联系时,slave会返回一个错误给client;5.主从复制是可扩展的,即多个slave提供只读查询和数据冗余,master6.通过配置和禁用Master数据持久化机制,将数据持久化操作交给Slaves来实现避免在Master中有一个独立的进程来完成这个操作。3、Redis主从复制原理当一个Slave进程启动时,会向Master发送SYNCCommand请求同步连接。无论是第一次连接还是重连,Master都会启动一个后台进程将数据快照保存到数据文件中,同时Master会记录所有修改数据的命令并缓存在数据文件中。后台进程完成缓存操作后,Master将数据文件发送给Slave,Slave将数据文件保存到硬盘,然后加载到内存中,然后Master进行所有数据修改操作并发送它给奴隶。如果Slave出现故障导致宕机,恢复正常后会自动重连。Master收到Slave的连接后,会将自己完整的数据文件发送给Slave。如果Mater同时收到多个Slave的同步请求,Master只会在后台启动一个进程保存数据文件,然后发送给所有Slave,保证Slave正常。4、服务器资源列表5、配置过程关于Redis的安装配置,这里就不操作了。想了解的朋友请阅读:Redis之高性能数据库缓存(一)http://cfwlxf.blog.51cto.com/3966339/14231063,1Master操作如下:运行redis服务[root@redis_mastersh]#redis-server/etc/redis/redis.conf查询redis运行日志##通过读取日志文件输出的一些信息,可以看出Master和Slave建立连接时,需要执行session机制:it将数据文件加载到硬盘需要0.012秒,速度之快可想而知,当然要根据数据的大小来评估;服务连接到6379端口,收到Slave同步连接请求,启用“BGSAVE”同步等;清除Master端数据库中的所有Key[root@redis_mastersh]#redis-cli127.0.0.1:6379>FLUSHALLOK127.0.0.1:6379>keys*(emptylistorset)3、2Slave端操作如下:[root@redis_slave~]#vim/etc/redis/redis.conf#添加Master端的IP和端口#slaveofslaveof192.168.8.86379runredis[root@redis_slave~]#redis-server/etc/redis/redis.confquerySlave运行日志##分析redis日志,可以看到Slave和Master建立连接,数据同步的过程;例如:发送SYNC指令,与Master端192.168.8.8:6379建立连接,Slave同步开始;然后Master发送PING命令查看Slave的存活状态,复制继续...查询数据库中所有key[root@redis_slave~]#redis-cli127.0.0.1:6379>keys*(emptylistorset)3、3slave2终端运行如下:[root@redis_slave2~]#vim/etc/redis/redis.conf#添加Slave端的IP和端口,实现级联复制;#slaveofslaveof192.168.8.106379#运行redis服务[root@redis_slave2~]#redis-server/etc/redis/redis.conf查询redis运行日志##结果与Slave1类似,只是Slave2与Slave1(192.168.8.10:6379)建立连接同步数据;MySQL的级联复制是这样的,Master->Slave1->Slave2;#查询数据库[root@redis_slave2~]#redis-cli127.0.0.1:6379>keys*(emptylistorset)的所有keys*(emptylistorset)3,4的master操作如下:[root@redis_mastersh]#redis-cli127.0.0.1:6379>MSETID1005NAMEMariaDBCityBeiJingOK127.0.0.1:6379>MGETIDNAMECity1)"1005"2)"MariaDB"3)"BeiJing"127.0.0.1:6379>keys*1)"NAME"2)"ID"3)"City"3、5客户端验证同步结果slave1端验证[root@redis_slave~]#redis-cli127.0.0.1:6379>auth!@#aedf127.0.0.1:6379>keys*1)"City"2)"NAME"3)"ID"127.0.0.1:6379>MGETIDNAMECity1)"1005"2)"MariaDB"3)"北京"slave2端认证[root@redis_slave2~]#redis-cli127.0.0.1:6379>keys*1)"ID"2)"NAME"3)"City"127.0.0.1:6379>MGETIDNAMECity1)"1005"2)"MariaDB"3)"北京"4.Master写,Slave读机制Redis主从复制,通过程序实现数据的读写分离,让Master负责处理写请求,Slave负责处理读请求;通过扩展Slave来处理更多的并发请求,减轻了Master端的负载,如下图:这张图比较简单,展示了Redis读写分离的过程中,通过判断用户的读和写请求,写请求发送给RedisMaster处理,Read请求发送给RedisSlave处理。对于文章中的不足之处,欢迎大家指出博文地址:http://cfwlxf.blog.51cto.com/3966339/1433637