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 > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /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 "\"oc_dcs<em>db</em>*\"" 模糊匹配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 "{\"default\":\"com.tycredit.portal.service.service.CisReportPnlApplydataService:selectByParam\"}"</p>
<p>事务处理相关命令
MYULTI 开始事务
EXEC 执行
DISCARD 撤销事务
WATCH 检测键值变化</p>
<p>订阅相关命令
SUBSCRIBE 发布
PUBLISH 订阅</p>
<h6>5、Q&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> flushdb #清空当前数据库</p>
</blockquote>