(1).實驗環境html
youxi1 192.168.1.6 Master服務器node
youxi2 192.168.1.7 Slave服務器redis
(2).實驗vim
1)兩臺服務器上yum安裝Redis,啓動並設置開機自啓服務器
詳細查看:CentOS7下yum安裝Redisless
2)修改Master服務器上的配置tcp
[root@youxi1 ~]# vim /etc/redis.conf bind 0.0.0.0 //第69行,設置監聽地址。0.0.0.0表示監聽全部地址 requirepass 123456 //第507行,設置認證密碼 [root@youxi1 ~]# systemctl restart redis
若是防火牆是開啓狀態,記得添加端口號測試
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=6379/tcp && firewall-cmd --reload success success
3)修改Slave服務器上的配置ui
[root@youxi2 ~]# vim /etc/redis.conf replicaof 192.168.1.6 6379 //第286行,設置master的IP地址和端口號 masterauth 123456 //第293行,設置master的認證密碼 [root@youxi2 ~]# systemctl restart redis
4)查看master和slave的狀態信息spa
查看master的狀態信息
[root@youxi1 ~]# redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> info replication # Replication role:master //這是一臺master connected_slaves:1 //鏈接slave服務器的數量 slave0:ip=192.168.1.7,port=6379,state=online,offset=350,lag=1 //slave服務器的信息 master_replid:e26e1e0953261c81b2ca2de08ce8ebda264eeabf master_replid2:0000000000000000000000000000000000000000 master_repl_offset:350 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:350
查看slave的狀態信息
[root@youxi2 ~]# redis-cli 127.0.0.1:6379> info replication # Replication role:slave //這是一臺slave master_host:192.168.1.6 //master服務器的IP地址 master_port:6379 //master服務器的端口號 master_link_status:up //鏈接狀態 master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:112 slave_priority:100 slave_read_only:1 //成爲slave服務器後,只讀 connected_slaves:0 master_replid:e26e1e0953261c81b2ca2de08ce8ebda264eeabf master_replid2:0000000000000000000000000000000000000000 master_repl_offset:112 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:112
5)測試
在master服務器上建立一個鍵值,而後到slave上查看
[root@youxi1 ~]# redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> set user youxi OK [root@youxi2 ~]# redis-cli 127.0.0.1:6379> get user "youxi"
這就成功了。
(3).主從複製高級配置參數
CentOS7下yum安裝Redis已經記載了,這裏複製一下,便於查看。
/*第218到220行,快照存儲策略,存到磁盤的持久化策略 *第一個數字是單位時間,單位爲秒;第二個數字是鍵值發生變化的次數 * 例如第一個,900秒內至少發生1次鍵值變化,則作一次快照(持久化) * 第二個就是,300秒內至少發生10次鍵值變化,則作一次快照(持久化) * 全部條件是並列關係,根據不一樣的鍵值變化選擇使用規則 */ save 900 1 save 300 10 save 60 10000 //第235行,在進行快照備份時,一旦發生錯誤是否中止,默認yes便可 stop-writes-on-bgsave-error yes //第241行,指定RDB文件是否壓縮。yes表示壓縮,會消耗CPU資源 rdbcompression yes /*第250行,是否對RDB文件作校驗碼檢測。 *此項定義在redis啓動時加載RDB文件是否對文件檢查校驗碼,在redis生成RDB文件是會生成校驗信息,在redis再次啓動或裝載RDB文件時,是否檢測校驗信息。 *若是檢測的狀況下會消耗時間,會致使redis啓動時慢,可是可以判斷RDB文件是否產生錯誤。 */ rdbchecksum yes //第253行,RDB文件名稱 dbfilename dump.rdb //第263行,RDB文件存放的路徑 dir /var/lib/redis //第286行,定義Master服務器的IP和端口,主從複製的配置信息 # replicaof <masterip> <masterport> //第293行,定義Master服務器的密碼,主從複製的配置信息 # masterauth <master-password> //第308行,當從端在主從複製過程當中與主端斷開鏈接,yes表示繼續提供服務,即便數據可能不是最新的;no表示對請求返回錯誤信息 replica-serve-stale-data yes //第324行,從端只讀 replica-read-only yes //第355行,默認不使用diskless(無磁盤)同步方式 repl-diskless-sync no //第367行,diskless(無磁盤)方式進行數據傳遞以前會有一個時間的延遲,以便從端可以進行到待傳送的目標隊列中,默認5秒 repl-diskless-sync-delay 5 //第373行,從端向主端發送ping的時間間隔,默認10秒 # repl-ping-replica-period 10 //第385行,設置超時時間 # repl-timeout 60 /*第400行,是否啓用TCP_NODELAY。 * 若是啓用則會使用少許的TCP包和帶寬去進行數據傳輸到從端,速度較慢; * 若是不啓用則使用較多的帶寬進行數據傳輸,速度較快。 */ repl-disable-tcp-nodelay no /*第413行,設置backlog的大小。backlog是一個緩衝區,在從端失聯時存放要同步到從端的數據。 * 所以當從端重連時,通常是不須要徹底同步的。backlog越大,從端能夠失聯的時間就越長(相對來講) */ # repl-backlog-size 1mb //第426行,一段時間後,從端尚未連上master,那麼backlog(緩衝區)的內存將被釋放。0表示永不釋放,默認3600秒 # repl-backlog-ttl 3600 //第441行,從端的優先級設置,數字越小優先級越高。主端故障會根據優先級高的從端來進行恢復。若是設置的是0,那麼該從端永遠不會被選中 replica-priority 100 //第457到458行,當主端的可用從端小於3個或網路延遲島嶼10秒時,主端拒絕接收用戶的寫請求。 # min-replicas-to-write 3 # min-replicas-max-lag 10