1. 程式人生 > 實用技巧 >redis(1) 叢集部署

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

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