1. 程式人生 > >Redis主從復制

Redis主從復制

linux redis

redis的主從復制:

主節點對內存數據直接進行一次快照,並將快照文件發給從節點,從節點在本機的內存空間重構數據庫,完成復制,主節點的數據就會同步到從節點上

特點:
一個Master可以有多個slave主機,支持鏈式復制;
Master以非阻塞方式同步數據至slave主機;


實驗說明:

本實驗使用三臺設備,一主二從,通過修改配置文件和在命令行操作兩種方式完成從節點的配置

1、安裝redis軟件包、啟動服務、同時同步時間

yum -y install redis
systemctl  start redis.service 
ntpdate 172.18.0.1

2、主節點配置

主節點開啟認證功能、指定監聽地址,不用做其他的操作

vim /etc/redis.conf
requirepass centos
bind 0.0.0.0   #本實驗環境就監聽所有地址,實際場景中應該是監聽提供服務的ip


3、從節點A上的配置(修改配置文件的方式)

修改監聽地址、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

4、在主節點上檢查

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

5、從節點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的主從復制簡單多了

本文出自 “a_pan” 博客,謝絕轉載!

Redis主從復制