Redis主備安裝

採用主備部署方式,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和端口爲MasterIP和端口

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和端口爲MasterIP地址和端口,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
若是主備機器上均能取出這個值,則安裝部署已經成功。


  • Jedis使用
<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) {
		}
	}
}
相關文章
相關標籤/搜索