採用主備部署方式,Master不作數據持久化操做,僅Slave作數據持久化操做,Slave採用AOF二進制日誌文件做爲持久化方案,默認每秒持久化一次。 java
1. 下載源代碼文件redis-2.8.19.tar.gz redis
2. 解壓tar -xzvf redis-2.8.19.tar.gz 數據庫
3. 進入目錄 cd redis-2.8.19
4. 編譯make
5. 安裝 make install
6. 建立數據目錄mkdir data
7. 建立日誌目錄 mkdir logs
主備機器上安裝同樣,略。 oracle
Master機器redis.conf配置 app
屬性 spa |
值 日誌 |
描述 code |
daemonize server |
yes xml |
啓動進程爲後臺進程 |
port |
6379 |
端口,6379爲默認端口 |
logfile |
"/opt/oracle/redis-2.8.19/logs/redis.log" |
日誌文件 |
databases |
1 |
數據庫個數 |
dbfilename |
"dump_master.rdb" |
數據dump文件 |
dir |
"/opt/oracle/redis-2.8.19/data" |
數據文件所在目錄 |
maxclients |
10000 |
最大鏈接數 |
#save 900 1 |
不打開此屬性 |
不打開快照持久化方式(Master不作持久化) |
#save 300 10 |
不打開此屬性 |
不打開快照持久化方式(Master不作持久化) |
#save 60 10000 |
不打開此屬性 |
不打開快照持久化方式(Master不作持久化) |
appendonly |
no |
不打開二進制日誌文件(Master不作持久化) |
maxmemory |
8gb |
物理內存的一半 # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes |
maxmemory-policy |
noeviction |
內存不夠用時,寫時返回error,讀取操做正常 |
Slave機器redis.conf配置
屬性 |
值 |
描述 |
daemonize |
yes |
啓動進程爲後臺進程 |
port |
6379 |
端口,6379爲默認端口 |
logfile |
"/opt/oracle/redis-2.8.19/logs/redis.log" |
日誌文件 |
databases |
1 |
數據庫個數 |
dbfilename |
"dump_master.rdb" |
數據dump文件 |
dir |
"/opt/oracle/redis-2.8.19/data" |
數據文件所在目錄 |
maxclients |
10000 |
最大鏈接數 |
#save 900 1 |
不打開此屬性 |
不打開快照方式持久化方式 |
#save 300 10 |
不打開此屬性 |
不打開快照方式持久化方式 |
#save 60 10000 |
不打開此屬性 |
不打開快照方式持久化方式 |
slaveof <master ip> <port> |
slaveof 192.168.126.137 6379 |
IP和端口爲Master的IP和端口 |
appendonly |
yes |
打開二進制日誌文件做爲持久化方式 |
appendfsync |
everysec |
每間隔1秒鐘持久化一次數據 |
appendfilename |
"appendonly_slave.aof" |
二進制日誌文件名稱 |
maxmemory |
8gb |
物理內存的一半 |
maxmemory-policy |
noeviction |
|
Master機器上sentinel.conf配置
屬性 |
值 |
描述 |
port |
16379 |
監視哨端口 |
daemonize |
yes |
啓動的進程爲後臺進程 |
logfile |
"/opt/oracle/redis-2.8.19/logs/sentinel.log" |
日誌文件 |
sentinel monitor <master-name> <ip> <redis-port> <quorum> |
sentinel monitor mymaster 127.0.0.1 6379 1 |
IP和端口爲Master的IP地址和端口,mymaster爲集羣名稱,能夠修改成想要的名稱,客戶端訪問時須要這個名稱 |
sentinel down-after-milliseconds <master-name> 30000 |
sentinel down-after-milliseconds mymaster 30000 |
master-name爲一個統一的集羣名稱 |
sentinel failover-timeout <master-name> 180000 |
sentinel failover-timeout mymaster 180000 |
|
sentinel parallel-syncs <master-name> <numslaves> |
sentinel parallel-syncs mymaster 1 |
Slave機器上sentinel配置
Slave機器上的sentinel.conf配置同Master機器上的sentinel.conf配置同樣,配置同上。
命令 |
描述 |
備註 |
redis-server redis.conf |
啓動Master主機 |
|
redis-server redis.conf |
啓動Slave主機 |
|
redis-sentinel sentinel.conf |
啓動Master主機上的監視哨 |
監視哨進程可單獨部署在另外的機器上,只有在過半數的監視哨存活的狀況下才能進行主備切換。 |
redis-sentinel sentinel.conf |
啓動Slave主機上的監視哨 |
1. 進入master控制檯 redis-cli –p 6379
2. 設置一個值 set foo car
3. 取出這個值 get foo
4. 進入slave控制檯 redis-cli –p 6379
5. 取出這個值 get foo
若是主備機器上均能取出這個值,則安裝部署已經成功。
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="30" /> <property name="maxIdle" value="10" /> <property name="minIdle" value="10" /> <property name="blockWhenExhausted" value="true"></property> <property name="maxWaitMillis" value="3000" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="false" /> </bean> <bean id="jedisSentinelPool" class="redis.clients.jedis.JedisSentinelPool"> <constructor-arg index="0" value="mymaster" /> <constructor-arg index="1"> <set> <value>192.168.126.151:16379</value> <value>192.168.126.151:26379</value> </set> </constructor-arg> <constructor-arg index="2" ref="jedisPoolConfig" /> <constructor-arg index="3" type="int" value="15000" /> </bean>
@Test public void test0() { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); jedis.set("1111", "22222value"); } catch (Exception e) { e.printStackTrace(); } finally{ try { jedis.close(); } catch (Exception e) { } } }