采用主备部署方式,Master不做数据持久化操作,仅Slave做数据持久化操作,Slave采用AOF二进制日志文件作为持久化方案,默认每秒持久化一次。
- 安装
1. 下载源代码文件redis-2.8.19.tar.gz
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
主备机器上安装一样,略。
- 配置
Master机器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 |
不打开此属性 |
不打开快照持久化方式(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
如果主备机器上均能取出这个值,则安装部署已经成功。
- 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>
<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) {
}
}
}