共计 11599 个字符,预计需要花费 29 分钟才能阅读完成。
server1:172.16.16.34 | |
server2:172.16.16.35 | |
redis 版本:redis3.2 |
搭建环境:redis 集群,server1 有 7001,7002,7003 三主,server2 有 7001,7002,7003 三从,总共六个节点。这样做是为了保证 redis 的集群的高可用。redis 的复制也是采用异步复制的方式。
cd /home/maxiangqian | |
tar xzf redis-3.2.8.tar.gz | |
cd redis-3.2.8 | |
yum install gcc | |
make |
2:创建 redis 目录文件夹
mkdir /home/redis7001/data | |
mkdir -p /home/redis7001/data /home/redis7001/log /home/redis7001/tmp | |
mkdir -p /home/redis7002/data /home/redis7002/log /home/redis7002/tmp | |
mkdir -p /home/redis7003/data /home/redis7003/log /home/redis7003/tmp |
3:为 server1 和 server2 的三个节点分别配置配置文件
port 7001 | |
timeout 300 | |
daemonize yes | |
pidfile "/home/redis7001/tmp/redis_7001.pid" | |
loglevel notice | |
logfile "/home/redis7001/log/redis_7001.log" | |
databases 16 | |
save 900 1 | |
save 300 10 | |
save 60 10000 | |
stop-writes-on-bgsave-error yes | |
rdbcompression yes | |
rdbchecksum yes | |
dbfilename "dump.rdb" | |
dir "/home/redis7001/data" | |
slave-serve-stale-data yes | |
#slave-read-only yes # yes 开启从库只读 | |
repl-diskless-sync no | |
repl-diskless-sync-delay 5 | |
repl-disable-tcp-nodelay no | |
slave-priority 100 | |
appendonly yes | |
#appendfilename "appendonly.aof" | |
appendfsync everysec | |
no-appendfsync-on-rewrite no | |
auto-aof-rewrite-percentage 100 | |
auto-aof-rewrite-min-size 64mb | |
lua-time-limit 5000 | |
slowlog-log-slower-than 10000 | |
slowlog-max-len 128 | |
latency-monitor-threshold 0 | |
requirepass "maxiangqianredis" | |
masterauth "maxiangqianredis" | |
#cluster | |
cluster-enabled yes | |
cluster-config-file /home/redis7001/nodes7001.conf | |
cluster-node-timeout 5000 |
上面是 redis7001 的配置文件内容
redis-server /home/redis7001/redis7001.conf
我们看一下启动日志:
1574:M 03 May 16:22:53.444 * No cluster configuration found, I'm 363ecec54c92c2548dcab016146bdb4c104e5e84
每个实例都会为自己生成一个唯一的 ID,用来识别集群中的唯一身份。
server1 7001 | |
server1 7002 | |
server1 7003 | |
server2 7001 | |
server2 7002 | |
server2 7003 |
OK,现在已经有六个已经启动的 redis 实例了。我们下一步开始做集群
redis-trib.rb create --replicas 1 10.103.16.34:7001 10.103.16.34:7002 10.103.16.34:7003 10.103.16.35:7001 10.103.16.35:7002 10.103.16.35:7003
执行报错:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError) | |
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'from /home/maxiangqian/redis-3.2.8/src/redis-trib.rb:25 |
我们需要安装以下几个包:
yum -y install zlib ruby rubygems | |
gem install redis |
然后重新启动创建集群的操作:
[ | ]|
>>> Creating cluster | |
['t connect to node 10.103.16.34:7001 | ] Sorry, can
又报错了我擦。
requirepass "maxiangqianredis" | |
masterauth "maxiangqianredis" |
群集是不支持认证的,把这两行注释掉就好了,然后我们在执行创建群集的命令:
[root@localhost redis7003]# redis-trib.rb create --replicas 1 10.103.16.34:7001 10.103.16.34:7002 10.103.16.34:7003 10.103.16.35:7001 10.103.16.35:7002 10.103.16.35:7003 | |
>>> Creating cluster | |
>>> Performing hash slots allocation on 6 nodes... | |
Using 3 masters: | |
10.103.16.35:7001 | |
10.103.16.34:7001 | |
10.103.16.35:7002 | |
Adding replica 10.103.16.34:7002 to 10.103.16.35:7001 | |
Adding replica 10.103.16.35:7003 to 10.103.16.34:7001 | |
Adding replica 10.103.16.34:7003 to 10.103.16.35:7002 | |
M: 363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 | |
slots:5461-10922 (5462 slots) master | |
S: 93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 | |
replicates d015a22abc57c021f568973f4f1c03c7a5c7b772 | |
S: 78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 | |
replicates 89147e5837e378b69233dd2b8290267975719bc4 | |
M: d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 | |
slots:0-5460 (5461 slots) master | |
M: 89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 | |
slots:10923-16383 (5461 slots) master | |
S: ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 | |
replicates 363ecec54c92c2548dcab016146bdb4c104e5e84 | |
Can I set the above configuration? (type 'yes' to accept): |
OK,已经提示成功了,我们直接选择 yes 就好了。
>>> Nodes configuration updated | |
>>> Assign a different config epoch to each node | |
>>> Sending CLUSTER MEET messages to join the cluster | |
Waiting for the cluster to join.. | |
>>> Performing Cluster Check (using node 10.103.16.34:7001) | |
M: 363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 | |
slots:5461-10922 (5462 slots) master | |
1 additional replica(s) | |
S: 78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 | |
slots: (0 slots) slave | |
replicates 89147e5837e378b69233dd2b8290267975719bc4 | |
M: d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 | |
slots:0-5460 (5461 slots) master | |
1 additional replica(s) | |
M: 89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 | |
slots:10923-16383 (5461 slots) master | |
1 additional replica(s) | |
S: ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 | |
slots: (0 slots) slave | |
replicates 363ecec54c92c2548dcab016146bdb4c104e5e84 | |
S: 93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 | |
slots: (0 slots) slave | |
replicates d015a22abc57c021f568973f4f1c03c7a5c7b772 | |
[OK] All nodes agree about slots configuration. | |
>>> Check for open slots... | |
>>> Check slots coverage... | |
[OK] All 16384 slots covered. |
这样群集就设置成功了。
[root@mxqmongodb2 sa]# redis-cli -c -p 7001 | |
get name | |
-> Redirected to slot [5798] located at 10.103.16.34:7001 | |
"txt" | |
exit | |
[root@mxqmongodb2 sa]# redis-cli -c -p 7002 | |
get name | |
-> Redirected to slot [5798] located at 10.103.16.34:7001 | |
"txt" | |
exit | |
[root@mxqmongodb2 sa]# redis-cli -c -p 7003 | |
get name | |
-> Redirected to slot [5798] located at 10.103.16.34:7001 | |
"txt" |
5:我们接下来查看一下集群的基本信息:
[ | ]|
78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 slave 89147e5837e378b69233dd2b8290267975719bc4 0 1493879665448 5 connected | |
d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 master - 0 1493879663946 4 connected 0-5460 | |
89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493879664948 5 connected 10923-16383 | |
ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 slave 363ecec54c92c2548dcab016146bdb4c104e5e84 0 1493879665949 6 connected | |
93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 slave d015a22abc57c021f568973f4f1c03c7a5c7b772 0 1493879664446 4 connected | |
363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 1 connected 5461-10922 |
可以看到现在的集群有六个节点,三个主节点和三个从节点。而且每个主节点都会记录自己分配的哈希槽,从中我们可以看到
103.16.35:7001 master - 0 1493879663946 4 connected 0-5460 | |
10.103.16.34:7001 myself,master - 0 0 1 connected 5461-10922 | |
10.103.16.35:7002 master - 0 1493879664948 5 connected 10923-16383 |
当然我们也可以对这些节点的哈希槽进行重新的分配,我们现在打算将 103.16.35:7001 的前 100 个哈希槽移动到 10.103.16.34:7001
[root@localhost redis7003]# redis-trib.rb reshard 10.103.16.34:7001
然后会提示我输入数值以及从哪里迁移到哪里:
How many slots do you want to move (from 1 to 16384)? 100 | |
What is the receiving node ID? 363ecec54c92c2548dcab016146bdb4c104e5e84 | |
Please enter all the source node IDs. | |
Type 'all' to use all the nodes as source nodes for the hash slots. | |
Type 'done' once you entered all the source nodes IDs. | |
Source node #1:d015a22abc57c021f568973f4f1c03c7a5c7b772 | |
Source node #2:done |
执行完以后就可以进行迁移了,迁移完以后我们再打印出来节点信息看一下:
我们可以很清楚的看到已经迁移成功了。
[ | ]|
d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 master - 0 1493883826713 4 connected 101-5460 | |
89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493883827213 5 connected 10923-16383 | |
363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 7 connected 0-100 5461-10922 |
我们现在要使 10.103.16.35:7001 这个主节点断掉,然后重启看一下基本信息
[root@mxqmongodb2 sa]# /home/maxiangqian/redis-3.2.8/src/redis-cli -p 7001 | |
SHUTDOWN | |
not connected> exit | |
[root@mxqmongodb2 sa]# redis-server /home/redis7001/redis7001.conf |
然后再打印一下集群信息看一下:
[ | ]|
78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 slave 89147e5837e378b69233dd2b8290267975719bc4 0 1493884247801 5 connected | |
d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 slave 93a0e8d405959480fcbd310a5d15a92346c69d43 0 1493884247300 8 connected | |
89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493884246798 5 connected 10923-16383 | |
ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 slave 363ecec54c92c2548dcab016146bdb4c104e5e84 0 1493884246298 7 connected | |
93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 master - 0 1493884248301 8 connected 101-5460 | |
363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 7 connected 0-100 5461-10922 |
通过信息我们可以很明显的看到了 10.103.16.35:7001 这个主节点已经变成了从节点,而本身他的从节点也上升为主节点了。
./redis-trib.rb add-node 10.103.16.34:7004 10.103.16.34:7001
这样我们就把 10.103.16.34:7004 添加为集群的新的主节点,不过我们要注意的是,这时候他仅仅是一个没有哈希槽的主节点,并不会存储任何数据。
./redis-trib.rb add-node 10.103.16.34:7004 10.103.16.34:7001 | |
redis 10.103.16.34::7004> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e |
将新节点指定为 ID 为 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 的从节点。
./redis-trib del-node 127.0.0.1:7000 `<node-id>`
但是我们要注意一点,移除主节点的时候必须保证主节点是空的,也就是事先将要移除的主节点的哈希槽给转移到其他的主节点上。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-05/144178.htm
