<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[枯惠]]></title><description><![CDATA[枯苗望雨 惠然肯来]]></description><link>https://vqiu.cn/</link><image><url>https://vqiu.cn/favicon.png</url><title>枯惠</title><link>https://vqiu.cn/</link></image><generator>Ghost 4.6</generator><lastBuildDate>Sat, 22 Aug 2026 17:48:19 GMT</lastBuildDate><atom:link href="https://vqiu.cn/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[SSH 跳板机（Jump Host）实战：一行命令直达内网]]></title><description><![CDATA[<h2 id="%E5%89%8D%E8%A8%80">&#x524D;&#x8A00;</h2><p>&#x516C;&#x53F8;&#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#xFF0C;&#x7814;&#x53D1;&#x3001;&#x6D4B;&#x8BD5;&#x3001;&#x751F;&#x4EA7;&#x73AF;&#x5883;&#x5404;&#x4E00;&#x5957;&#xFF0C;&#x5168;&#x90FD;&#x8EB2;&#x5728; NAT &#x540E;&#x9762;&#x3002;</p><p>&#x4EE5;&#x524D;&#x7684;&#x505A;&#x6CD5;&#x662F;&#xFF1A;</p><pre><code class="language-bash"># &#x5148; SSH &#x5230;&#x8DF3;&#x677F;&#x673A;
ssh</code></pre>]]></description><link>https://vqiu.cn/jump-host-with-ssh/</link><guid isPermaLink="false">6a43e7bf2655a6000113814a</guid><category><![CDATA[奇技淫巧]]></category><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Tue, 30 Jun 2026 15:59:43 GMT</pubDate><content:encoded><![CDATA[<h2 id="%E5%89%8D%E8%A8%80">&#x524D;&#x8A00;</h2><p>&#x516C;&#x53F8;&#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#xFF0C;&#x7814;&#x53D1;&#x3001;&#x6D4B;&#x8BD5;&#x3001;&#x751F;&#x4EA7;&#x73AF;&#x5883;&#x5404;&#x4E00;&#x5957;&#xFF0C;&#x5168;&#x90FD;&#x8EB2;&#x5728; NAT &#x540E;&#x9762;&#x3002;</p><p>&#x4EE5;&#x524D;&#x7684;&#x505A;&#x6CD5;&#x662F;&#xFF1A;</p><pre><code class="language-bash"># &#x5148; SSH &#x5230;&#x8DF3;&#x677F;&#x673A;
ssh -p 2222 ops@103.25.xx.xx

# &#x518D;&#x4ECE;&#x8DF3;&#x677F;&#x673A; SSH &#x5230;&#x5185;&#x7F51;
ssh ops@10.88.3.25
</code></pre><p>&#x4E24;&#x53F0;&#x673A;&#x5668;&#x4E4B;&#x95F4;&#x6765;&#x56DE;&#x5207;&#xFF0C;&#x8FD8;&#x8981;&#x8BB0;&#x4F4F;&#x4E24;&#x5957;&#x5BC6;&#x94A5;&#xFF0C;&#x65F6;&#x95F4;&#x957F;&#x4E86;&#x70E6;&#x5F97;&#x4E00;&#x6279;&#x3002;</p><p>&#x540E;&#x6765;&#x53D1;&#x73B0; SSH &#x81EA;&#x5E26;&#x7684; <code>-J</code>&#xFF08;ProxyJump&#xFF09;&#x53C2;&#x6570;&#xFF0C;&#x4E00;&#x884C;&#x547D;&#x4EE4;&#x76F4;&#x8FBE;&#x5185;&#x7F51;&#xFF0C;&#x518D;&#x4E5F;<strong>&#x4E0D;&#x7528;&#x5728;&#x8DF3;&#x677F;&#x673A;&#x4E0A;&#x5F00;&#x7AEF;&#x53E3;&#x8F6C;&#x53D1;</strong>&#xFF0C;&#x4E5F;<strong>&#x4E0D;&#x7528;&#x624B;&#x52A8;&#x4E8C;&#x6B21; SSH</strong>&#x3002;</p><hr><h2 id="%E7%8E%AF%E5%A2%83%E6%8B%93%E6%89%91">&#x73AF;&#x5883;&#x62D3;&#x6251;</h2><pre><code>&#x4F60;&#xFF08;&#x529E;&#x516C;&#x7F51;&#xFF09;              &#x8DF3;&#x677F;&#x673A;&#xFF08;&#x516C;&#x7F51;&#xFF09;                 &#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668;
    &#x2502;                         &#x2502;                              &#x2502;
    &#x2502;  &#x4E0D;&#x80FD;&#x76F4;&#x8FDE;&#x5185;&#x7F51;            &#x2502;  103.25.xx.xx                &#x2502;  10.88.3.25
    &#x2502;  &#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2192;  &#x2502;  &#x4F5C;&#x4E3A;&#x8DF3;&#x677F;                    &#x2502;  &#x76EE;&#x6807;&#x670D;&#x52A1;&#x5668;
    &#x2502;                         &#x2502;  &#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2192;   &#x2502;
    &#x2502;                         &#x2502;                              &#x2502;
    &#x2502;  &#x25C4;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;  &#x2502;
    &#x2502;         &#x4E00;&#x884C;&#x547D;&#x4EE4;&#x76F4;&#x8FBE;&#xFF0C;&#x4E2D;&#x95F4;&#x8FC7;&#x7A0B; SSH &#x81EA;&#x52A8;&#x5904;&#x7406;              &#x2502;
</code></pre><h3 id="%E6%9C%BA%E5%99%A8%E4%BF%A1%E6%81%AF%EF%BC%88%E8%99%9A%E6%8B%9F-ip%EF%BC%89">&#x673A;&#x5668;&#x4FE1;&#x606F;&#xFF08;&#x865A;&#x62DF; IP&#xFF09;</h3><!--kg-card-begin: html--><table>
<thead>
<tr>
<th style="text-align: left">&#x89D2;&#x8272;</th>
<th style="text-align: left">IP</th>
<th style="text-align: left">&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">&#x529E;&#x516C;&#x673A;</td>
<td style="text-align: left">192.168.1.100</td>
<td style="text-align: left">&#x4F60;&#x7684;&#x7535;&#x8111;</td>
</tr>
<tr>
<td style="text-align: left">&#x8DF3;&#x677F;&#x673A;</td>
<td style="text-align: left">103.25.xx.xx</td>
<td style="text-align: left">&#x6709;&#x516C;&#x7F51; IP&#xFF0C;&#x5145;&#x5F53;&#x5165;&#x53E3;&#x7F51;&#x5173;</td>
</tr>
<tr>
<td style="text-align: left">&#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668; A</td>
<td style="text-align: left">10.88.3.25</td>
<td style="text-align: left">&#x7814;&#x53D1;&#x73AF;&#x5883;</td>
</tr>
<tr>
<td style="text-align: left">&#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668; B</td>
<td style="text-align: left">10.88.4.10</td>
<td style="text-align: left">&#x6D4B;&#x8BD5;&#x73AF;&#x5883;</td>
</tr>
<tr>
<td style="text-align: left">&#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668; C</td>
<td style="text-align: left">10.88.5.88</td>
<td style="text-align: left">&#x751F;&#x4EA7;&#x73AF;&#x5883;</td>
</tr>
</tbody>
</table><!--kg-card-end: html--><hr><h2 id="%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95">&#x57FA;&#x7840;&#x7528;&#x6CD5;</h2><h3 id="%E4%B8%80%E8%A1%8C%E5%91%BD%E4%BB%A4%E7%9B%B4%E8%BE%BE">&#x4E00;&#x884C;&#x547D;&#x4EE4;&#x76F4;&#x8FBE;</h3><pre><code class="language-bash"># &#x6700;&#x7B80;&#x5199;&#x6CD5;
ssh -J ops@103.25.xx.xx ops@10.88.3.25

# &#x5982;&#x679C;&#x8DF3;&#x677F;&#x673A;&#x548C;&#x76EE;&#x6807;&#x673A;&#x7AEF;&#x53E3;&#x90FD;&#x4E0D;&#x662F; 22
ssh -J ops@103.25.xx.xx:2222 ops@10.88.4.10:2222
</code></pre><h3 id="%E4%BC%A0%E6%96%87%E4%BB%B6%EF%BC%88scp%EF%BC%89">&#x4F20;&#x6587;&#x4EF6;&#xFF08;SCP&#xFF09;</h3><pre><code class="language-bash">scp -J ops@103.25.xx.xx ops@10.88.3.25:/data/backup.sql ./backup.sql
</code></pre><h3 id="%E6%8C%82%E8%BD%BD%E8%BF%9C%E7%A8%8B%E7%9B%AE%E5%BD%95%EF%BC%88sshfs%EF%BC%89">&#x6302;&#x8F7D;&#x8FDC;&#x7A0B;&#x76EE;&#x5F55;&#xFF08;SSHFS&#xFF09;</h3><pre><code class="language-bash">sshfs -o ProxyJump=ops@103.25.xx.xx ops@10.88.5.88:/data/logs /mnt/prod-logs
</code></pre><hr><h2 id="%E8%BF%9B%E9%98%B6%EF%BC%9A%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86">&#x8FDB;&#x9636;&#xFF1A;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x7BA1;&#x7406;</h2><p>&#x6BCF;&#x6B21;&#x6572;&#x4E00;&#x957F;&#x4E32; IP &#x548C;&#x7528;&#x6237;&#x592A;&#x53CD;&#x4EBA;&#x7C7B;&#xFF0C;&#x5199;&#x5230; <code>~/.ssh/config</code> &#x4E00;&#x52B3;&#x6C38;&#x9038;&#x3002;</p><h3 id="ssh-config-%E9%85%8D%E7%BD%AE">SSH Config &#x914D;&#x7F6E;</h3><pre><code class="language-bash"># ~/.ssh/config

# ===== &#x8DF3;&#x677F;&#x673A; =====
Host bastion
    HostName 103.25.xx.xx
    User ops
    Port 2222
    IdentityFile ~/.ssh/id_rsa_bastion
    ServerAliveInterval 60

# ===== &#x5185;&#x7F51;&#x670D;&#x52A1;&#x5668; =====
Host dev-server
    HostName 10.88.3.25
    User ops
    Port 22
    IdentityFile ~/.ssh/id_rsa_internal
    ProxyJump bastion

Host test-server
    HostName 10.88.4.10
    User ops
    Port 2222
    IdentityFile ~/.ssh/id_rsa_internal
    ProxyJump bastion

Host prod-server
    HostName 10.88.5.88
    User admin
    Port 22
    IdentityFile ~/.ssh/id_rsa_prod
    ProxyJump bastion
</code></pre><h3 id="%E6%9C%89%E4%BA%86-config-%E4%B9%8B%E5%90%8E">&#x6709;&#x4E86; config &#x4E4B;&#x540E;</h3><pre><code class="language-bash"># &#x76F4;&#x8FBE;&#x5185;&#x7F51;&#xFF0C;&#x4E0D;&#x7528;&#x8BB0; IP
ssh dev-server
ssh test-server
ssh prod-server

# &#x4F20;&#x6587;&#x4EF6;
scp dev-server:/data/backup.sql ./backup.sql

# &#x6302;&#x8F7D;&#x76EE;&#x5F55;
sshfs prod-server:/data/logs /mnt/prod-logs

# &#x914D;&#x7F6E;&#x91CC;&#x5DF2;&#x7ECF;&#x628A; ProxyJump &#x5199;&#x6B7B;&#x4E86;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x6BCF;&#x6B21; -J
</code></pre><hr><h2 id="%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7">&#x5E38;&#x7528;&#x6280;&#x5DE7;</h2><h3 id="1-%E5%A4%9A%E5%B1%82%E8%B7%B3%E6%9D%BF">1. &#x591A;&#x5C42;&#x8DF3;&#x677F;</h3><pre><code class="language-bash"># &#x4E09;&#x5C42;&#x8DF3;&#x677F;
ssh -J bastion,internal-jump,db-jump prod-db
</code></pre><h3 id="2-%E8%87%AA%E5%AE%9A%E4%B9%89%E7%AB%AF%E5%8F%A3%E8%B7%B3%E6%9D%BF">2. &#x81EA;&#x5B9A;&#x4E49;&#x7AEF;&#x53E3;&#x8DF3;&#x677F;</h3><pre><code class="language-bash">ssh -J ops@103.25.xx.xx:2222 ops@10.88.3.25:2222
</code></pre><h3 id="3-%E5%A4%9A%E5%8F%B0%E6%9C%BA%E5%99%A8%E5%90%8C%E6%97%B6%E8%BF%9E%EF%BC%88%E8%B7%B3%E6%9D%BF%E6%9C%BA%E5%8F%AA%E7%94%A8%E4%B8%80%E6%AC%A1%EF%BC%89">3. &#x591A;&#x53F0;&#x673A;&#x5668;&#x540C;&#x65F6;&#x8FDE;&#xFF08;&#x8DF3;&#x677F;&#x673A;&#x53EA;&#x7528;&#x4E00;&#x6B21;&#xFF09;</h3><pre><code class="language-bash"># &#x914D;&#x5408; tmux + ssh config&#xFF0C;&#x540C;&#x65F6;&#x8FDE; 3 &#x53F0;&#x670D;&#x52A1;&#x5668;
tmux new-window &quot;ssh dev-server&quot;
tmux split-window &quot;ssh test-server&quot;
tmux split-window &quot;ssh prod-server&quot;
</code></pre><h3 id="4-%E5%85%8D%E5%AF%86%EF%BC%9A%E6%8A%8A%E5%AF%86%E9%92%A5%E5%8A%A0%E5%88%B0-ssh-agent">4. &#x514D;&#x5BC6;&#xFF1A;&#x628A;&#x5BC6;&#x94A5;&#x52A0;&#x5230; ssh-agent</h3><pre><code class="language-bash"># &#x4E00;&#x6B21;&#x6027;&#x6DFB;&#x52A0;&#xFF0C;&#x5F53;&#x524D;&#x4F1A;&#x8BDD;&#x5185;&#x514D;&#x5BC6;&#x7801;
ssh-add ~/.ssh/id_rsa_bastion
ssh-add ~/.ssh/id_rsa_internal
ssh-add ~/.ssh/id_rsa_prod

# &#x7136;&#x540E;&#x6240;&#x6709; ssh/scp/sshfs &#x64CD;&#x4F5C;&#x90FD;&#x4E0D;&#x7528;&#x8F93;&#x5BC6;&#x7801;
</code></pre><h3 id="5-%E4%B8%8D%E6%83%B3%E9%85%8D-config%EF%BC%9F%E7%BB%99%E5%91%BD%E4%BB%A4%E8%B5%B7%E5%88%AB%E5%90%8D%E4%B9%9F%E8%A1%8C">5. &#x4E0D;&#x60F3;&#x914D; config&#xFF1F;&#x7ED9;&#x547D;&#x4EE4;&#x8D77;&#x522B;&#x540D;&#x4E5F;&#x884C;</h3><pre><code class="language-bash"># ~/.bashrc
alias ssh-dev=&apos;ssh -J ops@103.25.xx.xx ops@10.88.3.25&apos;
alias ssh-test=&apos;ssh -J ops@103.25.xx.xx ops@10.88.4.10&apos;
alias ssh-prod=&apos;ssh -J ops@103.25.xx.xx admin@10.88.5.88&apos;
</code></pre><hr><h2 id="%E5%AF%B9%E6%AF%94%EF%BC%9A%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91-vs-jump-host">&#x5BF9;&#x6BD4;&#xFF1A;&#x7AEF;&#x53E3;&#x8F6C;&#x53D1; vs Jump Host</h2><!--kg-card-begin: html--><table>
<thead>
<tr>
<th style="text-align: left"></th>
<th style="text-align: right">&#x7AEF;&#x53E3;&#x8F6C;&#x53D1;</th>
<th style="text-align: left">Jump Host</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">&#x914D;&#x7F6E;&#x590D;&#x6742;&#x5EA6;</td>
<td style="text-align: right">&#x6BCF;&#x53F0;&#x673A;&#x5668;&#x8981;&#x52A0;&#x89C4;&#x5219;</td>
<td style="text-align: left">&#x4E00;&#x884C;&#x547D;&#x4EE4;&#x641E;&#x5B9A;</td>
</tr>
<tr>
<td style="text-align: left">&#x5B89;&#x5168;&#x6027;</td>
<td style="text-align: right">&#x7AEF;&#x53E3;&#x66B4;&#x9732;&#x5728;&#x5916;&#x7F51;</td>
<td style="text-align: left">&#x53EA;&#x66B4;&#x9732;&#x8DF3;&#x677F;&#x673A;&#x4E00;&#x4E2A;&#x5165;&#x53E3;</td>
</tr>
<tr>
<td style="text-align: left">&#x7EF4;&#x62A4;&#x6210;&#x672C;</td>
<td style="text-align: right">&#x65B0;&#x589E;&#x673A;&#x5668;&#x8981;&#x6539; NAT &#x89C4;&#x5219;</td>
<td style="text-align: left">&#x52A0;&#x4E00;&#x6761; config &#x5C31;&#x884C;</td>
</tr>
<tr>
<td style="text-align: left">&#x539F;&#x751F;&#x652F;&#x6301;</td>
<td style="text-align: right">SSH &#x57FA;&#x7840;&#x529F;&#x80FD;</td>
<td style="text-align: left">SSH 7.3+ &#x81EA;&#x5E26;</td>
</tr>
<tr>
<td style="text-align: left">&#x4F20;&#x6587;&#x4EF6;</td>
<td style="text-align: right">SCP &#x4E5F;&#x8981;&#x8F6C;&#x53D1;</td>
<td style="text-align: left">&#x76F4;&#x63A5; <code>-J</code> &#x53C2;&#x6570;</td>
</tr>
<tr>
<td style="text-align: left">&#x591A;&#x4EBA;&#x534F;&#x4F5C;</td>
<td style="text-align: right">&#x6BCF;&#x4EBA;&#x8981;&#x914D;&#x7F6E;&#x5404;&#x81EA;&#x7684;&#x8F6C;&#x53D1;</td>
<td style="text-align: left">&#x5171;&#x4EAB;&#x8DF3;&#x677F;&#x673A;&#x5373;&#x53EF;</td>
</tr>
</tbody>
</table><!--kg-card-end: html--><hr><h2 id="%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9">&#x6CE8;&#x610F;&#x4E8B;&#x9879;</h2><pre><code class="language-yaml">1. &#x76EE;&#x6807;&#x673A;&#x7684; HostName &#x586B;&#x7684;&#x662F;&#x300C;&#x4ECE;&#x8DF3;&#x677F;&#x673A;&#x770B;&#x5230;&#x7684; IP&#x300D;
   &#x4E0D;&#x662F;&#x516C;&#x7F51; IP&#xFF0C;&#x662F;&#x5185;&#x7F51; IP&#xFF08;10.x.x.x / 172.x.x.x / 192.168.x.x&#xFF09;

2. SSH &#x7248;&#x672C;&#x8981;&#x6C42; &gt;= 7.3
   ssh -V &#x67E5;&#x770B;&#xFF0C;7.3 &#x4EE5;&#x4E0B;&#x7684;&#x7528; -o ProxyCommand &#x4EE3;&#x66FF;

3. &#x8DF3;&#x677F;&#x673A;&#x672C;&#x8EAB;&#x8981;&#x505A;&#x597D;&#x5B89;&#x5168;&#x52A0;&#x56FA;
   - &#x7981;&#x6B62;&#x5BC6;&#x7801;&#x767B;&#x5F55;&#xFF0C;&#x53EA;&#x5141;&#x8BB8;&#x5BC6;&#x94A5;
   - &#x9650;&#x5236;&#x6765;&#x6E90; IP
   - &#x5F00;&#x542F;&#x5BA1;&#x8BA1;&#x65E5;&#x5FD7;

4. &#x5BC6;&#x94A5;&#x94FE;&#x592A;&#x957F;&#x53EF;&#x4EE5;&#x7528; ssh-agent &#x8F6C;&#x53D1;
   ssh -A -J bastion dev-server
   &#xFF08;&#x8C28;&#x614E;&#x4F7F;&#x7528; -A&#xFF0C;&#x4F1A;&#x66B4;&#x9732;&#x4F60;&#x7684; agent socket&#xFF09;
