nisbos


redis集群搭建

<ul> <li>前置准备 linux CentOS服务器 xshell、xftp(或者类似的SSH客户端) redis-5.0.8压缩包(建议使用5以上版本)<a href="https://redis.io/download" title="官网下载地址">官网下载地址</a></li> </ul> <h6>1、进入目录usr/local下创建redis文件夹</h6> <pre><code class="language-java">cd usr/local mkdir redis cd redis</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/247f7082e5816cb830f65a90c9652917?showdoc=.jpg" alt="" /></p> <h6>2、打开xftp 将下载的压缩包拉到该目录下</h6> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/01649187c834cc0d8e44fac3ba53bd7d?showdoc=.jpg" alt="" /></p> <h6>3、解压安装</h6> <ul> <li> <p>解压文件</p> <pre><code class="language-java">tar -zxvf redis-5.0.8.tar.gz</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/651bfe5e278e277e92359175c3554b93?showdoc=.jpg" alt="" /></p> </li> <li> <p>安装gcc(检查可否连接外网)</p> <pre><code class="language-java">yum install gcc-c++</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/3781eeaf6a2727501e902fd41aa7771d?showdoc=.jpg" alt="" /> <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/02e8fe2d873c2e7d8e35f8443820bfa6?showdoc=.jpg" alt="" /></p> </li> <li>安装 <pre><code class="language-java">cd redis-5.0.8 make make install</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/017230cb150bbb6a0a7445dd449b9cdd?showdoc=.jpg" alt="" /></p></li> </ul> <h6>4、redis配置</h6> <ul> <li> <p>redis命令下创建文件夹</p> <pre><code class="language-java">mkdir bin mkdir etc</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/35ef451a852604571efa73259078ff5b?showdoc=.jpg" alt="" /></p> </li> <li> <p>将redis.conf移动到etc文件夹中</p> <pre><code class="language-java">mv redis.conf /usr/local/redis/redis-5.0.8/etc</code></pre> </li> <li> <p>将src目录下的绿色文件移动到bin文件夹中</p> <pre><code class="language-java">mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/redis-5.0.8/bin/</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/24283d3125b37d337ad9b8652d63dac2?showdoc=.jpg" alt="" /></p> </li> <li>修改主配置文件redis.conf (1) 注释掉 bind 127.0.0.1 这一行(解决只能特定网段连接的限制) (2) 将 protected-mode 属性改为 no (关闭保护模式,不然会阻止远程访问) (3) 将 daemonize 属性改为 yes (这样启动时就在后台启动) (4) 设置密码如: #requirepass foobared 改成requirepass 123456</li> </ul> <h6>5、启动redis</h6> <pre><code class="language-java">./bin/redis-server /usr/local/redis/redis-5.0.8/etc/redis.conf</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/0228a41be8ce6e4d80c65e1d9cbe5dbf?showdoc=.jpg" alt="" /></p> <ul> <li>查看进程 <pre><code class="language-java">ps aux|grep redis</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c21d302f0c2eae85953759f37f68367e?showdoc=.jpg" alt="" /></p></li> <li>*注意(此处出现warning的报错信息处理) 1).增加如下配置 vi /etc/sysctl.conf net.core.somaxconn = 2048 vm.overcommit_memory = 1 2).在/etc/rc.local中加入如下两行 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never &gt; /sys/kernel/mm/transparent_hugepage/defrag fi</li> </ul> <p>二、搭建集群</p> <h6>1、在usr/local下创建rediscluster文件夹 并将原先安装好的redis复制到rediscluste目录下命名为redis01</h6> <pre><code class="language-java"> cd /usr/local mkdir rediscluster cp -r /usr/local/redis/redis-5.0.8 /usr/local/rediscluster/redis01</code></pre> <h6>2、修改redis01/etc目录下的redis.conf配置文件</h6> <p>修改后的配置文件项如下:</p> <pre><code class="language-java">bind 0.0.0.0 port 7001 protected-mode no 关闭保护模式 允许远程访问 daemonize yes 保持后台启动 requirepass 109837 设置密码 masterauth 109837 pidfile /var/run/redis_7001.pid cluster-enabled yes 采用集群模式 cluster-config-file nodes-7001.conf</code></pre> <h6>3、拷贝redis01 新增5个redis实例 redis02 redis03 redis04 redis05 redis06</h6> <p>然后修改端口7002-7006(关注redis.config中的修改项:port 7001 pidfile /var/run/redis_7001.pid cluster-config-file nodes-7001.conf 这三个)</p> <ul> <li>此处端口可自定义,密码要设置一致</li> </ul> <h6>4、在rediscluster下创建redisAllstart.sh启动脚本,用来启动6个Redis实例</h6> <pre><code class="language-java">cd /usr/local/rediscluster/redis01/bin/ ./redis-server ../etc/redis.conf cd /usr/local/rediscluster/redis02/bin/ ./redis-server ../etc/redis.conf cd /usr/local/rediscluster/redis03/bin/ ./redis-server ../etc/redis.conf cd /usr/local/rediscluster/redis04/bin/ ./redis-server ../etc/redis.conf cd /usr/local/rediscluster/redis05/bin/ ./redis-server ../etc/redis.conf cd /usr/local/rediscluster/redis06/bin/ ./redis-server ../etc/redis.conf</code></pre> <ul> <li> <p>给该启动脚本添加权限</p> <pre><code class="language-java">chmod +x redisAllstart.sh</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/943961a7518e247cf89f4b3ec687db03?showdoc=.jpg" alt="" /></p> </li> <li>启动redisAllstart.sh脚本 该位置若失败,可通过复制上面命令直接执行启动</li> </ul> <h6>5、查看进程</h6> <pre><code class="language-java">ps aux|grep redis</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/5f289747fd5597321911364d8ae84b38?showdoc=.jpg" alt="" /> <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/54e5c37a2349e111ecee05c025f937a6?showdoc=.jpg" alt="" /> <strong> 成功之后查看启动情况(注:后面的【cluster】一定要注意 没有的话回上面重新修改redis.conf配置里的cluster-enabled yes): </strong></p> <h6>6、将redis01/bin中的redis-cli复制到rediscluster目录下</h6> <pre><code class="language-java">cd usr/local/rediscluster/redis01/bin cp redis-cli /usr/local/rediscluster</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c7b66e4da7139b3f6ce1f59013316431?showdoc=.jpg" alt="" /> <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c9c0f0501c9f30c4f923dfbb74375c97?showdoc=.jpg" alt="" /></p> <h6>7、创建集群</h6> <pre><code class="language-java">./redis-cli --cluster create 10.1.4.71:7001 10.1.4.71:7002 10.1.4.71:7003 10.1.4.71:7004 10.1.4.71:7005 10.1.4.71:7006 --cluster-replicas 1 -a 123456</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/4d178da301a5089e37e2e618c93fc4e6?showdoc=.jpg" alt="" /> <strong> 同时在创建集群后会出现让你输入yes需要输入“yes” 这里千万别y 不然的话后面set的时候会报错 </strong></p> <h6>8、登录任意节点验证</h6> <pre><code class="language-java">redis-cli -p 7001 -a 123456 -c</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/e7469180cc449bbcaa8d6522e17543b7?showdoc=.jpg" alt="" /></p> <ul> <li>通过cluster info 命令可以查询集群状态信息 通过cluster nodes可以查询集群节点信息</li> </ul> <h6>9、常用命令:</h6> <p>实例 ping 测试是否连通,检查服务器是否正在运行 redis-cli -h host -p port -a password 连接redis redis-cli -n 0 -p 26379 --scan --pattern &quot;\&quot;oc_dcs<em>db</em>*\&quot;&quot; 模糊匹配oc_dcs_db_大头的key monitor 监控 AUTH 认证 </p> <p>config get <em> 获取所有配置 config get slaveof 获取slaveof的值 config get </em>of* 获取含of的配置的值 config set name value 设置配置 info Redis统计信息 info stats info cpu</p> <p>key exists key 判断键是否存在 KEYS pattern 查找与指定模式匹配的所有键,获取所有键使用keys * ttl key 获取键的过期时间 expire key seconds 设置键的过期时间 persist key 删除过期的键 RANDOMKEY 获取随机键 RENAME key newkey 更改键的名称 RENAMENX key newkey 重命名键,如果新的键不存在 type key 返回键值类型 del key 删除键 del huzj DUMP key 该命令返回存储在指定键的值的序列化版本。 MOVE key db 移动键到另一个数据库 MOVE tutorial1 1</p> <p>db flushdb 清除库中内容 flushall 清除所有库中内容 select 切换库 切换db0 select 0 save 创建当前库的备份 BGSAVE 后台备份 dbsize 当前数据库键的数量 查看有多少键 dbsize shutdown 停掉redis服务 eval 使用lua解释脚本</p> <p>String类型相关命令: set 将字符串value关联到key get 获取键值 incr<br /> 命令用于由一个递增key的整数值。如果该key不存在,它被设置为0执行操作之前。如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。该操作被限制为64位带符号整数。 incrby 命令用于增加存储在由指定的值key的数量。如果该key不存在时,它被设置为0执行操作之前。如果键包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误 INCRBYFLOAT 给浮点数增加指定值 decr 减 descby 减少指定值 strlen 获取键长 append 追加 Lists类型相关命令: lpush 插入列表头 rpush 插入列表尾 lrange 查找执行范围的键值 lpop 移除并返回列表的头元素 llen 返回列表长度</p> <p>sets类型相关命令: sadd 创建集合并添加元素 smembers 返回成员 sismember 判断键值是否属于集合 sunion 集合合并 sdiff 集合差集 sinter 集合交集</p> <p>zsets类型相关命令: zadd zrange zrangebyscore zscore zcount</p> <p>hashes类型相关命令: HKEYS 返回哈希表key中的所有域 HVALS 返回哈希表key中所有域的值 HMSET HMGET 返回哈希表给定域一个或多个值 HGETALL 返回所有域和值<br /> HGETALL component:272 HSET 设置阈值 hset component:272 api &quot;{\&quot;default\&quot;:\&quot;com.tycredit.portal.service.service.CisReportPnlApplydataService:selectByParam\&quot;}&quot;</p> <p>事务处理相关命令 MYULTI 开始事务 EXEC 执行 DISCARD 撤销事务 WATCH 检测键值变化</p> <p>订阅相关命令 SUBSCRIBE 发布 PUBLISH 订阅</p> <h6>5、Q&amp;A</h6> <blockquote> <p>5.1、[ERR] Node 10.1.4.71:7002 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.; 以上一般出现在异常关闭的情况 处理方式: 1、删除各个节点的下的.conf文件 如:/usr/local/rediscluster/redis01/bin/nodes-7001.conf 2、进入各节点node下删除数据 172.168.63.201:7001&gt; flushdb #清空当前数据库</p> </blockquote>

页面列表

ITEM_HTML