(1).實驗環境
youxi1 192.168.1.6 Master服務器
youxi2 192.168.1.7 Slave服務器
(2).實驗
1)兩台服務器上yum安裝Redis,啟動並設置開機自啟
詳細查看:CentOS7下yum安裝Redis
2)修改Master服務器上的配置
[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服務器上的配置
[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的狀態信息
查看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