Centos7部署Redis6.0 cluster集群模式
一、集群规划¶
| 服务器 | 角色 | ip:端口 |
|---|---|---|
| node1 | master1/slave2 | 192.168.158.116:6379/192.168.158.116:26379 |
| node2 | master2/slave3 | 192.168.158.117:6379/192.168.158.117:26379 |
| node3 | master3/slave1 | 192.168.158.118:6379/192.168.158.118:26379 |
软件版本:
OS:CentOS7.9
Redis:redis-6.0.9
二、服务器设置¶
1.设置主机名:
hostnamectl set-hostname redis-cluster01
2.配置映射:
192.168.158.116 redis-cluster01
192.168.158.117 redis-cluster02
192.168.158.118 redis-cluster03
3.时区调整,时间校准:
date -R
timedatectl set-timezone Asia/Shanghai
yum -y install ntp
ntpdate ntp1.aliyun.com
4.关闭selinux:
vim /etc/sysconfig/selinux
SELINUX=disabled
5.重启服务器并验证:
getenforce
Disabled
6.内核设置:
1、 先执行:chmod +x /etc/rc.d/rc.local
2、 将 vm.overcommit_memory = 1 添加到/etc/sysctl.conf中,然后重启服务器使其立即生效。 3、 确保禁用Linux内核功能透明的大页面,它将以负面的方式极大地影响内存使用和延迟。这可以通过以下命令完成:
先直接执行(临时生效):
echo never> /sys/kernel/mm/transparent_hugepage/enabled
再执行以下命令(永久生效):
vim /etc/rc.local
追加:echo never>/sys/kernel/mm/transparent_hugepage/enabled
4、 解决问题:【TCP backlog设置值,511没有成功,因为 /proc/sys/net/core/somaxconn这个设置的是更小的128】
先直接执行(临时生效):
echo 511 > /proc/sys/net/core/somaxconn
再执行以下命令(永久生效):
vim /etc/rc.local
追加:echo 511 > /proc/sys/net/core/somaxconn
5、 重启服务器。

