redis(1) 集群部署

一、部署环境

1、版本
redis 6.9
2、实例
3 master 3 slave

主机 角色 IP:端口
Hadoop1 master/slave 192.168.43.2:6380 /192.168.43.2:6379
Hadoop2 master/slave 192.168.43.3:6380 /192.168.43.3:6379
Hadoop3 master/slave 192.168.43.4:6380 /192.168.43.4:6379

3、操作系统
centos7.x

普通用户 操作

二、 部署

1、官网下载
| wget https://download.redis.io/releases/redis-6.0.9.tar.gz

2、解压

# tar zxvf redis-6.0.9.tar.gz -C /data1/hadoop

3、编译

# cd /data1/hadoop/redis
# make MALLOC=libc

3.1、编译报错如下:

出现这个原因是gcc版本太低,查看当前的gcc版本

(base) [hduser@hadoop1 redis]$ gcc -v
Using built-in specs.
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)

3.2、升级gcc版本
升级到 5.3及以上版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

scl enable devtoolset-9 bash

注意:scl命令启用只是临时的,推出xshell或者重启就会恢复到原来的gcc版本。
如果要长期生效的话,执行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
或者也可以源码安装
3.3、查看版本

$ gcc --version
gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)

接着重新编译

三、cluster 配置

4.1 创建集群目录

# cd /data1/hadoop/redis
# mkdir cluster/{6380,6379} -p
# cp redis.conf cluster/6379
# cp  redis.conf cluster/6380

4.2、修改6379目录下的配置文件

bind 192.168.43.2
port 6379
daemonize yes
dir ./
pidfile /var/run/redis_6379.pid
logfile "/data1/hadoop/redis-6379.log"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
appendonly yes


#port 6379    #端口
#daemonize yes    #守护进程
#dir ./    #数据存储目录
#logfile "/data1/hadoop/redis-6379.log"    #日志存储目录
#cluster-enabled yes    #开启集群
#cluster-config-file nodes-6379.conf
#cluster-node-timeout 15000
#cluster-require-full-coverage no
#appendonly yes    #持久化

4.3 根据上述的配置文件修改6378目录下的redis.conf,同时拷贝到其他两个节点,修改bind的IP地址

(base) [hduser@hadoop1 6379]$ cp redis.conf ../6380/
(base) [hduser@hadoop1 6379]$ vim ../6380/redis.conf

主要修改

port 6380
pidfile /var/run/redis_6380.pid
logfile "/data1/hadoop/redis-6380.log"
cluster-config-file nodes-6380.conf

拷贝redis到其他节点

(base) [hduser@hadoop1 hadoop]$ scp -r redis/ 192.168.43.3:/data1/hadoop/
(base) [hduser@hadoop1 hadoop]$ scp -r redis/ 192.168.43.4:/data1/hadoop/

在hadoop2节点上执行

[hduser@hadoop2 ~]$ cd /data1/hadoop/redis/
[hduser@hadoop2 cluster]$ sed -i 's/192.168.43.2/192.168.43.3/g' 6379/redis.conf 
[hduser@hadoop2 cluster]$ sed -i 's/192.168.43.2/192.168.43.3/g' 6380/redis.conf

在hadoop3节点执行

[hduser@hadoop3 ~]$ cd /data1/hadoop/redis/cluster/
[hduser@hadoop3 cluster]$ sed -i 's/192.168.43.2/192.168.43.4/g' 6379/redis.conf
[hduser@hadoop3 cluster]$ sed -i 's/192.168.43.2/192.168.43.4/g' 6380/redis.conf
[hduser@hadoop3 cluster]$

4.4 在Hadoop 配置启动脚本

(base) [hduser@hadoop1 redis]$ cat startAllRedisInstance.sh 
#!/bin/bash
test  $# -ne 1 && echo "`basename $0` [start|status|stop]" && exit 1
hosts=(hadoop1 hadoop2 hadoop3)
REDIS_HOME=/data1/hadoop/redis
CONFIG_HOME=/data1/hadoop/redis/cluster

