# demo/redis

> Redis 主从、Sentinel 与原生 Cluster 三种模式的四节点演示模板

---

LLMS index: [llms.txt](/llms.txt)

---

`demo/redis` 在一份配置中演示 Pigsty Redis 模块支持的 standalone/replica、Sentinel 与原生 Cluster 模式。


--------

## 配置概览

- 配置名称：`demo/redis`
- 节点数量：4 个
- 集群：`redis-ms`、`redis-meta`、`redis-test`
- 相关配置：[`demo/demo`](/docs/conf/demo/)

```bash
./configure -c demo/redis -s
```


--------

## 配置内容

源文件地址：[`pigsty/conf/demo/redis.yml`](https://github.com/pgsty/pigsty/blob/main/conf/demo/redis.yml)

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#==============================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># File      :   redis.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   pigsty config for redis clusters</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2022-11-09</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Mtime     :   2026-08-02</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/redis</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># License   :   Apache-2.0 @ https://pigsty.io/docs/about/license/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Copyright :   2018-2026  Ruohang Feng / Vonng (rh@vonng.com)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#==============================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">all</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">children</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># infra cluster for proxy, monitor, alert, etc..</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">10.10.10.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">infra_seq</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis-ms</span><span class="p">:</span><span class="w"> </span><span class="c"># redis classic primary &amp; replica</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">10.10.10.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">1 , redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">6379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">}, 6380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">replica_of</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;10.10.10.10 6379&#39;</span><span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_cluster</span><span class="p">:</span><span class="w"> </span><span class="nt">redis-ms ,redis_password</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;redis.ms&#39; ,redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">64MB }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis-meta</span><span class="p">:</span><span class="w"> </span><span class="c"># redis sentinel x 3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">10.10.10.11</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">1 , redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">26379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,26380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,26381</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">redis-meta</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_password</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;redis.meta&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_mode</span><span class="p">:</span><span class="w"> </span><span class="l">sentinel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">16MB</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_sentinel_monitor</span><span class="p">:</span><span class="w"> </span><span class="c"># primary list for redis sentinel, use cls as name, primary ip:port</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">redis-ms, host</span><span class="p">:</span><span class="w"> </span><span class="nt">10.10.10.10, port</span><span class="p">:</span><span class="w"> </span><span class="nt">6379 ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">redis.ms, quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis-test</span><span class="p">:</span><span class="w"> </span><span class="c"># redis native cluster: 3m x 3s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.12</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">1 ,redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">6379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6381</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.13</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">2 ,redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">6379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6381</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span>}<span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_cluster</span><span class="p">:</span><span class="w"> </span><span class="nt">redis-test ,redis_password</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;redis.test&#39; ,redis_mode</span><span class="p">:</span><span class="w"> </span><span class="nt">cluster, redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">32MB }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">vars</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l">v4.5.0                  </span><span class="w"> </span><span class="c"># pigsty version string</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">admin_ip</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w">             </span><span class="c"># admin node ip address</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">region</span><span class="p">:</span><span class="w"> </span><span class="l">default                  </span><span class="w"> </span><span class="c"># upstream mirror region: default|china|europe</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#================================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#                         VARS: REDIS                            #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#================================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># redis identity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#redis_cluster:         &lt;CLUSTER&gt; # redis cluster name, required identity parameter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#redis_node: 1             &lt;NODE&gt; # redis node sequence number, node int id required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#redis_instances: {}       &lt;NODE&gt; # redis instances definition on this redis node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># redis node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_fs_main</span><span class="p">:</span><span class="w"> </span><span class="l">/data/redis       </span><span class="w"> </span><span class="c"># redis main data directory, `/data/redis` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">      </span><span class="c"># install redis exporter on redis nodes?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9121</span><span class="w">         </span><span class="c"># redis exporter listen port, 9121 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_exporter_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">        </span><span class="c"># cli args and extra options for redis exporter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_type</span><span class="p">:</span><span class="w"> </span><span class="l">redis                </span><span class="w"> </span><span class="c"># redis implementation: redis or valkey</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># redis instance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_mode</span><span class="p">:</span><span class="w"> </span><span class="l">standalone           </span><span class="w"> </span><span class="c"># redis mode: standalone,cluster,sentinel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_conf</span><span class="p">:</span><span class="w"> </span><span class="l">redis.conf           </span><span class="w"> </span><span class="c"># redis config template path, except sentinel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_bind_address</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;0.0.0.0&#39;</span><span class="w">     </span><span class="c"># redis bind address, empty string will use host ip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">32MB           </span><span class="w"> </span><span class="c"># max memory used by each redis instance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_mem_policy</span><span class="p">:</span><span class="w"> </span><span class="l">allkeys-lru    </span><span class="w"> </span><span class="c"># redis memory eviction policy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_password</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                </span><span class="c"># redis password, empty string will disable password</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_rdb_save</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s1">&#39;1200 1&#39;</span><span class="w"> </span><span class="p">]</span><span class="w">      </span><span class="c"># redis rdb save directives, disable with empty list</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_aof_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">          </span><span class="c"># enable redis append only file?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_rename_commands</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span>}<span class="w">        </span><span class="c"># rename redis dangerous commands</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_cluster_replicas</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">         </span><span class="c"># replica number for one master in redis cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_sentinel_monitor</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">        </span><span class="c"># sentinel master list, works on sentinel cluster only</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># PASSWORD : https://pigsty.io/docs/setup/security/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_admin_password</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_admin_password</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">...</span><span class="w">
</span></span></span></code></pre></div>


--------

## 配置解读

- `redis-ms`：同一节点上的 `6379` 主实例与 `6380` 从实例
- `redis-meta`：三个 Sentinel 实例，监控 `redis-ms` 的 `6379` 主实例
- `redis-test`：两个节点、每节点三个实例组成的原生 Redis Cluster
- 每个实例设置较小的内存上限，适合功能演示

模板中的 IP、密码和内存值都是演示值，部署前应按实际拓扑修改，并使用 [`redis.yml`](/docs/redis/) 剧本安装 Redis 模块。
