一、环境准备:
角色 |
Ip地址 |
主机名 |
端口 |
客户端 |
host50 |
192.168.88.50 |
|
Redis服务器 |
host51 |
192.168.88.51 |
6379 |
Redis服务器 |
host52 |
192.168.88.52 |
6379 |
Redis服务器 |
Host53 |
192.168.88.53 |
6379 |
Redis服务器 |
Host54 |
192.168.88.54 |
6379 |
Redis服务器 |
Host55 |
192.168.88.55 |
6379 |
Redis服务器 |
Host56 |
192.168.88.56 |
6379 |
管理主机 |
Mgm57 |
192.168.88.57 |
|

Redis集群拓扑.png
环境准备注意事项:
- 集群至少要准备6台redis服务器
- 建集群前redis内存不能有数据
- 集群redis不允许设置连接密码
二、搭建思路:
- Redis数据库服务器配置
- 启用Redis的集群功能
- 配置管理主机并创建集群
- 测试集群
三、实操搭建:
第一步:Redis数据库服务器配置
- 配置服务器51~56
说明:准备做集群的主机,不允许存储数据、不允许设置连接密码
# 配置服务器192.168.88.51
[root@host51 ~]# yum -y install gcc
[root@host51 ~]# tar -xf redis-4.0.8.tar.gz
[root@host51 ~]# cd redis-4.0.8/
[root@host51 ~]# make && make install
[root@host51 ~]# ./utils/install_server.sh 遇到提示就回车
# 配置服务器192.168.88.52
...
# 配置服务器192.168.88.53
...
# 配置服务器192.168.88.54
...
# 配置服务器192.168.88.55
...
# 配置服务器192.168.88.56
...
第二步:启用Redis的集群功能
# 启用host51主机集群功能
[root@host51 ~]# /etc/init.d/redis_6379 stop
# 打开配置文件修改以下行
[root@host51 ~]# vim /etc/redis/6379.conf
bind 192.168.88.51 # 本机ip(每台不一样)
port 6379 # redis端口
cluster-enabled yes #启用集群功能
cluster-config-file nodes-6379.conf # 保存集群信息的配置文件
cluster-node-timeout 5000 # 集群中主机的连接超时时间
[root@host51 ~]# /etc/init.d/redis_6379 start
[root@host51 ~]# netstat -utnlp | grep redis-server
tcp 0 0 192.168.88.51:16379 0.0.0.0:* LISTEN 4249/redis-server 1
tcp 0 0 192.168.88.51:6379 0.0.0.0:* LISTEN 4249/redis-server 1
# 启用host52主机集群功能
...
# 启用host53主机集群功能
...
# 启用host54主机集群功能
...
# 启用host55主机集群功能
...
# 启用host56主机集群功能
...
第三步:配置管理主机并创建集群
# 准备ruby脚本的运行环境
[root@mgm57 ~]# yum -y install rubygems ruby
]# gem install redis-3.2.1.gem
# 创建脚本
[root@mgm57 ~]# mkdir /root/bin //创建命令检索目录
[root@mgm57 ~]# tar -xf redis-4.0.8.tar.gz
[root@mgm57 ~]# cp redis-4.0.8/src/redis-trib.rb /root/bin/
# 设置执行权限
[root@mgm57 ~]# chmod +x /root/bin/redis-trib.rb
# 查看脚本帮助信息
[root@mgm57 ~]# redis-trib.rb help(能看到帮助信息为成功)
# replicas 1:指的是每一个主所需要的从的数量
[root@mgm57 ~]# redis-trib.rb create --replicas 1
192.168.88.51:6379 192.168.88.52:6379
192.168.88.53:6379 192.168.88.54:6379
192.168.88.55:6379 192.168.88.56:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.88.51:6379
192.168.88.52:6379
192.168.88.53:6379
Adding replica 192.168.88.55:6379 to 192.168.88.51:6379
Adding replica 192.168.88.56:6379 to 192.168.88.52:6379
Adding replica 192.168.88.54:6379 to 192.168.88.53:6379
M: 0eb3b7aa0493a19189cba35b0c658202cc20884b 192.168.88.51:6379
slots:0-5460 (5461 slots) master
M: a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 192.168.88.52:6379
slots:5461-10922 (5462 slots) master
M: f2c1bdb78d8d224c3666fa6440bdf80ba563c581 192.168.88.53:6379
slots:10923-16383 (5461 slots) master
S: bdba77868965371680fa825badff59bf8ef95a81 192.168.88.54:6379
replicates f2c1bdb78d8d224c3666fa6440bdf80ba563c581
S: 11510f42bfd9cf667bab5f31c01476d94984200a 192.168.88.55:6379
replicates 0eb3b7aa0493a19189cba35b0c658202cc20884b
S: fe572ce003ee634c52adc4b42d92d15f847937d7 192.168.88.56:6379
replicates a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441
Can I set the above configuration? (type 'yes' to accept): yes 同意
....
....
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered. 创建成功的提示
- 检查7台主机的防火墙和selinux服务是否关闭了
- 在6台Redis服务器 分别执行如下操作:
停止Redis服务
清空数据库目录 rm –rf /var/lib/redis/6379/*
启动Redis服务
- 管理主机重新创建集群
# info 查看集群简单信息,IP和端口可以是集群中的任意一台的
[root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6379
192.168.88.53:6379 (f2c1bdb7...) -> 0 keys | 5461 slots | 1 slaves.
192.168.88.51:6379 (0eb3b7aa...) -> 0 keys | 5461 slots | 1 slaves.
192.168.88.52:6379 (a9cb8ccd...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
# check 查看集群详细信息,IP和端口可以是集群中的任意一台的
[root@mgm57 ~]# redis-trib.rb check 192.168.88.51:6379
>>> Performing Cluster Check (using node 192.168.88.51:6379)
M: 0eb3b7aa0493a19189cba35b0c658202cc20884b 192.168.88.51:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: f2c1bdb78d8d224c3666fa6440bdf80ba563c581 192.168.88.53:6379
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: bdba77868965371680fa825badff59bf8ef95a81 192.168.88.54:6379
slots: (0 slots) slave
replicates f2c1bdb78d8d224c3666fa6440bdf80ba563c581
M: a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 192.168.88.52:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 11510f42bfd9cf667bab5f31c01476d94984200a 192.168.88.55:6379
slots: (0 slots) slave
replicates 0eb3b7aa0493a19189cba35b0c658202cc20884b
S: fe572ce003ee634c52adc4b42d92d15f847937d7 192.168.88.56:6379
slots: (0 slots) slave
replicates a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
第四步:测试集群
# 集群中的任意一台服务器都可以查询数据和存储数据
# 向集群中的主机存储数据一次只能存储一个变量集群算法每次只有一个计算结果
# 在客户端连接集群中的主机
[root@host51 ~]# redis-cli -c -h 192.168.88.51
192.168.88.51:6379> keys *
(empty list or set)
# 在redis51上存储数据,发现数据存储到了52
192.168.88.51:6379> set name plj
-> Redirected to slot [5798] located at 192.168.88.52:6379
OK
# 在redis52上查看数据
192.168.88.52:6379> keys *
1) "name"
# 在redis52上存储数,发现数据到了51上
192.168.88.52:6379> set age 19
-> Redirected to slot [741] located at 192.168.88.51:6379
OK
# 在redis51上查看数据
192.168.88.51:6379> keys *
1) "age"
# 连接slave角色服务器可以查看到和master角色服务器一样的数据
root@host51 ~]# redis-cli -c -h 192.168.88.54
>keys *
root@host51 ~]# redis-cli -c -h 192.168.88.55
>keys *
root@host51 ~]# redis-cli -c -h 192.168.88.56
>keys *
# 停止master角色主机的redis服务
root@host53 ~]# redis-cli -h 192.168.88.53 -p 6379 shutdown
# 在管理主机查看集群信息
发现mater角色主机的ip发生了变化
[root@mgm57 ~]# redis-trib.rb info 192.168.88.51:6379
网友评论