Redis支持將數據同步到多臺slave上,這種特性對提升讀取性能很是有益redis
1)master能夠有多臺slave性能
2) 除了多個slave連到相同master外,slave也能夠鏈接到其它slave造成圖狀結構spa
3)主從複製不會阻塞master,也就是說當一個或多個slave與master鏈接進行復制時,master能夠繼續處理客戶端發來的請求,相反slave在初次同步數據時則會阻塞,不能處理客戶端請求code
4)主從複製能夠用來提升系統的伸縮性,咱們能夠用多個slave專門負責客戶端的讀請求,能夠作數據冗餘blog
5)能夠在master禁用數據持久化,只須要註釋掉master配置文件redis.conf的save配置,而後只在slave配置持久化get
博主這裏就沒裝多臺機器,原本能夠用三臺虛擬機建一個局域網,來實現redis的主從複製,在這裏偷下懶,利用啓動多個配置文件來取代,這裏一共有三個redis.conf文件,以下:同步
[jacky@jacky ~]$ su 密碼: [root@jacky jacky]# cd /etc/redis [root@jacky redis]# ls -l 總用量 176 -rw-r--r--. 1 root root 41576 11月 3 22:03 redis6379.conf -rw-r--r--. 1 root root 41560 11月 3 20:08 redis6380.conf -rw-r--r--. 1 root root 41560 11月 3 20:08 redis6381.conf
daemonize yes pidfile /var/run/redis6381.pid port 6381 logfile "6381.log" dbfilename dump6381.rdb
在這裏博主設置79爲master;80和81爲slave,配置redis主從複製的時候只須要配置從機不須要配置主機(配主補配從)虛擬機
6380 配置it
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
6381 配置io
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
就這樣,一主二從配置就完畢了,哈哈,很簡單吧,79原來的數據和新的數據都會同步到80和81上,以下
127.0.0.1:6379> set k1 v1 #沒配置主從以前插入的 OK 127.0.0.1:6379> set k2 v2 #沒配置主從以前插入的 OK 127.0.0.1:6379> set k3 v3 #沒配置主從以前插入的 OK 127.0.0.1:6379> set k4 v4 #配置主從以後插入的 OK
k1和k4都能拿到
127.0.0.1:6380> get k4 "v4" 127.0.0.1:6380> get k1 "v1"
k3和k4都能拿到
127.0.0.1:6381> get k4 "v4" 127.0.0.1:6381> get k3 "v3"
到這裏,一主二從配置成功,可是在生產時,master和slave都有可能忽然之間死機,
1)若是主機死掉了,默認狀況下,主機從新啓動,角色仍是主機
2)若是從機死掉了,默認狀況下,從機從新啓動,角色變成沒有獨立主機了,須要從新配置,除非從機在redis.conf文件裏配置了,不然從機不會
從新鏈接主機
3)讀寫分離,是指redis從機只能負責讀,不能寫,主機可以寫可以讀
新火相傳的意思其實就是去中心化,如今只有80和81兩臺slave鏈接master,假如,有100臺slave的話,那麼master就壓力很大了,因此redis又推出了新火相傳的解決方案,上一臺slave,能夠下一臺slave的master.
79和80不改變,在81上配置以下:
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380 OK
這樣就在79上插入一個值,也能夠同步到81
上面提到了,當master死機的時候,重寫啓動仍是master,如今時,我是想當master死機的時候,讓某一臺從機變成主機,這裏是,讓80變成主機,
只要當master死機器的時候,手動在80執行以下命令:
127.0.0.1:6380> SLAVEOF no one
同時,81也要從新配置,配置80爲主機
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380 OK
簡單的說,哨兵模式,就是反客爲主的自動版,經過監控主機,當主機掛掉的時候,就幾臺從機中透過投票選出新的主機
2.5.1 在 /etc/redis/目錄下新建一個sentinel.conf文件
裏面的內容爲
sentinel monitor host6379 127.0.0.1 6379 1
host6379爲監控的主機名詞,自定義的,後面的「1」表示,當主機掛掉的時候,從機自動進行投票,誰的票數首先超過「1」,誰就爲主機
2.5.2 啓動sentinel.conf 文件
[root@jacky bin]# ./redis-sentinel /etc/redis/sentinel.conf 15482:X 05 Nov 17:44:31.958 * Increased maximum number of open files to 10032 (it was originally set to 1024). 15482:X 05 Nov 17:44:31.960 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now. _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.0.6 (00000000/0) 32 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 26379 | `-._ `._ / _.-' | PID: 15482 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 15482:X 05 Nov 17:44:31.966 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 15482:X 05 Nov 17:44:31.966 # Sentinel runid is 7cb8075de28bb16320934364995643e41ac24f67 15482:X 05 Nov 17:44:31.966 # +monitor master host6379 127.0.0.1 6379 quorum 1 15482:X 05 Nov 17:45:01.982 # +sdown master host6379 127.0.0.1 6379 15482:X 05 Nov 17:45:01.982 # +odown master host6379 127.0.0.1 6379 #quorum 1/1 15482:X 05 Nov 17:45:01.982 # +new-epoch 1 15482:X 05 Nov 17:45:01.982 # +try-failover master host6379 127.0.0.1 6379 15482:X 05 Nov 17:45:01.997 # +vote-for-leader 7cb8075de28bb16320934364995643e41ac24f67 1 15482:X 05 Nov 17:45:01.997 # +elected-leader master host6379 127.0.0.1 6379 15482:X 05 Nov 17:45:01.997 # +failover-state-select-slave master host6379 127.0.0.1 6379 15482:X 05 Nov 17:45:02.060 # -failover-abort-no-good-slave master host6379 127.0.0.1 6379 15482:X 05 Nov 17:45:02.129 # Next failover delay: I will not start a failover before Sat Nov 5 17:51:02 2016
這樣就算完成了
注意:就是當原來的master回來後,不是作獨立的mater,而是作新主機的slave