redis的主從複製:linux
主節點對內存數據直接進行一次快照,並將快照文件發給從節點,從節點在本機的內存空間重構數據庫,完成複製,主節點的數據就會同步到從節點上redis
特色:
一個Master能夠有多個slave主機,支持鏈式複製;
Master以非阻塞方式同步數據至slave主機;數據庫
實驗說明:vim
本實驗使用三臺設備,一主二從,經過修改配置文件和在命令行操做兩種方式完成從節點的配置
centos
一、安裝redis軟件包、啓動服務、同時同步時間bash
yum -y install redis systemctl start redis.service ntpdate 172.18.0.1
二、主節點配置less
主節點開啓認證功能、指定監聽地址,不用作其餘的操做ide
vim /etc/redis.conf requirepass centos bind 0.0.0.0 #本實驗環境就監聽全部地址,實際場景中應該是監聽提供服務的ip
三、從節點A上的配置(修改配置文件的方式)ui
修改監聽地址、auth認證命令行
vim /etc/redis.conf requirepass centos bind 0.0.0.0
關聯的主節點信息
slaveof 192.168.1.101 6379 #主節點的地址和端口 masterauth centos #主節點配置的認證口令 #從節點只需配置這些,很簡單
而後啓動redis服務,在本機檢查結果
redis-cli -h 192.168.1.106 #從節點鏈接本機redis服務 AUTH centos #只有本機經過認證才能執行後面的操做 192.168.1.106:6379[15]> INFO Replication #查看從主節點同步過來的信息 # Replication role:slave #當前角色是slave master_host:192.168.1.101 #主節點地址 master_port:6379 #端口 master_link_status:up #與主節點的鏈路狀態是up的 master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:603 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-cli -h 192.168.1.101 192.168.1.101:6379> CLIENT LIST id=3 addr=192.168.1.106:39661 fd=5 name= age=344 idle=0 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf 或者 192.168.1.101:6379> INFO Replication # Replication role:master #當前是主節點 connected_slaves:1 slave0:ip=192.168.1.106,port=6379,state=online,offset=505,lag=0 master_repl_offset:505 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:504
五、從節點B上的配置(命令行方式)
redis-cli -h 192.168.1.107 192.168.1.107:6379> AUTH centos OK 192.168.1.107:6379> slaveof 192.168.1.101 6379 192.168.1.107:6379> CONFIG SET masterauth centos #這兩條與從節點A在配置文件中修改的內容是同樣的 192.168.1.107:6379> SELECT 15 OK 192.168.1.107:6379[15]> GET key1 "hello redis,hello linux" #在主節點已經提早建立一些數據,因此在從節點可以同步過來 192.168.1.107:6379[15]> INFO Replication # Replication role:slave #當前狀態是從節點 master_host:192.168.1.101 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:3543 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 192.168.1.107:6379[15]> CONFIG GET slave-read-only #從節點只讀功能,默認便是開啓的 1) "slave-read-only" 2) "yes" 192.168.1.107:6379[15]> CONFIG REWRITE OK #將配置寫入配置文件中 tail /etc/redis.conf #此時可以看到命令行的信息已經寫入到了配置文件中
在主節點上雖然配置的字段很少可是仍是有不少選項須要咱們注意:
repl-diskless-sync no #不設定無磁盤的同步,即沒必要等待全部從節點請求到達再一次性完成複製,而是來幾個從節點完成幾回複製 repl-diskless-sync-delay 5 #無磁盤同步的延遲時間 repl-ping-slave-period 10 #每隔多長時間去探測slave節點是否存活,單位是秒 repl-timeout 60 #複製的超時時間
從節點配置須要注意一點
slave-priority 100 #當主節點故障,多個從節點依據此優先級搶佔主節點位置,默認值是100,值越小越優先,0表示不參見搶佔 slave-read-only yes #從節點只讀功能便可
總結:
redis的主從複製配置起來很是簡單,主節點只需開啓服務、認證和bind地址
從節點不管在配置文件仍是命令行關鍵就是完成指定主節點地址和端口以及認證口令的配置,能夠說兩條語句搞定。只是cli模式下要重寫入配置文件而已
至此,redis的主從複製實驗結束,比MySQL的主從複製簡單多了