Site updated: 2022-10-17 16:23:52

This commit is contained in:
qinglong committed 2022-10-17 16:23:53 +08:00
1 parent 52c6080126
commit 6bac9e6422
59 files changed
+100 -80

No files matched your search

+1 -1
View File
@@ -11,7 +11,7 @@
"url": "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/",
"title": "redis主从基础配置记录",
"date_published": "2022-10-17T06:07:35.000Z",
"content_html": "<h4 id=\"主服务\"><a class=\"anchor\" href=\"#主服务\">#</a> 主服务</h4>\n<h6 id=\"基础配置\"><a class=\"anchor\" href=\"#基础配置\">#</a> 基础配置</h6>\n<pre><code class=\"language-conf\">port 6379\nrequirepass 123456(密码,建议不设置)\nvm-enabled no (虚拟内存,内存够的情况下可以不使用)\nmaxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)\nbind 127.0.0.1 (注释掉,否则不能外部连接)\nrdbchecksum no(持久化数据检查)\nlist-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)\nlist-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)\n</code></pre>\n<pre><code class=\"language-bash\">sysctl vm.overcommit_memory=1 (立即生效)\n修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)\n</code></pre>\n<h6 id=\"禁用透明大页影响性能\"><a class=\"anchor\" href=\"#禁用透明大页影响性能\">#</a> 禁用透明大页(影响性能)</h6>\n<pre><code class=\"language-bash\">需要sudo su 切换到root身份(sudo 没用)\necho never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n</code></pre>\n<h6 id=\"修复tcp警告\"><a class=\"anchor\" href=\"#修复tcp警告\">#</a> 修复 TCP 警告</h6>\n<pre><code class=\"language-conf\">sysctl net.core.somaxconn=1024(立即生效)\n修改/etc/sysctl.conf添加net.core.somaxconn=1024\n客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。\n可以三种不同客户端的方式进行设置:\nnormal -&gt; 正常客户端\nslave -&gt; slave 和 MONITOR 客户端\npubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端\n\n每个 client-output-buffer-limit 语法 :\nclient-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt;\n一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。\n例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,\n只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。\n</code></pre>\n<h6 id=\"把硬限制和软限制都设置为-0-来禁用该特性\"><a class=\"anchor\" href=\"#把硬限制和软限制都设置为-0-来禁用该特性\">#</a> 把硬限制和软限制都设置为 0 来禁用该特性</h6>\n<pre><code class=\"language-conf\">client-output-buffer-limit normal 0 0 0\nclient-output-buffer-limit slave 5gb 512mb 60\nclient-output-buffer-limit pubsub 32mb 8mb 60\n</code></pre>\n<h6 id=\"持久化配置\"><a class=\"anchor\" href=\"#持久化配置\">#</a> 持久化配置</h6>\n<pre><code class=\"language-conf\">---关闭RDB持久化---\nsave &quot;&quot;\n默认配置如下:\nsave 900 1 #900秒内有1次更新就持久化\nsave 300 10 #300秒内有10次更新就持久化\nsave 60 10000 #60秒内有10000次更新就持久化\n---关闭RDB持久化---\n\n主从同步支持两种策略,即disk和socket方式。\n新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。\n一个RDB文件从master端传到slave端,分为两种情况:\n1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;\n2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。\nrepl-diskless-sync no 默认不使用diskless同步方式\nrepl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒\nrepl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒\nrepl-timeout 3600 设置超时时间\nrepl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据Line truncated
"content_html": "<h4 id=\"主服务\"><a class=\"anchor\" href=\"#主服务\">#</a> 主服务</h4>\n<ol>\n<li>基础配置</li>\n</ol>\n<pre><code class=\"language-conf\">port 6379\nrequirepass 123456(密码,建议不设置)\nvm-enabled no (虚拟内存,内存够的情况下可以不使用)\nmaxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)\nbind 127.0.0.1 (注释掉,否则不能外部连接)\nrdbchecksum no(持久化数据检查)\nlist-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)\nlist-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)\n</code></pre>\n<pre><code class=\"language-bash\">sysctl vm.overcommit_memory=1 (立即生效)\n修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)\n</code></pre>\n<ol start=\"2\">\n<li>禁用透明大页(影响性能)</li>\n</ol>\n<pre><code class=\"language-bash\">需要sudo su 切换到root身份(sudo 没用)\necho never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n</code></pre>\n<ol start=\"3\">\n<li>修复 TCP 警告</li>\n</ol>\n<pre><code class=\"language-conf\">sysctl net.core.somaxconn=1024(立即生效)\n修改/etc/sysctl.conf添加net.core.somaxconn=1024\n客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。\n可以三种不同客户端的方式进行设置:\nnormal -&gt; 正常客户端\nslave -&gt; slave 和 MONITOR 客户端\npubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端\n\n每个 client-output-buffer-limit 语法 :\nclient-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt;\n一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。\n例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,\n只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。\n</code></pre>\n<ol start=\"4\">\n<li>把硬限制和软限制都设置为 0 来禁用该特性</li>\n</ol>\n<pre><code class=\"language-conf\">client-output-buffer-limit normal 0 0 0\nclient-output-buffer-limit slave 5gb 512mb 60\nclient-output-buffer-limit pubsub 32mb 8mb 60\n</code></pre>\n<ol start=\"5\">\n<li>持久化配置</li>\n</ol>\n<pre><code class=\"language-conf\">---关闭RDB持久化---\nsave &quot;&quot;\n默认配置如下:\nsave 900 1 #900秒内有1次更新就持久化\nsave 300 10 #300秒内有10次更新就持久化\nsave 60 10000 #60秒内有10000次更新就持久化\n---关闭RDB持久化---\n\n主从同步支持两种策略,即disk和socket方式。\n新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。\n一个RDB文件从master端传到slave端,分为两种情况:\n1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;\n2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。\nrepl-diskless-sync no 默认不使用diskless同步方式\nrepl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒\nrepl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒\nrepl-timeout 3600 设置超时时间\nrepl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。\nrepl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。\nbacklogLine truncated
"tags": []
},
{