Site updated: 2022-11-30 17:23:29
This commit is contained in:
1 parent
32f10349f0
commit
8ac1f34448
129 files changed
+345
-301
No files matched your search
@@ -8,7 +8,7 @@
|
||||
<author>
|
||||
<name>Hito Li</name>
|
||||
</author>
|
||||
<updated>2022-11-24T00:53:00.000Z</updated>
|
||||
<updated>2022-11-30T09:05:00.000Z</updated>
|
||||
<category term="hito" />
|
||||
<category term="無言" />
|
||||
<category term="博客" />
|
||||
@@ -17,6 +17,92 @@
|
||||
<category term="心得体会" />
|
||||
<category term="技术分享" />
|
||||
<category term="踩坑" />
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/11/30/%E5%B0%86nginx%E6%9B%BF%E6%8D%A2%E4%B8%BAtengine/</id>
|
||||
<title>将nginx替换为tengine</title>
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/11/30/%E5%B0%86nginx%E6%9B%BF%E6%8D%A2%E4%B8%BAtengine/"/>
|
||||
<content type="html"><h4 id="介绍"><a class="anchor" href="#介绍">#</a> 介绍</h4>
|
||||
<div class="note infoTengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始,Tengine成为一个开源项目。现在,它由Tengine团队开发和维护。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。:::">
|
||||
<p>tengine 简单来说就是淘宝自己基于 nginx 优化的网页引擎,在 nginx 原先基础上继续保持兼容,同时功能扩展,效率提高,可以看到目前淘宝网在这么多人同时使用的情况下依然稳定,我们足以相信 tengine,由于它是 nginx 的一个分生版本,所以几乎完全兼容 nginx,所以我认为 tengine 是搭建 lnmp 环境的不二之选。</p>
|
||||
<h4 id="下载"><a class="anchor" href="#下载">#</a> 下载</h4>
|
||||
<p>首先访问<span class="exturl" data-url="aHR0cDovL3RlbmdpbmUudGFvYmFvLm9yZy8="> tengine 官方网站</span>,获取最新的下载地址。<br />
|
||||
<code>wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz</code></p>
|
||||
<h4 id="获取编译参数"><a class="anchor" href="#获取编译参数">#</a> 获取编译参数</h4>
|
||||
<p><code>nginx -V</code></p>
|
||||
<h4 id="编译"><a class="anchor" href="#编译">#</a> 编译</h4>
|
||||
<p><code>./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module</code> <br />
|
||||
./configure 后面的参数是上一步获取的</p>
|
||||
<h4 id="make"><a class="anchor" href="#make">#</a> Make</h4>
|
||||
<p><code>make 或者 make -j 内核数</code> <br />
|
||||
生成的文件在 objs 目录下</p>
|
||||
<h4 id="替换"><a class="anchor" href="#替换">#</a> 替换</h4>
|
||||
<p>停止 nginx 服务 <code>service nginx stop</code> <br />
|
||||
查看 nginx 目录 <code>whereis nginx</code> <br />
|
||||
备份旧 nginx <code>mv /usr/sbin/nginx /usr/sbin/nginx.old</code> <br />
|
||||
拷贝 objs 下的 nginx 替换旧 nginx <code>cp ./objs/nginx /usr/sbin/</code> <br />
|
||||
备份旧 so 文件<br />
|
||||
拷贝 objs 下的 so 文件替换旧的 so 文件 <code>cp ./objs/*.so /usr/lib/nginx/modules/</code></p>
|
||||
<h4 id="测试"><a class="anchor" href="#测试">#</a> 测试</h4>
|
||||
<p><code>nginx -t</code> 如果打印 test is successful 则表示替换成功。<br />
|
||||
然后执行 service nginx start 进行启动即可</p>
|
||||
</div>
|
||||
</content>
|
||||
<category term="Linux" scheme="https://blog.jingxiyuan.cn/categories/Linux/" />
|
||||
<category term="服务" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/tags/Nginx/" />
|
||||
<category term="Tengine" scheme="https://blog.jingxiyuan.cn/tags/Tengine/" />
|
||||
<updated>2022-11-30T09:05:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/11/30/Nginx%E5%8A%A8%E6%80%81%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E6%96%B9%E6%A1%88/</id>
|
||||
<title>Nginx动态解析域名方案</title>
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/11/30/Nginx%E5%8A%A8%E6%80%81%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E6%96%B9%E6%A1%88/"/>
|
||||
<content type="html"><h4 id="应用场景"><a class="anchor" href="#应用场景">#</a> 应用场景:</h4>
|
||||
<p>由于有时候 nginx 代理的时候,第三方域名对应的 ip 可能发生变化,然而没有提前通知,然而如果不配置什么,nginx 又不能智能解析,因此 nginx 动态解析域名就比较重要。</p>
|
||||
<h4 id="一-使用模块nginx-upstream-dynamic-servers"><a class="anchor" href="#一-使用模块nginx-upstream-dynamic-servers">#</a> 一、使用模块 nginx-upstream-dynamic-servers</h4>
|
||||
<p>该模块在启动 nginx 的时候会对域名进行一次解析,解析完成后,在 DNS 服务器设定的 TTL 过期时间内不会再次更新,在 TTL 过期后则会再次发起域名解析请求更新域名所对应的 IP 地址。</p>
|
||||
<p>需要在 nginx 的配置文件中的 http 配置域内指定使用的 DNS 服务器,在 upstream 中需要进行域名解析的 server 后面添加 resolve 参数。</p>
|
||||
<p>例:</p>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre> upstream test <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre> server www.xxx.com<span class="token punctuation">:</span>8080 resolve;</pre></td></tr><tr><td data-num="8"></td><td><pre></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre></pre></td></tr><tr><td data-num="13"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num="14"></td><td><pre></pre></td></tr><tr><td data-num="15"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="18"></td><td><pre></pre></td></tr><tr><td data-num="19"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="20"></td><td><pre> </pre></td></tr><tr><td data-num="21"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//test;</pre></td></tr><tr><td data-num="22"></td><td><pre> </pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="24"></td><td><pre> </pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>缺点:</p>
|
||||
<p>1、每次解析域名之后,会从 DNS 服务器获取到改 DNS 的 TTL,在 TTL 期限内不会再次解析,所以如果目标域名发生改变,nginx 不会更新解析,知道 TTL 过期。</p>
|
||||
<p>2、DNS 服务器在 http 配置域配置全,不能在 location 中细分指定。</p>
|
||||
<h4 id="二-使用模块ngx_upstream_jdomain"><a class="anchor" href="#二-使用模块ngx_upstream_jdomain">#</a> 二、使用模块 ngx_upstream_jdomain</h4>
|
||||
<p>在 http 配置域中配置 DNS 服务器,在 upstream 中按照这个模块的格式配置,支持设置每隔多少秒进行一次解析(抓包分析过设置 interval 可指定解析间隔),如果解析失败则使用缓存中的上一次解析结果的 IP 地址访问。</p>
|
||||
<p>例:</p>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre> resolver ip;</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre> upstream test <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre> jdomain www.xxx.com port=8080 interval=10; <span class="token comment">#指定域名和端口,每隔 10 秒进行一次解析</span></pre></td></tr><tr><td data-num="8"></td><td><pre></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre></pre></td></tr><tr><td data-num="13"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num="14"></td><td><pre></pre></td></tr><tr><td data-num="15"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="18"></td><td><pre></pre></td></tr><tr><td data-num="19"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//test;</pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="23"></td><td><pre> </pre></td></tr><tr><td data-num="24"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="25"></td><td><pre></pre></td></tr><tr><td data-num="26"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>缺点:DNS 服务器只能在 http 配域中全局配置</p>
|
||||
<h4 id="三-原生nginx使用set命令使用变量"><a class="anchor" href="#三-原生nginx使用set命令使用变量">#</a> 三、原生 nginx 使用 set 命令使用变量</h4>
|
||||
<p>将域名置于变量中,在对 proxy_pass 进行转发的时候域名调用变量,可以按照 valid,设置的时间参数间隔地对变量中的域名进行解析。</p>
|
||||
<p>例:</p>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre> client_body_buffer_size 10m;</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre> server_name localhost;</pre></td></tr><tr><td data-num="8"></td><td><pre></pre></td></tr><tr><td data-num="9"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre> resolver ip valid=3s;</pre></td></tr><tr><td data-num="12"></td><td><pre></pre></td></tr><tr><td data-num="13"></td><td><pre> set $five "www.xxx.com<span class="token punctuation">:</span>8080";</pre></td></tr><tr><td data-num="14"></td><td><pre></pre></td></tr><tr><td data-num="15"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//$<span class="token punctuation">&#123;</span>five<span class="token punctuation">&#125;</span>;</pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="18"></td><td><pre> </pre></td></tr><tr><td data-num="19"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>缺点:upstream 中不支持设置变量,因此后端有多台的时候该方案不可行。</p>
|
||||
<h4 id="四-tengine"><a class="anchor" href="#四-tengine">#</a> 四、Tengine</h4>
|
||||
<p>在 upstream 中配置 dynamic_resolve,在 location 配置域中指定 NDS 服务器,按照 valid 设置的时间间隔地进行地址解析。<span class="label danger">只支持 http 模块的动态域名解析</span></p>
|
||||
<p>例:</p>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre> upstream test <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre> dynamic_resolve fallback=stale fail_timeout=30s;</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre> server www.xxx.com<span class="token punctuation">:</span>8080;</pre></td></tr><tr><td data-num="8"></td><td><pre></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="10"></td><td><pre></pre></td></tr><tr><td data-num="11"></td><td><pre> server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="12"></td><td><pre></pre></td></tr><tr><td data-num="13"></td><td><pre> listen 8080;</pre></td></tr><tr><td data-num="14"></td><td><pre></pre></td></tr><tr><td data-num="15"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre> resolver ip valid=3s;</pre></td></tr><tr><td data-num="18"></td><td><pre></pre></td></tr><tr><td data-num="19"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//test;</pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="22"></td><td><pre></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="24"></td><td><pre></pre></td></tr><tr><td data-num="25"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>缺点:需要将 nginx 的 bin 文件替换为 tengine 的 bin 文件。</p>
|
||||
</content>
|
||||
<category term="Linux" scheme="https://blog.jingxiyuan.cn/categories/Linux/" />
|
||||
<category term="服务" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/tags/Nginx/" />
|
||||
<category term="动态域名解析" scheme="https://blog.jingxiyuan.cn/tags/%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" />
|
||||
<category term="Tengine" scheme="https://blog.jingxiyuan.cn/tags/Tengine/" />
|
||||
<updated>2022-11-30T08:35:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/</id>
|
||||
<title>Nginx配置stream踩坑</title>
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/11/30/Nginx%E9%85%8D%E7%BD%AEstream%E8%B8%A9%E5%9D%91/"/>
|
||||
<content type="html"><h4 id="引言"><a class="anchor" href="#引言">#</a> 引言</h4>
|
||||
<p>stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡,可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的,结果有天 ip 发生了变动导致连接不上。前期试过配置<span class="blue"> resolver 114.114.114.114 valid=60s;</span> 来动态解析域名,结果 stream 模块不支持 set 函数,这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试,结果发现<span class="red"> Tengine 只能实现 http 下的动态域名解析</span>,至此问题依旧。没办法,我只能通过定时任务加脚本判断 ip 是否变动,如果变动就 reload 一下 nginx。</p>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token shebang important">#!/bin/bash</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token comment">#使用 crontab -e 命令添加定时任务 */1 * * * * sh /home/xxx/autoReloadNginx.sh</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token assign-left variable">home</span><span class="token operator">=</span><span class="token string">"/home/xxx"</span> <span class="token comment">#指定 home 路径,如果使用 `pwd` 则 domainIP.txt 生成在当前用户目录下</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token assign-left variable">domain</span><span class="token operator">=</span>xxx.xxx.cn</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token assign-left variable">IP</span><span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">ping</span> <span class="token parameter variable">-4</span> <span class="token parameter variable">-c</span> <span class="token number">4</span> $domain <span class="token operator">|</span> <span class="token function">grep</span> from <span class="token operator">|</span> <span class="token function">tail</span> <span class="token parameter variable">-n</span> <span class="token number">1</span> <span class="token operator">|</span> <span class="token function">awk</span> <span class="token parameter variable">-F</span> <span class="token string">' '</span> <span class="token string">'&#123;print $4&#125;'</span><span class="token variable">`</span></span></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token assign-left variable">regex</span><span class="token operator">=</span><span class="token string">"<span class="token entity" title="\b">\b</span>(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])<span class="token entity" title="\b">\b</span>"</span></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable"><span class="token variable">`</span><span class="token builtin class-name">echo</span> $IP <span class="token operator">|</span> <span class="token function">egrep</span> $regex <span class="token operator">|</span> <span class="token function">wc</span> <span class="token parameter variable">-l</span><span class="token variable">`</span></span> <span class="token parameter variable">-eq</span> <span class="token number">1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token operator">!</span> <span class="token parameter variable">-f</span> <span class="token string">"<span class="token variable">$home</span>/domainIP.txt"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyworLine truncated
|
||||
<category term="Linux" scheme="https://blog.jingxiyuan.cn/categories/Linux/" />
|
||||
<category term="服务" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/tags/Nginx/" />
|
||||
<category term="Tengine" scheme="https://blog.jingxiyuan.cn/tags/Tengine/" />
|
||||
<category term="stream" scheme="https://blog.jingxiyuan.cn/tags/stream/" />
|
||||
<updated>2022-11-30T08:09:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/11/24/KLineChart%E5%AE%9E%E7%8E%B0%E4%B8%80%E5%B9%85%E5%9B%BE%E4%B8%8A%E7%94%BB%E5%A4%9A%E4%B8%AA%E8%9C%A1%E7%83%9BK%E7%BA%BF/</id>
|
||||
<title>KLineChart实现一幅图上画多个蜡烛K线</title>
|
||||
@@ -619,74 +705,4 @@ ip:极空间内网 ip<br />
|
||||
<category term="服务监控" scheme="https://blog.jingxiyuan.cn/tags/%E6%9C%8D%E5%8A%A1%E7%9B%91%E6%8E%A7/" />
|
||||
<updated>2022-10-18T01:39:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/</id>
|
||||
<title>redis主从基础配置</title>
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/"/>
|
||||
<content type="html"><h4 id="主服务"><a class="anchor" href="#主服务">#</a> 主服务</h4>
|
||||
<ol>
|
||||
<li>基础配置</li>
|
||||
</ol>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>port 6379</pre></td></tr><tr><td data-num="2"></td><td><pre>requirepass 123456(密码,建议不设置)</pre></td></tr><tr><td data-num="3"></td><td><pre>vm<span class="token punctuation">-</span>enabled no (虚拟内存,内存够的情况下可以不使用)</pre></td></tr><tr><td data-num="4"></td><td><pre>maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)</pre></td></tr><tr><td data-num="5"></td><td><pre>bind 127.0.0.1 (注释掉,否则不能外部连接)</pre></td></tr><tr><td data-num="6"></td><td><pre>rdbchecksum no(持久化数据检查)</pre></td></tr><tr><td data-num="7"></td><td><pre>list<span class="token punctuation">-</span>max<span class="token punctuation">-</span>ziplist<span class="token punctuation">-</span>size 1024(ziplist的最大容量,正数为自己指定的大小。负数<span class="token punctuation">-</span>1到<span class="token punctuation">-</span>5为对应的值4到64Kb)</pre></td></tr><tr><td data-num="8"></td><td><pre>list<span class="token punctuation">-</span>compress<span class="token punctuation">-</span>depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)</pre></td></tr></table></figure><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">sysctl</span> <span class="token assign-left variable">vm.overcommit_memory</span><span class="token operator">=</span><span class="token number">1</span> (立即生效)</pre></td></tr><tr><td data-num="2"></td><td><pre>修改/etc/sysctl.conf添加vm.overcommit_memory<span class="token operator">=</span><span class="token number">1</span>(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)</pre></td></tr></table></figure><ol start="2">
|
||||
<li>禁用透明大页(影响性能)</li>
|
||||
</ol>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>需要sudo <span class="token function">su</span> 切换到root身份(sudo 没用)</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token builtin class-name">echo</span> never <span class="token operator">></span> /sys/kernel/mm/transparent_hugepage/enabled</pre></td></tr><tr><td data-num="3"></td><td><pre>修改/etc/init.d/redis-server,加入/bin/echo never <span class="token operator">></span> /sys/kernel/mm/transparent_hugepage/enabled</pre></td></tr></table></figure><ol start="3">
|
||||
<li>修复 TCP 警告</li>
|
||||
</ol>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">sysctl</span> <span class="token assign-left variable">net.core.somaxconn</span><span class="token operator">=</span><span class="token number">1024</span>(立即生效)</pre></td></tr><tr><td data-num="2"></td><td><pre>修改/etc/sysctl.conf添加net.core.somaxconn<span class="token operator">=</span><span class="token number">1024</span></pre></td></tr></table></figure><ol start="4">
|
||||
<li>客户端缓冲区限制</li>
|
||||
</ol>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。</pre></td></tr><tr><td data-num="2"></td><td><pre>可以三种不同客户端的方式进行设置:</pre></td></tr><tr><td data-num="3"></td><td><pre>normal <span class="token punctuation">-</span><span class="token punctuation">></span> 正常客户端</pre></td></tr><tr><td data-num="4"></td><td><pre>slave <span class="token punctuation">-</span><span class="token punctuation">></span> slave 和 MONITOR 客户端</pre></td></tr><tr><td data-num="5"></td><td><pre>pubsub <span class="token punctuation">-</span><span class="token punctuation">></span> 至少订阅了一个 pubsub channel 或 pattern 的客户端</pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token key atrule">语法</span> <span class="token punctuation">:</span></pre></td></tr><tr><td data-num="7"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit &lt;class<span class="token punctuation">></span>&lt;hard limit<span class="token punctuation">></span> &lt;soft limit<span class="token punctuation">></span> &lt;soft seconds<span class="token punctuation">></span></pre></td></tr><tr><td data-num="8"></td><td><pre>一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。</pre></td></tr><tr><td data-num="9"></td><td><pre>例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,</pre></td></tr><tr><td data-num="10"></td><td><pre>只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。</pre></td></tr><tr><td data-num="11"></td><td><pre>把硬限制和软限制都设置为 0 来禁用该特性</pre></td></tr><tr><td data-num="12"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit normal 0 0 0</pre></td></tr><tr><td data-num="13"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit slave 5gb 512mb 60</pre></td></tr><tr><td data-num="14"></td><td><pre>client<span class="token punctuation">-</span>output<span class="token punctuation">-</span>buffer<span class="token punctuation">-</span>limit pubsub 32mb 8mb 60</pre></td></tr></table></figure><ol start="5">
|
||||
<li>持久化配置</li>
|
||||
</ol>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token punctuation">---</span>关闭RDB持久化<span class="token punctuation">---</span></pre></td></tr><tr><td data-num="2"></td><td><pre>save ""</pre></td></tr><tr><td data-num="3"></td><td><pre>默认配置如下:</pre></td></tr><tr><td data-num="4"></td><td><pre>save 900 1 <span class="token comment">#900 秒内有 1 次更新就持久化</span></pre></td></tr><tr><td data-num="5"></td><td><pre>save 300 10 <span class="token comment">#300 秒内有 10 次更新就持久化</span></pre></td></tr><tr><td data-num="6"></td><td><pre>save 60 10000 <span class="token comment">#60 秒内有 10000 次更新就持久化</span></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token punctuation">---</span>关闭RDB持久化<span class="token punctuation">---</span></pre></td></tr><tr><td data-num="8"></td><td><pre>主从同步支持两种策略,即disk和socket方式。</pre></td></tr><tr><td data-num="9"></td><td><pre>新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。</pre></td></tr><tr><td data-num="10"></td><td><pre>一个RDB文件从master端传到slave端,分为两种情况:</pre></td></tr><tr><td data-num="11"></td><td><pre>1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;</pre></td></tr><tr><td data-num="12"></td><td><pre>2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。</pre></td></tr><tr><td data-num="13"></td><td><pre>repl<span class="token punctuation">-</span>diskless<span class="token punctuation">-</span>sync no 默认不使用diskless同步方式</pre></td></tr><tr><td data-num="14"></td><td><pre>repl<span class="token punctuation">-</span>diskless<span class="token punctuation">-</span>sync<span class="token punctuation">-</span>delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒</pre></td></tr><tr><td data-num="15"></td><td><pre>repl<span class="token punctuation">-</span>ping<span class="token punctuation">-</span>slave<span class="token punctuation">-</span>period 60 slave端向server端发送pings的时间区间设置,默认为10秒</pre></td></tr><tr><td data-num="16"></td><td><pre>repl<span class="token punctuation">-</span>timeout 3600 设置超时时间</pre></td></tr><tr><td data-num="17"></td><td><pre>repl<span class="token punctuation">-</span>disable<span class="token punctuation">-</span>tcp<span class="token punctuation">-</span>nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。</pre></td></tr><tr><td data-num="18"></td><td><pre>repl<span class="token punctuation">-</span>backlog<span class="token punctuation">-</span>size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。</pre></td></tr><tr><td data-num="19"></td><td><pre>backlog设置的越大,slave可以失连的时间就Line truncated
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>基本配置同主服务一致</pre></td></tr><tr><td data-num="2"></td><td><pre>slaveof 127.0.0.1 6379(主redis的ip和端口)</pre></td></tr><tr><td data-num="3"></td><td><pre>masterauth 123456 (主redis的密码)</pre></td></tr><tr><td data-num="4"></td><td><pre>可以通过slaveof no one命令将Slaver升级为Maste</pre></td></tr><tr><td data-num="5"></td><td><pre>bgsave (持久化命令,在redis<span class="token punctuation">-</span>cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / <span class="token punctuation">-</span>name dump.rd查找)</pre></td></tr></table></figure><h4 id="相关命令"><a class="anchor" href="#相关命令">#</a> 相关命令</h4>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>看状态</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">sudo</span> /etc/init.d/redis-server status</pre></td></tr><tr><td data-num="3"></td><td><pre>看端口</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token function">netstat</span> -nlt<span class="token operator">|</span><span class="token function">grep</span> <span class="token number">6379</span></pre></td></tr><tr><td data-num="5"></td><td><pre>外部连接</pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token function">sudo</span> <span class="token function">vim</span> /etc/redis/redis.conf把protected-mode改为no,把bind ip注释掉</pre></td></tr><tr><td data-num="7"></td><td><pre>重启</pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token function">sudo</span> server redis-server restart</pre></td></tr><tr><td data-num="9"></td><td><pre>查看内存</pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token function">free</span> <span class="token parameter variable">-m</span></pre></td></tr><tr><td data-num="11"></td><td><pre>批量删除指定key</pre></td></tr><tr><td data-num="12"></td><td><pre>redis-cli <span class="token parameter variable">-n</span> <span class="token number">6</span> scan <span class="token number">0</span> match *2020-06-12 count <span class="token number">10000</span><span class="token operator">|</span> <span class="token function">xargs</span> redis-cli <span class="token parameter variable">-n</span> <span class="token number">6</span> del</pre></td></tr><tr><td data-num="13"></td><td><pre>大量删除key后快速释放被占用的内存</pre></td></tr><tr><td data-num="14"></td><td><pre>memory purge</pre></td></tr></table></figure><h4 id="问题解决"><a class="anchor" href="#问题解决">#</a> 问题解决</h4>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>写入问题</pre></td></tr><tr><td data-num="2"></td><td><pre>redis-cli config <span class="token builtin class-name">set</span> stop-writes-on-bgsave-error no</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">sudo</span> <span class="token function">vim</span> /etc/redis/redis.conf把stop-writes-on-bgsave-error改为no</pre></td></tr><tr><td data-num="4"></td><td><pre>修改系统 <span class="token function">sudo</span> <span class="token function">vim</span> /etc/sysctl.conf加入vm.overcommit_memory<span class="token operator">=</span><span class="token number">1</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">sudo</span> <span class="token function">sysctl</span> <span class="token assign-left variable">vm.overcommit_memory</span><span class="token operator">=</span><span class="token number">1</span></pre></td></tr></table></figure></content>
|
||||
<category term="Linux" scheme="https://blog.jingxiyuan.cn/categories/Linux/" />
|
||||
<category term="服务" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="redis" scheme="https://blog.jingxiyuan.cn/tags/redis/" />
|
||||
<updated>2022-10-17T06:07:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/10/14/nginx%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/</id>
|
||||
<title>nginx允许跨域获取cookie的方法</title>
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/10/14/nginx%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/"/>
|
||||
<content type="html"><h4 id="使用场景"><a class="anchor" href="#使用场景">#</a> 使用场景</h4>
|
||||
<p> 在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:</p>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> listen port ssl http2;</pre></td></tr><tr><td data-num="3"></td><td><pre> server_name xxx.com;</pre></td></tr><tr><td data-num="4"></td><td><pre> ssl_certificate_key /xxx.key;</pre></td></tr><tr><td data-num="5"></td><td><pre> ssl_certificate /xxx.pem;</pre></td></tr><tr><td data-num="6"></td><td><pre> proxy_cookie_path ~(.<span class="token important">*)</span> "$1; SameSite=None; secure; httponly";</pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre> location / <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token comment">#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)</span></pre></td></tr><tr><td data-num="10"></td><td><pre> add_header X<span class="token punctuation">-</span>Frame<span class="token punctuation">-</span>Options ALLOWALL; <span class="token comment">#允许被所有域名镶套</span></pre></td></tr><tr><td data-num="11"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//xxx;</pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="13"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure></content>
|
||||
<category term="Linux" scheme="https://blog.jingxiyuan.cn/categories/Linux/" />
|
||||
<category term="服务" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://blog.jingxiyuan.cn/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="nginx" scheme="https://blog.jingxiyuan.cn/tags/nginx/" />
|
||||
<category term="iframe" scheme="https://blog.jingxiyuan.cn/tags/iframe/" />
|
||||
<category term="cookie" scheme="https://blog.jingxiyuan.cn/tags/cookie/" />
|
||||
<updated>2022-10-14T09:13:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/</id>
|
||||
<title>使用PicGo上传图片到chevereto</title>
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/"/>
|
||||
<content type="html"><h1 id="简介"><a class="anchor" href="#简介">#</a> 简介</h1>
|
||||
<p>PicGo 是一款开源的图床管理工具,十分流行。</p>
|
||||
<p>PicGo 官方指南:<span class="exturl" data-url="aHR0cHM6Ly9waWNnby5naXRodWIuaW8vUGljR28tRG9jL3poL2d1aWRlLw==">PicGo | PicGo</span></p>
|
||||
<h1 id="配置"><a class="anchor" href="#配置">#</a> 配置</h1>
|
||||
<ol>
|
||||
<li>
|
||||
<p>安装插件(需要先安装 NodeJS)<br />
|
||||
<img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-09.png" alt="" /></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>图床配置 <br />
|
||||
url 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找<br />
|
||||
<img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-51.png" alt="" /></p>
|
||||
</li>
|
||||
</ol>
|
||||
</content>
|
||||
<category term="Windows" scheme="https://blog.jingxiyuan.cn/categories/Windows/" />
|
||||
<category term="工具" scheme="https://blog.jingxiyuan.cn/categories/Windows/%E5%B7%A5%E5%85%B7/" />
|
||||
<category term="PicGo" scheme="https://blog.jingxiyuan.cn/tags/PicGo/" />
|
||||
<category term="chevereto" scheme="https://blog.jingxiyuan.cn/tags/chevereto/" />
|
||||
<updated>2022-10-12T06:40:00.000Z</updated>
|
||||
</entry>
|
||||
</feed>
|
||||
Reference in new issue
Block a user