三、Redis安装(三节点同步执行)¶
1、gcc版本问题避免
Redis是c语言开发的。安装redis需要c语言的编译环境。
安装redis6最主要的一点是要用GCC5以上,而CentOS6.9的GCC版本为4.8.x, 所以安装之前必须升级GCC(使用命令gcc --version查看版本)。
yinstall gcc tcl y
um -y install centos-reum -y lease-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
查看gcc版本:
gcc -v
#scl只是临时启用,退出shell后会恢复原系统gcc版本:
scl enable devtoolset-9 bash
#如下命令表示永久启用:
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
#查看gcc版本:
gcc -v
2、下载安装
shell
cd /data/redis
wget http://download.redis.io/releases/redis-6.0.9.tar.gz
tar -xvf redis-6.0.9.tar.gz
cd redis-6.0.9
make MALLOC=libc
make install PREFIX=/usr/local/redis
查看/usr/local/redis/bin,如看见redis具工表示redis已安装成功:
3、Redis配置
建立安裝Redis時会用到的文件夹:
mkdir -p /usr/local/redis/run
mkdir -p /usr/local/redis/log
mkdir -p /usr/local/redis/data/6379
mkdir -p /usr/local/redis/data/26379
mkdir -p /usr/local/redis/conf
设置redis配置文件:
cp /data/redis/redis-6.0.9/redis.conf /usr/local/redis/conf/redis_6379.conf
vim /usr/local/redis/conf/redis_6379.conf
cp /usr/local/redis/conf/redis_26379.conf
打开redis_6379.conf文件,修改以下内容:
bind 192.168.158.116 #添加本机的ip
port 6379 #端口
pidfile /usr/local/redis/run/redis_6379.pid #pid存储目录
logfile /usr/local/redis/log/redis_6379.log #日志存储目录
dir /usr/local/redis/data/6379 #数据存储目录,目录要提前创建好
cluster-enabled yes #开启集群
cluster-config-file nodes-6379.conf #集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不通
cluster-node-timeout 15000 #集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
appendonly yes #持久化
daemonize yes #守护进程
打开redis_26379.conf文件,修改以下内容:
bind 192.168.158.116 #添加本机的ip
port 26379 #端口
pidfile /usr/local/redis/run/redis_26379.pid #pid存储目录
logfile /usr/local/redis/log/redis_26379.log #日志存储目录
dir /usr/local/redis/data/26379 #数据存储目录,目录要提前创建好
cluster-enabled yes #开启集群
cluster-config-file nodes-26379.conf #集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不通
cluster-node-timeout 15000 #集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
appendonly yes #持久化
daemonize yes #守护进程
4、配置Redis集群认证
#密码设置
vim /usr/local/redis/conf/redis_6379.conf
vim /usr/local/redis/conf/redis_26379.conf
masterauth 751NB52t
requirepass 751NB52t
5、制作启动配置文件
cd /usr/local/redis/bin
#启动脚本
vim cluster_start.sh
./redis-server ../conf/redis_6379.conf
./redis-server ../conf/redis_26379.conf
chmod +x cluster_start.sh
#关闭脚本
vim cluster_shutdown.sh
pgrep redis-server | xargs -exec kill -9
chmod +x cluster_shutdown.sh
6、启动&关闭Redis
#启动Redis
sh cluster_start.sh
ps -ef|grep redis
root 5570 2216 0 12:49 pts/0 00:00:00 grep --color=auto redis root 7668 1 0 01:22 ? 00:00:30 ./redis-server 192.168.158.116:6379 [cluster] root 7673 1 0 01:22 ? 00:00:28 ./redis-server 192.168.158.116:26379 [cluster]
#关闭Redis
sh cluster_shutdown.sh
四、Redis集群¶
建立集群前需先启动各个节点的redis服务,並在其中一个redis服务器中执行以下指令建立集群。 1、创建集群 redis3.0和4.0版本中,创建集群还是使用redis-trib.rb方式去创建,但是在5.0之后,可以直接使用redis-cli直接创建集群,本文redis版本为6.0,所以创建集群的方式为redis-cli方式直接创建。
用以下命令创建集群,--cluster-replicas 1 参数表示希望每个主服务器都有一个从服务器,这里则代表3主3从,前3个代表3个master,后3个代表3个slave。
通过该方式创建的带有从节点的机器不能够自己手动指定主节点,redis集群会尽量把主从服务器分配在不同机器上。
redis-cli --cluster create 192.168.158.116:6379 192.168.158.117:6379 192.168.158.118:6379 192.168.158.116:26379 192.168.158.117:26379 192.168.158.118:26379 --cluster-replicas 1 -a 751NB52t
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.158.117:26379 to 192.168.158.116:6379
Adding replica 192.168.158.118:26379 to 192.168.158.117:6379
Adding replica 192.168.158.116:26379 to 192.168.158.118:6379
M: 579c5949471f7022e8f1553da56199988d81285c 192.168.158.116:6379
slots:[0-5460] (5461 slots) master
M: 336015bbff6d006736448d132f948bd182d78a0a 192.168.158.117:6379
slots:[5461-10922] (5462 slots) master
M: 15267409fd72d1d481840733143e244b3bb33372 192.168.158.118:6379
slots:[10923-16383] (5461 slots) master
S: c531d640ca819fd704134bbd552c54836da3dcfb 192.168.158.116:26379
replicates 15267409fd72d1d481840733143e244b3bb33372
S: 6a85de4d2ada4a834032bf5fb6e0305a59e177ce 192.168.158.117:26379
replicates 579c5949471f7022e8f1553da56199988d81285c
S: b635b142d030e1e6a7fae90d5a2e5bbd717c656d 192.168.158.118:26379
replicates 336015bbff6d006736448d132f948bd182d78a0a
Can I set the above configuration? (type 'yes' to accept): 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 192.168.158.116:6379)
M: 579c5949471f7022e8f1553da56199988d81285c 192.168.158.116:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 15267409fd72d1d481840733143e244b3bb33372 192.168.158.118:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: b635b142d030e1e6a7fae90d5a2e5bbd717c656d 192.168.158.118:26379
slots: (0 slots) slave
replicates 336015bbff6d006736448d132f948bd182d78a0a
M: 336015bbff6d006736448d132f948bd182d78a0a 192.168.158.117:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 6a85de4d2ada4a834032bf5fb6e0305a59e177ce 192.168.158.117:26379
slots: (0 slots) slave
replicates 579c5949471f7022e8f1553da56199988d81285c
S: c531d640ca819fd704134bbd552c54836da3dcfb 192.168.158.116:26379
slots: (0 slots) slave
replicates 15267409fd72d1d481840733143e244b3bb33372
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
2、查看集群状态
[root@redis-cluster01 bin]# ./redis-cli -c -h 192.168.158.116 -p 6379 -a 751NB52t cluster info
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:19
cluster_stats_messages_pong_sent:20
cluster_stats_messages_sent:39
cluster_stats_messages_ping_received:15
cluster_stats_messages_pong_received:19
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:39
3、查看集群节点
[root@redis-cluster01 bin]# ./redis-cli -c -h 192.168.158.116 -p 6379 -a 751NB52t cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
6a85de4d2ada4a834032bf5fb6e0305a59e177ce 192.168.158.117:26379@36379 slave 579c5949471f7022e8f1553da56199988d81285c 0 1632545639136 1 connected
b635b142d030e1e6a7fae90d5a2e5bbd717c656d 192.168.158.118:26379@36379 slave 336015bbff6d006736448d132f948bd182d78a0a 0 1632545637133 2 connected
c531d640ca819fd704134bbd552c54836da3dcfb 192.168.158.116:26379@36379 slave 15267409fd72d1d481840733143e244b3bb33372 0 1632545638000 3 connected
15267409fd72d1d481840733143e244b3bb33372 192.168.158.118:6379@16379 master - 0 1632545640137 3 connected 10923-16383
336015bbff6d006736448d132f948bd182d78a0a 192.168.158.117:6379@16379 master - 0 1632545639000 2 connected 5461-10922
579c5949471f7022e8f1553da56199988d81285c 192.168.158.116:6379@16379 myself,master - 0 1632545638000 1 connected 0-5460
4、查看集群插槽
[root@redis-cluster01 bin]# ./redis-cli -c -h 192.168.158.116 -p 6379 -a 751NB52t cluster slots
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
1) 1) (integer) 10923
2) (integer) 16383
3) 1) "192.168.158.118"
2) (integer) 6379
3) "15267409fd72d1d481840733143e244b3bb33372"
4) 1) "192.168.158.116"
2) (integer) 26379
3) "c531d640ca819fd704134bbd552c54836da3dcfb"
2) 1) (integer) 5461
2) (integer) 10922
3) 1) "192.168.158.117"
2) (integer) 6379
3) "336015bbff6d006736448d132f948bd182d78a0a"
4) 1) "192.168.158.118"
2) (integer) 26379
3) "b635b142d030e1e6a7fae90d5a2e5bbd717c656d"
3) 1) (integer) 0
2) (integer) 5460
3) 1) "192.168.158.116"
2) (integer) 6379
3) "579c5949471f7022e8f1553da56199988d81285c"
4) 1) "192.168.158.117"
2) (integer) 26379
3) "6a85de4d2ada4a834032bf5fb6e0305a59e177ce"
五、目录结构¶
[root@redis-cluster01 bin]# cd /usr/local/redis/
[root@redis-cluster01 redis]# tree
.
├── bin
│ ├── cluster_shutdown.sh
│ ├── cluster_start.sh
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-check-rdb
│ ├── redis-cli
│ ├── redis-sentinel -> redis-server
│ └── redis-server
├── conf
│ ├── redis_26379.conf
│ └── redis_6379.conf
├── data
│ ├── 26379
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes-26379.conf
│ └── 6379
│ ├── appendonly.aof
│ ├── dump.rdb
│ └── nodes-6379.conf
├── log
│ ├── redis_26379.log
│ └── redis_6379.log
└── run
7 directories, 18 files