2019独角兽企业重金招聘Python工程师标准>>>
采用主备部署方式,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>
@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) {}}
}