舉例c++
└── redis_6379 ├── conf │ └── redis.conf ├── db │ └── dump.rdb ├── logs │ └── redis_6379.log └── pid └── redis_6379.pid
dir——指定rdb和aof持久化文件存放的位置redis
mkdir -p /opt/redis_cluster/redis_{6379,6380}/{conf,db,logs,pid}
新建用戶服務器
useradd -M -s /sbin/nologin redis
改變目錄屬主屬組
chown -R redis. /opt/redis_cluster架構
gcc -v # 若是沒有編譯環境則必需要安裝:使用yum或者是rpm包安裝 yum install gcc gcc-c++
wget http://download.redis.io/releases/redis-4.0.11.tar.gz tar xvf redis-4.0.11.tar.gz
安裝分佈式
# 會把主程序安裝到/usr/local/bin/下,並配置好環境變量 make && make install # 若是不執行make install那麼主程序就在src目錄下,也可使用
# 另外一種方法安裝(這樣能夠指定bin目錄的放置位置) make PREFIX=/opt/redis_cluster/redis_6380/ install
redis-server /opt/redis_cluster/redis_6380/conf/redis.conf redis-server /opt/redis_cluster/redis_6379/conf/redis.conf
redis-cli -h 10.0.0.103 -p 6380 redis-cli -h 10.0.0.103 -p 6379
bind 10.0.0.103 port 6380 daemonize yes pidfile /opt/redis_cluster/redis_6380/pid/redis_6380.pid logfile "/opt/redis_cluster/redis_6380/logs/redis_6380.log" dir /opt/redis_cluster/redis_6380/db/ slaveof 10.0.0.103 6379
每一個從節點只能有一個主節點,主節點能夠有多個從節點
配置複製的方式有三種:ide
一、在配置文件中加入slaveof {masterHost} {masterPort} 隨redis啓動生效
二、在redis-server啓動命令後加入 -slaveof {masterHost} {masterPort}生效
三、直接使用命令:slavefo {masterHost} {masterPort}生效code
查看複製狀態信息命令server
info replication
斷開復制:
slaveoo命令不但能夠創建複製,還能夠在從節點執行slave of no one來斷開與主節點複製關係blog
slave of no one
經過slaveof命令還能夠實現切主操做,所謂切主操做是指把當前從節點對主節點的複製切換到另外一個主節點
執行命令便可。ip
slaveof {masterHost} {masterPort}
Redis主從模式下,主節點一旦發生故障不能提供服務,須要人工干預,將從節點晉升爲主節點,同時還須要修改客戶端配置。
Sentinel(哨兵)架構解決了redis主從人工干預的問題。
當主節點出現故障時sentinel能自動完成故障發現和故障轉移,並通知客戶端從而實現真正的高可用。
Redis Sentinel是一個分佈式的架構,其中包含N個Sentinel節點和Redis數據節點,每一個Sentinel節點會對匯聚節點和其它Sentinel節點進行監控,當它發現節點不可達時,會對節點作下線標識,若是被標識的是主節點,它還會和其餘Sentinel
節點進行「協商」,當大可能是節點都認爲主節點不可達時,會選舉出一個Sentinel節點來完成自動故障轉移的工做,同時會將這個變化同事給redis客戶端。
sentinel.conf
bind 10.0.0.103 port 26379 daemonize yes pidfile "/opt/redis_cluster/redis_26379/pid/redis_26379.pid" logfile "/opt/redis_cluster/redis_26379/logs/redis_26379.log" dir "/opt/redis_cluster/redis_26379/db" sentinel monitor mymaster 10.0.0.103 6379 2 # mymaster主節點別名 主節點ip和端口,判斷主節點失敗,須要兩個sentinel節點贊成 sentinel down-after-milliseconds mymaster 30000 # 選項指定了Sentinel認爲服務器已經斷線所需的毫秒數 sentinel parallel-syncs mymaster 1 # 向新的主節點發起復制操做的從節點個數,1輪詢發起複製 sentinel failover-timeout mymaster 180000 # 故障轉移超時時間
方式1:
redis-server /opt/redis_cluster/redis_26379/conf/sentinel.conf --sentinel
方式2:
redis-sentinel /opt/redis_cluster/redis_26379/conf/sentinel.conf
SENTINEL master <master name>:用於查看監控的某個Redis Master信息,包括配置和狀態等。
SENTINEL slaves <master name>:列出給定主服務器的全部從服務器,以及這些從服務器的當前狀態。
SENTINEL sentinels <master name>:查看給定主服務器的Sentinel實例列表及其狀態。
SENTINEL get-master-addr-by-name <master name>:返回給定名字的主服務器的IP地址和端口號。 若是這個主服務器正在執行故障轉移操做,或者針對這個主服務器的故障轉移操> 做已經完成,那麼這個命令返回新的主服務器的IP地址和端口號。
SENTINEL MONITOR <name> <ip> <port> <quorum>這個命令告訴sentinel去監聽一個新的masterSENTINEL REMOVE <name> 命令sentinel放棄對某個master的監聽