redis配置主从关系

1.在指定位置创建文件夹然后在里面放入解压后redis的配置文件,然后cp多份改名分别为redis6379.conf、redis6380.conf、redis6381.conf

2.vi逐个修改配置文件:修改端口为对应文件名端口,后台运行模式,pid文件 ,logfile,dbfilename,requirpass,masterauth

在主从服务器配置主服务器的登录密码,如:

如:

port 6379

daemonize yes

pidfile /var/run/redis6379.pid

logfile "6379.log"

dbfilename dunmp6379.rdb

requirpass 123

slave-read-only yes(从机只能读取)

注:slaveof 192.168.200.108 6380(从配置)注意:在使用sentinel监控主从节点的时候,从节点需要是使用动态方式配置的,如果直接修改配置文件,后期sentinel实现故障转移的时候会出问题

masterauth123(主从都配置,如果只是实现主从主机可以不用配置,但是要使用哨兵模式那就需要)

注释掉#bind 127.0.0.1

protected-mode 把yes改为no


3.分别启动这几个redis服务用不用的端口链接这几个服务,链接成功后输入info replication 查看都是master

4.手动创建从机,在链接上服务后使用slaveof ip 端口 把自己作为从机跟随设置的主机混,此时从机中能读不能写,主机可以读和写,如果主机死掉从机可以继续运行(读取数据)主机一旦恢复将回到原来状态,但是当从机死掉后再启动就会失去之前的关系,如果需要继续当从机这需要重新使用(slaveof ip 端口)命令。如果需要继续添加其他从机可以直接使用刚才命令,数据回直接复制一份给新建的从机。


5.从机可以作为其他机器的主机,这样可以实现传递下去


6.创建哨兵管理(如果只是把redis作为缓存可以关掉持久化):

哨兵详细知识:http://doc.redisfans.com/topic/sentinel.html

至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点。

在安装redis目录下找到sentinel.conf,复制该文档到单独的文件夹下取名为其他端口文件(sentinel6382.conf)编辑此文件。包括port,protected-mode,dir,monitor,auth-pass,down-after-milliseconds,failover-timeout , parallel-syncs

port 6382

protected-mode no

dir "/usr/local/redis/redis-data"(默认是/tmp,可以查看运行数据)

sentinel monitor mymaster 192.168.2.173 6379 1 (mymaster 可以随便取,最后的1表示只要有一个哨兵发现主机死掉就判断死亡开始切换)

sentinel auth-pass mymaster 123 (这个密码需要和redis.conf中的masterauth一致)

sentinel down-after-milliseconds mymaster 15000(哨兵每秒对mymasterPing时,超15000毫秒认为主机宕机)

sentinel failover-timeout mymaster 900000(当主从切换多久后认为主从切换失败)

sentinel parallel-syncs mymaster 1(执行故障转移, 最多有几个从服务器同时对新主服务器同步, 数字越小故障转移时间越长

注:关掉持久化 

(save "" 或者 

#save 900 1  
#save 300 10  
#save 60 10000 )

要实现哨兵也后台启动需要在哨兵配置文件加上如下2句:

daemonize yes
logfile "/var/log/sentinel_log.log"

Sentinel参数在运行时可以使用SENTINEL SET命令更改

上面配置中的mymaster为该主从的名字,代码中会使用


按照之前的命令把所有的机器按照主从的方式命令动态配置一遍建立主从机关系。

启动哨兵 redis-sentinel sentinel6382.conf 

请注意,当启动redis-sentinel 后,哨兵会根据主机配置自动查找丛机,会在主机的sentinel.conf文件中自动生成丛机IP,所以不需要将所有丛机IP 列出来
当启动redis-sentinel时,会在主机sentinel.conf和从机sentinel.conf中生成myid,建议重启redis-sentinel时将两个sentinel.conf中生成的myid删除,不然主从切换时,会根据myid去找对应的从机,当新生成的myid和原来的myid不一致,将无法切换。(最好把后面的自动生成文件一起删除)


通过哨兵查看集群的信息:
$ redis-cli -p 26379
sentinel master mymaster//查看master的状态 
SENTINEL slaves mymaster //查看salves的状态
SENTINEL sentinels mymaster //查看哨兵的状态
SENTINEL get-master-addr-by-name mymaster//获取当前master的地址
info sentinel//查看哨兵信息


代码测试:

public static void main(String[] args) {
        Set<String> sentinels = new HashSet<String>();
        sentinels.add(new HostAndPort("192.168.125.128", 26379).toString());
        sentinels.add(new HostAndPort("192.168.125.129", 26379).toString());
        sentinels.add(new HostAndPort("192.168.125.130", 26379).toString());
        JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);
        System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString());
        Jedis master = sentinelPool.getResource();
        master.auth("pwdisadmin");
        master.set("username","cczz");
        Jedis master2 = sentinelPool.getResource();
        master2.auth("pwdisadmin");
        String value = master2.get("username");
        System.out.println("username: " + value);
        master2.close();
        sentinelPool.close();
        sentinelPool.destroy();
    }




猜你喜欢

转载自blog.csdn.net/yuliantao/article/details/78806990