Redis配置简析(二)之主从管理

本文介绍如何使用 Redis Sentinel 在四台服务器上实现 Redis 的主从复制与故障自动转移,确保系统高可用性。通过详细步骤说明配置过程,并提供 Java 代码示例验证功能。
需求:先有4台服务器10.0.0.82 10.0.0.83 10.0.0.84 10.0.0.85 配置成1主3从,当其中一台主服务器出现问题宕机时,从服务器能自动切换为主服务器,数据不丢失并保证,程序无需调整。
工具:Redis Sentinel(Redis自带)
步骤:1)在4台服务器上分别安装redis,并配置主从(步骤见一)
               主从配置完查看master服务器信息:
               
               查看从服务器信息:
               
          2)配置sentinel.conf(与redis.conf在同目录下)
               #port 26379
               #sentinel monitor mymaster 10.0.0.84 6379 1
               #sentinel auth-pass mymaster iiot201411
               #sentinel down-after-milliseconds mymaster 30000
               #sentinel parallel-syncs mymaster 1
               #sentinel failover-timeout mymaster 180000

                 第1行含义: Sentinel 去监视一个名为  mymaster  的主服务器, 这个主服务器的 IP 地址为 10.0.0.84  , 端口号为  6379  , 而将这个主服务器判断为失效至少需要 1  个 Sentinel 同意 (只要同意 Sentinel                          
                                  的数量不达标,自动故障迁移就不会执行)。
                第2行含义: Sentinel  的密码,若主从配置了密码,此处最好与主从密码一致,否则启动有问题。
                第3行含义: 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数
                第4行含义: 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
         3)启动 Sentinel  
              #/usr/local/redis-2.8.18/src/redis-sentinel /usr/local/redis-2.8.18/sentinel.conf
              
              如主从配置一样,sentinel会自动检测主从服务器及端口。
              查看sentinel状态:
              
              测试:kill 掉10.0.0.84的redis进程 查看sentinel状态:
              
              82Slave顺利晋升为master,成功!
         4)java代码部分:
              
              
               测试部分:
      public static void main(String[] args) {
        try {
            String redisSentinelHost = "10.0.0.84";
            int redisSentinelPort = 26379;
            String redisSentinelClusterName = "mymaster";
            String redisSentinelPwd = "iiot2014";
            RedisSentinel pool = new RedisSentinelJedisPool(redisSentinelHost, redisSentinelPort, redisSentinelClusterName);
            if (pool != null) {
               Jedis jedis = (Jedis) pool.getResource();
                if (redisSentinelPwd != null)
                    jedis.auth(redisSentinelPwd);
                    jedis.set("test", "test");
                    jedis.get("test",);
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }
        
### Redis 集群模式与主从模式的区别及配置方法 #### 一、Redis 主从模式的配置主从模式下,Redis 的主节点负责处理写操作并将数据同步到多个从节点上。以下是具体的配置过程: 1. **编辑 `redis.conf` 文件** 修改主节点和从节点的配置文件中的参数,例如设置端口号和绑定地址: ```conf port 6379 bind 0.0.0.0 ``` 2. **启用主从关系** 在从节点的 `redis.conf` 中添加以下内容来指定其对应的主节点 IP 和端口: ```conf slaveof <master-ip> <master-port> ``` 这样可以确保从节点能够连接并同步主节点的数据。 3. **启动 Redis 实例** 使用命令行启动 Redis 实例,并加载各自的配置文件[^4]: ```bash redis-server /path/to/redis.conf ``` #### Redis 集群模式的配置 集群模式允许 Redis 节点之间自动分配键空间并通过分片存储数据,从而提升性能和可扩展性。以下是具体步骤: 1. **修改配置文件** 编辑每个 Redis 实例的 `redis.conf` 文件,开启集群支持功能: ```conf cluster-enabled yes cluster-config-file nodes-<port>.conf cluster-node-timeout 5000 appendonly yes ``` 此外,还需要为每个实例定义不同的端口号和日志路径以防止冲突[^2]。 2. **启动 Redis 实例** 启动所有参与集群构建的服务实例时需指明各自独立的配置文件位置: ```bash redis-server /path/to/custom_redis_conf_file --daemonize no ``` 3. **创建集群拓扑结构** 利用官方工具 `redis-cli` 创建实际物理机器间的逻辑网络关联: ```bash redis-cli --cluster create \ <ip1>:<port1> <ip2>:<port2> ... <ipN>:<portN> \ --cluster-replicas <num_of_replicas_per_shard> ``` #### 三、两种模式的主要区别 | 特性 | 主从模式 | 集群模式 | |---------------------|-----------------------------------|----------------------------------| | 数据分布 | 单个主节点集中管理 | 多节点间均匀划分 | | 扩展能力 | 基本无弹性 | 支持动态增加新节点 | | 故障恢复自动化 | 不具备 | 自动选举新的主节点 | | 性能优化方向 | 提高读取吞吐量 | 平衡负载 | #### 四、代码示例 下面展示了一个简单的 Python 客户端脚本来测试已建立好的 Redis Cluster 是否工作正常。 ```python import redis from redis.cluster import RedisCluster if __name__ == "__main__": startup_nodes = [ {"host": "localhost", "port": "7000"}, {"host": "localhost", "port": "7001"} ] rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True) rc.set("foo", "bar") # 设置键值对 value = rc.get("foo") # 获取键值对 print(f"Value of 'foo': {value}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值