redis主从复制之linux环境配置
redis 主从复制配置和使用都非常简单。通过主从复制可以允许多个 slave server 拥有和
master server 相同的数据库副本。
redis主从复制有以下特点:
(1)master :slave = 1:n (即:一个master可以拥有多个slave)
(2)slave除了能连接到master以外,还可以连接到其他slave
(3)主从复制不会阻塞master操作,主从复制在进行时,master仍然可以继续处理它的client请求
一、在Linux端的主从复制。
首先,在redis的安装目录下(redis.conf所在目录),复制一个redis.conf命名为redis_slave.conf:
cp redis.conf redis_slave.conf
修改redis_slave.conf文件,修改如下:
# slaveof <masterip> <masterport> slaveof 127.0.0.1 6379
并指定端口:
port 6378
启动master端:
开启一个master客户端并查看信息:
src/redis-cli -p 6379
可以看出,此客户端请求的服务端的信息,角色为master(主),连接的slave为1个。
同理,开启slave端
启动slave端的客户端:
src/redis-cli -p 6378 127.0.0.1 : 6378>info
可以看出,角色为slave,以及它连接到的master的信息。
测试:在master端(cli端)指定一个key,在slave端(该cli端)get该key,可以看到刚才set的东西,说明redis的master-slave配置成功!(set get过程略)。
二、Jedis(redis Java版)配置(涉及jar包:jedis-2.x)
以下ShardedJedisPool为切片池:
// 池基本配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(15);
config.setMaxWaitMillis(1000l);
config.setTestOnBorrow(false);
// slave链接
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
shards.add(new JedisShardInfo("127.0.0.1", 6379, "master"));
shards.add(new JedisShardInfo(String ip1, 6379, "slave"));
shards.add(new JedisShardInfo(String ip2, 6379, "slave"));
// 构造池
// pool = new JedisPool(config,"127.0.0.1",6379, 10000); //容忍的超时时间
ShardedJedisPool pool = new ShardedJedisPool(config, shards);
在本机(127.0.0.1)和另外几个和你“集群”的机子上分别启动redis服务端(需先保证不会出现socket连接错误),这样在任一机子上set一个key之后,另外的机器上可以get到该key对应的value。