case $1 in
"start")
for host in ${hosts[*]};do
    ssh -T $host "${REDIS_HOME}/src/redis-server ${CONFIG_HOME}/6379/redis.conf ; ${REDIS_HOME}/src/redis-server ${CONFIG_HOME}/6380/redis.conf"
done
;;
"stop")
    for host in ${hosts[*]};do
    ssh -T ${host} "pgrep redis-server | xargs -exec kill -9 "
done
;;

"status")
for host in ${hosts[*]};do
    ssh -T ${host} "echo -------------------${host}----------------;ps aux|grep redis-server|grep -v grep"
done
;;
*)
    echo "`basename $0` [start|status|stop]"
    exit 1
;;
esac

4.4、 脚本测试

四、创建集群

(base) [hduser@hadoop1 redis]$ ./src/redis-cli --cluster create  192.168.43.2:6379 192.168.43.2:6380 192.168.43.3:6379 192.168.43.3:6380 192.168.43.4:6379  192.168.43.4:6380 --cluster-replicas 1

说明:
--cluster-replicas 1 每一个主节点分配一个从节点。
在创建的过程当中,会提示是否输入yes,默认输入yes就可以,代表同意对当前哈希槽位的分配。

五、测试

5.1 查看集群信息

(base) [hduser@hadoop1 redis]$ ./src/redis-cli -c -h 192.168.43.2 -p 6379 cluster info
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:348
cluster_stats_messages_pong_sent:335
cluster_stats_messages_sent:683
cluster_stats_messages_ping_received:330
cluster_stats_messages_pong_received:348
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:683

主要看cluster_state
5.2 查看节点状态

(base) [hduser@hadoop1 redis]$ ./src/redis-cli -c -h 192.168.43.2 -p 6379 cluster nodes
23f461e9c718bf89fb8b055efdd25c45649284e4 192.168.43.3:6380@16380 slave ea3140ab4fbe154b7b81bf7d9dd51179c12e68ef 0 1607404036527 1 connected
ea3140ab4fbe154b7b81bf7d9dd51179c12e68ef 192.168.43.2:6379@16379 myself,master - 0 1607404035000 1 connected 0-5460
9116660c1740ae5de7b19f0a9e2cdb7b4b515cad 192.168.43.2:6380@16380 slave afc9c1d087ad2c80d7b61ab6cd79304ccbb95f79 0 1607404035000 5 connected
c1ff22c2df04f7df8c26ff21ce309df7d94de251 192.168.43.3:6379@16379 master - 0 1607404036000 3 connected 5461-10922
ebcc5c7cef39246c1ea452456d39cde040ba4260 192.168.43.4:6380@16380 slave c1ff22c2df04f7df8c26ff21ce309df7d94de251 0 1607404035505 3 connected
afc9c1d087ad2c80d7b61ab6cd79304ccbb95f79 192.168.43.4:6379@16379 master - 0 1607404034482 5 connected 10923-16383

输出信息说明:
节点ID
IP:端口
标志: master, slave, myself, fail, …
如果是个从节点, 这里是它的主节点的NODE ID
集群最近一次向节点发送 PING 命令之后, 过去了多长时间还没接到回复。.
节点最近一次返回 PONG 回复的时间。
节点的配置纪元(configuration epoch)
本节点的网络连接情况:例如 connected 。
节点目前包含的槽:例如 192.168.43.3:6379 目前包含号码为 5461 至 10922 的哈希槽。
5.3 查看连接数

(base) [hduser@hadoop1 redis]$ ./src/redis-cli -c -h 192.168.43.2 -p 6379 info clients
# Clients
connected_clients:1
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0

5.4 获取最大连接数

(base) [hduser@hadoop1 redis]$ ./src/redis-cli -c -h 192.168.43.2 -p 6379 CONFIG GET maxclients
1) "maxclients"
2) "4064" # 默认值

5.5 设置值

借鉴:
|https://blog.51cto.com/net881004/2538344
|http://www.redis.cn/topics/cluster-tutorial.html

原文地址:https://www.cnblogs.com/yjt1993/p/14102078.html