主节点:6380 从节点6381
一、db01上
1.创建目录
[root@db1 ~]# pkill redis
[root@db1 ~]# mkdir -p /opt/redis_{6380,6381}/{conf,logs,pid}
[root@db1 ~]# mkdir -p /data/redis_{6380,6381}
2.编写配置文件
[root@db1 ~]# cat >/opt/redis_6380/conf/redis_6380.conf<<EOF
> bind 10.0.0.51
> port 6380
> daemonize yes
> pidfile "/opt/redis_6380/pid/redis_6380.pid"
> logfile "/opt/redis_6380/logs/redis_6380.log"
> dbfilename "redis_6380.rdb"
> dir "/data/redis_6380/"
> appendonly yes
> appendfilename "redis.aof"
> appendfsync everysec
> cluster-enabled yes
> cluster-config-file nodes_6380.conf
> cluster-node-timeout 15000
> EOF
3.复制主节点的配置文件到从节点并更改端口号
[root@db1 ~]# cd /opt/
[root@db1 opt]# cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
[root@db1 opt]# sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf
4.更改授权为redis
[root@db1 opt]# chown -R redis:redis /opt/redis_*
[root@db1 opt]# chown -R redis:redis /data/redis_*
5.生成主节点的systemd启动文件
cat >/usr/lib/systemd/system/redis-master.service<<EOF
> [Unit]
> Description=Redis persistent key-value database
> After=network.target
> After=network-online.target
> Wants=network-online.target
> [Service]
> ExecStart=/usr/local/bin/redis-server /opt/redis_6380/conf/redis_6380.conf --supervised systemd
> ExecStop=/usr/local/bin/redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 6380 shutdown
> Type=notify
> User=redis
> Group=redis
> RuntimeDirectory=redis
> RuntimeDirectoryMode=0755
> [Install]
> WantedBy=multi-user.target
> EOF
6.复制master节点的启动文件给slave节点并修改端口号
[root@db1 opt]# cd /usr/lib/systemd/system/
[root@db1 system]# cp redis-master.service redis-slave.service
[root@db1 system]# sed -i 's#6380#6381#g' redis-slave.service
7.重载并启动集群节点
[root@db1 system]# systemctl daemon-reload
[root@db1 system]# systemctl start redis-master
[root@db1 system]# systemctl start redis-slave
[root@db1 system]# ps -ef|grep redis
redis 14353 1 0 10:01 ? 00:00:00 /usr/local/bin/redis-server 10.0.0.51:6380 [cluster]
redis 14370 1 0 10:01 ? 00:00:00 /usr/local/bin/redis-server 10.0.0.51:6381 [cluster]
root 14415 8309 0 10:02 pts/1 00:00:00 grep --color=auto redis
8.把创建好的目录和启动文件发给db2和db3
[root@db1 system]# rsync -avz /opt/redis_638* 10.0.0.52:/opt/
[root@db1 system]# rsync -avz /opt/redis_638* 10.0.0.53:/opt/
[root@db1 system]# rsync -avz /usr/lib/systemd/system/redis-*.service 10.0.0.52:/usr/lib/systemd/system/
[root@db1 system]# rsync -avz /usr/lib/systemd/system/redis-*.service 10.0.0.53:/usr/lib/systemd/system/
二、db2上的操作
[root@db2 ~]# pkill redis
[root@db2 ~]# find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#52#g"
[root@db2 ~]# cd /usr/lib/systemd/system/
[root@db2 system]# sed -i 's#51#52#g' redis-*.service
[root@db2 system]# mkdir –p /data/redis_{6380,6381}
[root@db2 system]# chown -R redis:redis /opt/redis_*
[root@db2 system]# chown -R redis:redis /data/redis_*
[root@db2 redis_6381]# systemctl daemon-reload
[root@db2 redis_6381]# systemctl start redis-master
[root@db2 redis_6381]# systemctl start redis-slave
[root@db2 redis_6381]# ps -ef|grep redis
redis 7617 1 0 11:03 ? 00:00:00 /usr/local/bin/redis-server 10.0.0.52:6380 [cluster]
redis 7646 1 0 11:04 ? 00:00:00 /usr/local/bin/redis-server 10.0.0.52:6381 [cluster]
root 7694 7208 0 11:05 pts/0 00:00:00 grep --color=auto redis
三、db3上的操作
[root@db3 ~]# pkill redis
[root@db3 ~]# find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#53#g"
[root@db3 ~]# cd /usr/lib/systemd/system/
[root@db3 system]# sed -i 's#51#53#g' redis-*.service
[root@db3 system]# mkdir –p /data/redis_{6380,6381}
[root@db3 system]# chown -R redis:redis /opt/redis_*
[root@db3 system]# chown -R redis:redis /data/redis_*
[root@db3 system]# systemctl daemon-reload
[root@db3 system]# systemctl start redis-master
[root@db3 system]# systemctl start redis-slave
[root@db3 system]# ps -ef|grep redis
redis 11158 1 0 10:52 ? 00:00:00 /usr/local/bin/redis-server 10.0.0.53:6380 [cluster]
redis 11179 1 0 10:52 ? 00:00:00 /usr/local/bin/redis-server 10.0.0.53:6381 [cluster]
root 11196 7261 0 10:53 pts/0 00:00:00 grep --color=auto redis
四、集群手动发现节点
[root@db3 system]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6380
OK
[root@db3 system]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6380
OK
[root@db3 system]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.51 6381
OK
[root@db3 system]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6381
OK
[root@db3 system]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6381
OK
[root@db3 system]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES
53627cf915513ed872542edb8481a223b68c1c04 10.0.0.52:6381@16381 master - 0 1593226892000 5 connected
ae55fc6759f3a8ab9e0b38ba4d5fce35fe0334cb 10.0.0.53:6381@16381 master - 0 1593226256000 0 connected
7c999b2187728e025c292fa64ef1e8a7c129be26 10.0.0.53:6380@16380 master - 0 1593226253309 1 connected
98a57fe2da276ca3751be2d8d28d519bec0c26e8 10.0.0.51:6380@16380 myself,master - 0 1593226254000 3 connected
7004afb821b6f4295f300685bdd0cacaf65f43bf 10.0.0.51:6381@16381 master - 0 1593226256491 2 connected
b1c0f7eac95a0832290caf73800973c96eb63bb4 10.0.0.52:6380@16380 master - 0 1593226895000 0 connected
五、集群槽位规划
db1:6380 5461 0-5460
db2:6380 5461 5461-10921
db3:6380 6462 10922-16383
六、分配槽位
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER ADDSLOTS {0..5460}
OK
[root@db1 opt]# redis-cli -h 10.0.0.52 -p 6380 CLUSTER ADDSLOTS {5461..10921}
OK
[root@db1 opt]# redis-cli -h 10.0.0.53 -p 6380 CLUSTER ADDSLOTS {5462..10683}
OK
七、查看集群状态
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES
53627cf915513ed872542edb8481a223b68c1c04 10.0.0.52:6381@16381 master - 0 1593226892000 5 connected
ae55fc6759f3a8ab9e0b38ba4d5fce35fe0334cb 10.0.0.53:6381@16381 master - 0 1593226893417 4 connected
7c999b2187728e025c292fa64ef1e8a7c129be26 10.0.0.53:6380@16380 master - 0 1593226894473 1 connected 5462-10683
98a57fe2da276ca3751be2d8d28d519bec0c26e8 10.0.0.51:6380@16380 myself,master - 0 1593226888000 3 connected 0-5460
7004afb821b6f4295f300685bdd0cacaf65f43bf 10.0.0.51:6381@16381 master - 0 1593226895521 2 connected
b1c0f7eac95a0832290caf73800973c96eb63bb4 10.0.0.52:6380@16380 master - 0 1593226895000 0 connected 5461 10684-10921
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER INFO
cluster_state:fail
cluster_slots_assigned:10922
cluster_slots_ok:10922
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:3
cluster_stats_messages_ping_sent:852
cluster_stats_messages_pong_sent:799
cluster_stats_messages_meet_sent:7
cluster_stats_messages_update_sent:2
cluster_stats_messages_sent:1660
cluster_stats_messages_ping_received:799
cluster_stats_messages_pong_received:857
cluster_stats_messages_received:1656
八、手动分配复制关系
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE b1c0f7eac95a0832290caf73800973c96eb63bb4 #db2的6380id
OK
[root@db1 opt]# redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE 7c999b2187728e025c292fa64ef1e8a7c129be26 #db3的6380id
OK
[root@db1 opt]# redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE 98a57fe2da276ca3751be2d8d28d519bec0c26e8 #db1的6380id
OK
九、检查复制关系
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6381 CLUSTER NODES
98a57fe2da276ca3751be2d8d28d519bec0c26e8 10.0.0.51:6380@16380 master - 0 1593227455618 3 connected 0-5460
7c999b2187728e025c292fa64ef1e8a7c129be26 10.0.0.53:6380@16380 master - 0 1593227458734 1 connected 5462-10683
b1c0f7eac95a0832290caf73800973c96eb63bb4 10.0.0.52:6380@16380 master - 0 1593227454577 0 connected 5461 10684-10921
7004afb821b6f4295f300685bdd0cacaf65f43bf 10.0.0.51:6381@16381 myself,slave b1c0f7eac95a0832290caf73800973c96eb63bb4 0 1593227451000 2 connected
53627cf915513ed872542edb8481a223b68c1c04 10.0.0.52:6381@16381 slave 7c999b2187728e025c292fa64ef1e8a7c129be26 0 1593227456661 5 connected
ae55fc6759f3a8ab9e0b38ba4d5fce35fe0334cb 10.0.0.53:6381@16381 slave 98a57fe2da276ca3751be2d8d28d519bec0c26e8 0 1593227457694 4 connected
十、写如数据报错,修复
[root@db2 ~]# redis-cli -h 10.0.0.52 -p 6380
10.0.0.52:6380> set k1 v1
(error) CLUSTERDOWN Hash slot not served
[root@db1 opt]# redis-cli --cluster fix 10.0.0.52:6380
[OK] All 16384 slots covered.
十一、写入数据,提示在db1上写入
10.0.0.52:6380> set k1 v1
(error) MOVED 12706 10.0.0.51:6380
10.0.0.52:6380> exit
[root@db2 ~]#
[root@db2 ~]#
[root@db2 ~]# redis-cli -c -h 10.0.0.51 -p 6380 # -c可以写入
10.0.0.51:6380> set k1 v1
OK
集群有ask规则,加入-c参数后,会自动跳转到目标节点处理并由目标节点返回信息
十二、下载ruby工具快速部署集群
[root@db1 opt]# yum install -y rubygems
[root@db1 opt]# gem sources -a http://mirrors.aliyun.com/rubygems/
http://mirrors.aliyun.com/rubygems/ added to sources
[root@db1 opt]# gem sources --remove http://rubygems.org/
source http://rubygems.org/ not present in cache
[root@db1 opt]# gem install redis -v 3.3.3
Fetching: redis-3.3.3.gem (100%)
Successfully installed redis-3.3.3
Parsing documentation for redis-3.3.3
Installing ri documentation for redis-3.3.3
1 gem installed
十三、还原集群环境
[root@db1 opt]# redis-cli -c -h 10.0.0.51 -p 6380 flushall
OK
[root@db1 opt]# redis-cli -c -h 10.0.0.52 -p 6380 flushall
OK
[root@db1 opt]# redis-cli -c -h 10.0.0.53 -p 6380 flushall
OK
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6380 CLUSTER RESET
OK
[root@db1 opt]# redis-cli -h 10.0.0.52 -p 6380 CLUSTER RESET
OK
[root@db1 opt]# redis-cli -h 10.0.0.53 -p 6380 CLUSTER RESET
OK
[root@db1 opt]# redis-cli -h 10.0.0.51 -p 6381 CLUSTER RESET
OK
[root@db1 opt]# redis-cli -h 10.0.0.52 -p 6381 CLUSTER RESET
OK
[root@db1 opt]# redis-cli -h 10.0.0.53 -p 6381 CLUSTER RESET
OK
十四、快速部署集群
[root@db1 opt]# cd /opt/redis/src/
[root@db1 src]# redis-cli --cluster create 10.0.0.51:6380 10.0.0.52:6380 10.0.0.53:6380 10.0.0.51:6381 10.0.0.52:6381 10.0.0.53:6381 --cluster-replicas 1
十五、查看集群
[root@db1 src]# redis-cli --cluster info 10.0.0.51:6380
10.0.0.51:6380 (98a57fe2...) -> 0 keys | 5461 slots | 1 slaves.
10.0.0.53:6380 (7c999b21...) -> 0 keys | 5461 slots | 1 slaves.
10.0.0.52:6380 (5884e585...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
0 Comments