zoukankan      html  css  js  c++  java
  • redis sentinel哨兵模式集群搭建教程

    1.环境说明

    我们将使用192.168.220.128、192.168.220.129两台机器搭建sentinel交叉主从为例

    当前我们已在192.168.220.128上按redis安装教程安装了redis,192.168.220.129上没有安装

    2. 配置128上的slave

    cd /usr/myapp/redis-2.8.17/conf   #进入配置文件所在目录
    cp redis.conf redis-6379.conf     #128上的master所用配置文件
    cp redis.conf redis-6380.conf     #128上的slave所用配置文件
                                      #配置128上的6380从属129的6379端口
    cat >> redis-6380.conf << EOF
    slaveof 192.168.220.129 6379
    EOF

    3. 配置128上的sentinel

    2.1修改conf/redis-6379.conf和conf/redis-6380.conf,配置masterauth字段值

    2.2修改conf/sentinel.conf,配置以下字段的值

    port 26379
    sentinel announce-ip 192.168.220.128
    dir /usr/myapp/redis-2.8.17/data
    
    sentinel monitor mymaster1 192.168.220.128 6379 2
    sentinel down-after-milliseconds mymaster1 30000
    sentinel parallel-syncs mymaster1 2
    sentinel failover-timeout mymaster1 180000
    sentinel auth-pass mymaster1 yourpasswd
    
    sentinel monitor mymaster2 192.168.220.129 6379 2
    sentinel down-after-milliseconds mymaster2 30000
    sentinel parallel-syncs mymaster2 2
    sentinel failover-timeout mymaster2 180000
    sentinel auth-pass mymaster2 yourpasswd

    mymaster1和mymaster2可理解为后边master的别名,如果还有其他master类似地添加上即可。

    2.3为了方便把sentinel启动脚本写到adm目录下

    cd adm
    
    cat > start_sentinel << EOF
    ../bin/redis-sentinel ../conf/sentinel.conf
    EOF

    4. 在129部署redis

    3.1将128上的redis打包发送到129上

    tar -cf redis.tar redis-2.8.17
    scp redis.tar root@192.168.220.129:/usr/myapp

     3.2修改配置文件中的ip地址

    修改conf/redis-6379.conf和conf/redis-6380.conf,将bind的IP修改为本机网卡IP:

    修改conf/redis-6380.conf中的slaveof,将129的6380配置为从属128的6379

    修改conf/sentinel.conf,将sentinel announce-ip值修改为本机IP

    5. 启动集群

    到128、129和130三台机器redis的adm文件夹下分别执行./start_redis和./start_sentinel,启动redis和sentinel服务即可。

    redis是数据库服务,sentinel相当于哨兵作用,两者相互独立;sentinel监视redis服务如果sentinel查看到自己参与管理的master停止,则会与其他参与管理的sentinel共同商量,从原master下属的slave中选出一个来担任新的master。

    如果redis服务停止之前是master,当其重新启动后不再是master而是变成各sentinel新选举出来的master的slave。

    master和slave的区别是master可读写,slave只可读;其实通过配置slave也可读写,所以最为严谨的说法是master和slave的区别是,slave同步master的操作而master不会同步slave的操作slave之间也不会互相同步操作。

    6. 应用连接集群

    在哨兵模式中,应用应该往主里写数据但是应用是不知道哪个是主那个是从的,一个个去连接然后查看是主是从的做法也是不够合理的。

    在实际使用中是通过sentinel来获取哪个是主哪个是从的。

    Set sentinels = new HashSet();  
    sentinels.add(new HostAndPort("192.168.220.128", 26379).toString());  
    sentinels.add(new HostAndPort("192.168.220.129", 26379).toString());  
    sentinels.add(new HostAndPort("192.168.220.130", 26379).toString());  
    JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);  
    Jedis master = sentinelPool.getResource();  
    master.set("name","张三"); 
    String value = master2.get("name");

    参考:

    http://blog.csdn.net/ownfire/article/details/51546543

    https://segmentfault.com/a/1190000002680804

    http://blog.csdn.net/xianymo/article/details/46412271

  • 相关阅读:
    iOS controller 和 window 图层
    iOS CGAffineTransform 仿射变换
    iOS UIButton的UIEdgeInsets
    iOS UI的动态布局
    iOS 栅格动态布局
    iOS 系统键盘几个类型
    iOS 金融类高精度处理
    Sublime Text (崇高文本)
    iOS 静态库——制作bundle
    iOS 静态库——制作Framework
  • 原文地址:https://www.cnblogs.com/lsdb/p/7285847.html
Copyright © 2011-2022 走看看