</code></pre><hr><h2 id="%E5%90%8E%E8%AE%B0">&#x540E;&#x8BB0;</h2><p>&#x4EE5;&#x524D;&#x6211;&#x5728; Proxmox &#x4E0A;&#x8DD1;&#x4E86;&#x4E00;&#x5806;&#x865A;&#x62DF;&#x673A;&#xFF0C;&#x5168;&#x8EB2;&#x5728; NAT &#x540E;&#x9762;&#x3002;&#x7ED9;&#x6BCF;&#x4E2A; VM &#x914D;&#x7AEF;&#x53E3;&#x8F6C;&#x53D1;&#x89C4;&#x5219;&#xFF0C;&#x7EF4;&#x62A4;&#x8D77;&#x6765;&#x5934;&#x5927;&#x3002;</p><p>&#x81EA;&#x4ECE;&#x7528;&#x4E0A; <code>ssh -J</code>&#xFF0C;&#x914D;&#x7F6E;&#x4E00;&#x6B21; <code>~/.ssh/config</code> &#x4E4B;&#x540E;&#xFF0C;&#x8FDE;&#x5185;&#x7F51;&#x673A;&#x5668;&#x5C31;&#x8DDF;&#x8FDE;&#x672C;&#x5730;&#x4E00;&#x6837;&#x81EA;&#x7136;&#x3002;&#x8DF3;&#x677F;&#x673A;&#x8FD8;&#x662F;&#x90A3;&#x4E2A;&#x8DF3;&#x677F;&#x673A;&#xFF0C;&#x4F46;&#x4F60;&#x518D;&#x4E5F;&#x4E0D;&#x9700;&#x8981;&#x8BB0;&#x4F4F;&#x5B83;&#x7684;&#x7AEF;&#x53E3;&#x53F7;&#x4E86;&#x3002;</p><p>&#x5982;&#x679C;&#x4F60;&#x8FD8;&#x5728;&#x624B;&#x52A8; SSH &#x5230;&#x8DF3;&#x677F;&#x673A;&#x518D; SSH &#x5230;&#x76EE;&#x6807;&#x673A;&#xFF0C;&#x8D76;&#x7D27;&#x8BD5;&#x8BD5; <code>-J</code> &#x53C2;&#x6570;&#x2014;&#x2014;<strong>&#x5C11;&#x6572;&#x4E00;&#x6B21; SSH&#xFF0C;&#x591A;&#x559D;&#x4E00;&#x53E3;&#x8336;</strong>&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[Kubelet 开启 PodPidsLimit]]></title><description><![CDATA[<p></p><h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x907F;&#x514D;&#x67D0;&#x5E94;&#x7528;&#x6CC4;&#x9732;&#x95EE;&#x9898;&#x5BFC;&#x81F4;&#x6574;&#x4E2A;&#x96C6;&#x7FA4;&#x4E0D;&#x53EF;&#x7528;&#xFF0C;&#x5C06;&#x9488;&#x5BF9;&#x96C6;&#x7FA4;&#x4E2D;&#x7684;Pod&#x6700;&#x5927;&#x53EA;&#x80FD;&#x8FD0;&#x884C;4096&#x4E2A;&#x8FDB;&#x7A0B;&#x3002;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h2><p></p><p>kubelet &#x4E2D;&#x8FFD;&#x52A0;&#x4EE5;&#x4E0B;&#x53C2;&#x6570;</p>]]></description><link>https://vqiu.cn/podpidslimit/</link><guid isPermaLink="false">6a34034f2655a60001138102</guid><category><![CDATA[kubernetes]]></category><category><![CDATA[奇技淫巧]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Thu, 18 Jun 2026 14:57:57 GMT</pubDate><content:encoded><![CDATA[<p></p><h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x907F;&#x514D;&#x67D0;&#x5E94;&#x7528;&#x6CC4;&#x9732;&#x95EE;&#x9898;&#x5BFC;&#x81F4;&#x6574;&#x4E2A;&#x96C6;&#x7FA4;&#x4E0D;&#x53EF;&#x7528;&#xFF0C;&#x5C06;&#x9488;&#x5BF9;&#x96C6;&#x7FA4;&#x4E2D;&#x7684;Pod&#x6700;&#x5927;&#x53EA;&#x80FD;&#x8FD0;&#x884C;4096&#x4E2A;&#x8FDB;&#x7A0B;&#x3002;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h2><p></p><p>kubelet &#x4E2D;&#x8FFD;&#x52A0;&#x4EE5;&#x4E0B;&#x53C2;&#x6570;</p><pre><code># cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=&quot;--pod-max-pids=4096&quot;</code></pre><p></p><p>&#x91CD;&#x542F;&#x751F;&#x6548;</p><pre><code># systemctl restart kubelet</code></pre><p></p><p>&#x9A8C;&#x8BC1;</p><pre><code># kubectl get --raw /api/v1/nodes/&#x4E3B;&#x673A;&#x540D;/proxy/configz | jq .kubeletconfig.podPidsLimit</code></pre><p></p><p></p><h2 id="%E9%AA%8C%E8%AF%81%E5%AE%9E%E4%BE%8B">&#x9A8C;&#x8BC1;&#x5B9E;&#x4F8B;</h2><p></p><p>&#x5728;&#x96C6;&#x7FA4;&#x4E2D;&#x521B;&#x5EFA;&#x4EE5;&#x4E0B;Pod&#x5E94;&#x7528;</p><pre><code>apiVersion: v1
kind: Pod
metadata:
  name: pids-stress-test
spec:
  restartPolicy: Never
  containers:
  - name: pids-stress
    image: registry.cn-shenzhen.aliyuncs.com/shuhui/busybox:1.37.0
    command:
    - /bin/sh
    - -c
    - |
      echo &quot;=== PID&#x4E0A;&#x9650;&#x6D4B;&#x8BD5; ===&quot;
      echo &quot;&#x5F53;&#x524D; pids.max: $(cat /sys/fs/cgroup/pids/pids.max 2&gt;/dev/null)&quot;
      echo &quot;&quot;
      echo &quot;&#x5F00;&#x59CB;&#x6D88;&#x8017;&#x8FDB;&#x7A0B;&#x6570;...&quot;
      i=0
      while true; do
        i=$((i+1))
        (
          # &#x6A21;&#x62DF;&#x5E38;&#x9A7B;&#x8FDB;&#x7A0B;
          sleep infinity
        ) &amp;
        echo &quot;&#x5DF2;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6570;: $i&quot;
        sleep 0.001
      done</code></pre><p></p><p>&#x67E5;&#x770B;&#x65E5;&#x5FD7;</p><pre><code># k logs -f pids-stress-test
...
&#x5DF2;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6570;: 4090
&#x5DF2;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6570;: 4091
&#x5DF2;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6570;: 4092
&#x5DF2;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6570;: 4093
&#x5DF2;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#x6570;: 4094
/bin/sh: can&apos;t fork: Resource temporarily unavailable</code></pre><p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x89E6;&#x53D1;&#x9608;&#x503C;&#x540E;Pod&#x7ACB;&#x9A6C;&#x88AB;&#x4E2D;&#x65AD;</p><p></p><p>&#x53E6;&#x4E00;&#x79CD;&#x9A8C;&#x8BC1;</p><pre><code> # kubectl get pods pids-stress-test -o yaml | grep -E &apos;uid|qos&apos;
  uid: a65a278d-6960-4b78-99c3-bd1e6a460541
  qosClass: BestEffort
  

# systemctl |grep a65a278d |grep -i BestEffort
  kubepods-besteffort-poda65a278d_6960_4b78_99c3_bd1e6a460541.slice                                                                                                   loaded active active    libcontainer container kubepods-besteffort-poda65a278d_6960_4b78_99c3_bd1e6a460541.slice</code></pre><p></p><p>&#x627E;&#x5230;&#x5BF9;&#x5E94;&#x7684;systemd&#x63A7;&#x5236;&#x540D;&#x79F0;&#x540E;&#xFF0C;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x6765;&#x9A8C;&#x8BC1;</p><pre><code># systemctl cat kubepods-besteffort-poda65a278d_6960_4b78_99c3_bd1e6a460541.slice | grep -i tasksmax
# /run/systemd/transient/kubepods-besteffort-poda65a278d_6960_4b78_99c3_bd1e6a460541.slice.d/50-TasksMax.conf
TasksMax=4096</code></pre><blockquote>&#x63D0;&#x793A;&#xFF1A;&#x53D1;&#x73B0;&#x5DF2;&#x7ECF;&#x8FFD;&#x52A0;&#x4E86;&#x5728;kubelet&#x4E2D;&#x58F0;&#x660E;&#x7684;4096&#xFF01;</blockquote><p></p><p>&#x901A;&#x8FC7;&#x5BF9;&#x5E94;cgroup&#x6765;&#x9A8C;&#x8BC1;</p><pre><code># find  /sys/fs/cgroup/ -name &quot;*a65a278d*&quot;
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-poda65a278d_6960_4b78_99c3_bd1e6a460541.slice
[root@kube-m-01 stress]# cat /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-poda65a278d_6960_4b78_99c3_bd1e6a460541.slice/pids.max
4096</code></pre>]]></content:encoded></item><item><title><![CDATA[Windows 平台下的域名条件转发]]></title><description><![CDATA[<p>NRPT&#xFF08;Name Resolution Policy Table&#xFF0C;&#x540D;&#x79F0;&#x89E3;&#x6790;&#x7B56;&#x7565;&#x8868;&#xFF09;&#x662F; <strong>Windows &#x7CFB;&#x7EDF;&#xFF08;Vista&#x53CA;&#x4EE5;&#x540E;&#x7248;&#x672C;&#xFF09;</strong> &#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x9AD8;&#x7EA7;&#x7F51;&#x7EDC;&#x529F;&#x80FD;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x7BA1;&#x7406;&#x5458;&#x4E3A;<strong>&#x4E0D;&#x540C;&#x7684;&#x57DF;&#x540D;</strong></p>]]></description><link>https://vqiu.cn/windows-nrpt/</link><guid isPermaLink="false">6984597a7967c50001c95962</guid><category><![CDATA[奇技淫巧]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Thu, 05 Feb 2026 08:56:55 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2026/02/----_20260205165547_178_250.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://vqiu.cn/content/images/2026/02/----_20260205165547_178_250.jpg" alt="Windows &#x5E73;&#x53F0;&#x4E0B;&#x7684;&#x57DF;&#x540D;&#x6761;&#x4EF6;&#x8F6C;&#x53D1;"><p>NRPT&#xFF08;Name Resolution Policy Table&#xFF0C;&#x540D;&#x79F0;&#x89E3;&#x6790;&#x7B56;&#x7565;&#x8868;&#xFF09;&#x662F; <strong>Windows &#x7CFB;&#x7EDF;&#xFF08;Vista&#x53CA;&#x4EE5;&#x540E;&#x7248;&#x672C;&#xFF09;</strong> &#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x9AD8;&#x7EA7;&#x7F51;&#x7EDC;&#x529F;&#x80FD;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x7BA1;&#x7406;&#x5458;&#x4E3A;<strong>&#x4E0D;&#x540C;&#x7684;&#x57DF;&#x540D;&#x914D;&#x7F6E;&#x4E0D;&#x540C;&#x7684;DNS&#x89E3;&#x6790;&#x7B56;&#x7565;</strong>&#x3002;</p><p>Linux &#x5E73;&#x53F0;&#x4E0B;&#x5C31;&#x4E30;&#x5BCC;&#x4E86;&#xFF0C;&#x6BD4;&#x5982;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<code>systemd-resolved</code><strong>&#x3001;</strong><code>dnsmasq</code>&#x6765;&#x5B9E;&#x73B0;&#x3002;</p><p>&#x67E5;&#x770B;&#x5F53;&#x524D;&#x7CFB;&#x7EDF;&#x7684;NRPT&#x7B56;&#x7565;</p><pre><code>CMD &gt; netsh namespace show effectivepolicy
</code></pre><h2 id="%E5%BA%94%E7%94%A8%E7%A4%BA%E4%BE%8B">&#x5E94;&#x7528;&#x793A;&#x4F8B;</h2><p>&#x5185;&#x90E8;&#x6709;&#x4E2A;<code>vqiu.local</code>&#x7684;&#x57DF;&#x540D;&#xFF0C;&#x53EA;&#x6709;&#x5185;&#x7F51;&#x7684;DNS&#x670D;&#x52A1;&#x5668;&#x624D;&#x80FD;&#x89E3;&#x6790;&#xFF0C;&#x540C;&#x65F6;&#x53C8;&#x4E0D;&#x5E0C;&#x671B;&#x5168;&#x90E8;&#x4EBA;&#x90FD;&#x80FD;&#x89E3;&#x6790;&#x3002;</p><p>1&#x3001;&#x5C06;<code>vqiu.local</code>&#x8FD9;&#x4E2A;&#x57DF;&#x540D;&#x7684;&#x89E3;&#x6790;&#x5168;&#x90E8;&#x53D1;&#x9001;&#x5230;172.20.5.153&#x8282;&#x70B9;&#x89E3;&#x6790;&#x3002;</p><pre><code>PS C:\Windows\system32&gt; Add-DnsClientNrptRule -Namespace &quot;.vqiu.local&quot; -NameServers &quot;172.20.5.153&quot;
</code></pre><p></p><p>2&#x3001;&#x6B64;&#x65F6;&#x8BE5;&#x8282;&#x70B9;&#x5C31;&#x5177;&#x5907;&#x9488;&#x5BF9;<code>vqiu.local</code>&#x5B58;&#x50A8;&#x7684;&#x57DF;&#x540D;&#x8BB0;&#x5F55;&#x8FDB;&#x884C;&#x89E3;&#x6790;&#x4E86;</p><pre><code>CMD &gt; ping xx.vqiu.local
</code></pre><p></p><p>3&#x3001;&#x67E5;&#x770B;&#x5DF2;&#x5B58;&#x5728;&#x7684;NRPT&#x89C4;&#x5219;</p><pre><code>PS C:\Windows\system32&gt; Get-DnsClientNrptPolicy
Namespace                        : .vqiu.local
&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;
DirectAccessProxyType            : NoProxy
DirectAccessQueryIPsecEncryption :
DirectAccessQueryIPsecRequired   : False
NameServers                      : 172.20.5.153
&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;


PS C:\Windows\system32&gt; Get-DnsClientNrptRule
&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;
Namespace                        : {.vqiu.local}
&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;
NameServers                      : 172.20.5.153
&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;


CMD &gt; netsh namespace show effectivepolicy
.vqiu.local &#x7684;&#x8BBE;&#x7F6E;
----------------------------------------------------------------------
&#x901A;&#x7528;(DNS &#x670D;&#x52A1;&#x5668;)                   : 172.20.5.153
&#x901A;&#x7528;(VPN &#x89E6;&#x53D1;&#x5668;)                   : disabled
</code></pre><p></p><p>4&#x3001;&#x5220;&#x9664;<code>.vqiu.local</code>&#x57DF;&#x540D;&#x8F6C;&#x53D1;&#x89C4;&#x5219;</p><pre><code>Remove-DnsClientNrptRule -Name &quot;&quot;{83E7E2E8-4D8D-4FB0-9F85-4FAC3416700A}&quot; 
&#x6216;&#x8005;
Get-DnsClientNrptRule | Where-Object { $_.Namespace -eq &apos;.vqiu.local&apos; } | Remove-DnsClientNrptRule
</code></pre><h2 id="%E7%BB%93%E5%90%88openvpn">&#x7ED3;&#x5408;OpenVPN</h2><p>&#x524D;&#x7F6E;&#x6761;&#x4EF6;</p><pre><code># &#x6307;&#x5B9A;VPN&#x63D0;&#x4F9B;&#x7684;DNS&#x670D;&#x52A1;&#x5668;
dhcp-option DNS 172.20.5.153
# &#x786E;&#x4FDD;&#x6CA1;&#x6709;&#x4E0B;&#x9762;&#x8FD9;&#x884C;&#xFF08;&#x6216;&#x524D;&#x9762;&#x52A0;#&#x6CE8;&#x91CA;&#x6389;&#xFF09;
# block-outside-dns
</code></pre><p>&#x5728;ovpn&#x6587;&#x4EF6;&#x4E2D;&#x6DFB;&#x52A0;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>script-security 2
up &apos;powershell -ExecutionPolicy Bypass -File &quot;C:\Path\To\vpn-up.ps1&quot;&apos;
down &apos;powershell -ExecutionPolicy Bypass -File &quot;C:\Path\To\vpn-down.ps1&quot;&apos;
</code></pre><p></p><h2 id="%E5%90%8E%E8%AF%AD">&#x540E;&#x8BED;</h2><p>&#x963F;&#x91CC;&#x4E91;&#x7684;&#x65E0;&#x5F71;&#x4E91;&#x9ED8;&#x8BA4;&#x4E5F;&#x5B58;&#x5728;&#x4E0D;&#x5C11;&#x7684;NRPT&#x7B56;&#x7565;&#xFF0C;&#x8FD9;&#x6837;&#x80FD;&#x907F;&#x514D;&#x7528;&#x6237;&#x4FEE;&#x6539;DNS&#x5BFC;&#x81F4;&#x57FA;&#x7840;&#x73AF;&#x5883;&#x51FA;&#x6545;&#x969C;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[源代码编译安装redis]]></title><description><![CDATA[<h2 id="%E4%B8%80%E3%80%81%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83">&#x4E00;&#x3001;&#x7CFB;&#x7EDF;&#x73AF;&#x5883;</h2><ul><li>OS&#xFF1A; Openeuler 24.03 LTS</li><li>Redis&#x7248;&#x672C;&#xFF1A;7.2.12</li><li>&#x67B6;&#x6784;&#xFF1A;&#x54E8;&#x5175;&#x6A21;&#x5F0F;</li><li>&#x76EE;&#x5F55;&#x89C4;&#x5212;&#xFF1A;</li><li>/data/redis/DATA</li><li>/data/redis/LOGS</li></ul><h2 id="%E4%BA%8C%E3%80%81%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE">&#x4E8C;&#x3001;&#x7CFB;&#x7EDF;&#x914D;&#x7F6E;</h2><h3 id="21-%E5%89%8D%E7%BD%AE%E9%85%8D%E7%BD%AE">2.1 &#x524D;&#x7F6E;&#x914D;&#x7F6E;</h3><p>1&</p>]]></description><link>https://vqiu.cn/redis-deploy-with-tarball/</link><guid isPermaLink="false">6970a0757967c50001c95954</guid><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Wed, 21 Jan 2026 09:50:51 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2026/01/----_20260121175021_173_250.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="%E4%B8%80%E3%80%81%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83">&#x4E00;&#x3001;&#x7CFB;&#x7EDF;&#x73AF;&#x5883;</h2><ul><li>OS&#xFF1A; Openeuler 24.03 LTS</li><li>Redis&#x7248;&#x672C;&#xFF1A;7.2.12</li><li>&#x67B6;&#x6784;&#xFF1A;&#x54E8;&#x5175;&#x6A21;&#x5F0F;</li><li>&#x76EE;&#x5F55;&#x89C4;&#x5212;&#xFF1A;</li><li>/data/redis/DATA</li><li>/data/redis/LOGS</li></ul><h2 id="%E4%BA%8C%E3%80%81%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE">&#x4E8C;&#x3001;&#x7CFB;&#x7EDF;&#x914D;&#x7F6E;</h2><h3 id="21-%E5%89%8D%E7%BD%AE%E9%85%8D%E7%BD%AE">2.1 &#x524D;&#x7F6E;&#x914D;&#x7F6E;</h3><img src="https://vqiu.cn/content/images/2026/01/----_20260121175021_173_250.jpg" alt="&#x6E90;&#x4EE3;&#x7801;&#x7F16;&#x8BD1;&#x5B89;&#x88C5;redis"><p>1&#x3001;&#x7CFB;&#x7EDF;&#x5185;&#x6838;</p><pre><code>echo 65535 &gt; /proc/sys/net/core/somaxconn
echo 1 &gt; /proc/sys/vm/overcommit_memory

sysctl -w net.core.somaxconn=65535
sysctl -w vm.overcommit_memory=1
echo &quot;net.core.somaxconn = 65535&quot; | tee -a /etc/sysctl.d/99-redis.conf
echo &quot;vm.overcommit_memory = 1&quot; | tee -a /etc/sysctl.d/99-redis.conf
</code></pre><p>2&#x3001;&#x5B89;&#x88C5;&#x7CFB;&#x7EDF;&#x4F9D;&#x8D56;&#x5305;</p><pre><code>yum -y install yum install make gcc gcc-c++
</code></pre><p>3&#x3001;&#x521B;&#x5EFA;&#x7528;&#x6237;</p><pre><code>id redis || useradd -u 6379 redis -s /sbin/nologin -M
</code></pre><p>4&#x3001;&#x521B;&#x5EFA;&#x6570;&#x636E;&#x76EE;&#x5F55;</p><pre><code>install -d /data/redis/DATA \
           /data/redis/LOGS \
           -o redis \
           -g redis
</code></pre><h3 id="22-redis-%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85">2.2 Redis &#x7F16;&#x8BD1;&#x5B89;&#x88C5;</h3><p>1&#x3001;&#x4E0B;&#x8F7D;</p><pre><code>export version=7.2.12
wget http://download.redis.io/releases/redis-${version}.tar.gz
tar axvf redis-${version}.tar.gz
cd redis-${version}
</code></pre><p>2&#x3001;&#x7F16;&#x8BD1;&#x5B89;&#x88C5;</p><pre><code>make distclean
make BUILD_TLS=no -j $(nproc --all)
make PREFIX=/usr/local/redis-${version} install
cd /usr/local/ &amp;&amp; ln -svf redis-${version} redis
</code></pre><blockquote>&#x9ED8;&#x8BA4;&#x4F7F;&#x7528;jemalloc&#x5206;&#x914D;&#x5668;&#xFF0C;&#x6240;&#x4EE5;&#x5148;&#x5B89;&#x88C5;jemalloc&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x5668;</blockquote><pre><code>cd deps/jemalloc
./configure &amp;&amp; make -j 8 &amp;&amp; make install
</code></pre><p>3&#x3001;&#x5B8C;&#x6210;&#x540E;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x68C0;&#x6D4B;&#x7248;&#x672C;</p><pre><code>./redis-server --version                                                               
Redis server v=7.2.12 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=67aa91aee02876f6
</code></pre><p>4&#x3001;&#x521B;&#x5EFA;&#x7CFB;&#x7EDF;&#x73AF;&#x5883;&#x53D8;&#x91CF;</p><pre><code>cat &gt;/etc/profile.d/redis.sh&lt;&lt;EOF
export PATH=\$PATH:/usr/local/redis/bin
EOF
</code></pre><p>5&#x3001;&#x521B;&#x5EFA;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p><pre><code>cat &gt;/etc/redis.conf &lt;&lt;EOF
### GENERAL CONFIGURATION
bind 0.0.0.0
port 6379
maxclients 20000
daemonize no
supervised no
protected-mode no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile &quot;/data/redis/LOGS/redis.log&quot;
databases 16
always-show-logo yes
maxmemory 0
maxmemory-policy volatile-lru

### &#x6301;&#x4E45;&#x5316;
dir &quot;/data/redis/DATA&quot;
dbfilename dump.rdb
aof-use-rdb-preamble yes
appendonly yes
appendfsync everysec
appenddirname &quot;appenddir&quot;
appendfilename &quot;appendonly.aof&quot;
save 900 1
save 300 10
save 60 10000

### SAFE CONFIGURE
# &#x7981;&#x6B62;&#x4F7F;&#x7528;FLUSHALL
rename-command FLUSHALL &quot;&quot;

# &#x81F3;&#x5C11;&#x9700;&#x8981;1&#x53F0;&#x5065;&#x5EB7;&#x7684;&#x4ECE;&#x8282;&#x70B9;&#xFF0C;&#x4E3B;&#x8282;&#x70B9;&#x624D;&#x80FD;&#x5199;&#x5165;
min-replicas-to-write 1
# &#x5EF6;&#x8FDF;&#x5C0F;&#x4E8E;5&#x79D2;slave&#x624D;&#x5224;&#x5B9A;&#x4E3A;&#x5065;&#x5EB7;slave
min-replicas-max-lag 5

### REPLICATION
replica-serve-stale-data yes
replica-read-only yes

#replicaof 172.20.5.11 6379
#slave-announce-port 6379
#slave-announce-ip 10.96.200.25
EOF
</code></pre><p>6&#x3001;&#x521B;&#x5EFA;systemd&#x6587;&#x4EF6;</p><pre><code>cat &gt;/usr/lib/systemd/system/redis.service&lt;&lt;EOF
[Unit]
Description=redis-server
After=network.target

[Service]
Type=simple
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis.conf \
                                            --daemonize no \
                                            --supervised systemd
ExecStop=/usr/local/redis/bin/redis-cli shutdown
LimitNOFILE=65535
NoNewPrivileges=yes
OOMScoreAdjust=-900
TimeoutStartSec=infinity
TimeoutStopSec=infinity
UMask=0077
WorkingDirectory=/data/redis

[Install]
WantedBy=multi-user.target
EOF
</code></pre><p>7&#x3001;&#x542F;&#x52A8;&#x670D;&#x52A1;</p><pre><code># systemctl enable redis --now
</code></pre><h2 id="%E4%B8%89%E3%80%81sentinel%E6%9E%B6%E6%9E%84%E9%85%8D%E7%BD%AE">&#x4E09;&#x3001;Sentinel&#x67B6;&#x6784;&#x914D;&#x7F6E;</h2><h3 id="31-%E5%88%9B%E5%BB%BA%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6">3.1 &#x521B;&#x5EFA;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</h3><p>1&#x3001;&#x5199;&#x5165;sentinel&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p><pre><code>cat &gt;/etc/redis-sentinel.conf&lt;&lt;EOF
protected-mode no       
supervised systemd
port 26379
daemonize no
maxclients 10000
pidfile &quot;/var/run/redis-sentinel.pid&quot;
loglevel notice
logfile &quot;/data/redis/LOGS/sentinel.log&quot;
dir &quot;/tmp&quot;

sentinel monitor mymaster 110.10.2.41 6379 2
sentinel auth-pass mymaster vqiu@8848

sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 15000
EOF
</code></pre><p>2&#x3001;&#x521B;&#x5EFA;systemd&#x6587;&#x4EF6;</p><pre><code>cat &gt;/usr/lib/systemd/system/redis-sentinel.service&lt;&lt;EOF
[Unit]
Description=Redis Sentinel
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/redis/bin/redis-sentinel /etc/redis-sentinel.conf --supervised systemd
ExecStop=/usr/local/redis/bin/redis-cli -p 26379 shutdown
LimitNOFILE=10240

[Install]
WantedBy=multi-user.target
EOF
</code></pre><h3 id="32-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1">3.2 &#x542F;&#x52A8;&#x670D;&#x52A1;</h3><pre><code>systemctl restart redis-sentinel
</code></pre><h3 id="33-%E6%B5%8B%E8%AF%95">3.3 &#x6D4B;&#x8BD5;</h3><pre><code># redis-cli -p 26379 sentinel master mymaster
# redis-cli -p 26379 sentinel slaves mymaster
# redis-cli -p 26379 sentinel sentinels mymaster
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
</code></pre><h2 id="%E5%9B%9B%E3%80%81%E4%BD%BF%E7%94%A8haproxy%E4%BB%A3%E7%90%86%E5%8F%AF%E9%80%89">&#x56DB;&#x3001;&#x4F7F;&#x7528;Haproxy&#x4EE3;&#x7406;[&#x53EF;&#x9009;]</h2><p>&#x5728;&#x54E8;&#x5175;&#x524D;&#x9762;&#x6DFB;&#x7F6E;&#x4E00;&#x4E2A;haproxy&#xFF0C;&#x6765;&#x517C;&#x987E;&#x652F;&#x6301;&#x975E;&#x54E8;&#x5175;&#x6A21;&#x5F0F;&#x7684;&#x5E94;&#x7528;&#x3002;</p><pre><code>cat &gt;/etc/haproxy/haproxy.cfg&lt;&lt;EOF
frontend Redis
    bind            0.0.0.0:6379  name redis-server
    mode            tcp
    log             global
    timeout client  30000
    default_backend redis_backend

backend redis_backend
    mode            tcp
    timeout connect 30000
    timeout server  30000
    retries         3
    option          tcp-check
    tcp-check       connect
    tcp-check       send AUTH\ vqiu@8848\r\n
    tcp-check       send PING\r\n
    tcp-check       expect string +PONG
    tcp-check       send info\ replication\r\n
    tcp-check       expect string role:master
    tcp-check       send QUIT\r\n
    tcp-check       expect string +OK
    server          r1 172.20.5.11:6379 check inter 1000 maxconn 4096
    server          r2 172.20.5.12:6379 check inter 1000 maxconn 4096
    server          r3 172.20.5.13:6379 check inter 1000 maxconn 4096

frontend stats
    mode            http
    bind            *:8848
    stats           enable
    stats           uri /stats
    stats           refresh 10s
    timeout connect 30000
    timeout server  30000
</code></pre><p>&#x6D4B;&#x8BD5;</p><pre><code>127.0.0.1:6379&gt; SET domain vqiu.cn
OK
127.0.0.1:6379&gt; get domain
&quot;vqiu.cn&quot;
</code></pre><h2 id="%E5%8F%82%E8%80%83%E5%BC%95%E7%94%A8">&#x53C2;&#x8003;&#x5F15;&#x7528;</h2><ul><li>&#x3010;1&#x3011; <a href="https://vqiu.cn/redis-sentinel-deployment/">https://vqiu.cn/redis-sentinel-deployment/</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Redis cluster部署摘要]]></title><description><![CDATA[<p><br></p><h4 id="%E8%8A%82%E7%82%B9%E6%8B%93%E6%89%91"><strong>&#x8282;&#x70B9;&#x62D3;&#x6251;</strong></h4><ul><li>prod-redis-01&#xFF1A;10.10.76.1</li><li>prod-redis-02&#xFF1A;10.10.76.2</li><li>prod-redis-03&#xFF1A;10.10.76.3</li><li>prod-redis-04&#xFF1A;10.10.76.4</li><li>prod-redis-05&#xFF1A;10.10.76.5</li><li>prod-redis-06&#xFF1A;10.10.76.6<br></li></ul><p>&#x5185;&#x6838;&#x4F18;&#x5316;</p><pre><code class="language-shell">sysctl -w vm.overcommit_memory=1</code></pre>]]></description><link>https://vqiu.cn/redis-cluster-deploy/</link><guid isPermaLink="false">69708a627967c50001c9591b</guid><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Fri, 16 Jan 2026 08:33:00 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2026/01/----_20260121171031_172_250.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://vqiu.cn/content/images/2026/01/----_20260121171031_172_250.jpg" alt="Redis cluster&#x90E8;&#x7F72;&#x6458;&#x8981;"><p><br></p><h4 id="%E8%8A%82%E7%82%B9%E6%8B%93%E6%89%91"><strong>&#x8282;&#x70B9;&#x62D3;&#x6251;</strong></h4><ul><li>prod-redis-01&#xFF1A;10.10.76.1</li><li>prod-redis-02&#xFF1A;10.10.76.2</li><li>prod-redis-03&#xFF1A;10.10.76.3</li><li>prod-redis-04&#xFF1A;10.10.76.4</li><li>prod-redis-05&#xFF1A;10.10.76.5</li><li>prod-redis-06&#xFF1A;10.10.76.6<br></li></ul><p>&#x5185;&#x6838;&#x4F18;&#x5316;</p><pre><code class="language-shell">sysctl -w vm.overcommit_memory=1</code></pre><p><br></p><h4 id="%E7%9B%AE%E5%BD%95%E8%A7%84%E5%88%92">&#x76EE;&#x5F55;&#x89C4;&#x5212;</h4><ul><li>/data/redis/DATA</li><li>/data/redis/LOG<br></li></ul><h4 id="redis-%E5%AE%89%E8%A3%85">redis &#x5B89;&#x88C5;</h4><pre><code class="language-bash">yum -y install yum install make gcc gcc-c++
id redis || useradd -u 6379 redis -s /sbin/nologin -M

export version=7.2.12
wget http://download.redis.io/releases/redis-${version}.tar.gz
tar axvf redis-${version}.tar.gz
cd redis-${version}


make distclean
make BUILD_TLS=no -j $(nproc --all)
make PREFIX=/usr/local/redis-${version} install
cd /usr/local/ &amp;&amp; ln -svf redis-${version} redis</code></pre><p><br></p><h4 id="%E9%85%8D%E7%BD%AEredis">&#x914D;&#x7F6E;redis<br></h4><p>&#x5199;&#x5165;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p><pre><code class="language-python">cat &gt;/etc/redis-cluster/redis.conf &lt;&lt;EOF
### GENERAL CONFIGURATION
bind 0.0.0.0
port 6379
requirepass &quot;QIU@8848&quot;
masterauth &quot;QIU@8848&quot;
daemonize no
supervised no
maxclients 100000
protected-mode no
dir &quot;/data/redis/DATA&quot;
loglevel notice
logfile &quot;/data/redis/LOG/redis.log&quot;

# &#x6700;&#x5927;&#x53EF;&#x4F7F;&#x7528;&#x7684;&#x5185;&#x5B58;
maxmemory 12G
maxmemory-policy volatile-lru

# &#x5F00;&#x542F;AOF&#x6301;&#x4E45;&#x5316;
appendonly yes
appendfsync everysec

# &#x5F00;&#x542F;&#x96C6;&#x7FA4;&#x6A21;&#x5F0F;
cluster-enabled yes

# &#x96C6;&#x7FA4;&#x8282;&#x70B9;&#x914D;&#x7F6E;&#x6587;&#x4EF6;
cluster-config-file  &quot;/etc/redis-cluster/nodes.conf&quot;

# &#x96C6;&#x7FA4;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#x8BBE;&#x7F6E;
cluster-node-timeout 10000
EOF</code></pre><p><br>&#x5199;&#x5165;systemd</p><pre><code class="language-xml">cat &gt;/usr/lib/systemd/system/redis-cluster.service&lt;&lt;EOF
[Unit]
Description=redis-server
After=network.target

[Service]
Type=simple
User=root
Group=root
TimeoutStopSec=0
Restart=always
ExecStart=/usr/local/redis/bin/redis-server /etc/redis-cluster/redis.conf --supervised systemd
ExecStop=/usr/local/redis/bin/redis-cli shutdown
OOMScoreAdjust=-900
UMask=0077
RuntimeDirectoryMode=2755
PrivateTmp=yes
LimitNOFILE=131070
PrivateDevices=yes
ProtectHome=yes
WorkingDirectory=/data/redis

[Install]
WantedBy=multi-user.target
EOF</code></pre><p><br><br>&#x5728;&#x4EFB;&#x610F;&#x4E00;&#x53F0;&#x6267;&#x884C;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-shell">redis-cli -a QIU@8848 --cluster create 10.10.76.1:6379 \
                                       10.10.76.2:6379 \
                                       10.10.76.3:6379 \
                                       10.10.76.4:6379 \
                                       10.10.76.5:6379 \
                                       10.10.76.6:6379 \
                                       --cluster-replicas 1 </code></pre><p><br><br></p><h4 id="325-redis-%E6%B5%8B%E8%AF%95">3.2.5 Redis &#x6D4B;&#x8BD5;</h4><pre><code class="language-shell"># &#x8FDB;&#x5165;redis&#x8282;&#x70B9;
redis-cli -h 10.10.76.1 -a QIU@8848

# &#x67E5;&#x770B;&#x96C6;&#x7FA4;&#x76F8;&#x5173;&#x4FE1;&#x606F;
cluster info

# &#x67E5;&#x770B;&#x8282;&#x70B9;&#x76F8;&#x5173;&#x4FE1;&#x606F;
cluster nodes</code></pre>]]></content:encoded></item><item><title><![CDATA[构建一个基于Haproxy的7层代理]]></title><description><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x67D0;XX&#x5BB9;&#x5668;&#x4E91;&#x5E73;&#x53F0;&#x4E0D;&#x80FD;&#x4F7F;&#x7528;Configmap&#x4E0E;Secret&#xFF0C;&#x4F46;&#x662F;&#x80FD;&#x4F20;&#x5165;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;&#x57FA;&#x4E8E;&#x8BE5;&#x6761;&#x4EF6;&#xFF0C;&#x4F7F;&#x7528;haproxy&#x6765;&#x6784;&#x5EFA;&#x4E00;&#x4E2A;&#x901A;&#x7528;&#x7684;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x3002;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;</h2>]]></description><link>https://vqiu.cn/build-proxy-service-with-haproxy/</link><guid isPermaLink="false">6969a8b97967c50001c958aa</guid><category><![CDATA[kubernetes]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Sat, 10 Jan 2026 03:10:00 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2026/01/----_20260116111039_170_250.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><img src="https://vqiu.cn/content/images/2026/01/----_20260116111039_170_250.jpg" alt="&#x6784;&#x5EFA;&#x4E00;&#x4E2A;&#x57FA;&#x4E8E;Haproxy&#x7684;7&#x5C42;&#x4EE3;&#x7406;"><p>&#x67D0;XX&#x5BB9;&#x5668;&#x4E91;&#x5E73;&#x53F0;&#x4E0D;&#x80FD;&#x4F7F;&#x7528;Configmap&#x4E0E;Secret&#xFF0C;&#x4F46;&#x662F;&#x80FD;&#x4F20;&#x5165;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;&#x57FA;&#x4E8E;&#x8BE5;&#x6761;&#x4EF6;&#xFF0C;&#x4F7F;&#x7528;haproxy&#x6765;&#x6784;&#x5EFA;&#x4E00;&#x4E2A;&#x901A;&#x7528;&#x7684;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x3002;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h2><p>&#x521B;&#x5EFA;docker-entrypoint.sh&#x6587;&#x4EF6;</p><pre><code class="language-SHELL">#!/usr/bin/env bash
set -e

