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