# demo/minio

> 四节点 x 四盘位的高可用 S3 对象存储集群演示；当前源码默认使用 Silo。

---

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

---

`demo/minio` 配置模板演示如何部署四节点 x 四盘位、总计十六盘的高可用 S3 对象存储集群。模板沿用 MINIO 模块的兼容命名，并显式设置 `minio_type: silo`；v4.5.0 当前源码只接受这一取值，部署与移除角色也都默认使用 `silo`。删除前仍应把该值连同精确目标、集群身份和数据盘路径一并核对。

更多教程，请参考 **[MINIO](/docs/minio/)** 模块文档。


--------

## 配置概览

- 配置名称： `demo/minio`
- 节点数量： 四节点
- 配置说明：高可用多节点多盘 S3 对象存储集群演示（当前默认 Silo）
- 适用系统：`el8`, `el9`, `el10`, `d12`, `d13`, `u22`, `u24`, `u26`
- 适用架构：`x86_64`, `aarch64`
- 相关配置：[`meta`](/docs/conf/meta/)

启用方式：

```bash
./configure -c demo/minio
```

> 备注：这是一个四节点模版，您需要在生成配置后修改其他三个节点的 IP 地址


--------

## 配置内容

源文件地址：[`pigsty/conf/demo/minio.yml`](https://github.com/pgsty/pigsty/blob/main/conf/demo/minio.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      :   minio.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   pigsty: 4 node x 4 disk MNMD minio clusters</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2023-01-07</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Mtime     :   2026-08-09</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/minio</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="c"># One pass installation with:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># ./deploy.yml</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"># 1.  minio-1 @ 10.10.10.10:9000 -  - (9002) svc &lt;-x  10.10.10.9:9002</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 2.  minio-2 @ 10.10.10.11:9000 -xx- (9002) svc &lt;-x &lt;----------------</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 3.  minio-3 @ 10.10.10.12:9000 -xx- (9002) svc &lt;-x  sss.pigsty:9002</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 4.  minio-4 @ 10.10.10.13:9000 -  - (9002) svc &lt;-x  (intranet dns)</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"># use minio load balancer service (9002) instead of direct access (9000)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># mcli alias set sss https://sss.pigsty:9002 minioadmin S3User.MinIO</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"># https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># MINIO_VOLUMES=&#34;https://minio-{1...4}.pigsty:9000/data{1...4}/minio&#34;</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="c"># minio cluster with 4 nodes and 4 drivers per node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio</span><span class="p">:</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.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">minio_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">1 , nodename</span><span class="p">:</span><span class="w"> </span><span class="l">minio-1 }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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">minio_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">2 , nodename</span><span class="p">:</span><span class="w"> </span><span class="l">minio-2 }</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">minio_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">3 , nodename</span><span class="p">:</span><span class="w"> </span><span class="l">minio-3 }</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">minio_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">4 , nodename</span><span class="p">:</span><span class="w"> </span><span class="l">minio-4 }</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">minio_type</span><span class="p">:</span><span class="w"> </span><span class="l">silo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">minio_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">minio</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">minio_data</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;/data{1...4}&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">minio_buckets</span><span class="p">:</span><span class="w">                    </span><span class="c"># list of minio bucket to be created</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="l">pgsql }</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">meta ,versioning</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </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="l">data }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">minio_users</span><span class="p">:</span><span class="w">                      </span><span class="c"># list of minio user to be created</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">access_key</span><span class="p">:</span><span class="w"> </span><span class="nt">pgbackrest  ,secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">S3User.Backup ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">pgsql }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">access_key</span><span class="p">:</span><span class="w"> </span><span class="nt">s3user_meta ,secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">S3User.Meta   ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">meta  }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">access_key</span><span class="p">:</span><span class="w"> </span><span class="nt">s3user_data ,secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">S3User.Data   ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">data  }</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"># bind a node l2 vip (10.10.10.9) to minio cluster (optional)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">node_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">minio</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">vip_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">vip_vrid</span><span class="p">:</span><span class="w"> </span><span class="m">128</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">vip_address</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.9</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"># expose minio service with haproxy on all nodes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">haproxy_services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">minio                   </span><span class="w"> </span><span class="c"># [REQUIRED] service name, unique</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">9002</span><span class="w">                     </span><span class="c"># [REQUIRED] service port, unique</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">balance</span><span class="p">:</span><span class="w"> </span><span class="l">leastconn            </span><span class="w"> </span><span class="c"># [OPTIONAL] load balancer algorithm</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">options</span><span class="p">:</span><span class="w">                       </span><span class="c"># [OPTIONAL] minio health check</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span>- <span class="l">option httpchk</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span>- <span class="l">option http-keep-alive</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span>- <span class="l">http-check send meth OPTIONS uri /minio/health/live</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span>- <span class="l">http-check expect status 200</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">servers</span><span class="p">:</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">minio-1 ,ip</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">9000 ,options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;check-ssl ca-file /etc/pki/ca.crt check port 9000&#39;</span><span class="w"> </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">minio-2 ,ip</span><span class="p">:</span><span class="w"> </span><span class="nt">10.10.10.11 ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">9000 ,options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;check-ssl ca-file /etc/pki/ca.crt check port 9000&#39;</span><span class="w"> </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">minio-3 ,ip</span><span class="p">:</span><span class="w"> </span><span class="nt">10.10.10.12 ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">9000 ,options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;check-ssl ca-file /etc/pki/ca.crt check port 9000&#39;</span><span class="w"> </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">minio-4 ,ip</span><span class="p">:</span><span class="w"> </span><span class="nt">10.10.10.13 ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">9000 ,options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;check-ssl ca-file /etc/pki/ca.crt check port 9000&#39;</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="c">#etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1 } } }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pgsql:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#  hosts:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    10.10.10.10: { pg_seq: 1 , pg_role: primary }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    10.10.10.11: { pg_seq: 2 , pg_role: replica }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    10.10.10.12: { pg_seq: 3 , pg_role: replica }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    10.10.10.13: { pg_seq: 4 , pg_role: replica }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#  vars:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    pg_cluster: pgsql</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    pgbackrest_method: minio</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">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"># build a local repo without PostgreSQL packages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_modules</span><span class="p">:</span><span class="w"> </span><span class="l">infra,node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_packages</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ repo_packages_default | reject(&#39;equalto&#39;, &#39;pgsql-utility&#39;) | list }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_extra_packages</span><span class="p">:</span><span class="w"> </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="nt">infra_portal</span><span class="p">:</span><span class="w">                     </span><span class="c"># infra services exposed via portal</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">home </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="l">i.pigsty }    </span><span class="w"> </span><span class="c"># default domain name</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"># domain names to access minio web console via nginx web portal (optional)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">minio        </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="nt">m.pigsty     ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.10:9001&#34;</span><span class="w"> </span><span class="nt">,scheme</span><span class="p">:</span><span class="w"> </span><span class="nt">https ,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">minio10      </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="nt">m10.pigsty   ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.10:9001&#34;</span><span class="w"> </span><span class="nt">,scheme</span><span class="p">:</span><span class="w"> </span><span class="nt">https ,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">minio11      </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="nt">m11.pigsty   ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.11:9001&#34;</span><span class="w"> </span><span class="nt">,scheme</span><span class="p">:</span><span class="w"> </span><span class="nt">https ,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">minio12      </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="nt">m12.pigsty   ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.12:9001&#34;</span><span class="w"> </span><span class="nt">,scheme</span><span class="p">:</span><span class="w"> </span><span class="nt">https ,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">minio13      </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="nt">m13.pigsty   ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.13:9001&#34;</span><span class="w"> </span><span class="nt">,scheme</span><span class="p">:</span><span class="w"> </span><span class="nt">https ,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</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">minio_endpoint</span><span class="p">:</span><span class="w"> </span><span class="l">https://sss.pigsty:9002  </span><span class="w"> </span><span class="c"># explicit overwrite minio endpoint with haproxy port</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_etc_hosts</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;10.10.10.9 sss.pigsty&#34;</span><span class="p">]</span><span class="w"> </span><span class="c"># domain name to access minio from all nodes (required)</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"># 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="w">    </span><span class="nt">minio_secret_key</span><span class="p">:</span><span class="w"> </span><span class="l">S3User.MinIO</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>


--------

## 配置解读

`demo/minio` 模板是对象存储生产部署的参考配置，展示了多节点多盘（MNMD）架构。其卷布局、HAProxy 健康检查与客户端仍使用 MinIO 兼容接口。

**关键特性**：
- **多节点多盘架构**：4 节点 × 4 盘 = 16 盘纠删码组
- **L2 VIP 高可用**：通过 Keepalived 绑定虚拟 IP
- **HAProxy 负载均衡**：9002 端口统一访问入口
- **细粒度权限**：为不同应用创建独立用户和存储桶

**访问方式**：

```bash
# 使用 mcli 配置 S3 别名（通过 HAProxy 负载均衡）
mcli alias set sss https://sss.pigsty:9002 minioadmin S3User.MinIO

# 列出存储桶
mcli ls sss/

# 使用控制台
# 访问 https://m.pigsty 或 https://m10-m13.pigsty
```

**适用场景**：
- 需要 S3 兼容对象存储的环境
- PostgreSQL 备份存储（pgBackRest 远程仓库）
- 大数据和 AI 工作负载的数据湖
- 需要高可用对象存储的生产环境

**注意事项**：
- 每个节点需要准备 4 块独立磁盘挂载到 `/data1` - `/data4`
- 生产环境建议至少 4 节点以实现纠删码冗余
- VIP 需要正确配置网络接口（`vip_interface`）