export LISTEN_PORT=&quot;${LISTEN_PORT:-8080}&quot;
export SERVERS=&quot;${SERVERS:-localhost:8080}&quot;
export CLIENT_TIMEOUT=&quot;${CLIENT_TIMEOUT:-10s}&quot;
export LOAD_BALANCE_ALGORITHM=&quot;${LOAD_BALANCE_ALGORITHM:-roundrobin}&quot;
export HEALTH_CHEK_URI=&quot;${HEALTH_CHECK_URI:-/healthz}&quot;
export HEALTH_CHECK_INTERVAL=&quot;${HEALTH_CHECK_INTERVAL:-5s}&quot;
export HEALTH_CHEK_CODE=&quot;${HEALTH_CHEK_CODE:-200}&quot;
export HEALTH_CHECK_PORT=&quot;${HEALTH_CHECK_PORT:-8080}&quot;

SERVERS_CONFIG=&quot;&quot;
if [ -n &quot;$SERVERS&quot; ]; then
    IFS=&apos;,&apos; read -ra SERVER_LIST &lt;&lt;&lt; &quot;$SERVERS&quot;
    for i in &quot;${!SERVER_LIST[@]}&quot;; do
        SERVERS_CONFIG+=&quot;    server s$((i+1)) ${SERVER_LIST[i]} check\n&quot;
    done
else
    SERVERS_CONFIG=&quot;    server s1 localhost:8080 check\n&quot;
fi

