当前位置首页 > Linux知识

linux下配置redis4.0.2主从复制以及高可用

阅读次数:243 次  来源:admin  发布时间:

一、环境

三台服务器分别为:

172.28.18.75/172.28.18.103/172.28.18.104

在三台服务器上分别部署一个redis节点以及一个sentinel节点

二、主从复制配置 1、172.28.18.75为主redis配置在25700端口

vim /etc/redis/redis-25700.conf

主要配置项如下:

ind 172.28.18.75

ort 25700

#从节点访问主节点的密码

masterauth "password"

#redis客户端访问redis的密码

requirepass "password"

#保护模式开启

rotected-mode ye

daemonize ye

dir "/etc/redis"

logfile "25700.log"

2、172.28.18.103配置从redis在25701

ind 172.28.18.103

ort 25701

rotected-mode ye

daemonize ye

#从节点访问主节点的密码

masterauth "password"

#redis客户端访问redis的密码

requirepass "password"

dir "/etc/redis"

logfile "25707.log"

laveof 172.28.18.75 25700

3、172.28.18.104配置从redis在25701

ind 172.28.18.104

ort 25701

rotected-mode ye

daemonize ye

#从节点访问主节点的密码

masterauth "password"

#redis客户端访问redis的密码

requirepass "password"

dir "/etc/redis"

logfile "25700.log"

laveof 172.28.18.75 25700

三、启动redis 1、启动主节点redi

redis-server redis-25700.conf

查看日志

tail -f 25700.log

linux下配置redis4.0.2主从复制以及高可用

启动成功

2、启动从节点redi

在172.28.18.103上

redis-server redis-25701.conf

查看日志

tail -f 25701.log

linux下配置redis4.0.2主从复制以及高可用

链接主节点172.28.18.75:25700

同步开始

从主节点全盘复制

复制完成

同时查看主节点redis日志

linux下配置redis4.0.2主从复制以及高可用

从节点172.2818.103请求同步数据

开始后台同步数据

同步到从节点172.28.18.103成功

按照上述方法启动172.28.18.104的从节点redi

linux下配置redis4.0.2主从复制以及高可用

linux下配置redis4.0.2主从复制以及高可用

至此,主从节点启动完毕。

三、验证结果

在主节点172.28.18.75上,连接redi

redis-cli -h 172.28.18.75 -p 25700 -a password

linux下配置redis4.0.2主从复制以及高可用

插入一个key

在从节点172.28.18.103和172.28.18.104上 ,分别连接redis,并查看这个key

linux下配置redis4.0.2主从复制以及高可用 linux下配置redis4.0.2主从复制以及高可用

有数据,则同步成功。

四、高可用redis sentinel配置 1、分别在三台服务器上配置3个sentinel节点

172.28.18.75

vim sentinel-26379.conf

ind 172.28.18.75

ort 26379

dir "/etc/redis"

logfile "sentinel-26379.log"

rotected-mode ye

daemonize ye

#监控哪个主节点信息

entinel monitor mymaster 172.28.18.75 25700 2

#5秒没有响应,则视为主观下线

entinel down-after-milliseconds mymaster 5000

entinel failover-timeout mymaster 80000

#连接主节点的密码,(在主节点redis配置文件里设置)

entinel auth-pass mymaster password

172.28.18.103

vim sentinel-26379.conf

ind 172.28.18.103

ort 26379

dir "/etc/redis"

logfile "sentinel-26379.log"

rotected-mode ye

daemonize ye

#监控主节点信息

entinel monitor mymaster 172.28.18.75 25700 2

#5秒没有响应,则视为主观下线

entinel down-after-milliseconds mymaster 5000

entinel failover-timeout mymaster 80000

#连接主节点的密码,(在主节点redis配置文件里设置)

entinel auth-pass mymaster password

172.28.18.104

vim sentinel-26379.conf

ind 172.28.18.104

ort 26379

dir "/etc/redis"

logfile "sentinel-26379.log"

rotected-mode ye

daemonize ye

#监控主节点信息,因为是3个sentilnel节点,所以设置投票选举票数为2,一般sentinel节点设置为奇数个,选举票数为:(节点总数/2)+1

entinel monitor mymaster 172.28.18.75 25700 2

#5秒没有响应,则视为主观下线

entinel down-after-milliseconds mymaster 5000

entinel failover-timeout mymaster 80000

#连接主节点的密码,(在主节点redis配置文件里设置)

entinel auth-pass mymaster password

2、启动3个sentinel节点

172.28.18.75

