redis主从复制特色:
一、master能够拥有多个slave
二、多个slave能够链接同一个master外,还能够链接到其余slave
三、主从复制不会阻塞master,在同步数据时,master能够继续处理client请求
四、提升系统的伸缩性 web
当配置好slave后,slave与master创建链接,而后发送sync命令。不管是第一次链接仍是从新链接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。若是master同时收到多个slave发来的同步链接命令,master只会启动一个进程来写数据库镜像,而后发送给全部的slave redis
redis主从复制配置:
环境:Linux一台(192.168.6.205)、redis端口分别为637九、6370
安装好redis以后个人测试目录是这样的: shell
[root@web01 redis]# pwd /usr/local/redis [root@web01 redis]# ls master master-redis-2.8.1 slave slave-redis-2.8.1master、slave是我新建的一个目录,下面分别是bin、ect目录用来存放各自的redis命令和配置文件
[root@web01 bin]# pwd /usr/local/redis/master/bin [root@web01 bin]# ls dump.rdb mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server
[root@web01 etc]# pwd /usr/local/redis/master/etc [root@web01 etc]# ls master-redis.conf
[root@web01 bin]# pwd /usr/local/redis/slave/bin [root@web01 bin]# ls dump.rdb mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server
[root@web01 etc]# pwd /usr/local/redis/slave/etc [root@web01 etc]# ls slave-redis.conf/usr/local/bin:
[root@web01 redis]# pwd /usr/local/bin/redis [root@web01 redis]# ls master slave配置:主服务没动,只在slave的配置文件中修改# slaveof <masterip> <masterport>为master所在的ip 和端口,如:
[root@web01 master]# cd /usr/local/redis/slave/etc/ [root@web01 etc]# vi slave-redis.conf # slaveof <masterip> <masterport> slaveof 192.168.6.205 6379
启动master: 数据库
[root@web01 etc]# ps -ef |grep redis root 6830 5985 0 13:54 pts/2 00:00:00 grep redis [root@web01 bin]# cd /usr/local/redis/master/bin/ [root@web01 bin]# ./redis-server /usr/local/redis/master/etc/master-redis.conf链接master:
[root@web01 bin]# ./redis-cli 127.0.0.1:6379> keys * 1) "aaaaaaaaaaa" 2) "security" 3) "mm" 4) "a"查看master链接信息:
127.0.0.1:6379> info ... config_file:/usr/local/redis/master/etc/master-redis.conf # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0此时能够看到该redis role为master
启动slave: 缓存
[root@web01 bin]# cd /usr/local/redis/slave/bin/ [root@web01 bin]# ./redis-server /usr/local/redis/slave/etc/slave-redis.conf链接slave:
[root@web01 bin]# ./redis-cli -p 6370 127.0.0.1:6370> keys * 1) "mm" 2) "a" 3) "security" 4) "aaaaaaaaaaa"能够看到该链接信息为:127.0.0.1:6370>,master的数据已经被同步过来了。
查看进程能够看到已经有两个redis服务在运行 测试
[root@web01 bin]# ps -ef |grep redis root 6835 1 0 13:56 ? 00:00:00 ./redis-server *:6379 root 6866 1 0 14:01 ? 00:00:00 ./redis-server *:6370 root 6895 4071 0 14:05 pts/1 00:00:00 grep redis
查看slave链接信息: spa
127.0.0.1:6370> info ... config_file:/usr/local/redis/slave/etc/slave-redis.conf ... # Replication role:slave master_host:192.168.6.205 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:463 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0能够看到redis role为slave, master_port为6379,master_host:192.168.6.205,master_link_status:up