# &#x4F7F;&#x7528; envsubst &#x66FF;&#x6362;&#x6A21;&#x677F;&#x4E2D;&#x7684;&#x53D8;&#x91CF;
envsubst &lt; /usr/local/etc/haproxy/haproxy.cfg.tmpl | \
  awk -v servers=&quot;$SERVERS_CONFIG&quot; &apos;{gsub(/# SERVERS_PLACEHOLDER/, servers); print}&apos; &gt; /usr/local/etc/haproxy/haproxy.cfg

# &#x542F;&#x52A8; haproxy
exec haproxy -d -f /usr/local/etc/haproxy/haproxy.cfg &quot;$@&quot;</code></pre><p></p><p>&#x521B;&#x5EFA;haproxy&#x6A21;&#x677F;&#x6587;&#x4EF6; -- haproxy.cfg.tmpl</p><pre><code>global
    daemon
    log stdout format raw local0 info
    maxconn 10000

defaults
    mode http
    timeout connect 5s
    timeout client  60s
    timeout server  60s
    log global

frontend health_frontend
    bind *:10254
    option dontlognull
    monitor-uri /healthz
    monitor fail if { nbsrv(servers) eq 0 }

frontend http
    bind *:${LISTEN_PORT}
    mode http
    timeout client ${CLIENT_TIMEOUT}
    default_backend servers

backend servers
    mode http

    # &#x542F;&#x7528; HTTP &#x5065;&#x5EB7;&#x68C0;&#x67E5;
    option httpchk
    http-check send meth GET uri ${HEALTH_CHEK_URI} ver HTTP/1.1
    http-check expect status ${HEALTH_CHEK_CODE}
    default-server inter ${HEALTH_CHECK_INTERVAL} fall 3 rise 2
    default-server check port ${HEALTH_CHECK_PORT}

    # &#x8D1F;&#x8F7D;&#x5747;&#x8861;&#x7B97;&#x6CD5;
    balance ${LOAD_BALANCE_ALGORITHM}
# SERVERS_PLACEHOLDER</code></pre><p></p><p>Dockerfile&#x5185;&#x5BB9;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-Dockerfile">#FROM haproxy:3.2.10-alpine
FROM registry.cn-shenzhen.aliyuncs.com/shuhui/haproxy:3.2.10-alpine


LABEL maintainer=&quot;Qiu Shuhui&lt;shuhui@vqiu.cn&gt;&quot; \
      version=&quot;1.32.10&quot;

USER root

COPY haproxy.cfg.tmpl /usr/local/etc/haproxy/haproxy.cfg.tmpl
COPY docker-entrypoint.sh /docker-entrypoint.sh

RUN set -xe \
    &amp;&amp; sed -i &apos;s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g&apos; /etc/apk/repositories \
    &amp;&amp; apk update upgrade \
    &amp;&amp; apk add --no-cache procps tzdata bash gettext procps curl \
    &amp;&amp; cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    &amp;&amp; echo &quot;Asia/Shanghai&quot; &gt; /etc/timezone \
    &amp;&amp; rm -rf /var/cache/apk/* \
    &amp;&amp; chmod +x /docker-entrypoint.sh \
    &amp;&amp; chown haproxy:haproxy -R /usr/local/etc/haproxy/

USER haproxy

ENTRYPOINT [&quot;/docker-entrypoint.sh&quot;]</code></pre><p></p><p>&#x4F7F;&#x7528;docker&#x8FD0;&#x884C;&#x4E2A;&#x7B80;&#x5355;&#x5B9E;&#x4F8B;</p><pre><code class="language-BASH"># docker run -it  -e SERVERS=172.20.10.11:8080,172.20.10.12:8080 -e HEALTH_CHEK_URI=/health &#x6784;&#x5EFA;&#x597D;&#x7684;&#x955C;&#x50CF;</code></pre>]]></content:encoded></item><item><title><![CDATA[Clickhouse 物理部署记录]]></title><description><![CDATA[<h1></h1><h2 id="%E4%B8%80%E3%80%81%E9%83%A8%E7%BD%B2%E4%BF%A1%E6%81%AF">&#x4E00;&#x3001;&#x90E8;&#x7F72;&#x4FE1;&#x606F;</h2><ul><li>&#x7248;&#x672C;&#xFF1A; 25.8.12.129</li><li>&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF1A; OpenEuler 24.03 LTS</li><li>&#x5E73;&#x53F0;&#xFF1A;arm64</li></ul><p>&#x6570;&#x636E;&#x76EE;&#x5F55;&#x89C4;&#x5212;</p><p><strong>keeper:</strong></p><ul><li>/data/clickhouse/keeper</li><li>/data/clickhouse/keeper/coordination/log</li><li>/data/clickhouse/keeper/coordination/snapshots</li></ul><p><strong>clickhouse:</strong></p><ul><li>/data/clickhouse/server/</li></ul>]]></description><link>https://vqiu.cn/clickhouse-installation/</link><guid isPermaLink="false">695cd19a7967c50001c9589a</guid><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Sat, 03 Jan 2026 09:12:00 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2026/01/----_20260106171407_157_250.jpg" medium="image"/><content:encoded><![CDATA[<h1></h1><h2 id="%E4%B8%80%E3%80%81%E9%83%A8%E7%BD%B2%E4%BF%A1%E6%81%AF">&#x4E00;&#x3001;&#x90E8;&#x7F72;&#x4FE1;&#x606F;</h2><ul><li>&#x7248;&#x672C;&#xFF1A; 25.8.12.129</li><li>&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF1A; OpenEuler 24.03 LTS</li><li>&#x5E73;&#x53F0;&#xFF1A;arm64</li></ul><img src="https://vqiu.cn/content/images/2026/01/----_20260106171407_157_250.jpg" alt="Clickhouse &#x7269;&#x7406;&#x90E8;&#x7F72;&#x8BB0;&#x5F55;"><p>&#x6570;&#x636E;&#x76EE;&#x5F55;&#x89C4;&#x5212;</p><p><strong>keeper:</strong></p><ul><li>/data/clickhouse/keeper</li><li>/data/clickhouse/keeper/coordination/log</li><li>/data/clickhouse/keeper/coordination/snapshots</li></ul><p><strong>clickhouse:</strong></p><ul><li>/data/clickhouse/server/data</li><li>/data/clickhouse/server/log</li></ul><h2 id="%E4%BA%8C%E3%80%81%E7%B3%BB%E7%BB%9F%E5%89%8D%E7%BD%AE%E4%BC%98%E5%8C%96%E9%85%8D%E7%BD%AE">&#x4E8C;&#x3001;&#x7CFB;&#x7EDF;&#x524D;&#x7F6E;&#x4F18;&#x5316;&#x914D;&#x7F6E;</h2><p>&#x8C03;&#x6574;&#x5185;&#x6838;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;</p><pre><code>sysctl -w kernel.threads-max=262144
sysctl -w kernel.task_delayacct=1
sysctl -w vm.swappiness=1

cat &gt;/etc/sysctl.d/99-clickhouse.conf&lt;&lt;EOF
vm.swappiness=1
kernel.task_delayacct = 1
kernel.threads-max = 262144
EOF
</code></pre><p>&#x7F16;&#x8F91; /etc/default/grub&#xFF0C;&#x5728; GRUB_CMDLINE_LINUX &#x53C2;&#x6570;&#x4E2D;&#x6DFB;&#x52A0;&#xFF1A;</p><pre><code class="language-plaintext">GRUB_CMDLINE_LINUX=&quot;... transparent_hugepage=never&quot;
grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
update-grub                             # Ubuntu/Debian
</code></pre><h2 id="%E4%B8%89%E3%80%81%E9%85%8D%E7%BD%AE%E6%AD%A5%E9%AA%A4">&#x4E09;&#x3001;&#x914D;&#x7F6E;&#x6B65;&#x9AA4;</h2><p>&#x4E0B;&#x8F7D;&#x4EE5;&#x4E0B;&#x8F6F;&#x4EF6;&#x5305;</p><pre><code>https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-25.8.12.129.aarch64.rpm
https://packages.clickhouse.com/rpm/stable/clickhouse-keeper-25.8.12.129.aarch64.rpm
https://packages.clickhouse.com/rpm/stable/clickhouse-server-25.8.12.129.aarch64.rpm
https://packages.clickhouse.com/rpm/stable/clickhouse-client-25.8.12.129.aarch64.rpm

</code></pre><h3 id="31-clickhouse-keeper">3.1 clickhouse-keeper</h3><p>&#x914D;&#x7F6E;keeper&#xFF1A; /etc/clickhouse-keeper/keeper_config.xml</p><p>&#x9ED8;&#x8BA4;&#x76EE;&#x5F55;&#x7248;&#x672C;&#xFF1A;</p><pre><code>&lt;clickhouse&gt;
  &lt;logger&gt;
    &lt;level&gt;information&lt;/level&gt;
    &lt;log&gt;/var/log/clickhouse-keeper/clickhouse-keeper.log&lt;/log&gt;
    &lt;errorlog&gt;/var/log/clickhouse-keeper/clickhouse-keeper.err.log&lt;/errorlog&gt;
    &lt;size&gt;1000M&lt;/size&gt;
    &lt;count&gt;10&lt;/count&gt;
  &lt;/logger&gt;

  &lt;max_connections&gt;4096&lt;/max_connections&gt;
  &lt;listen_host&gt;0.0.0.0&lt;/listen_host&gt;

  &lt;keeper_server&gt;
    &lt;tcp_port&gt;9181&lt;/tcp_port&gt;
    &lt;enable_ipv6&gt;false&lt;/enable_ipv6&gt;

    &lt;server_id&gt;41&lt;/server_id&gt;

    &lt;log_storage_path&gt;/var/lib/clickhouse/coordination/logs&lt;/log_storage_path&gt;
    &lt;snapshot_storage_path&gt;/var/lib/clickhouse/coordination/snapshots&lt;/snapshot_storage_path&gt;

    &lt;coordination_settings&gt;
        &lt;operation_timeout_ms&gt;10000&lt;/operation_timeout_ms&gt;
        &lt;min_session_timeout_ms&gt;10000&lt;/min_session_timeout_ms&gt;
        &lt;session_timeout_ms&gt;100000&lt;/session_timeout_ms&gt;
        &lt;raft_logs_level&gt;information&lt;/raft_logs_level&gt;
        &lt;compress_logs&gt;false&lt;/compress_logs&gt;
    &lt;/coordination_settings&gt;

    &lt;hostname_checks_enabled&gt;true&lt;/hostname_checks_enabled&gt;
    &lt;raft_configuration&gt;
        &lt;server&gt;
            &lt;id&gt;41&lt;/id&gt;
            &lt;hostname&gt;ck-01&lt;/hostname&gt;
            &lt;port&gt;9234&lt;/port&gt;
        &lt;/server&gt;
        &lt;server&gt;
            &lt;id&gt;42&lt;/id&gt;
            &lt;hostname&gt;ck-02&lt;/hostname&gt;
            &lt;port&gt;9234&lt;/port&gt;
        &lt;/server&gt;
        &lt;server&gt;
            &lt;id&gt;43&lt;/id&gt;
            &lt;hostname&gt;ck-03&lt;/hostname&gt;
            &lt;port&gt;9234&lt;/port&gt;
        &lt;/server&gt;
    &lt;/raft_configuration&gt;
  &lt;/keeper_server&gt;
  &lt;openSSL&gt;
    &lt;server&gt;
          &lt;verificationMode&gt;none&lt;/verificationMode&gt;
          &lt;loadDefaultCAFile&gt;false&lt;/loadDefaultCAFile&gt;
          &lt;cacheSessions&gt;true&lt;/cacheSessions&gt;
          &lt;disableProtocols&gt;sslv2,sslv3&lt;/disableProtocols&gt;
          &lt;preferServerCiphers&gt;true&lt;/preferServerCiphers&gt;
      &lt;/server&gt;
  &lt;/openSSL&gt;
&lt;/clickhouse&gt;
</code></pre><p>&#x81EA;&#x5B9A;&#x4E49;&#x76EE;&#x5F55;&#xFF1A;</p><pre><code>&lt;clickhouse&gt;
  &lt;logger&gt;
    &lt;level&gt;information&lt;/level&gt;
    &lt;log&gt;/data/clickhouse/keeper/clickhouse-keeper.log&lt;/log&gt;
    &lt;errorlog&gt;/data/clickhouse/keeper/clickhouse-keeper.err.log&lt;/errorlog&gt;
    &lt;size&gt;1000M&lt;/size&gt;
    &lt;count&gt;10&lt;/count&gt;
  &lt;/logger&gt;

  &lt;max_connections&gt;4096&lt;/max_connections&gt;
  &lt;listen_host&gt;0.0.0.0&lt;/listen_host&gt;

  &lt;keeper_server&gt;
    &lt;tcp_port&gt;9181&lt;/tcp_port&gt;
    &lt;enable_ipv6&gt;false&lt;/enable_ipv6&gt;

    &lt;server_id&gt;1&lt;/server_id&gt;

    &lt;log_storage_path&gt;/data/clickhouse/keeper/coordination/logs&lt;/log_storage_path&gt;
    &lt;snapshot_storage_path&gt;/data/clickhouse/keeper/coordination/snapshots&lt;/snapshot_storage_path&gt;

    &lt;coordination_settings&gt;
        &lt;operation_timeout_ms&gt;10000&lt;/operation_timeout_ms&gt;
        &lt;min_session_timeout_ms&gt;10000&lt;/min_session_timeout_ms&gt;
        &lt;session_timeout_ms&gt;100000&lt;/session_timeout_ms&gt;
        &lt;raft_logs_level&gt;information&lt;/raft_logs_level&gt;
        &lt;compress_logs&gt;false&lt;/compress_logs&gt;
    &lt;/coordination_settings&gt;

    &lt;hostname_checks_enabled&gt;true&lt;/hostname_checks_enabled&gt;
    &lt;raft_configuration&gt;
        &lt;server&gt;
            &lt;id&gt;41&lt;/id&gt;
            &lt;hostname&gt;ck-01&lt;/hostname&gt;
            &lt;port&gt;9234&lt;/port&gt;
        &lt;/server&gt;
        &lt;server&gt;
            &lt;id&gt;42&lt;/id&gt;
            &lt;hostname&gt;ck-02&lt;/hostname&gt;
            &lt;port&gt;9234&lt;/port&gt;
        &lt;/server&gt;
        &lt;server&gt;
            &lt;id&gt;43&lt;/id&gt;
            &lt;hostname&gt;ck-03&lt;/hostname&gt;
            &lt;port&gt;9234&lt;/port&gt;
        &lt;/server&gt;
    &lt;/raft_configuration&gt;
  &lt;/keeper_server&gt;
  &lt;openSSL&gt;
    &lt;server&gt;
          &lt;verificationMode&gt;none&lt;/verificationMode&gt;
          &lt;loadDefaultCAFile&gt;true&lt;/loadDefaultCAFile&gt;
          &lt;cacheSessions&gt;true&lt;/cacheSessions&gt;
          &lt;disableProtocols&gt;sslv2,sslv3&lt;/disableProtocols&gt;
          &lt;preferServerCiphers&gt;true&lt;/preferServerCiphers&gt;
      &lt;/server&gt;
  &lt;/openSSL&gt;
&lt;/clickhouse&gt;
</code></pre><p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x6765;&#x542F;&#x52A8;</p><pre><code>clickhouse-keeper --config  /etc/clickhouse-keeper/keeper_config.xml
</code></pre><p>&#x68C0;&#x6D4B;&#x670D;&#x52A1;&#x662F;&#x5426;&#x6B63;&#x5E38;</p><pre><code>echo mntr | nc localhost 9181
</code></pre><h3 id="32-clickhouse-server">3.2 clickhouse-server</h3><p>&#x5907;&#x4EFD;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p><pre><code># cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.origin
</code></pre><p>&#x5185;&#x5BB9;&#x66F4;&#x65B0;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>sed -i -e &apos;s@&lt;path&gt;/var/lib/clickhouse/&lt;/path&gt;@&lt;path&gt;/data/clickhouse/clickhouse-server&lt;/path&gt;@&apos; \
       -e &apos;s@&lt;level&gt;trace&lt;/level&gt;@&lt;level&gt;information&lt;/level&gt;@&apos; \
       -e &apos;s@&lt;!-- &lt;max_connections&gt;4096&lt;/max_connections&gt; --&gt;@&lt;max_connections&gt;40960&lt;/max_connections&gt;@&apos; \
       -e &apos;s@&lt;!-- &lt;listen_host&gt;::&lt;/listen_host&gt; --&gt;@&lt;listen_host&gt;0.0.0.0&lt;/listen_host&gt;@&apos; \
        -e &apos;s@&lt;!-- &lt;timezone&gt;UTC&lt;/timezone&gt; --&gt;@&lt;timezone&gt;Asia/Shanghai&lt;/timezone&gt;@&apos; \
       -e &apos;s@/var/log@/data/clickhouse/logs@&apos; \
       /etc/clickhouse-server/config.xml
</code></pre><p>&#x521B;&#x5EFA;&#x96C6;&#x7FA4;&#x62D3;&#x6251;&#x6587;&#x4EF6;</p><pre><code>cat &gt; /etc/clickhouse-server/config.d/remote_servers.xml&lt;&lt;EOF
&lt;clickhouse&gt;
    &lt;remote_servers&gt;
        &lt;VQIU_CK_1S_3R&gt;
            &lt;secret&gt;Abcd12345&lt;/secret&gt;
            &lt;shard&gt;
                &lt;internal_replication&gt;true&lt;/internal_replication&gt;
                &lt;replica&gt;&lt;host&gt;ck-01&lt;/host&gt;&lt;port&gt;9000&lt;/port&gt;&lt;/replica&gt;
                &lt;replica&gt;&lt;host&gt;ck-02&lt;/host&gt;&lt;port&gt;9000&lt;/port&gt;&lt;/replica&gt;
                &lt;replica&gt;&lt;host&gt;ck-03&lt;/host&gt;&lt;port&gt;9000&lt;/port&gt;&lt;/replica&gt;
            &lt;/shard&gt;
        &lt;/VQIU_CK_1S_3R&gt;
    &lt;/remote_servers&gt;
&lt;/clickhouse&gt;
EOF
</code></pre><p>&#x5F15;&#x7528;keeper</p><pre><code>cat &gt; /etc/clickhouse-server/config.d/use-keeper.xml&lt;&lt;EOF
&lt;clickhouse&gt;
    &lt;zookeeper&gt;
        &lt;node&gt;&lt;host&gt;ck-01&lt;/host&gt;&lt;port&gt;9181&lt;/port&gt;&lt;/node&gt;
        &lt;node&gt;&lt;host&gt;ck-02&lt;/host&gt;&lt;port&gt;9181&lt;/port&gt;&lt;/node&gt;
        &lt;node&gt;&lt;host&gt;ck-03&lt;/host&gt;&lt;port&gt;9181&lt;/port&gt;&lt;/node&gt;
    &lt;/zookeeper&gt;
&lt;/clickhouse&gt;
EOF
</code></pre><p>&#x5B9A;&#x4E49;&#x5B8F;&#x6587;&#x4EF6;</p><pre><code>cat &gt;/etc/clickhouse-server/config.d/macros.xml&lt;&lt;EOF
&lt;clickhouse&gt;
    &lt;macros&gt;
        &lt;shard&gt;1&lt;/shard&gt;
        &lt;replica&gt;1&lt;/replica&gt;
        &lt;cluster&gt;VQIU_CK_1S_3R&lt;/cluster&gt;
    &lt;/macros&gt;
&lt;/clickhouse&gt;
EOF
</code></pre><p>&#x751F;&#x6210;&#x5BC6;&#x7801;[&#x53EF;&#x9009;]</p><pre><code class="language-bash">echo -n &apos;supersecret&apos; | sha256sum | tr -d &apos;-&apos;
</code></pre><p>&#x8FFD;&#x52A0;&#x5230;&#x5BC6;&#x7801;&#x6587;&#x4EF6;&#x4E2D;</p><pre><code>vi /etc/clickhouse-server/users.d/default-password.xml
clickhouse&gt;
    &lt;users&gt;
        &lt;default&gt;
            &lt;password remove=&apos;1&apos; /&gt;
            &lt;password_sha256_hex&gt;SUPER_SECRET_HASH&lt;/password_sha256_hex&gt;
        &lt;/default&gt;
    &lt;/users&gt;
&lt;/clickhouse&gt;
</code></pre><h3 id="33-%E5%85%B6%E5%AE%83%E9%85%8D%E7%BD%AE">3.3 &#x5176;&#x5B83;&#x914D;&#x7F6E;</h3><h4 id="331-%E5%A2%9E%E5%8A%A0%E6%9C%80%E5%A4%A7%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6"><strong>3.3.1 &#x589E;&#x52A0;&#x6700;&#x5927;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26;</strong></h4><pre><code>LimitNOFILE=500000
LimitNPROC=500000
</code></pre><h4 id="332-tracelog"><strong>3.3.2 trace_log</strong></h4><p>trace_log &#x8868;&#x8BB0;&#x5F55;&#x4E86;&#x67E5;&#x8BE2;&#x6267;&#x884C;&#x7684;&#x8BE6;&#x7EC6;&#x8DDF;&#x8E2A;&#x4FE1;&#x606F;&#xFF0C;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x6027;&#x80FD;&#x5206;&#x6790;&#x548C;&#x8C03;&#x8BD5;&#x3002;&#x4EE5;&#x4E0B;&#x662F;&#x5904;&#x7406; trace_log &#x8868;&#x5360;&#x7528;&#x5927;&#x91CF;&#x7A7A;&#x95F4;&#x7684;&#x65B9;&#x6CD5;&#xFF1A;</p><p>&#x7ACB;&#x5373;&#x6E05;&#x7406;</p><pre><code>-- &#x67E5;&#x770B; trace_log &#x5F53;&#x524D;&#x5360;&#x7528;&#x7A7A;&#x95F4;
SELECT 
    formatReadableSize(sum(bytes)) AS size,
    min(event_time) AS oldest_log,
    max(event_time) AS newest_log,
    count() AS entries
FROM system.parts
WHERE database = &apos;system&apos; AND table = &apos;trace_log&apos;;

-- &#x5220;&#x9664;&#x6240;&#x6709; trace_log &#x6570;&#x636E;&#xFF08;&#x7D27;&#x6025;&#x6E05;&#x7406;&#xFF09;
ALTER TABLE system.trace_log DELETE WHERE 1=1;

-- &#x6216;&#x8005;&#x5220;&#x9664;&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x524D;&#x7684;&#x6570;&#x636E;
ALTER TABLE system.trace_log DELETE 
WHERE event_time &lt; now() - INTERVAL 7 DAY;

-- &#x5F3A;&#x5236;&#x5408;&#x5E76;&#xFF0C;&#x7ACB;&#x5373;&#x91CA;&#x653E;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#xFF08;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#x662F;&#x5F02;&#x6B65;&#x7684;&#xFF0C;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x4E00;&#x4E9B;&#x65F6;&#x95F4;&#xFF0C;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x8FD9;&#x53EF;&#x80FD;&#x4F1A;&#x589E;&#x52A0;IO&#x8D1F;&#x62C5;&#xFF09;
OPTIMIZE TABLE system.trace_log FINAL;
</code></pre><p><strong>&#x4F18;&#x5316;&#x624B;&#x6BB5;</strong></p><p>&#x9650;&#x5236; trace_log &#x91C7;&#x6837;&#x7387;</p><pre><code>&lt;trace_log&gt;
    &lt;database&gt;system&lt;/database&gt;
    &lt;table&gt;trace_log&lt;/table&gt;
    &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
    &lt;flush_interval_milliseconds&gt;7500&lt;/flush_interval_milliseconds&gt;
    &lt;!-- &#x53EA;&#x8BB0;&#x5F55; 1% &#x7684;&#x67E5;&#x8BE2; --&gt;
    &lt;sampling&gt;0.01&lt;/sampling&gt;
&lt;/trace_log&gt;
</code></pre><p>&#x589E;&#x52A0;TTL&#xFF08;&#x6570;&#x636E;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#xFF09;</p><pre><code>&lt;trace_log&gt;
    &lt;database&gt;system&lt;/database&gt;
    &lt;table&gt;trace_log&lt;/table&gt;
    &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
    &lt;ttl&gt;event_date + INTERVAL 7 DAY&lt;/ttl&gt;
    &lt;flush_interval_milliseconds&gt;7500&lt;/flush_interval_milliseconds&gt;
&lt;/trace_log&gt;
</code></pre><p>&#x5B8C;&#x5168;&#x7981;&#x7528;trace_log</p><pre><code>&lt;!--
&lt;trace_log&gt;
    &lt;database&gt;system&lt;/database&gt;
    &lt;table&gt;trace_log&lt;/table&gt;
    &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
    &lt;flush_interval_milliseconds&gt;7500&lt;/flush_interval_milliseconds&gt;
&lt;/trace_log&gt;
--&gt;
</code></pre><p>&#x6216;&#x8005;&#x4F7F;&#x7528;&#x7684;&#x662F;&#x5728;&#x914D;&#x7F6E;&#x76EE;&#x5F55;&#x4E0B;&#xFF08;&#x5982;/etc/clickhouse-server/config.d/&#xFF09;&#x7684;&#x8986;&#x76D6;&#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x65B0;&#x6587;&#x4EF6;&#x4E2D;&#x5C06;trace_log&#x8BBE;&#x7F6E;&#x4E3A;&#x7A7A;&#x5143;&#x7D20;&#x4EE5;&#x7981;&#x7528;&#xFF1A;</p><pre><code>&lt;yandex&gt;
  &lt;trace_log remove=&quot;1&quot; /&gt;
&lt;/yandex&gt;
</code></pre><p>&#x91CD;&#x542F;&#x670D;&#x52A1;</p><pre><code>systemctl restart clickhouse-server
</code></pre><p>&#x5982;&#x679C;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#x6CA1;&#x6709;&#x8BBE;&#x7F6E;TTL&#xFF0C;&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;ALTER TABLE&#x8BED;&#x53E5;&#x4E3A;trace_log&#x8868;&#x6DFB;&#x52A0;TTL&#xFF1A;</p><pre><code>ALTER TABLE system.trace_log MODIFY TTL event_date + INTERVAL 7 DAY;
&#x8FD9;&#x6837;&#xFF0C;&#x8D85;&#x8FC7;7&#x5929;&#x7684;&#x6570;&#x636E;&#x4F1A;&#x81EA;&#x52A8;&#x88AB;&#x5220;&#x9664;&#x3002;
</code></pre><p><strong>&#x6700;&#x4F73;&#x5B9E;&#x8DF5;</strong></p><ol><li><strong>&#x751F;&#x4EA7;&#x73AF;&#x5883;</strong>&#xFF1A;&#x5EFA;&#x8BAE;&#x5B8C;&#x5168;&#x7981;&#x7528;&#x6216;&#x8BBE;&#x7F6E;&#x6781;&#x4F4E;&#x7684;&#x91C7;&#x6837;&#x7387;&#xFF08;&#x5982;0.01&#xFF09;</li><li><strong>&#x5F00;&#x53D1;/&#x6D4B;&#x8BD5;&#x73AF;&#x5883;</strong>&#xFF1A;&#x53EF;&#x4FDD;&#x7559;&#x4F46;&#x8BBE;&#x7F6E;&#x8F83;&#x77ED;&#x7684;TTL&#xFF08;3-7&#x5929;&#xFF09;</li><li><strong>&#x7D27;&#x6025;&#x60C5;&#x51B5;</strong>&#xFF1A;&#x7ACB;&#x5373;&#x6267;&#x884C; <code>ALTER TABLE DELETE</code> &#x6E05;&#x7406;&#x6570;&#x636E;</li><li><strong>&#x957F;&#x671F;&#x65B9;&#x6848;</strong>&#xFF1A;&#x4FEE;&#x6539;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x5E76;&#x91CD;&#x542F;ClickHouse&#x670D;&#x52A1;</li></ol><pre><code>&lt;!-- /etc/clickhouse-server/config.d/trace_log_config.xml --&gt;
&lt;yandex&gt;
    &lt;trace_log&gt;
        &lt;database&gt;system&lt;/database&gt;
        &lt;table&gt;trace_log&lt;/table&gt;
        &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
        &lt;!-- &#x53EA;&#x5BF9;&#x6267;&#x884C;&#x65F6;&#x95F4;&#x8D85;&#x8FC7;1&#x79D2;&#x7684;&#x67E5;&#x8BE2;&#x8BB0;&#x5F55;trace --&gt;
        &lt;min_query_duration_ms&gt;1000&lt;/min_query_duration_ms&gt;
        &lt;!-- 10% &#x91C7;&#x6837;&#x7387; --&gt;
        &lt;sampling&gt;0.1&lt;/sampling&gt;
        &lt;!-- 3&#x5929;TTL --&gt;
        &lt;ttl&gt;event_date + INTERVAL 3 DAY&lt;/ttl&gt;
        &lt;!-- &#x964D;&#x4F4E;&#x5237;&#x65B0;&#x9891;&#x7387; --&gt;
        &lt;flush_interval_milliseconds&gt;30000&lt;/flush_interval_milliseconds&gt;
    &lt;/trace_log&gt;
    
    &lt;!-- &#x540C;&#x65F6;&#x8C03;&#x6574;&#x76F8;&#x5173;&#x8BBE;&#x7F6E; --&gt;
    &lt;log_queries&gt;1&lt;/log_queries&gt;
    &lt;log_query_threads&gt;0&lt;/log_query_threads&gt;  &lt;!-- &#x5173;&#x95ED;&#x7EBF;&#x7A0B;&#x65E5;&#x5FD7;&#xFF0C;&#x51CF;&#x5C11;trace&#x6570;&#x636E; --&gt;
    &lt;allow_introspection_functions&gt;0&lt;/allow_introspection_functions&gt;
&lt;/yandex&gt;
</code></pre><p>&#x9A8C;&#x8BC1;&#x4E0E;&#x67E5;&#x770B;</p><pre><code>-- &#x67E5;&#x770B;trace_log&#x8BBE;&#x7F6E;&#x662F;&#x5426;&#x751F;&#x6548;
SELECT 
    name, 
    value, 
    changed,
    description
FROM system.settings 
WHERE name IN (
    &apos;allow_introspection_functions&apos;,
    &apos;log_query_threads&apos;,
    &apos;trace_profile_events&apos;,
    &apos;query_profiler_real_time_period_ns&apos;,
    &apos;query_profiler_cpu_time_period_ns&apos;
);

-- &#x67E5;&#x770B;trace_log&#x8868;&#x5C5E;&#x6027;
SELECT 
    name,
    engine,
    partition_key,
    sorting_key,
    ttl_expression,
    total_rows,
    formatReadableSize(total_bytes) as size
FROM system.tables 
WHERE database = &apos;system&apos; AND name = &apos;trace_log&apos;;

-- &#x76D1;&#x63A7;trace_log&#x5199;&#x5165;&#x9891;&#x7387;
SELECT 
    toStartOfMinute(event_time) AS minute,
    count() AS queries_traced
FROM system.trace_log 
WHERE event_time &gt; now() - INTERVAL 1 HOUR
GROUP BY minute
ORDER BY minute DESC;
</code></pre><h4 id="333-textlog">3.3.3 text_log</h4><p>ClickHouse &#x7684; <code>text_log</code> &#x8868;&#x8BB0;&#x5F55;&#x4E86;&#x670D;&#x52A1;&#x5668;&#x7684;&#x6587;&#x672C;&#x65E5;&#x5FD7;&#xFF0C;&#x5982;&#x679C;&#x5360;&#x7528;&#x5927;&#x91CF;&#x7A7A;&#x95F4;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x4EE5;&#x4E0B;&#x65B9;&#x6CD5;&#x6E05;&#x7406;&#x548C;&#x4F18;&#x5316;&#xFF1A;</p><pre><code>-- &#x67E5;&#x770B; text_log &#x5F53;&#x524D;&#x5360;&#x7528;&#x7A7A;&#x95F4;
SELECT 
    formatReadableSize(sum(bytes_on_disk)) AS size,
    min(event_time) AS oldest_log,
    max(event_time) AS newest_log,
    count() AS total_entries,
    uniqExact(thread_id) AS unique_threads
FROM system.parts
WHERE database = &apos;system&apos; AND table = &apos;text_log&apos; AND active;

-- &#x6309;&#x65E5;&#x5FD7;&#x7EA7;&#x522B;&#x7EDF;&#x8BA1;
SELECT 
    level,
    count() AS count,
    formatReadableSize(sum(length(message))) AS message_size
FROM system.text_log
WHERE event_time &gt; now() - INTERVAL 1 DAY
GROUP BY level
ORDER BY count DESC;

-- &#x6E05;&#x7406;&#x7279;&#x5B9A;&#x65F6;&#x95F4;&#x524D;&#x7684;&#x6570;&#x636E;
ALTER TABLE system.text_log DELETE 
WHERE event_time &lt; now() - INTERVAL 7 DAY;

-- &#x53EA;&#x4FDD;&#x7559; ERROR &#x7EA7;&#x522B;&#x7684;&#x65E5;&#x5FD7;&#xFF0C;&#x6E05;&#x7406;&#x5176;&#x4ED6;&#x7EA7;&#x522B;&#x7684;&#x65E7;&#x65E5;&#x5FD7;
ALTER TABLE system.text_log DELETE 
WHERE event_time &lt; now() - INTERVAL 3 DAY AND level NOT IN (&apos;Error&apos;, &apos;Fatal&apos;);

-- &#x7D27;&#x6025;&#x60C5;&#x51B5;&#xFF1A;&#x6E05;&#x7406;&#x6240;&#x6709; text_log &#x6570;&#x636E;
ALTER TABLE system.text_log DELETE WHERE 1=1;

-- &#x5F3A;&#x5236;&#x5408;&#x5E76;&#xFF0C;&#x7ACB;&#x5373;&#x91CA;&#x653E;&#x7A7A;&#x95F4;
OPTIMIZE TABLE system.text_log FINAL;
</code></pre><p><strong>&#x6700;&#x4F73;&#x5B9E;&#x8DF5;</strong></p><ol><li><strong>&#x751F;&#x4EA7;&#x73AF;&#x5883;</strong>&#xFF1A;&#x8BBE;&#x7F6E; <code>level=&quot;warning&quot;</code> &#x6216; <code>level=&quot;error&quot;</code>&#xFF0C;TTL&#x4E3A;1-3&#x5929;</li><li><strong>&#x5F00;&#x53D1;&#x73AF;&#x5883;</strong>&#xFF1A;&#x53EF;&#x4EE5;&#x9002;&#x5F53;&#x653E;&#x5BBD;&#xFF0C;&#x4F46;&#x4E5F;&#x8981;&#x8BBE;&#x7F6E;TTL&#x548C;&#x5927;&#x5C0F;&#x9650;&#x5236;</li><li><strong>&#x7D27;&#x6025;&#x5904;&#x7406;</strong>&#xFF1A;&#x4F7F;&#x7528; <code>ALTER TABLE DELETE</code> &#x7ACB;&#x5373;&#x6E05;&#x7406;</li><li><strong>&#x957F;&#x671F;&#x65B9;&#x6848;</strong>&#xFF1A;&#x4FEE;&#x6539;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x5E76;&#x91CD;&#x542F;&#x670D;&#x52A1;</li><li><strong>&#x76D1;&#x63A7;&#x544A;&#x8B66;</strong>&#xFF1A;&#x8BBE;&#x7F6E;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x548C;&#x8868;&#x5927;&#x5C0F;&#x7684;&#x76D1;&#x63A7;</li></ol><p>&#x5EFA;&#x8BAE;&#x914D;&#x7F6E;</p><pre><code>&lt;!-- /etc/clickhouse-server/config.d/text_log_optimized.xml --&gt;
&lt;yandex&gt;
    &lt;text_log&gt;
        &lt;database&gt;system&lt;/database&gt;
        &lt;table&gt;text_log&lt;/table&gt;
        &lt;partition_by&gt;toYYYYMMDD(event_time)&lt;/partition_by&gt;  &lt;!-- &#x6309;&#x5929;&#x5206;&#x533A; --&gt;
        &lt;level&gt;warning&lt;/level&gt;  &lt;!-- &#x751F;&#x4EA7;&#x73AF;&#x5883;&#x5EFA;&#x8BAE;warning&#x6216;error --&gt;
        &lt;ttl&gt;event_time + INTERVAL 2 DAY&lt;/ttl&gt;
        &lt;max_log_message_length&gt;2048&lt;/max_log_message_length&gt;  &lt;!-- &#x9650;&#x5236;&#x6D88;&#x606F;&#x957F;&#x5EA6; --&gt;
        &lt;flush_interval_milliseconds&gt;10000&lt;/flush_interval_milliseconds&gt;  &lt;!-- 10&#x79D2;&#x5237;&#x76D8; --&gt;
        
        &lt;!-- &#x4EE5;&#x4E0B;&#x5B57;&#x6BB5;&#x53EF;&#x4EE5;&#x7981;&#x7528;&#xFF0C;&#x51CF;&#x5C11;&#x5B58;&#x50A8; --&gt;
        &lt;!-- &lt;log_thread_names&gt;0&lt;/log_thread_names&gt; --&gt;
        &lt;!-- &lt;log_query_threads&gt;0&lt;/log_query_threads&gt; --&gt;
    &lt;/text_log&gt;
    
    &lt;!-- &#x8C03;&#x6574;&#x65E5;&#x5FD7;&#x76F8;&#x5173;&#x5168;&#x5C40;&#x8BBE;&#x7F6E; --&gt;
    &lt;logger&gt;
        &lt;level&gt;warning&lt;/level&gt;
        &lt;log&gt;/var/log/clickhouse-server/clickhouse-server.log&lt;/log&gt;
        &lt;errorlog&gt;/var/log/clickhouse-server/clickhouse-server.err.log&lt;/errorlog&gt;
        &lt;size&gt;100M&lt;/size&gt;  &lt;!-- &#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x5927;&#x5C0F;&#x9650;&#x5236; --&gt;
        &lt;count&gt;10&lt;/count&gt;  &lt;!-- &#x4FDD;&#x7559;&#x7684;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x6570;&#x91CF; --&gt;
    &lt;/logger&gt;
    
    &lt;!-- &#x964D;&#x4F4E;&#x65E5;&#x5FD7;&#x8BE6;&#x7EC6;&#x7A0B;&#x5EA6; --&gt;
    &lt;log_queries&gt;0&lt;/log_queries&gt;
    &lt;log_query_threads&gt;0&lt;/log_query_threads&gt;
    &lt;allow_introspection_functions&gt;0&lt;/allow_introspection_functions&gt;
&lt;/yandex&gt;
</code></pre><p>&#x9A8C;&#x8BC1;&#x548C;&#x76D1;&#x63A7;</p><pre><code>-- &#x521B;&#x5EFA;&#x76D1;&#x63A7;&#x89C6;&#x56FE;
CREATE VIEW system.text_log_monitor AS
SELECT 
    toDate(event_time) AS log_date,
    level,
    count() AS entry_count,
    formatReadableSize(sum(length(message))) AS total_message_size,
    avg(length(message)) AS avg_message_length,
    max(event_time) AS last_entry
FROM system.text_log
WHERE event_time &gt; today() - INTERVAL 7 DAY
GROUP BY log_date, level
ORDER BY log_date DESC, entry_count DESC;

-- &#x67E5;&#x770B;&#x65E5;&#x5FD7;&#x589E;&#x957F;&#x8D8B;&#x52BF;
SELECT 
    toStartOfHour(event_time) AS hour,
    level,
    count() AS entries_per_hour,
    formatReadableSize(sum(length(message))) AS size_per_hour
FROM system.text_log
WHERE event_time &gt; now() - INTERVAL 24 HOUR
GROUP BY hour, level
ORDER BY hour DESC, entries_per_hour DESC;

-- &#x67E5;&#x770B;&#x6700;&#x9891;&#x7E41;&#x7684;&#x65E5;&#x5FD7;&#x6D88;&#x606F;
SELECT 
    substring(message, 1, 100) AS message_preview,
    count() AS frequency,
    level,
    min(event_time) AS first_seen,
    max(event_time) AS last_seen
FROM system.text_log
WHERE event_time &gt; now() - INTERVAL 1 DAY
GROUP BY substring(message, 1, 100), level
HAVING frequency &gt; 10
ORDER BY frequency DESC
LIMIT 20;
</code></pre><h4 id="334-querylog">3.3.4 query_log</h4><p>&#x8BB0;&#x5F55;<strong>&#x6240;&#x6709;&#x6267;&#x884C;&#x7684;&#x67E5;&#x8BE2;</strong>&#xFF0C;&#x662F;&#x5206;&#x6790;<strong>&#x6162;&#x67E5;&#x8BE2;&#x3001;&#x6027;&#x80FD;&#x74F6;&#x9888;&#x548C;&#x67E5;&#x8BE2;&#x6A21;&#x5F0F;</strong>&#x7684;&#x6700;&#x91CD;&#x8981;&#x4F9D;&#x636E;&#x3002;</p><p>&#x5982;&#x679C;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x544A;&#x6025;&#xFF0C;&#x53EF;&#x4EE5;&#x7ACB;&#x5373;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x64CD;&#x4F5C;&#xFF1A;</p><pre><code>-- 1. &#x6E05;&#x7406;&#x5386;&#x53F2;&#x6570;&#x636E;&#xFF08;&#x4F8B;&#x5982;&#x5220;&#x9664;30&#x5929;&#x524D;&#x7684;&#x65E5;&#x5FD7;&#xFF09;
ALTER TABLE system.query_log DELETE WHERE event_time &lt; now() - INTERVAL 30 DAY;

-- 2. &#x6E05;&#x7406;&#x7279;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x65E5;&#x5FD7;&#xFF08;&#x4F8B;&#x5982;&#x53EA;&#x6E05;&#x7406;`SELECT`&#x67E5;&#x8BE2;&#xFF09;
ALTER TABLE system.query_log DELETE WHERE type = &apos;QueryFinish&apos; AND event_time &lt; now() - INTERVAL 14 DAY;

-- 3. &#x5F3A;&#x5236;&#x5408;&#x5E76;&#x6570;&#x636E;&#x90E8;&#x5206;&#xFF0C;&#x7ACB;&#x5373;&#x56DE;&#x6536;&#x7A7A;&#x95F4;
OPTIMIZE TABLE system.query_log FINAL;
</code></pre><p>&#x957F;&#x671F;&#x4F18;&#x5316;&#x53CA;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;</p><ul><li><strong>&#x751F;&#x4EA7;&#x73AF;&#x5883;</strong>&#xFF1A;&#x5EFA;&#x8BAE;&#x91C7;&#x7528;<strong>&#x91C7;&#x6837;&#xFF08;&#x5982;10%-20%&#xFF09;+ &#x8F83;&#x77ED;TTL&#xFF08;&#x5982;30&#x5929;&#xFF09;</strong> &#x7684;&#x7EC4;&#x5408;&#x3002;&#x52A1;&#x5FC5;&#x4FDD;&#x7559; <code>session_log</code> &#x7528;&#x4E8E;&#x5B89;&#x5168;&#x5BA1;&#x8BA1;&#x3002;</li><li><strong>&#x5F00;&#x53D1;/&#x6D4B;&#x8BD5;&#x73AF;&#x5883;</strong>&#xFF1A;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;<strong>&#x66F4;&#x77ED;&#x7684;TTL&#xFF08;&#x5982;7&#x5929;&#xFF09;&#x548C;&#x66F4;&#x4F4E;&#x7684;&#x91C7;&#x6837;&#x7387;&#xFF08;&#x5982;1%&#xFF09;</strong>&#xFF0C;&#x751A;&#x81F3;&#x5B8C;&#x5168;&#x5173;&#x95ED; <code>query_thread_log</code>&#x3002;</li><li><strong>&#x5206;&#x6790;&#x4E0E;&#x5BA1;&#x8BA1;&#x73AF;&#x5883;</strong>&#xFF1A;&#x5982;&#x679C;&#x9700;&#x8981;&#x5168;&#x91CF;&#x65E5;&#x5FD7;&#x8FDB;&#x884C;&#x5206;&#x6790;&#xFF0C;<strong>&#x4E0D;&#x5E94;&#x8BBE;&#x7F6E;&#x91C7;&#x6837;</strong>&#xFF0C;&#x4F46;&#x5FC5;&#x987B;&#x914D;&#x7F6E;&#x8DB3;&#x591F;&#x5927;&#x7684;&#x4E13;&#x7528;&#x78C1;&#x76D8;&#x548C;&#x4E25;&#x683C;&#x7684;TTL&#xFF0C;&#x5E76;<strong>&#x91CD;&#x70B9;&#x4F18;&#x5316; <code>query_settings</code> &#x548C; <code>thread_ids</code> &#x7B49;&#x5927;&#x5B57;&#x6BB5;&#x7684;&#x5B58;&#x50A8;</strong></li></ul><pre><code>&lt;!-- /etc/clickhouse-server/config.d/query_log_config.xml --&gt;
&lt;yandex&gt;
    &lt;query_log&gt;
        &lt;database&gt;system&lt;/database&gt;
        &lt;table&gt;query_log&lt;/table&gt;
        &lt;!-- &#x6309;&#x6708;&#x4EFD;&#x5206;&#x533A;&#xFF0C;&#x4FBF;&#x4E8E;&#x7BA1;&#x7406; --&gt;
        &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
        &lt;!-- &#x6838;&#x5FC3;1&#xFF1A;&#x8BBE;&#x7F6E;30&#x5929;&#x81EA;&#x52A8;&#x8FC7;&#x671F; --&gt;
        &lt;ttl&gt;event_date + INTERVAL 30 DAY&lt;/ttl&gt;
        &lt;!-- &#x6838;&#x5FC3;2&#xFF1A;&#x8BBE;&#x7F6E;&#x91C7;&#x6837;&#x7387;&#xFF0C;&#x4EC5;&#x8BB0;&#x5F55;10%&#x7684;&#x67E5;&#x8BE2; --&gt;
        &lt;sampling&gt;0.10&lt;/sampling&gt;
        &lt;!-- &#x6838;&#x5FC3;3&#xFF1A;&#x4E0D;&#x8BB0;&#x5F55;&#x67E5;&#x8BE2;&#x8BBE;&#x7F6E;&#x548C;&#x7EBF;&#x7A0B;&#x5217;&#x8868;&#xFF0C;&#x5927;&#x5E45;&#x8282;&#x7701;&#x7A7A;&#x95F4; --&gt;
        &lt;log_query_settings&gt;0&lt;/log_query_settings&gt;
        &lt;log_query_threads&gt;0&lt;/log_query_threads&gt;
        &lt;!-- &#x5237;&#x65B0;&#x95F4;&#x9694;&#x8C03;&#x6574;&#x4E3A;15&#x79D2; --&gt;
        &lt;flush_interval_milliseconds&gt;15000&lt;/flush_interval_milliseconds&gt;
    &lt;/query_log&gt;
&lt;/yandex&gt;
</code></pre><h4 id="334-querythreadlog">3.3.4 query_thread_log</h4><p>&#x4F18;&#x5316; <code>query_thread_log</code>&#xFF08;&#x67E5;&#x8BE2;&#x7EBF;&#x7A0B;&#x65E5;&#x5FD7;&#xFF09;&#x7684;&#x6838;&#x5FC3;&#x601D;&#x8DEF;&#x662F;&#xFF1A;<strong>&#x5728;&#x4FDD;&#x7559;&#x8DB3;&#x591F;&#x7EBF;&#x7A0B;&#x7EA7;&#x8BCA;&#x65AD;&#x4FE1;&#x606F;&#x4E0E;&#x63A7;&#x5236;&#x5B58;&#x50A8;&#x6210;&#x672C;&#x4E4B;&#x95F4;&#x53D6;&#x5F97;&#x5E73;&#x8861;</strong>&#x3002;&#x4EE5;&#x4E0B;&#x662F;&#x5177;&#x4F53;&#x7684;&#x4F18;&#x5316;&#x65B9;&#x6848;&#x3002;</p><p>&#x5982;&#x679C;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x7D27;&#x5F20;&#xFF0C;&#x53EF;&#x7ACB;&#x5373;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#xFF1A;</p><pre><code>-- 1. &#x6E05;&#x7406;&#x5386;&#x53F2;&#x6570;&#x636E;&#xFF08;&#x4F8B;&#x5982;&#x5220;&#x9664;30&#x5929;&#x524D;&#x7684;&#x65E5;&#x5FD7;&#xFF09;
ALTER TABLE system.query_thread_log DELETE WHERE event_time &lt; now() - INTERVAL 30 DAY;

-- 2. &#x53EF;&#x9009;&#xFF1A;&#x4E0E;query_log&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#xFF0C;&#x6E05;&#x7406;&#x5DF2;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x67E5;&#x8BE2;&#x8BB0;&#x5F55;
-- &#x6CE8;&#x610F;&#xFF1A;&#x6B64;&#x64CD;&#x4F5C;&#x8F83;&#x6162;&#xFF0C;&#x5EFA;&#x8BAE;&#x5728;&#x4F4E;&#x5CF0;&#x671F;&#x6267;&#x884C;
ALTER TABLE system.query_thread_log DELETE WHERE query_id NOT IN (SELECT query_id FROM system.query_log);

-- 3. &#x5F3A;&#x5236;&#x5408;&#x5E76;&#x6570;&#x636E;&#x90E8;&#x5206;&#xFF0C;&#x7ACB;&#x5373;&#x56DE;&#x6536;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;
OPTIMIZE TABLE system.query_thread_log FINAL;
</code></pre><p>&#x6700;&#x4F73;&#x5B9E;&#x8DF5;&#x4E0E;&#x4F18;&#x5316;</p><ul><li><strong>&#x901A;&#x7528;&#x751F;&#x4EA7;&#x73AF;&#x5883;</strong>&#xFF1A;&#x5EFA;&#x8BAE;&#x91C7;&#x7528; <strong><code>sampling=0.05</code>&#xFF08;5%&#x91C7;&#x6837;&#xFF09; + <code>ttl=&apos;30 DAY&apos;</code></strong> &#x7684;&#x7EC4;&#x5408;&#xFF0C;&#x5E76;&#x5173;&#x95ED; <code>log_profile_events</code>&#x3002;&#x8FD9;&#x80FD;&#x5728;&#x4FDD;&#x7559;&#x5173;&#x952E;&#x7EBF;&#x7A0B;&#x4FE1;&#x606F;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x5C06;&#x5B58;&#x50A8;&#x6D88;&#x8017;&#x964D;&#x81F3;&#x6781;&#x4F4E;&#x3002;</li><li><strong>&#x6DF1;&#x5EA6;&#x6027;&#x80FD;&#x8C03;&#x4F18;&#x73AF;&#x5883;</strong>&#xFF1A;&#x5982;&#x679C;&#x9700;&#x8981;&#x5206;&#x6790;&#x6240;&#x6709;&#x7EBF;&#x7A0B;&#x7684;&#x8BE6;&#x7EC6;&#x6027;&#x80FD;&#x6307;&#x6807;&#xFF08;ProfileEvents&#xFF09;&#xFF0C;&#x5219;<strong>&#x4E0D;&#x5E94;&#x964D;&#x4F4E;&#x91C7;&#x6837;&#x7387;&#x6216;&#x5173;&#x95ED;&#x76F8;&#x5173;&#x5B57;&#x6BB5;</strong>&#xFF0C;&#x4F46;&#x5FC5;&#x987B;&#x914D;&#x7F6E;&#x66F4;&#x77ED;&#x7684;TTL&#xFF08;&#x5982;7&#x5929;&#xFF09;&#xFF0C;&#x5E76;&#x786E;&#x4FDD;&#x6709;&#x8DB3;&#x591F;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x3002;</li><li><strong>&#x8D44;&#x6E90;&#x6781;&#x5EA6;&#x53D7;&#x9650;&#x6216;&#x4EC5;&#x9700;&#x5BA1;&#x8BA1;&#x7684;&#x73AF;&#x5883;</strong>&#xFF1A;&#x53EF;&#x4EE5;&#x8003;&#x8651;<strong>&#x5B8C;&#x5168;&#x5173;&#x95ED;</strong> <code>query_thread_log</code>&#xFF08;&#x5728;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#x5C06;&#x5176;&#x6574;&#x4E2A;&#x914D;&#x7F6E;&#x5757;&#x6CE8;&#x91CA;&#x6216;&#x8BBE;&#x7F6E;&#x4E3A; <code>&lt;query_thread_log remove=&quot;1&quot; /&gt;</code>&#xFF09;&#xFF0C;&#x4EC5;&#x4F9D;&#x8D56; <code>query_log</code> &#x8FDB;&#x884C;&#x57FA;&#x672C;&#x67E5;&#x8BE2;&#x5BA1;&#x8BA1;&#x3002;</li></ul><pre><code>&lt;!-- /etc/clickhouse-server/config.d/query_thread_log_config.xml --&gt;
&lt;yandex&gt;
    &lt;query_thread_log&gt;
        &lt;database&gt;system&lt;/database&gt;
        &lt;table&gt;query_thread_log&lt;/table&gt;
        &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
        &lt;!-- &#x6838;&#x5FC3;1&#xFF1A;&#x8BBE;&#x7F6E;&#x81EA;&#x52A8;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#xFF08;TTL&#xFF09;&#xFF0C;&#x4F8B;&#x5982;30&#x5929; --&gt;
        &lt;ttl&gt;event_date + INTERVAL 30 DAY&lt;/ttl&gt;
        &lt;!-- &#x6838;&#x5FC3;2&#xFF1A;&#x8BBE;&#x7F6E;&#x91C7;&#x6837;&#x7387;&#xFF0C;&#x901A;&#x5E38;&#x5E94;&lt;= query_log&#x7684;&#x91C7;&#x6837;&#x7387; --&gt;
        &lt;sampling&gt;0.05&lt;/sampling&gt;
        &lt;!-- &#x6838;&#x5FC3;3&#xFF1A;&#x5173;&#x95ED;&#x975E;&#x5173;&#x952E;&#x5B57;&#x6BB5;&#x8BB0;&#x5F55;&#xFF0C;&#x5927;&#x5E45;&#x51CF;&#x5C11;&#x5355;&#x6761;&#x65E5;&#x5FD7;&#x4F53;&#x79EF; --&gt;
        &lt;log_profile_events&gt;0&lt;/log_profile_events&gt;
        &lt;log_settings&gt;0&lt;/log_settings&gt;
    &lt;/query_thread_log&gt;
&lt;/yandex&gt;
</code></pre><h4 id="335-partlog">3.3.5 &#xA0;part_log</h4><p>&#x9488;&#x5BF9; <code>part_log</code>&#xFF08;&#x5206;&#x533A;&#x64CD;&#x4F5C;&#x65E5;&#x5FD7;&#xFF09;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x6838;&#x5FC3;&#x601D;&#x8DEF;&#x4E0E;&#x4E4B;&#x524D;&#x4E0D;&#x540C;&#xFF1A;<strong>&#x5B83;&#x4E0D;&#x4EC5;&#x662F;&#x7A7A;&#x95F4;&#x7BA1;&#x7406;&#x95EE;&#x9898;&#xFF0C;&#x66F4;&#x662F;&#x76D1;&#x63A7;MergeTree&#x5F15;&#x64CE;&#x5065;&#x5EB7;&#x72B6;&#x51B5;&#x7684;&#x5173;&#x952E;&#x5DE5;&#x5177;</strong>&#x3002;&#x4F18;&#x5316;&#x91CD;&#x70B9;&#x5728;&#x4E8E;<strong>&#x4FDD;&#x7559;&#x8DB3;&#x591F;&#x8BCA;&#x65AD;&#x4FE1;&#x606F;&#x4EE5;&#x6392;&#x67E5;&#x5199;&#x5165;/&#x5408;&#x5E76;&#x95EE;&#x9898;</strong>&#xFF0C;&#x540C;&#x65F6;&#x63A7;&#x5236;&#x5176;&#x589E;&#x957F;&#x3002;</p><p>&#x5982;&#x679C;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x7D27;&#x5F20;&#xFF0C;&#x53EF;&#x7ACB;&#x5373;&#x6267;&#x884C;&#xFF1A;</p><pre><code>-- 1. &#x6E05;&#x7406;&#x5386;&#x53F2;&#x6570;&#x636E;&#xFF08;&#x4F8B;&#x5982;&#x5220;&#x9664;90&#x5929;&#x524D;&#x7684;&#x65E5;&#x5FD7;&#xFF0C;&#x56E0;&#x5176;&#x8BCA;&#x65AD;&#x4EF7;&#x503C;&#x5468;&#x671F;&#x8F83;&#x957F;&#xFF09;
ALTER TABLE system.part_log DELETE WHERE event_time &lt; now() - INTERVAL 90 DAY;

-- 2. &#x9488;&#x5BF9;&#x6027;&#x5730;&#x6E05;&#x7406;&#x7279;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x4E8B;&#x4EF6;&#xFF08;&#x4F8B;&#x5982;&#x4EC5;&#x4FDD;&#x7559;`MERGE_PARTS`&#x548C;`DOWNLOAD_PART`&#x7B49;&#x5173;&#x952E;&#x64CD;&#x4F5C;&#xFF09;
ALTER TABLE system.part_log DELETE
WHERE event_time &lt; now() - INTERVAL 30 DAY
AND event_type NOT IN (&apos;NewPart&apos;, &apos;MergeParts&apos;, &apos;MutatePart&apos;, &apos;DownloadPart&apos;);

-- 3. &#x5F3A;&#x5236;&#x5408;&#x5E76;&#xFF0C;&#x7ACB;&#x5373;&#x56DE;&#x6536;&#x7A7A;&#x95F4;
OPTIMIZE TABLE system.part_log FINAL;
</code></pre><p><strong>&#x4F18;&#x5316;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;</strong></p><p><code>part_log</code> &#x7684;&#x4F18;&#x5316;&#x66F4;&#x4FA7;&#x91CD;&#x4E8E;<strong>&#x5B57;&#x6BB5;&#x7C92;&#x5EA6;&#x7684;&#x63A7;&#x5236;</strong>&#xFF0C;&#x800C;&#x975E;&#x91C7;&#x6837;&#xFF08;&#x901A;&#x5E38;&#x4E0D;&#x63A8;&#x8350;&#x5BF9; <code>part_log</code> &#x91C7;&#x6837;&#xFF0C;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x5173;&#x952E;&#x4E8B;&#x4EF6;&#x4E22;&#x5931;&#xFF09;&#xFF1A;</p><ul><li><strong><code>&lt;ttl&gt;</code></strong>&#xFF1A;&#x5EFA;&#x8BAE;&#x8BBE;&#x7F6E;&#x4E3A; <strong><code>90 DAY</code> &#x6216;&#x66F4;&#x957F;</strong>&#x3002;&#x5206;&#x533A;&#x95EE;&#x9898;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x56DE;&#x6EAF;&#x8F83;&#x957F;&#x65F6;&#x95F4;&#x3002;</li><li><strong><code>&lt;log_queries&gt;</code></strong>&#xFF1A;&#x8BBE;&#x4E3A; <strong><code>0</code></strong>&#x3002;&#x9664;&#x975E;&#x4F60;&#x9700;&#x8981;&#x660E;&#x786E;&#x77E5;&#x9053;&#x662F;&#x54EA;&#x6761;SQL&#x89E6;&#x53D1;&#x4E86;&#x5206;&#x533A;&#x64CD;&#x4F5C;&#xFF0C;&#x5426;&#x5219;&#x5173;&#x95ED;&#x6B64;&#x5B57;&#x6BB5;&#x80FD;&#x663E;&#x8457;&#x51CF;&#x5C11;&#x8BB0;&#x5F55;&#x4F53;&#x79EF;&#x3002;</li><li><strong><code>&lt;log_server_timezone&gt;</code></strong>&#xFF1A;&#x8BBE;&#x4E3A; <strong><code>0</code></strong>&#x3002;&#x4E8B;&#x4EF6;&#x65F6;&#x95F4;&#x901A;&#x5E38;&#x8DB3;&#x591F;&#x7528;&#x4E8E;&#x5206;&#x6790;&#x3002;</li></ul><p>&#x4FEE;&#x6539; <strong><code>/etc/clickhouse-server/config.xml</code></strong> &#x6216;&#x5176; <code>config.d/</code> &#x4E0B;&#x7684;&#x6587;&#x4EF6;&#x662F;&#x6839;&#x672C;&#x65B9;&#x6CD5;&#x3002;&#x4EE5;&#x4E0B;&#x662F;&#x517C;&#x987E;&#x76D1;&#x63A7;&#x4E0E;&#x5B58;&#x50A8;&#x7684;&#x914D;&#x7F6E;&#x793A;&#x4F8B;&#xFF1A;</p><pre><code>&lt;!-- /etc/clickhouse-server/config.d/part_log_config.xml --&gt;
&lt;yandex&gt;
    &lt;part_log&gt;
        &lt;database&gt;system&lt;/database&gt;
        &lt;table&gt;part_log&lt;/table&gt;
        &lt;partition_by&gt;toYYYYMM(event_date)&lt;/partition_by&gt;
        &lt;!-- &#x4FDD;&#x7559;&#x8F83;&#x957F;&#x65F6;&#x95F4;&#xFF0C;&#x56E0;&#x5176;&#x7528;&#x4E8E;&#x6392;&#x67E5;&#x5386;&#x53F2;&#x6570;&#x636E;&#x95EE;&#x9898; --&gt;
        &lt;ttl&gt;event_date + INTERVAL 90 DAY&lt;/ttl&gt;
        &lt;!-- &#x6838;&#x5FC3;&#xFF1A;&#x5173;&#x95ED;&#x975E;&#x5173;&#x952E;&#x6216;&#x5197;&#x4F59;&#x5B57;&#x6BB5;&#x7684;&#x8BB0;&#x5F55; --&gt;
        &lt;log_queries&gt;0&lt;/log_queries&gt;           &lt;!-- &#x901A;&#x5E38;&#x65E0;&#x9700;&#x8BB0;&#x5F55;&#x89E6;&#x53D1;&#x5206;&#x533A;&#x64CD;&#x4F5C;&#x7684;&#x67E5;&#x8BE2; --&gt;
        &lt;log_server_timezone&gt;0&lt;/log_server_timezone&gt; &lt;!-- &#x8282;&#x7701;&#x7A7A;&#x95F4; --&gt;
    &lt;/part_log&gt;
&lt;/yandex&gt;
</code></pre><h2 id="%E5%9B%9B%E3%80%81%E9%AA%8C%E8%AF%81%E6%B5%8B%E8%AF%95">&#x56DB;&#x3001;&#x9A8C;&#x8BC1;&#x6D4B;&#x8BD5;</h2><ul><li>&#x67E5;&#x770B;&#x96C6;&#x7FA4;</li></ul><pre><code>SHOW clusters;
</code></pre><ul><li>&#x67E5;&#x770B;&#x96C6;&#x7FA4;&#x62D3;&#x6251;</li></ul><pre><code>select cluster,host_name,host_address,user, errors_count, is_active from system.clusters;
</code></pre><ul><li>&#x67E5;&#x770B;volume_type &#x7C7B;&#x578B;</li></ul><pre><code>SELECT
    policy_name,
    volume_name,
    volume_type,
    load_balancing,
    disks
FROM system.storage_policies;
</code></pre><ul><li>&#x67E5;&#x770B;&#x6240;&#x6709;&#x6570;&#x636E;&#x5E93;&#x5360;&#x7528;&#x7684;&#x7A7A;&#x95F4;&#x5927;&#x5C0F;</li></ul><pre><code>-- &#x67E5;&#x770B;&#x6240;&#x6709;&#x6570;&#x636E;&#x5E93;&#x7684;&#x5927;&#x5C0F;&#xFF08;&#x6309;&#x6570;&#x636E;&#x5E93;&#x5206;&#x7EC4;&#xFF09;
SELECT 
    database,
    formatReadableSize(sum(bytes_on_disk)) AS size,
    formatReadableSize(sum(rows_count) * avg(row_size)) AS estimated_size
FROM system.parts
WHERE active
GROUP BY database
ORDER BY sum(bytes_on_disk) DESC;
</code></pre><ul><li>&#x67E5;&#x770B;&#x6307;&#x5B9A;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x6240;&#x6709;&#x8868;&#x7684;&#x5927;&#x5C0F;</li></ul><pre><code>-- &#x67E5;&#x770B;&#x67D0;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#xFF08;&#x4F8B;&#x5982;my_db&#xFF09;&#x4E2D;&#x6240;&#x6709;&#x8868;&#x7684;&#x5927;&#x5C0F;
SELECT 
    table AS table_name,
    formatReadableSize(sum(bytes)) AS size,
    formatReadableSize(sum(data_compressed_bytes)) AS compressed_size,
    formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size,
    sum(rows) AS total_rows,
    count() AS parts_count
FROM system.parts
WHERE database = &apos;my_db&apos; AND active
GROUP BY table
ORDER BY sum(bytes) DESC;
</code></pre><ul><li>&#x67E5;&#x770B;&#x7279;&#x5B9A;&#x8868;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;</li></ul><pre><code>-- &#x67E5;&#x770B;&#x7279;&#x5B9A;&#x8868;&#x7684;&#x8BE6;&#x7EC6;&#x7A7A;&#x95F4;&#x4F7F;&#x7528;&#x60C5;&#x51B5;
SELECT 
    partition,
    name AS part_name,
    rows,
    formatReadableSize(bytes_on_disk) AS size_on_disk,
    formatReadableSize(data_compressed_bytes) AS compressed_size,
    formatReadableSize(data_uncompressed_bytes) AS uncompressed_size,
    formatReadableSize(marks_bytes) AS marks_size,
    compression_codec,
    active
FROM system.parts
WHERE database = &apos;my_db&apos; AND table = &apos;my_table&apos;
ORDER BY partition, name;
</code></pre><ul><li>&#x67E5;&#x770B;&#x6BCF;&#x4E2A;&#x5217;&#x7684;&#x5B58;&#x50A8;&#x5927;&#x5C0F;</li></ul><pre><code>-- &#x67E5;&#x770B;&#x8868;&#x4E2D;&#x6BCF;&#x4E2A;&#x5217;&#x7684;&#x5B58;&#x50A8;&#x5927;&#x5C0F;
SELECT 
    table,
    column,
    formatReadableSize(sum(column_data_compressed_bytes)) AS compressed_size,
    formatReadableSize(sum(column_data_uncompressed_bytes)) AS uncompressed_size,
    formatReadableSize(sum(column_data_uncompressed_bytes) - 
                      sum(column_data_compressed_bytes)) AS saved_size,
    round((sum(column_data_uncompressed_bytes) - 
           sum(column_data_compressed_bytes)) / 
           sum(column_data_uncompressed_bytes) * 100, 2) AS compression_ratio_percent
FROM system.parts_columns
WHERE database = &apos;my_db&apos; AND table = &apos;my_table&apos;
GROUP BY table, column
ORDER BY sum(column_data_compressed_bytes) DESC;
</code></pre><ul><li>&#x67E5;&#x770B;&#x5206;&#x5E03;&#x5F0F;&#x8868;&#x7684;&#x5927;&#x5C0F;</li></ul><pre><code>-- &#x5BF9;&#x4E8E;&#x5206;&#x5E03;&#x5F0F;&#x8868;&#xFF0C;&#x67E5;&#x770B;&#x6BCF;&#x4E2A;&#x5206;&#x7247;&#x7684;&#x5927;&#x5C0F;
SELECT 
    shard_num,
    formatReadableSize(sum(bytes)) AS size,
    sum(rows) AS rows
FROM clusterAllReplicas(&apos;cluster_name&apos;, system.parts)
WHERE database = &apos;my_db&apos; AND table = &apos;my_table&apos; AND active
GROUP BY shard_num
ORDER BY shard_num;
</code></pre><ul><li>&#x67E5;&#x770B;system &#x5E93;&#x8868;&#x7684;&#x5927;&#x5C0F;</li></ul><pre><code>SELECT 
    table,
    formatReadableSize(sum(bytes_on_disk)) AS size,
    formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size,
    sum(rows) AS rows,
    count() AS parts_count
FROM system.parts
WHERE database = &apos;system&apos; AND active
GROUP BY table
ORDER BY sum(bytes_on_disk) DESC
LIMIT 20;
</code></pre><ul><li>&#x7D27;&#x6025;&#x5904;&#x7406;&#x6240;&#x6709;&#x65E5;&#x5FD7;&#x4FE1;&#x606F;</li></ul><pre><code>-- &#x7D27;&#x6025;&#x6E05;&#x7406;&#x6240;&#x6709;&#x65E7;&#x7684;&#x65E5;&#x5FD7;&#x6570;&#x636E;
ALTER TABLE system.query_log DELETE WHERE 1=1;
ALTER TABLE system.query_thread_log DELETE WHERE 1=1;
ALTER TABLE system.trace_log DELETE WHERE 1=1;

-- &#x5F3A;&#x5236;&#x5408;&#x5E76;parts&#xFF08;&#x56DE;&#x6536;&#x7A7A;&#x95F4;&#xFF09;
OPTIMIZE TABLE system.query_log FINAL;
OPTIMIZE TABLE system.query_thread_log FINAL;
</code></pre><p></p><h2 id="%E4%BA%94%E3%80%81%E5%88%9B%E5%BB%BA%E8%8C%83%E4%BE%8B">&#x4E94;&#x3001;&#x521B;&#x5EFA;&#x8303;&#x4F8B;</h2><pre><code>CREATE TABLE t1 ON cluster &apos;default&apos; (
  dt DateTime,
  customer_id UInt32,
  total_spent Float32
) ENGINE = ReplicatedMergeTree(&apos;/clickhouse/tables/{database}/{table}/{shard}&apos;, &apos;{replica}&apos;)
ORDER BY dt;


INSERT INTO t1 SELECT now() - INTERVAL randUniform(1,1_000_000) SECOND AS dt,
  number AS customer_id,
  15 + round(randExponential(1/10), 2) AS total_spent
FROM numbers(5000000);

// &#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x67E5;&#x8BE2;
SELECT COUNT(*) from t1;</code></pre><h2 id="%E5%85%AD%E3%80%81%E5%8F%82%E8%80%83%E5%BC%95%E7%94%A8">&#x516D;&#x3001;&#x53C2;&#x8003;&#x5F15;&#x7528;</h2><ul><li>&#x3010;1&#x3011;<a href="https://clickhouse.com/docs/zh/guides/sre/keeper/clickhouse-keeper">https://clickhouse.com/docs/zh/guides/sre/keeper/clickhouse-keeper</a></li><li>&#x3010;2&#x3011; <a href="https://www.cnblogs.com/wangguishe/p/18764567">https://www.cnblogs.com/wangguishe/p/18764567</a></li></ul>]]></content:encoded></item><item><title><![CDATA[node-exporter添加凭证]]></title><description><![CDATA[<h3 id="%E4%B8%BAnode-exporter%E6%B7%BB%E5%8A%A0%E5%87%AD%E8%AF%81"><br>&#x4E3A;Node-Exporter&#x6DFB;&#x52A0;&#x51ED;&#x8BC1;</h3><p><br>&#x751F;&#x6210;&#x52A0;&#x5BC6;&#x5BC6;&#x7801;<br></p><ul><li>&#x4F7F;&#x7528;htpasswd&#x751F;&#x6210;&#x52A0;&#x5BC6;&#x5BC6;&#x7801;</li></ul><pre><code class="language-bash">htpasswd -nBC 12 &quot;&#x5BC6;&#x7801;&quot; | tr -d &apos;:\n&apos;</code></pre><p><br></p><ul><li>&#x5982;&#x679C;&#x6CA1;&#x6709;htpasswd&#x5DE5;&#x5177;&#xFF0C;&#x53EF;&#x4EE5;Python&#x811A;&#x672C;</li></ul><pre><code class="language-bash">#!/usr/bin/python3
import</code></pre>]]></description><link>https://vqiu.cn/node-exporter-with-auth/</link><guid isPermaLink="false">691ec96c1239360001708613</guid><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Wed, 24 Dec 2025 05:47:08 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/12/----_20251224134544_19_190.jpg" medium="image"/><content:encoded><![CDATA[<h3 id="%E4%B8%BAnode-exporter%E6%B7%BB%E5%8A%A0%E5%87%AD%E8%AF%81"><br>&#x4E3A;Node-Exporter&#x6DFB;&#x52A0;&#x51ED;&#x8BC1;</h3><img src="https://vqiu.cn/content/images/2025/12/----_20251224134544_19_190.jpg" alt="node-exporter&#x6DFB;&#x52A0;&#x51ED;&#x8BC1;"><p><br>&#x751F;&#x6210;&#x52A0;&#x5BC6;&#x5BC6;&#x7801;<br></p><ul><li>&#x4F7F;&#x7528;htpasswd&#x751F;&#x6210;&#x52A0;&#x5BC6;&#x5BC6;&#x7801;</li></ul><pre><code class="language-bash">htpasswd -nBC 12 &quot;&#x5BC6;&#x7801;&quot; | tr -d &apos;:\n&apos;</code></pre><p><br></p><ul><li>&#x5982;&#x679C;&#x6CA1;&#x6709;htpasswd&#x5DE5;&#x5177;&#xFF0C;&#x53EF;&#x4EE5;Python&#x811A;&#x672C;</li></ul><pre><code class="language-bash">#!/usr/bin/python3
import getpass
import bcrypt

password = getpass.getpass(&quot;password: &quot;)
hashed_password = bcrypt.hashpw(password.encode(&quot;utf-8&quot;), bcrypt.gensalt())
print(hashed_password.decode())</code></pre><blockquote>&#x82E5;&#x63D0;&#x793A;&#x6CA1;&#x6709;bcrypt&#x6A21;&#x5757;&#xFF0C;&#x5B89;&#x88C5; python3-bcrypt &#x5305;&#x5373;&#x53EF;&#xFF01;<br><br>&#x521B;&#x5EFA;&#x8BA4;&#x8BC1;configmap</blockquote><pre><code class="language-yaml">cat &lt;&lt;EOF | kubectl -n monitoring apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
    name: node-exporter-auth
data:
  config.yml: |-
    basic_auth_users:
      # &#x660E;&#x6587;&#x5BC6;&#x7801;&#xFF1A; Prometheus#8848
      prometheus: $2b$12$2Q0gbz9ImypKSnG5oZbkGemhVobks7fT1iG2IPFlseWsnBO5v7F8q
EOF</code></pre><p><br>&#x66F4;&#x65B0; kube-prometheus-node-exporter &#xFF0C;&#x8BA9;&#x5176;&#x5173;&#x8054;&#x8BA4;&#x8BC1;<br></p><pre><code class="language-bash">kubectl -n monitoring edit ds kube-prometheus-node-exporter</code></pre><p><br>&#x5904;&#x7406;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-bash">      containers:
      - args:
        - --web.config.file=/etc/node_exporter/config.yml
        
        volumeMounts:
        - mountPath: /etc/node_exporter
          name: node-exporter-config
          
      volumes:
      - configMap:
          defaultMode: 420
          name: node-exporter-auth
        name: node-exporter-config</code></pre><p><br>&#x56E0;&#x63A5;&#x53E3;&#x8FFD;&#x52A0;&#x4E86;&#x51ED;&#x8BC1;&#xFF0C;&#x6240;&#x4EE5;&#x9700;&#x8981;&#x5728;&#x63A2;&#x9488;&#x914D;&#x7F6E;&#x4E0A;&#x6DFB;&#x52A0;&#x8BA4;&#x8BC1;&#x5934;&#x90E8;&#xFF0C;&#x5426;&#x5219;&#x65E0;&#x6CD5;&#x901A;&#x8FC7;</p><pre><code class="language-yaml">        livenessProbe:
          failureThreshold: 6
          httpGet:
            ### &#x65B0;&#x589E;&#x5185;&#x5BB9;&#x5F00;&#x59CB; ###
            httpHeaders:
            - name: Authorization
              value: Basic cHJvbWV0aGV1czpQcm9tZXRoZXVzIzg4NDg=
            ### &#x65B0;&#x589E;&#x5185;&#x5BB9;&#x7ED3;&#x675F; ###
            path: /
            port: metrics
            scheme: HTTP
          initialDelaySeconds: 120
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        readinessProbe:
          failureThreshold: 6
          httpGet:
            ### &#x65B0;&#x589E;&#x5185;&#x5BB9;&#x5F00;&#x59CB; ###
            httpHeaders:
            - name: Authorization
              value: Basic cHJvbWV0aGV1czpQcm9tZXRoZXVzIzg4NDg=
            ### &#x65B0;&#x589E;&#x5185;&#x5BB9;&#x7ED3;&#x675F; ###
            path: /
            port: metrics
            scheme: HTTP
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
</code></pre><p><br><br>&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x6D4B;&#x8BD5;</p><pre><code class="language-bash">$ curl --user prometheus:Prometheus#8848 &apos;http://&#x8282;&#x70B9;IP&#x5730;&#x5740;:9100/metrics&apos;


$ curl -H &quot;Authorization: Basic cHJvbWV0aGV1czpQcm9tZXRoZXVzIzg4NDg=&quot; http://localhost:9100/metrics</code></pre><p><br></p><h3 id="servicemonitor%E5%85%B3%E8%81%94%E5%87%AD%E8%AF%81">ServiceMonitor&#x5173;&#x8054;&#x51ED;&#x8BC1;</h3><p><br>&#x521B;&#x5EFA;&#x4EE5;&#x4E0B;prometheus&#x8BBF;&#x95EE;node-exporter&#x670D;&#x52A1;&#x51ED;&#x8BC1;</p><pre><code class="language-yaml">cat &lt;&lt;EOF | kubectl -n monitoring apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: node-exporter-metrics-auth
stringData:
  username: prometheus
  password: Prometheus#8848
type: Opaque
EOF</code></pre><p><br>&#x7F16;&#x8F91;&#x540D;&#x4E3A;kube-prometheus-node-exporter&#x7684;ServiceMonitor</p><pre><code class="language-bash">kubectl -n monitoring edit ServiceMonitor kube-prometheus-node-exporter</code></pre><p><br>&#x8FFD;&#x52A0;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;</p><pre><code class="language-yaml">apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: kube-prometheus-node-exporter
  namespace: monitoring
spec:
  endpoints:
  - port: metrics
  # &#x65B0;&#x589E;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;
  - basicAuth:
      username:
        key: username
        name: node-exporter-metrics-auth
      password:
        key: password
        name: node-exporter-metrics-auth
...&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;...</code></pre><p></p><h2 id="%E5%8F%82%E8%80%83%E5%BC%95%E7%94%A8">&#x53C2;&#x8003;&#x5F15;&#x7528;</h2><ul><li>[1] <a href="https://dev.to/cod3mason/securing-node-exporter-metrics-2ome">https://dev.to/cod3mason/securing-node-exporter-metrics-2ome</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Kafka kraft  模式非容器化部署]]></title><description><![CDATA[<p></p><h2 id="%E7%89%88%E6%9C%AC">&#x7248;&#x672C;</h2><ul><li>OpenJDK&#xFF1A;jdk-17.0.17+10</li><li>Kafka&#xFF1A;3.9.1</li></ul><p></p><h2 id="%E8%8A%82%E7%82%B9%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE">&#x8282;&#x70B9;&#x57FA;&#x7840;&#x914D;&#x7F6E;</h2><h3 id="%E7%B3%BB%E7%BB%9F%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0">&#x7CFB;&#x7EDF;&#x5185;&#x6838;&#x53C2;&#x6570;</h3><pre><code># cat &gt; /etc/sysctl.d/99-kafka.conf&lt;&lt;EOF
# /etc/sysctl.d/99-kafka.conf

# ==================== &#x5185;&#x5B58;&#x7B56;&#x7565; ====================
vm.overcommit_memory = 1
vm.swappiness</code></pre>]]></description><link>https://vqiu.cn/kafka-installation-on-kraft-mode/</link><guid isPermaLink="false">694133ca7967c50001c9573e</guid><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Tue, 16 Dec 2025 15:53:28 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/12/----_20251224134551_22_190.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://vqiu.cn/content/images/2025/12/----_20251224134551_22_190.jpg" alt="Kafka kraft  &#x6A21;&#x5F0F;&#x975E;&#x5BB9;&#x5668;&#x5316;&#x90E8;&#x7F72;"><p></p><h2 id="%E7%89%88%E6%9C%AC">&#x7248;&#x672C;</h2><ul><li>OpenJDK&#xFF1A;jdk-17.0.17+10</li><li>Kafka&#xFF1A;3.9.1</li></ul><p></p><h2 id="%E8%8A%82%E7%82%B9%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE">&#x8282;&#x70B9;&#x57FA;&#x7840;&#x914D;&#x7F6E;</h2><h3 id="%E7%B3%BB%E7%BB%9F%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0">&#x7CFB;&#x7EDF;&#x5185;&#x6838;&#x53C2;&#x6570;</h3><pre><code># cat &gt; /etc/sysctl.d/99-kafka.conf&lt;&lt;EOF
# /etc/sysctl.d/99-kafka.conf

# ==================== &#x5185;&#x5B58;&#x7B56;&#x7565; ====================
vm.overcommit_memory = 1
vm.swappiness = 1
vm.dirty_ratio = 5
vm.dirty_background_ratio = 3

# ==================== &#x5927;&#x8282;&#x70B9;&#x8D44;&#x6E90;&#x6269;&#x5C55; ====================
fs.inotify.max_user_watches = 1048576
fs.inotify.max_user_instances = 16384
fs.nr_open = 2097152
fs.file-max = 2097152
vm.max_map_count = 262144
fs.aio-max-nr = 1048576

# ==================== &#x7F51;&#x7EDC;&#x4F18;&#x5316; ====================
net.core.somaxconn = 32768
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.ip_local_port_range = 10240 65535
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 65536 4194304

# ==================== Conntrack ====================
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30
EOF</code></pre><p></p><h3 id="%E5%85%B3%E9%97%AD%E9%80%8F%E6%98%8E%E5%A4%A7%E9%A1%B5%EF%BC%88thp%EF%BC%89">&#x5173;&#x95ED;&#x900F;&#x660E;&#x5927;&#x9875;&#xFF08;THP&#xFF09;</h3><pre><code># echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled
# echo never &gt; /sys/kernel/mm/transparent_hugepage/defrag</code></pre><blockquote>&#x63D0;&#x793A;&#xFF1A;&#x8BE5;&#x7279;&#x6027;&#x4E5F;&#x53EF;&#x4EE5;&#x8FFD;&#x52A0;&#x5230;systemd&#x91CC;&#x9762;&#xFF0C;&#x524D;&#x63D0;&#x9700;&#x8981;root&#x6743;&#x9650;</blockquote><p></p><h2 id="%E9%85%8D%E7%BD%AEjdk%E7%8E%AF%E5%A2%83">&#x914D;&#x7F6E;JDK&#x73AF;&#x5883;</h2><p>&#x76F4;&#x63A5;&#x5C06;&#x5305;&#x89E3;&#x538B;&#x5E76;&#x521B;&#x5EFA;&#x8F6F;&#x94FE;&#x63A5;</p><pre><code>tar acvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.17_10.tar.gz -C /usr/local
cd /usr/local &amp;&amp; ln -svf /usr/local/jdk-17.0.17+10 jdk</code></pre><p></p><p>&#x8BBE;&#x7F6E;&#x7CFB;&#x7EDF;&#x73AF;&#x5883;&#x53D8;&#x91CF;</p><pre><code>cat &gt;/etc/profile.d/java.sh&lt;&lt;EOF
export PATH=\$PATH:/usr/local/jdk/bin
EOF</code></pre><p></p><p>&#x5B8C;&#x6210;&#x9A8C;&#x8BC1;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>$ java -version
openjdk version &quot;17.0.17&quot; 2025-10-21
OpenJDK Runtime Environment Temurin-17.0.17+10 (build 17.0.17+10)
OpenJDK 64-Bit Server VM Temurin-17.0.17+10 (build 17.0.17+10, mixed mode, sharing)</code></pre><p></p><h2 id="%E5%AE%89%E8%A3%85kafka">&#x5B89;&#x88C5;Kafka</h2><p>&#x4E0B;&#x8F7D;&#x5E76;&#x89E3;&#x538B;</p><pre><code>tar axvf kafka_2.13-3.9.1.tgz -C /usr/local
cd /usr/local &amp;&amp; ln -svf kafka_2.13-3.9.1 kafka</code></pre><p></p><h2 id="%E9%85%8D%E7%BD%AEkafka%E7%8E%AF%E5%A2%83">&#x914D;&#x7F6E;Kafka&#x73AF;&#x5883;</h2><p></p><h3 id="%E5%8D%95%E7%82%B9%E9%85%8D%E7%BD%AE">&#x5355;&#x70B9;&#x914D;&#x7F6E;</h3><p>&#x9002;&#x7528;&#x4E8E;&#x5F00;&#x53D1;&#x3001;&#x6D4B;&#x8BD5;&#x73AF;&#x5883;&#x3002;</p><p>&#x7F16;&#x8F91; /usr/local/kafka/config/kraft/server.properties&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5185;&#x5BB9;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>process.roles=broker,controller

node.id=41

controller.quorum.voters=41@110.10.2.41

# &#x76D1;&#x542C;&#x8282;&#x70B9;&#x6240;&#x6709;&#x7F51;&#x5361;
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093

# &#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;&#x65F6;&#x4F7F;&#x7528;&#x7684;&#x5730;&#x5740;&#x3002;&#x5FC5;&#x987B;&#x8BBE;&#x7F6E;&#x4E3A;&#x5BA2;&#x6237;&#x7AEF;&#x80FD;&#x4ECE;&#x5176;&#x7F51;&#x7EDC;&#x73AF;&#x5883;&#x8BBF;&#x95EE;&#x5230;&#x7684;&#x5730;&#x5740;&#xFF08;&#x5982;&#x516C;&#x7F51;IP&#x3001;&#x57DF;&#x540D;&#x3001;&#x4E3B;&#x673A;&#x540D;&#xFF09;&#xFF0C;&#x4E0D;&#x586B;&#x5199;&#x5C06;&#x7EE7;&#x627F;listeners
advertised.listeners=PLAINTEXT://110.10.2.41:9092,CONTROLLER://110.10.2.41:9092

inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER

listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

num.partitions=1
num.recovery.threads.per.data.dir=1
num.network.threads=3
num.io.threads=8

offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

log.dirs=/data/kafka
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000</code></pre><p></p><h3 id="%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE">&#x96C6;&#x7FA4;&#x914D;&#x7F6E;</h3><p>&#x9002;&#x7528;&#x4E8E;&#x751F;&#x4EA7;&#x73AF;&#x5883;&#x3002;</p><p>&#x7F16;&#x8F91; /usr/local/kafka/config/kraft/server.properties&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5185;&#x5BB9;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>
# ==================== Broker &#x6807;&#x8BC6; ====================
process.roles=broker,controller
node.id=93

# ==================== Controller &#x4EF2;&#x88C1; ====================
controller.quorum.voters=93@10.138.98.93:9093,94@10.138.98.94:9093,95@10.138.98.95:9093
controller.listener.names=CONTROLLER

# ==================== &#x76D1;&#x542C;&#x5668; ====================
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://10.138.98.93:9092,CONTROLLER://10.138.98.93:9093
inter.broker.listener.name=PLAINTEXT

# ==================== &#x5B89;&#x5168;&#xFF08;&#x9632;&#x706B;&#x5899;&#x515C;&#x5E95;&#xFF09; ====================
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

# ==================== Socket &#x9650;&#x6D41; ====================
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

# ==================== &#x7EBF;&#x7A0B;&#x6A21;&#x578B; ====================
num.network.threads=8
num.io.threads=8
num.recovery.threads.per.data.dir=1

# ==================== &#x5206;&#x533A;&#x4E0E;&#x526F;&#x672C; ====================
num.partitions=3
default.replication.factor=3
min.insync.replicas=2

# ==================== &#x9009;&#x4E3E;&#x7B56;&#x7565; ====================
unclean.leader.election.enable=false
auto.leader.rebalance.enable=false

# ==================== &#x5185;&#x90E8; Topic ====================
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2

# ==================== &#x6570;&#x636E;&#x5B58;&#x50A8; ====================
log.dirs=/data/kafka
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

# ==================== &#x6D88;&#x606F;&#x5305;&#x5927;&#x5C0F; ====================
message.max.bytes=10485760
replica.fetch.max.bytes=10485800

# ==================== &#x538B;&#x7F29; ====================
compression.type=lz4

# ==================== &#x6D88;&#x8D39;&#x8005;&#x534F;&#x8C03; ====================
group.initial.rebalance.delay.ms=6000
offsets.retention.minutes=10080

# ==================== &#x751F;&#x4EA7;&#x8005;/&#x6D88;&#x8D39;&#x8005;&#x914D;&#x989D; ====================
quota.producer.default=104857600
quota.consumer.default=104857600</code></pre><p></p><h3 id="%E5%88%9D%E5%A7%8B%E5%8C%96%E9%9B%86%E7%BE%A4%E6%95%B0%E6%8D%AE"><strong>&#x521D;&#x59CB;&#x5316;&#x96C6;&#x7FA4;&#x6570;&#x636E;</strong></h3><p>&#x751F;&#x6210;UUID</p><pre><code>$ bin/kafka-storage.sh random-uuid
s9xNEMd-QkeBCwmMkyXwCw</code></pre><p></p><p>&#x521B;&#x5EFA;&#x6570;&#x636E;&#x76EE;&#x5F55;</p><pre><code># install -d -o vqiu -g vqiu /data/kafka</code></pre><p></p><p>&#x521D;&#x59CB;&#x5316;&#x6570;&#x636E;&#x76EE;&#x5F55;</p><pre><code>$ bin/kafka-storage.sh format -t s9xNEMd-QkeBCwmMkyXwCw  -c /usr/local/kafka/config/kraft/server.properties</code></pre><blockquote>&#x5982;&#x679C;&#x4E3A;&#x96C6;&#x7FA4;&#xFF0C;&#x6BCF;&#x8282;&#x70B9;&#x90FD;&#x9700;&#x8981;&#x6267;&#x884C;&#x3002;</blockquote><p></p><p>&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;</p><pre><code>cat &gt;/etc/profile.d/kafka.sh&lt;&lt;EOF
export KAFKA_HOME=/usr/local/kafka
export PATH=\$PATH:${KAFKA_HOME}/bin
EOF</code></pre><p></p><p>&#x4F7F;&#x7528;systemd&#x6765;&#x63A7;&#x5236;kafka</p><pre><code>cat  &gt;/usr/lib/systemd/system/kafka.service&lt;&lt;EOF
[Unit]
Description=Apache Kafka server with Kraft mode
Documentation=http://kafka.apache.org/documentation.html
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=vqiu
Group=vqiu
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=1048576
Environment=JAVA_HOME=/usr/local/jdk
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh \
          /usr/local/kafka/config/kraft/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target
EOF</code></pre><p></p><p>&#x68C0;&#x67E5; Kafka &#x662F;&#x5426;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#xFF1A;</p><pre><code>jcmd | grep kafka</code></pre><p></p><h2 id="%E6%9F%A5%E7%9C%8B%E9%9B%86%E7%BE%A4%E5%85%A8%E6%99%AF">&#x67E5;&#x770B;&#x96C6;&#x7FA4;&#x5168;&#x666F;</h2><p></p><ol><li>&#x5217;&#x51FA;&#x96C6;&#x7FA4;&#x4E2D;&#x6240;&#x6709;&#x7684; Broker &#x8282;&#x70B9;&#xFF08;&#x8FD9;&#x662F;&#x9996;&#x8981;&#x68C0;&#x67E5;&#x9879;&#xFF09;</li></ol><pre><code>kafka-broker-api-versions.sh --bootstrap-server &lt;&#x5F53;&#x524D;&#x8282;&#x70B9;IP&gt;:9092</code></pre><p>2.&#x67E5;&#x770B;&#x6240;&#x6709; Topic &#x7684;&#x8BE6;&#x7EC6;&#x72B6;&#x6001;&#xFF08;&#x5206;&#x533A;&#x3001;&#x526F;&#x672C;&#x3001;Leader&#x5206;&#x5E03;&#xFF09;</p><pre><code>bin/kafka-topics.sh --bootstrap-server &lt;&#x5F53;&#x524D;&#x8282;&#x70B9;IP&gt;:9092 --describe</code></pre><p></p><h2 id="%E5%85%B3%E4%BA%8E%E5%A0%86%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D">&#x5173;&#x4E8E;&#x5806;&#x5185;&#x5B58;&#x5206;&#x914D;</h2><p>&#x9ED8;&#x8BA4;&#x901A;&#x5E38;&#x53EA;&#x5206;&#x914D;1G&#x5927;&#x5C0F;&#xFF0C;&#x5982;&#x679C;&#x9700;&#x8981;&#x989D;&#x5916;&#x5206;&#x914D;JVM &#x5806;&#x5185;&#x5B58;&#xFF0C;&#x53EF;&#x4EE5;&#x7F16;&#x8F91; bin/kafka-server-start.sh &#x6587;&#x4EF6;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[OpenVPN系列 -  解决1小时准时掉线问题]]></title><description><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x4F7F;&#x7528;OpenVPN&#x5BA2;&#x6237;&#x7AEF;&#x5728;&#x521A;&#x597D;1&#x4E2A;&#x5C0F;&#x65F6;&#x51C6;&#x65F6;&#x65AD;&#x5F00;&#x3002;</p><p></p><h2 id="%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5">&#x95EE;&#x9898;&#x6392;&#x67E5;</h2><p></p><p>&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x914D;&#x7F6E;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>port 1194
proto tcp
user nobody
group nogroup
dev tun

### &#x8BC1;&#x4E66;&#x76F8;&#x5173;&#x914D;&#x7F6E;
ca</code></pre>]]></description><link>https://vqiu.cn/openvpn-one-hour-disconnection/</link><guid isPermaLink="false">6934151a7967c50001c956ba</guid><category><![CDATA[故障记录]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Sat, 06 Dec 2025 16:07:20 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/12/----_20251224134545_20_190.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><img src="https://vqiu.cn/content/images/2025/12/----_20251224134545_20_190.jpg" alt="OpenVPN&#x7CFB;&#x5217; -  &#x89E3;&#x51B3;1&#x5C0F;&#x65F6;&#x51C6;&#x65F6;&#x6389;&#x7EBF;&#x95EE;&#x9898;"><p>&#x4F7F;&#x7528;OpenVPN&#x5BA2;&#x6237;&#x7AEF;&#x5728;&#x521A;&#x597D;1&#x4E2A;&#x5C0F;&#x65F6;&#x51C6;&#x65F6;&#x65AD;&#x5F00;&#x3002;</p><p></p><h2 id="%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5">&#x95EE;&#x9898;&#x6392;&#x67E5;</h2><p></p><p>&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x914D;&#x7F6E;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>port 1194
proto tcp
user nobody
group nogroup
dev tun

### &#x8BC1;&#x4E66;&#x76F8;&#x5173;&#x914D;&#x7F6E;
ca              certs/ca.crt
cert            certs/server.crt
key             certs/server.key
dh              certs/dh.pem
crl-verify      certs/crl.pem
tls-auth        certs/ta.key 0
tls-version-min 1.2
data-ciphers    AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
cipher          AES-256-GCM
data-ciphers    AES-256-GCM
auth            SHA256
persist-key
persist-tun
### &#x8BC1;&#x4E66;&#x76F8;&#x5173;&#x914D;&#x7F6E;

# TLS &#x4F1A;&#x8BDD;&#x7684;&#x91CD;&#x65B0;&#x534F;&#x5546;&#x65F6;&#x95F4;&#xFF0C;&#x9ED8;&#x8BA4; 3600&#x79D2;&#xFF0C;0&#x4E3A;&#x7981;&#x7528;
reneg-sec 0
server 10.255.0.0 255.255.255.0

# &#x5BA2;&#x6237;&#x7AEF;IP&#x6301;&#x4E45;&#x5316;&#x6587;&#x4EF6;
ifconfig-pool-persist ipp.txt

# &#x8868;&#x793A;&#x6BCF; 15 &#x79D2;&#x53D1;&#x9001;&#x5FC3;&#x8DF3;Ping&#x5305;&#xFF0C;120&#x79D2;&#x65E0;&#x54CD;&#x5E94;&#x5219;&#x65AD;&#x5F00;
keepalive 15 120

### &#x62D3;&#x6251;&#x6A21;&#x5F0F;
# net30&#xFF1A;&#x9ED8;&#x8BA4;&#x6A21;&#x5F0F;&#xFF0C;&#x6BCF;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x5206;&#x914D;&#x4E00;&#x4E2A;/30 &#x7684;&#x5B50;&#x7F51;&#xFF0C;C/S&#x4E4B;&#x95F4;&#x70B9;&#x5BF9;&#x70B9;&#x5B9E;&#x73B0;
# subnet&#xFF1A; C/S &#x4E4B;&#x95F4;&#x5171;&#x4EAB;&#x4E00;&#x4E2A;&#x5B50;&#x7F51;
# p2p&#xFF1A; &#x70B9;&#x5BF9;&#x70B9;&#x6A21;&#x5F0F;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x548C;&#x5BA2;&#x6237;&#x7AEF;&#x4E4B;&#x95F4;&#x76F4;&#x63A5;&#x901A;&#x4FE1;
topology subnet

# &#x5BA2;&#x6237;&#x7AEF;&#x4E4B;&#x95F4;&#x76F8;&#x4E92;&#x901A;&#x4FE1;
;client-to-client

### &#x65E5;&#x5FD7;&#x7EA7;&#x522B;
# 0	&#x9664;&#x4E86;&#x4E25;&#x91CD;&#x9519;&#x8BEF;&#x5916;&#x4E0D;&#x8F93;&#x51FA;&#x4EFB;&#x4F55;&#x5185;&#x5BB9;&#x3002;
# 1	&#x8F93;&#x51FA;&#x542F;&#x52A8;&#x4FE1;&#x606F;&#x3001;&#x8FDE;&#x63A5;&#x521D;&#x59CB;&#x5316;&#x6D88;&#x606F;&#x4EE5;&#x53CA;&#x975E;&#x81F4;&#x547D;&#x7684;&#x52A0;&#x5BC6;&#x548C;&#x7F51;&#x7EDC;&#x9519;&#x8BEF;&#x3002;
# 2	&#x663E;&#x793A; TLS &#x534F;&#x5546;&#x548C;&#x8DEF;&#x7531;&#x4FE1;&#x606F;&#x3002;
# 3	&#x9ED8;&#x8BA4;&#x7EA7;&#x522B;&#xFF0C;&#x663E;&#x793A;&#x8B66;&#x544A;&#x548C;&#x9519;&#x8BEF;&#x4FE1;&#x606F;&#x3002;
# 4	&#x663E;&#x793A;&#x53C2;&#x6570;&#x4FE1;&#x606F;&#x3002;
# 5	&#x663E;&#x793A;&#x6BCF;&#x4E2A;&#x4ECE; TCP/UDP &#x6216; tun/tap &#x53D1;&#x9001;&#x548C;&#x63A5;&#x6536;&#x7684;&#x6570;&#x636E;&#x5305;&#x4FE1;&#x606F;&#x3002;
# 6-11	&#x9010;&#x6E10;&#x589E;&#x52A0;&#x8BE6;&#x7EC6;&#x7A0B;&#x5EA6;&#x7684;&#x8C03;&#x8BD5;&#x6D88;&#x606F;&#xFF0C;&#x6700;&#x9AD8;&#x7EA7;&#x522B;&#xFF08;11&#xFF09;&#x4F1A;&#x8F93;&#x51FA;&#x6240;&#x6709;&#x65E5;&#x5FD7;&#x4FE1;&#x606F;&#x3002;
verb 3

# &#x5BA2;&#x6237;&#x7AEF;&#x65AD;&#x5F00;&#x65F6;&#xFF0C;&#x5411;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x9001;&#x9000;&#x51FA;&#x901A;&#x77E5;
explicit-exit-notify 1

# &#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x4F7F;&#x7528;&#x76F8;&#x540C;&#x7684;CN&#x8BC1;&#x4E66;&#x8FDE;&#x63A5;
#duplicate-cn

# &#x81EA;&#x5B9A;&#x4E49;&#x7528;&#x6237;&#x914D;&#x7F6E;&#x8DEF;&#x5F84;
client-config-dir /etc/openvpn/ccd

# &#x72B6;&#x6001;&#x65E5;&#x5FD7;&#x8F93;&#x51FA;&#x8DEF;&#x5F84;
status /var/log/openvpn-status.log

# &#x63A8;&#x9001;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8DEF;&#x7531;&#x8868;
;push &quot;route 10.0.0.0 255.255.255.0&quot;

# &#x5F3A;&#x5236;&#x5BA2;&#x6237;&#x7AEF;&#x5C06;&#x6240;&#x6709;&#x7F51;&#x7EDC;&#x6D41;&#x91CF;&#x901A;&#x8FC7; VPN &#x96A7;&#x9053;&#x53D1;&#x9001;
;push &quot;redirect-gateway def1 bypass-dhcp&quot;

# &#x63A8;&#x8350;&#x5BA2;&#x6237;&#x7AEF;DNS&#x5730;&#x5740;
;push &quot;dhcp-option DNS 192.168.255.1&quot;
dhcp-option DOMAIN vqiu.cn

# &#x5F15;&#x7528;&#x5916;&#x90E8;&#x63D2;&#x4EF6;
plugin /usr/local/openvpn/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn
# &#x4E0D;&#x4F7F;&#x7528;&#x5BA2;&#x6237;&#x7AEF;&#x8BC1;&#x4E66;
verify-client-cert none
username-as-common-name</code></pre><p></p><p>&#x5BA2;&#x6237;&#x7AEF;&#x914D;&#x7F6E;</p><pre><code>client
dev tun
proto udp
remote XXX 1194
resolv-retry infinite
nobind
persist-key
persist-tun
key-direction 1
auth-nocache
remote-cert-tls server
ignore-unknown-option block-outside-dns
auth SHA256
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC
verb 3
auth-user-pass
...&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;...</code></pre><p></p><h2 id="%E5%8E%9F%E5%9B%A0%E5%88%86%E6%9E%90">&#x539F;&#x56E0;&#x5206;&#x6790;</h2><p>&#x5176;&#x4E2D;&#x5BA2;&#x6237;&#x7AEF;&#x4FA7;&#x6709;&#x4E2A;<code>auth-nocache</code>&#x53C2;&#x6570;&#x3002;&#x8BE5;&#x53C2;&#x6570;&#x7528;&#x6765;&#x9632;&#x6B62;&#x5BA2;&#x6237;&#x7AEF;&#x5728;&#x91CD;&#x65B0;&#x8FDE;&#x63A5;&#x65F6;&#x4F7F;&#x7528;&#x65E7;&#x7684;TLS&#x5BC6;&#x94A5;&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x4F1A;&#x963B;&#x6B62;OpenVPN&#x7F13;&#x5B58;TLS&#x5BC6;&#x94A5;&#xFF0C;&#x4F46;&#x6BCF;&#x6B21;&#x8FDE;&#x63A5;&#x65F6;&#x90FD;&#x4F1A;&#x751F;&#x6210;&#x65B0;&#x7684;&#x5BC6;&#x94A5;&#x5BF9;&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x4E2D;&#x65AD;&#x4E86;&#x3002;</p><p></p><h2 id="%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3">&#x95EE;&#x9898;&#x89E3;&#x51B3;</h2><p>&#x5BA2;&#x6237;&#x7AEF;&#x4FA7;&#x62FF;&#x6389;auth-nocache &#x53C2;&#x6570;&#xFF0C;&#x540C;&#x65F6;&#x670D;&#x52A1;&#x5668;&#x4FA7;Server.conf&#x6587;&#x4EF6;&#x65B0;&#x589E;&#x4EE5;&#x4E0B;&#x914D;&#x7F6E;&#xFF1A;</p><pre><code>
# TLS &#x4F1A;&#x8BDD;&#x7684;&#x91CD;&#x65B0;&#x534F;&#x5546;&#x65F6;&#x95F4;&#xFF0C;&#x9ED8;&#x8BA4; 3600&#x79D2;&#xFF0C;0&#x4E3A;&#x7981;&#x7528;,&#x8FD9;&#x91CC;&#x914D;&#x7F6E;24&#x5C0F;&#x65F6;
reneg-sec 86400

# &#x8BA4;&#x8BC1;&#x4EE4;&#x724C;&#x6709;&#x6548;&#x65F6;&#x95F4;,&#x5355;&#x4F4D;&#x79D2;
auth-gen-token 86400

# &#x63A8;&#x9001;TLS &#x4F1A;&#x8BDD;&#x91CD;&#x65B0;&#x534F;&#x5546;&#x65F6;&#x95F4;
push &quot;reneg-sec 86400&quot;</code></pre>]]></content:encoded></item><item><title><![CDATA[跨系统文件指纹校验]]></title><description><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>Linux&#x73AF;&#x5883;&#x751F;&#x6210;&#x7684;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x5230;Windows&#xFF0C;&#x867D;&#x6709;&#x6307;&#x7EB9;&#x4F46;&#x4E0D;&#x77E5;&#x5982;&#x4F55;&#x6821;&#x9A8C;&#x3002;</p><p></p><h2 id="%E7%A4%BA%E4%BE%8B">&#x793A;&#x4F8B;</h2><h3 id="linux">Linux</h3><pre><code>sha1sum &#x6587;&#x4EF6;&#x540D; &#x6587;&#x4EF6;&#x540D;.sha1sum</code></pre><p></p><p></p><p>Windows&#x4E0B;&#x9762;&#x4F7F;&#x7528;PowerSHell</p><pre><code>PS &gt; Get-FileHash -Algorithm SHA1 &#x6587;</code></pre>]]></description><link>https://vqiu.cn/cross-os-hash-verification/</link><guid isPermaLink="false">692ff2cc7967c50001c956a1</guid><category><![CDATA[知识备忘]]></category><category><![CDATA[奇技淫巧]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Wed, 03 Dec 2025 08:24:38 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/12/----_20251224134549_21_190.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><img src="https://vqiu.cn/content/images/2025/12/----_20251224134549_21_190.jpg" alt="&#x8DE8;&#x7CFB;&#x7EDF;&#x6587;&#x4EF6;&#x6307;&#x7EB9;&#x6821;&#x9A8C;"><p>Linux&#x73AF;&#x5883;&#x751F;&#x6210;&#x7684;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x5230;Windows&#xFF0C;&#x867D;&#x6709;&#x6307;&#x7EB9;&#x4F46;&#x4E0D;&#x77E5;&#x5982;&#x4F55;&#x6821;&#x9A8C;&#x3002;</p><p></p><h2 id="%E7%A4%BA%E4%BE%8B">&#x793A;&#x4F8B;</h2><h3 id="linux">Linux</h3><pre><code>sha1sum &#x6587;&#x4EF6;&#x540D; &#x6587;&#x4EF6;&#x540D;.sha1sum</code></pre><p></p><p></p><p>Windows&#x4E0B;&#x9762;&#x4F7F;&#x7528;PowerSHell</p><pre><code>PS &gt; Get-FileHash -Algorithm SHA1 &#x6587;&#x4EF6;&#x540D;</code></pre>]]></content:encoded></item><item><title><![CDATA[K8S集群应用代理上网]]></title><description><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x65E0;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h2><p></p><h3 id="%E6%9C%8D%E5%8A%A1%E7%BA%A7%E4%BB%A3%E7%90%86">&#x670D;&#x52A1;&#x7EA7;&#x4EE3;&#x7406;</h3><h4 id="containerd">containerd</h4><pre><code>mkdir -p /etc/systemd/system/containerd.service.d

cat &lt;&lt; EOF &gt; /etc/systemd/system/containerd.service.d/override.conf
[Service]
Environment=http_proxy=http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
Environment=https_proxy=http://IP&#x5730;&#x5740;:&#x7AEF;</code></pre>]]></description><link>https://vqiu.cn/k8s-proxy/</link><guid isPermaLink="false">691d386d12393600017085ef</guid><category><![CDATA[系统运维]]></category><category><![CDATA[kubernetes]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Wed, 19 Nov 2025 03:28:07 GMT</pubDate><content:encoded><![CDATA[<h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x65E0;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h2><p></p><h3 id="%E6%9C%8D%E5%8A%A1%E7%BA%A7%E4%BB%A3%E7%90%86">&#x670D;&#x52A1;&#x7EA7;&#x4EE3;&#x7406;</h3><h4 id="containerd">containerd</h4><pre><code>mkdir -p /etc/systemd/system/containerd.service.d

cat &lt;&lt; EOF &gt; /etc/systemd/system/containerd.service.d/override.conf
[Service]
Environment=http_proxy=http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
Environment=https_proxy=http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
Environment=no_proxy=127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
EOF</code></pre><p></p><h3 id="%E9%9B%86%E7%BE%A4%E5%86%85%E4%BB%A3%E7%90%86">&#x96C6;&#x7FA4;&#x5185;&#x4EE3;&#x7406;</h3><p>&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x540D;&#x4E3A;proxy-config&#x7684;&#x4EE3;&#x7406;configmap</p><pre><code>apiVersion: v1
kind: ConfigMap
metadata:
  name: proxy-config
data:
  http_proxy: http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
  https_proxy: http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
  no_proxy: localhost,.svc,.svc.cluster.local,.cluster.local,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16</code></pre><p></p><p>&#x5728;&#x63A7;&#x5236;&#x5668;&#x4E0A;&#x5F15;&#x7528;&#x73AF;&#x5883;&#x53D8;&#x91CF;</p><pre><code>  containers:
      envFrom:
      - configMapRef:
        name: proxy-config</code></pre><p></p><p>&#x76F4;&#x63A5;&#x58F0;&#x660E;</p><pre><code>        env:
        - name: http_proxy
          value: http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
        - name: https_proxy
          value: http://IP&#x5730;&#x5740;:&#x7AEF;&#x53E3;
        - name: no_proxy
          value: localhost,127.0.0.1,.svc,.svc.cluster.local,.cluster.local,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
        - name: NO_PROXY
          value: localhost,127.0.0.1,.svc,.svc.cluster.local,.cluster.local,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16</code></pre>]]></content:encoded></item><item><title><![CDATA[Kylin V10 删除 swap分区]]></title><description><![CDATA[<p></p><p>&#x5BA2;&#x6237;&#x63D0;&#x4F9B;&#x4E86;&#x82E5;&#x5E72;&#x53F0;OS&#x4E3A;Kylin V10 SP3&#x7684;&#x673A;&#x5668;&#x6765;&#x642D;&#x5EFA;&#x4E00;&#x4E2A;K8S&#x96C6;&#x7FA4;&#xFF0C;&#x7136;&#x800C;&#x6BCF;&#x53F0;&#x8282;&#x70B9;&#x90FD;&#x9ED8;&#x8BA4;&#x5206;&#x914D;&#x4E86;16G&#x7684;swap&#x5206;&#x533A;&#x3002;&#x6253;&#x7740;&#x8282;&#x7EA6;&#x7684;&#x65D7;&#x5E1C;</p>]]></description><link>https://vqiu.cn/kylinv10-sp3-delete-swap/</link><guid isPermaLink="false">68fb823b1239360001708584</guid><category><![CDATA[系统运维]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Fri, 24 Oct 2025 14:03:34 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/10/----_20251024220747_109_250.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://vqiu.cn/content/images/2025/10/----_20251024220747_109_250.jpg" alt="Kylin V10 &#x5220;&#x9664; swap&#x5206;&#x533A;"><p></p><p>&#x5BA2;&#x6237;&#x63D0;&#x4F9B;&#x4E86;&#x82E5;&#x5E72;&#x53F0;OS&#x4E3A;Kylin V10 SP3&#x7684;&#x673A;&#x5668;&#x6765;&#x642D;&#x5EFA;&#x4E00;&#x4E2A;K8S&#x96C6;&#x7FA4;&#xFF0C;&#x7136;&#x800C;&#x6BCF;&#x53F0;&#x8282;&#x70B9;&#x90FD;&#x9ED8;&#x8BA4;&#x5206;&#x914D;&#x4E86;16G&#x7684;swap&#x5206;&#x533A;&#x3002;&#x6253;&#x7740;&#x8282;&#x7EA6;&#x7684;&#x65D7;&#x5E1C;&#x6765;&#xFF0C;&#x5C06;&#x5B83;&#x5173;&#x800C;&#x95ED;&#x4E4B;&#x540C;&#x65F6;&#x628A;&#x8FD9;16G&#x7A7A;&#x95F4;&#x5206;&#x914D;&#x5230;&#x6839;&#x5206;&#x533A;&#x3002;</p><p></p><h2 id="%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4">&#x64CD;&#x4F5C;&#x6B65;&#x9AA4;</h2><p>&#x5173;&#x95ED;&#x7CFB;&#x7EDF;swap&#x5E76;&#x53D6;&#x6D88;&#x5F00;&#x673A;&#x81EA;&#x542F;&#x52A8;</p><pre><code># swapoff -a
# sed -e &apos;/swap/s/^/#/g&apos; -i /etc/fstab</code></pre><p></p><p>&#x5220;&#x9664;swap&#x5206;&#x533A;&#xFF0C;&#x5C06;&#x817E;&#x51FA;&#x6765;&#x7684;&#x7A7A;&#x95F4;&#x632A;&#x5230;&#x6839;&#x5206;&#x533A;</p><pre><code># lvremove -y /dev/mapper/klas-swap
# lvextend -l +100%FREE /dev/mapper/root
# xfs_grow /dev/mapper/root      -&gt; XFS &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;
# resize2fs /dev/mapper/root     -&gt; ext4 &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</code></pre><p></p><p>&#x5220;&#x9664;&#x542F;&#x52A8;&#x4F9D;&#x8D56;swap[&#x6700;&#x4E3A;&#x5173;&#x952E;&#x4E00;&#x6B65;]</p><pre><code># vim /etc/default/grub
...&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;... 
#GRUB_CMDLINE_LINX=&quot;resume=/dev/mapper/klas-swap rd.lvm.lv=klas/root rd.lvm.lv=klas/swap rhgb quiet crashernel=256M,high audit=0&quot;
GRUB_CMDLINE_LINX=&quot;rd.lvm.lv=klas/root rhgb quiet crashernel=256M,high audit=0&quot;
...&lt;&#x7701;&#x7565;&#x82E5;&#x5E72;&#x884C;&gt;...</code></pre><blockquote>&#x63D0;&#x793A;&#xFF1A;&#x7CFB;&#x7EDF;&#x542F;&#x52A8;&#x9ED8;&#x8BA4;&#x4F9D;&#x8D56;swap&#x5206;&#x533A;&#xFF0C;&#x5982;&#x679C;&#x5206;&#x533A;&#x5DF2;&#x7ECF;&#x5220;&#x9664;&#x800C;&#x6CA1;&#x6709;&#x5C06;grub&#x4E0A;&#x9762;&#x4F9D;&#x8D56;&#x6E05;&#x7406;&#xFF0C;&#x7CFB;&#x7EDF;&#x5C06;&#x65E0;&#x6CD5;&#x6B63;&#x5E38;&#x542F;&#x52A8;&#x3002;</blockquote><p></p><p>&#x91CD;&#x65B0;&#x751F;&#x6210; grub&#x6587;&#x4EF6;</p><pre><code># [ -d /sys/firmware/efi ] &amp;&amp; grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg || grub2-mkconfig -o /boot/grub2/grub.cfg</code></pre><p>&#x64CD;&#x4F5C;&#x5B8C;&#x6BD5;&#x6700;&#x597D;&#x91CD;&#x542F;OS&#x6765;&#x9A8C;&#x8BC1;&#x4E0B;&#xFF01;</p>]]></content:encoded></item><item><title><![CDATA[使用非root来耍docker]]></title><description><![CDATA[<p></p><h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x603B;&#x6709;&#x4E00;&#x4E9B;&#x573A;&#x666F;&#x4E0D;&#x5141;&#x8BB8;&#x76F4;&#x63A5;&#x4F7F;&#x7528;root&#x7528;&#x6237;<em>&#xFF08;&#x55EF;&#xFF1F;&#x4F1A;&#x8BAE;&#x8BC4;&#x5BA1;&#x4E0B;&#xFF0C;&#x90AE;&#x4EF6;&#x53D1;&#x4E00;&#x4E0B;...&#xFF09;</em>&#xFF0C;&#x53EA;&#x80FD;&#x64CD;&#x4F5C;&#x666E;&#x901A;&#x8D26;&#x6237;&#xFF0C;&#x7136;&#x800C;&#x53C8;&#x9700;&#x8981;&#x4F7F;&#x7528;</p>]]></description><link>https://vqiu.cn/docker-run-without-root/</link><guid isPermaLink="false">68ee303e123936000170851e</guid><category><![CDATA[奇技淫巧]]></category><category><![CDATA[kubernetes]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Tue, 14 Oct 2025 11:29:51 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/10/----_20251014192836_88_250.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://vqiu.cn/content/images/2025/10/----_20251014192836_88_250.jpg" alt="&#x4F7F;&#x7528;&#x975E;root&#x6765;&#x800D;docker"><p></p><h2 id="%E8%83%8C%E6%99%AF">&#x80CC;&#x666F;</h2><p>&#x603B;&#x6709;&#x4E00;&#x4E9B;&#x573A;&#x666F;&#x4E0D;&#x5141;&#x8BB8;&#x76F4;&#x63A5;&#x4F7F;&#x7528;root&#x7528;&#x6237;<em>&#xFF08;&#x55EF;&#xFF1F;&#x4F1A;&#x8BAE;&#x8BC4;&#x5BA1;&#x4E0B;&#xFF0C;&#x90AE;&#x4EF6;&#x53D1;&#x4E00;&#x4E0B;...&#xFF09;</em>&#xFF0C;&#x53EA;&#x80FD;&#x64CD;&#x4F5C;&#x666E;&#x901A;&#x8D26;&#x6237;&#xFF0C;&#x7136;&#x800C;&#x53C8;&#x9700;&#x8981;&#x4F7F;&#x7528;docker&#x5E94;&#x7528;&#x6765;&#x6784;&#x5EFA;&#x955C;&#x50CF;&#x6216;&#x8005;&#x662F;&#x4F7F;&#x7528;docker&#x8DD1;&#x4E9B;&#x6D4B;&#x8BD5;&#x6837;&#x4F8B;&#x3002;</p><p></p><h2 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h2><p>&#x4F7F;&#x7528;&#x975E;root&#x8FD0;&#x884C;docker&#x547D;&#x4EE4;&#xFF0C;&#x4E0D;&#x51FA;&#x610F;&#x5916;&#x7684;&#x8BDD;&#x5C31;&#x4F1A;&#x5F39;&#x51FA;&#x4EE5;&#x4E0B;&#x65E0;&#x6743;&#x9650;&#x7684;&#x8B66;&#x793A;&#x3002;</p><pre><code>$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied</code></pre><p></p><p>&#x7531;&#x4E8E;&#x6211;&#x7684;docker&#x73AF;&#x5883;&#x662F;&#x76F4;&#x63A5;&#x4F7F;&#x7528;&#x4E8C;&#x8FDB;&#x5236;&#x6765;&#x5B89;&#x88C5;&#x7684;<em>(&#x975E;yum&#x4E0E;apt)</em>&#xFF0C;&#x4E8E;&#x662F;&#x6211;&#x91C7;&#x7528;&#x4EE5;&#x4E0B;&#x59FF;&#x52BF;&#x6765;&#x5904;&#x7406;&#xFF1A;</p><pre><code># export USER=vqiu
# setfacl -m user:$USER:rw /var/run/docker.sock</code></pre><p></p><p>&#x6B64;&#x65F6;&#x518D;&#x4F7F;&#x7528;docker&#x547D;&#x4EE4;&#x5C31;&#x4E00;&#x7247;&#x7965;&#x548C;&#x4E86;&#xFF0C;&#x4F46;&#x662F;&#x53EA;&#x8981;docker&#x670D;&#x52A1;&#x91CD;&#x542F;&#x4FBF;&#x53C8;&#x56DE;&#x5230;&#x65E0;&#x6743;&#x9650;&#x7684;&#x8D77;&#x70B9;&#x3002;&#x8FD9;&#x597D;&#x529E;&#xFF0C;&#x76F4;&#x63A5;&#x5728;docker&#x7684;systemd&#x4E2D;&#x8FFD;&#x52A0;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;&#xFF1A;</p><pre><code>ExecStartPost=/usr/bin/setfacl -m user:vqiu:rw /var/run/docker.sock</code></pre><blockquote>&#x63D0;&#x793A;&#xFF1A;&#x5982;&#x679C;&#x662F;&#x591A;&#x4E2A;&#x666E;&#x901A;&#x7528;&#x6237;&#x5C31;&#x4F7F;&#x7528;&#x7EC4;&#x7684;&#x6982;&#x5FF5;&#x6765;&#x7EF4;&#x62A4;&#xFF01;</blockquote><p></p><p>&#x6B64;&#x65F6;&#xFF0C;systmed&#x4E2D;&#x7684;docker.service&#x5185;&#x5BB9;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code>systemctl cat docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=&quot;PATH=/bin:/sbin:/usr/bin:/usr/sbin&quot;
Environment=GOTRACEBACK=crash

ExecStart=/usr/bin/dockerd $OPTIONS \
                           $DOCKER_STORAGE_OPTIONS \
                           $DOCKER_NETWORK_OPTIONS \
                           $INSECURE_REGISTRY
ExecStartPost=/usr/bin/setfacl -m user:vqiu:rw /var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target</code></pre>]]></content:encoded></item><item><title><![CDATA[NetworkPolicy 使用范例]]></title><link>https://vqiu.cn/k8s-networkpolicy/</link><guid isPermaLink="false">68ebb9ea12393600017084cb</guid><category><![CDATA[kubernetes]]></category><dc:creator><![CDATA[树辉]]></dc:creator><pubDate>Sun, 12 Oct 2025 14:46:17 GMT</pubDate><media:content url="https://vqiu.cn/content/images/2025/10/----_20251014192840_89_250.jpg" medium="image"/><content:encoded/></item></channel></rss>