redis-master-slave

redis主從複製特色:
    一、master能夠擁有多個slave
    二、多個slave能夠鏈接同一個master外,還能夠鏈接到其餘slave
    三、主從複製不會阻塞master,在同步數據時,master能夠繼續處理client請求
    四、提升系統的伸縮性 web

redis主從複製過程:

    當配置好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.1
    master、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-cli 該客戶端默認鏈接的端口號爲6379,能夠經過-p指定端口,-h指定主機。

查看進程能夠看到已經有兩個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
相關文章
相關標籤/搜索