一、主從復制(讀寫分離)
通常是一個master,多個slave。
master進行寫操作,slave進行讀操作。
缺點:當master宕機時,redis將無法進行寫操作,僅能讀。
master(端口9000)核心配置:
daemonize yes port 9000 logfile 9000.log dir ./ requirepass 123 masterauth 123 bind 192.168.0.115 # AOF 數據持久化 appendonly yes appendfilename aof-9000.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
slave(端口9001)核心配置:
port 9001 daemonize yes logfile 9001.log dir ./ requirepass 123
#配置主節點 slaveof 192.168.0.115 9000 masterauth 123 bind 192.168.0.115 # AOF 數據持久化 appendonly yes appendfilename aof-9001.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
思考一個問題:當單機redis服務數據量過大怎么辦?
redis3.0過后為此提供了解決方案。
二、cluster模式(分區)(至少需要3個主節點)
1、使用該模式需要用到src目錄下的redis-trib.rb
使用之前需要安裝ruby語言
本人測試時用的redis版本為4.0.10,至少需要2.2以上版本的ruby,而yum install ruby僅為2.0版本,使得運行redis-trib.rb會提示版本過低。
在這里使用另一種簡單的安裝方式(參考https://www.cnblogs.com/ding2016/p/7903147.html)
yum install centos-release-scl-rh //會在/etc/yum.repos.d/目錄下多出一個CentOS-SCLo-scl-rh.repo源 yum install rh-ruby24 -y //直接yum安裝即可 scl enable rh-ruby24 bash //必要一步 ruby -v //查看安裝版本
當ruby -v能運行時,則表示安裝成功。
2、接下來就是創建6個(最少)不同端口號的redis服務,可參考網上修改端口號的方法
關鍵
cluster-enabled yes
這個要打開。然后啟動6個服務就ok了。
3、運行命令
./redis-trib.rb create --replicas 1 192.168.0.189:7000 192.168.0.189:7001 192.168.0.189:7002 192.168.0.189:7003 192.168.0.189:7004 192.168.0.189:7005
replicas 1的意思是自動分配master,並為每個master創建1個slave。
運行,可能會讓你輸入yes。
如果報錯,以下提供3種解決方案:
①刪除dump.rdb和nodes.conf
②進入各個端口的客戶端(如 ./redis-cli -h 192.168.0.189 -p 7000),運行reflushdb
③進入各個端口客戶端,運行cluster reset
4、創建成功后就可以使用了。
常用命令:
ps -ef | grep redis #查看redis進程
redis客戶端命令:
cluster info
cluster nodes
三、哨兵模式(sentinel)
主要修改的配置文件為(sentinel.conf)參考(https://www.cnblogs.com/guolianyu/p/10249687.html)
port 8000 daemonize yes logfile "8000.log" dir "./" #監控的主節點,后面的1表示指明當有多少個sentinel認為一個master失效時,master才算真正失效 sentinel monitor mymaster 192.168.0.189 7000 1 sentinel down-after-milliseconds mymaster 30000 #這個配置項指定了在發生failover主備切換時最多可以有多少個slave同時對新的master進行 同步,這個數字越小,完成failover所需的時間就
越長,但是如果這個數字越大,就意味着越多的slave因為replication而不可用。可以通過將這個值設為 1 來保證每次只有一個slave 處於不能處理命令請求的狀態。 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 15000 #如果主節點有密碼就寫,沒密碼就注掉 sentinel auth-pass mymaster 123 #哨兵ip bind 192.168.0.198
通過./redis-centinel ../sentinel.conf即可啟動。