一准备:
在db01中操作:
[root@db01 ~]# mkdir -p /opt/redis_cluster/redis_{6380,6381}/{conf,logs,pid} [root@db01 ~]# mkdir –p /data/redis_cluster/redis_{6380,6381} [root@db01 ~]# cat >/opt/redis_cluster/redis_6380/conf/redis_6380.conf<<EOF > bind 10.0.0.201 > port 6380 > daemonize yes > pidfile "/opt/redis_cluster/redis_6380/pid/redis_6380.pid" > logfile "/opt/redis_cluster/redis_6380/logs/redis_6380.log" > dbfilename "redis_6380.rdb" > dir "/data/redis_cluster/redis_6380/" > cluster-enabled yes > cluster-config-file nodes_6380.conf > cluster-node-timeout 15000 > EOF
[root@db01 ~]# cd /opt/redis_cluster/ [root@db01 redis_cluster]# cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf [root@db01 redis_cluster]# sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf
[root@db01 redis_cluster]# rsync -avz /opt/redis_cluster/redis_638* db02:/opt/redis_cluster/ [root@db01 redis_cluster]# rsync -avz /opt/redis_cluster/redis_638* db03:/opt/redis_cluster/
[root@db01 redis_cluster]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf [root@db01 redis_cluster]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf [root@db01 redis_cluster]# ps -ef|grep redis root 1529 1 0 03:47 ? 00:00:07 redis-server 10.0.0.201:6379 root 1572 1 0 04:13 ? 00:00:00 redis-server 10.0.0.201:6380 [cluster] root 1576 1 1 04:14 ? 00:00:00 redis-server 10.0.0.201:6381 [cluster] root 1580 1298 0 04:14 pts/0 00:00:00 grep --color=auto redis [root@db01 redis_cluster]#
在db02中操作
[root@db02 ~]# find /opt/redis_cluster/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#201#202#g" [root@db02 ~]# mkdir –p /data/redis_cluster/redis_{6380,6381} [root@db02 ~]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf [root@db02 ~]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf [root@db02 ~]# ps -ef|grep redis root 1037 1 0 4月10 ? 00:04:56 redis-server 10.0.0.202:6379 root 1046 1 0 4月10 ? 00:06:13 redis-sentinel 10.0.0.202:26379 [sentinel] root 2291 1 0 04:40 ? 00:00:00 redis-server 10.0.0.202:6380 [cluster] root 2295 1 0 04:40 ? 00:00:00 redis-server 10.0.0.202:6381 [cluster] root 2299 2131 19 04:40 pts/0 00:00:00 grep --color=auto redis [root@db02 ~]#
在db03中操作:
[root@db03 redis_6381]# find /opt/redis_cluster/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#201#203#g" [root@db03 redis_6381]# redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf [root@db03 redis_6381]# redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf [root@db03 redis_6381]# ps -ef|grep redis root 1530 1 0 4月10 ? 00:05:03 redis-server 10.0.0.203:6379 root 1543 1 0 4月10 ? 00:06:41 redis-sentinel 10.0.0.203:26379 [sentinel] root 3234 1 1 04:52 ? 00:00:00 redis-server 10.0.0.203:6380 [cluster] root 3238 1 0 04:52 ? 00:00:00 redis-server 10.0.0.203:6381 [cluster] root 3242 3012 0 04:52 pts/0 00:00:00 grep --color=auto redis [root@db03 redis_6381]#
检查(查看一下是不是有四个端口)
redis集群开通redis客户端连接的端口6380和6381后,系统会自动开通集群总线的通讯端口,总线通讯端口为redis客户端连接端口+10000
[root@db01 ~]# netstat -lntup|grep redis tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1529/redis-server 1 tcp 0 0 10.0.0.201:6380 0.0.0.0:* LISTEN 1572/redis-server 1 tcp 0 0 10.0.0.201:6381 0.0.0.0:* LISTEN 1576/redis-server 1 tcp 0 0 10.0.0.201:16380 0.0.0.0:* LISTEN 1572/redis-server 1
tcp 0 0 10.0.0.201:16381 0.0.0.0:* LISTEN 1576/redis-server 1
[root@db01 ~]#
二编写工具脚本并将脚本分别拷贝到db01,db02,db03中
[root@db01 ~]# vim redis_shell.sh
#!/bin/bash USAG(){ echo "sh $0 {start|stop|restart|login|ps|tail} PORT" } if [ "$#" = 1 ] then REDIS_PORT='6379' elif [ "$#" = 2 -a -z "$(echo "$2"|sed 's#[0-9]##g')" ] then REDIS_PORT="$2" else USAG exit 0 fi REDIS_IP=$(hostname -I|awk '{print $1}') PATH_DIR=/opt/redis_cluster/redis_${REDIS_PORT}/ PATH_CONF=/opt/redis_cluster/redis_${REDIS_PORT}/conf/redis_${REDIS_PORT}.conf PATH_LOG=/opt/redis_cluster/redis_${REDIS_PORT}/logs/redis_${REDIS_PORT}.log CMD_START(){ redis-server ${PATH_CONF} } CMD_SHUTDOWN(){ redis-cli -c -h ${REDIS_IP} -p ${REDIS_PORT} shutdown } CMD_LOGIN(){ redis-cli -c -h ${REDIS_IP} -p ${REDIS_PORT} } CMD_PS(){ ps -ef|grep redis } CMD_TAIL(){ tail -f ${PATH_LOG} } case $1 in start) CMD_START CMD_PS ;; stop) CMD_SHUTDOWN CMD_PS ;; restart)
CMD_SHUTDOWN CMD_START CMD_PS ;; login) CMD_LOGIN ;; ps) CMD_PS ;; tail) CMD_TAIL ;; *) USAG esac
[root@db01 ~]# scp redis_shell.sh db02:/root/ redis_shell.sh 100% 1085 55.8KB/s 00:00 [root@db01 ~]# scp redis_shell.sh db03:/root/ redis_shell.sh 100% 1085 182.6KB/s 00:00 [root@db01 ~]#
redis脚本用法解释:
[root@db01 ~]# sh redis_shell.sh stop 6380 #停止6380 [root@db01 ~]# sh redis_shell.sh ps #查看redis进程 [root@db01 ~]# sh redis_shell.sh start 6380 #运行6380 [root@db01 ~]# sh redis_shell.sh tail 6380 #查看端口日志 [root@db01 ~]# sh redis_shell.sh restart 6380 #重启6380端口
三配置redis集群互相发现:
[root@db01 ~]# sh redis_shell.sh login 6380 10.0.0.201:6380> cluster meet 10.0.0.201 6381 OK 10.0.0.201:6380> cluster nodes 4c007a5e2d894aa4c6ce950467221f01fd50f645 10.0.0.201:6380 myself,master - 0 0 1 connected 6139c63daaac449a5173a41ae3be3f9d86ed8fa8 10.0.0.201:6381 master - 0 1618103793050 0 connected 10.0.0.201:6380> 10.0.0.201:6380> [root@db01 ~]# redis-cli -h db01 -p 6380 cluster meet 10.0.0.202 6380 OK [root@db01 ~]# redis-cli -h db01 -p 6380 cluster meet 10.0.0.202 6381 OK [root@db01 ~]# redis-cli -h db01 -p 6380 cluster meet 10.0.0.203 6380 OK [root@db01 ~]# redis-cli -h db01 -p 6380 cluster meet 10.0.0.203 6381 OK [root@db01 ~]# redis-cli -h db01 -p 6380 cluster nodes 070b91942844a34c1871642eef2d24bd3e816403 10.0.0.203:6380 master - 0 1618104586306 4 connected 74bdf79d95556ffd38c47b01d0c76f393706bbda 10.0.0.202:6380 master - 0 1618104590839 5 connected 4c007a5e2d894aa4c6ce950467221f01fd50f645 10.0.0.201:6380 myself,master - 0 0 1 connected 6139c63daaac449a5173a41ae3be3f9d86ed8fa8 10.0.0.201:6381 master - 0 1618104589328 2 connected 2e616daa28ca6518b908148227edf562280a2d61 10.0.0.202:6381 master - 0 1618104590336 3 connected ddee11b9c4c6622bbf28497c53aa1eb84846084f 10.0.0.203:6381 master - 0 1618104588321 0 connected [root@db01 ~]#
四给每个主节点分配槽位:
默认槽位总数是16384,而本例中有3个主节点,那么16384/3=5461.33
因此我们可以分配5461,5461,5462
[root@db01 ~]# redis-cli -h db01 -p 6380 cluster addslots {0..5461} OK [root@db01 ~]# redis-cli -h db02 -p 6380 cluster addslots {5462..10922} OK [root@db01 ~]# redis-cli -h db03 -p 6380 cluster addslots {10923..16383} OK [root@db01 ~]#
[root@db01 ~]# redis-cli -h db01 -p 6380 cluster nodes
070b91942844a34c1871642eef2d24bd3e816403 10.0.0.203:6380 master - 0 1618107857045 4 connected 10923-16383
74bdf79d95556ffd38c47b01d0c76f393706bbda 10.0.0.202:6380 master - 0 1618107860069 5 connected 5462-10922
4c007a5e2d894aa4c6ce950467221f01fd50f645 10.0.0.201:6380 myself,master - 0 0 1 connected 0-5461
6139c63daaac449a5173a41ae3be3f9d86ed8fa8 10.0.0.201:6381 master - 0 1618107863089 2 connected
2e616daa28ca6518b908148227edf562280a2d61 10.0.0.202:6381 master - 0 1618107861075 3 connected
ddee11b9c4c6622bbf28497c53aa1eb84846084f 10.0.0.203:6381 master - 0 1618107862086 0 connected
[root@db01 ~]# redis-cli -h db01 -p 6380 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:5
cluster_my_epoch:1
cluster_stats_messages_sent:8611
cluster_stats_messages_received:8611
[root@db01 ~]#
五集群添加数据的方法:
[root@db01 ~]# redis-cli -h db01 -p 6380 set k1 v1 (error) MOVED 12706 10.0.0.203:6380 [root@db01 ~]# redis-cli -c -h db01 -p 6380 set k1 v1 OK [root@db01 ~]#
1
1
1
1