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