主节点: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.

Categories: 数据库

0 Comments

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注