redis-sentinel sentinel-26379.conf

查看日志

tail -f sentinel-26379.log

linux下配置redis4.0.2主从复制以及高可用

通过连接主节点redis,并执行info信息得到Relication段里的从节点信息,并添加到自己的sentinel配置文件中

此时打开sentinel-26379.conf,里面多了从节点信息配置

linux下配置redis4.0.2主从复制以及高可用

再同样启动172.28.18.103,172.28.18.104两个sentinel节点

linux下配置redis4.0.2主从复制以及高可用

监控主节点172.28.18.75

添加两个从节点redis信息到配置文件中

感知172.28.18.75的sentinel节点信息,并添加到配置文件中

此时的172.28.18.75上的sentinel节点也感知到了103节点的信息,并添加到配置文件中

linux下配置redis4.0.2主从复制以及高可用

103和75的sentinel-26379.conf,里面多了感知的sentilnel节点信息配置

linux下配置redis4.0.2主从复制以及高可用

linux下配置redis4.0.2主从复制以及高可用

再启动104的sentinel节点

linux下配置redis4.0.2主从复制以及高可用

也增加了2个从redis节点信息以及2个sentinel节点信息,并添加到配置文件中

此时,75和103的sentinel节点也感知到了104sentinel节点信息,并添加到配置文件中

linux下配置redis4.0.2主从复制以及高可用

linux下配置redis4.0.2主从复制以及高可用

至此,三个sentilnel节点启动完毕。

3、验证高可用

在172.28.18.75上停掉主redis节点

linux下配置redis4.0.2主从复制以及高可用

过5秒左右,查看3台服务器的sentinel日志如下:

172.28.18.75

linux下配置redis4.0.2主从复制以及高可用

1、172.28.18.75 25700 主观下线

2、172.28.18.75 25700 经过投票成为客观下线

3、此sentinel节点尝试成为领导者节点,发出投票

4、其余两个节点同意投票给它,它成为了领导者节点。

5、将104从redis节点选为新的主redis节点,并进行切换操作。

6、将103从redis节点设置为104新的主redis节点。并重新同步数据。

172.28.103和172.28.18.104日志:

linux下配置redis4.0.2主从复制以及高可用

linux下配置redis4.0.2主从复制以及高可用

1、172.28.18.75 25700 主观下线

2、172.28.18.75 25700 经过投票成为客观下线

3、收到75发来的请求成为领导者节点投票请求,并同意投票给它,75成为了领导者节点。

4、75完成切换操作后,重新同步配置数据

此时104的redis晋升为主redis节点,连接redis验证

linux下配置redis4.0.2主从复制以及高可用

103节点还是从redis节点,只不过主节点变为104节点,连接redis验证

linux下配置redis4.0.2主从复制以及高可用

此时,再把75上被停掉的redis重新启动起来,将成为104的从redis节点

104上的sentinel日志如下

linux下配置redis4.0.2主从复制以及高可用

104上连接redis验证

linux下配置redis4.0.2主从复制以及高可用

此时,75成了从redis节点

至此,redis高可用成功设置完毕。

4、JAVA连接sentinel实例

新建一个maven项目,在pom里加入jedis依赖和logback依赖

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.1.1</version>
    </dependency>       
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>    

新建一个class如下

public class RedisSentinelFailoverTest {
    
    private static Logger logger=LoggerFactory.getLogger(RedisSentinelFailoverTest.class);
    
    public static void main(String[] args) throws InterruptedException{
        String masterName="mymaster";
        Set<String> sentinels=new HashSet<String>();
        sentinels.add("172.28.18.75:26379");
        sentinels.add("172.28.18.103:26379");
        sentinels.add("172.28.18.104:26379");
        JedisSentinelPool  jedisSentinelPool=new JedisSentinelPool(masterName,sentinels,"password");
        while(true){
            Jedis jedis=null;
            try{
                jedis=jedisSentinelPool.getResource();
                int index=new Random().nextInt(100000);
                String key="k-"+index;
                String value="v-"+index;
                jedis.set(key, value);
                logger.info("{} values is {}",key,value,jedis.get(key));
                TimeUnit.SECONDS.sleep(1);
            }
            catch(Exception e){
                logger.error(e.getMessage(),e);
                TimeUnit.SECONDS.sleep(1);
            }
            finally{
                if(jedis!=null){
                    jedis.close();
                }    
            }
        }
    }
}

运行测试

linux下配置redis4.0.2主从复制以及高可用

从连接池里获取到主redis节点104

上一篇:Nginx用户认证
下一篇:【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践