栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis-cluster集群搭建集成SpringBoot项目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis-cluster集群搭建集成SpringBoot项目

配置文件

redis.conf
按三主三从的规格配置6个实例:

port 6379        
requirepass 123456            //设置密码
masterauth 123456            //如果requirepass设置了,masterauth也必须要保持一样,否则无法同步。
cluster-enabled yes    //开启集群模式 
cluster-config-file nodes-6379.conf    //每台机器的集群配置文件,不需要人工修改,程序自动记录,这块名字可以根据端口号进行设置。
cluster-node-timeout 15000  //单位是毫秒,如果在15秒还没有响应,结点会被认为出了故障。
启动redis实例

这里写了一个脚本来执行,节点多了太麻烦了:

#!/bin/bash
echo '>>>>>>>>>>>>>>>>>>> docker stop:'
docker stop redis-node1
docker stop redis-node2
docker stop redis-node3
docker stop redis-node4
docker stop redis-node5
docker stop redis-node6
echo '>>>>>>>>>>>>>>>>>>> docker rm:'
docker rm redis-node1
docker rm redis-node2
docker rm redis-node3
docker rm redis-node4
docker rm redis-node5
docker rm redis-node6
echo '>>>>>>>>>>>>>>>>>> clear data':
rm -rf ./node1/data
rm -rf ./node2/data
rm -rf ./node3/data
rm -rf ./node4/data
rm -rf ./node5/data
rm -rf ./node6/data
echo '>>>>>>>>>>>>>>>>>> docker create:'
docker run -idt  --net=host --name redis-node1 -p 6379:6379 -p 16379:16379 -v /usr/local/redis/node1/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/node1/data:/data  --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
docker run -idt  --net=host --name redis-node2 -p 6380:6380 -p 16380:16380 -v /usr/local/redis/node2/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/node2/data:/data  --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
docker run -idt  --net=host --name redis-node3 -p 6381:6381 -p 16381:16381 -v /usr/local/redis/node3/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/node3/data:/data  --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
docker run -idt --net=host  --name redis-node4 -p 6382:6382 -p 16382:16382 -v /usr/local/redis/node4/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/node4/data:/data  --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
docker run -idt --net=host  --name redis-node5 -p 6383:6383 -p 16383:16383 -v /usr/local/redis/node5/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/node5/data:/data  --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
docker run -idt --net=host  --name redis-node6 -p 6384:6384 -p 16384:16384 -v /usr/local/redis/node6/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/node6/data:/data  --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
echo '>>>>>>>>>>>>>>>>> docker nodes status:'
ps aux |grep cluster |grep redis

注意:如果是自己搭来玩,用一台主机,则记得把--net=host加上,该参数的作用是让docker和宿主机使用同一个网卡驱动,若不配置,那么到时候redis集群就会用docker创建的虚拟网卡驱动,导致redis节点和宿主机不在同一个网段。

创建集群
[root@localhost redis]# docker exec -it redis-node1 /bin/bash
root@localhost:/data#  redis-cli --cluster create 192.168.3.101:6379 192.168.3.101:6380 192.168.3.101:6381 192.168.3.101:6382 192.168.3.101:6383 192.168.3.101:6384 --cluster-replicas 1 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.3.101:6383 to 192.168.3.101:6379
Adding replica 192.168.3.101:6384 to 192.168.3.101:6380
Adding replica 192.168.3.101:6382 to 192.168.3.101:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: a459cc9e605645cd5a3efa402a6472b36e7ebc65 192.168.3.101:6379
   slots:[0-5460] (5461 slots) master
M: 0e4526a7ebd3643a3d53f6aea5fc4f8935464fa2 192.168.3.101:6380
   slots:[5461-10922] (5462 slots) master
M: ec5fac133f0a4fcaff91e32fe1160e89d047ea44 192.168.3.101:6381
   slots:[10923-16383] (5461 slots) master
S: ee6230d0a064296f46201ac72f3eb52f574af456 192.168.3.101:6382
   replicates 0e4526a7ebd3643a3d53f6aea5fc4f8935464fa2
S: fc331235e462cc05462494d3b32ae95677f90e2c 192.168.3.101:6383
   replicates ec5fac133f0a4fcaff91e32fe1160e89d047ea44
S: 635d0a39c21614b4af529ba45fbc7a381d5f0061 192.168.3.101:6384
   replicates a459cc9e605645cd5a3efa402a6472b36e7ebc65
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 192.168.3.101:6379)
M: a459cc9e605645cd5a3efa402a6472b36e7ebc65 192.168.3.101:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: ee6230d0a064296f46201ac72f3eb52f574af456 192.168.3.101:6382
   slots: (0 slots) slave
   replicates 0e4526a7ebd3643a3d53f6aea5fc4f8935464fa2
M: 0e4526a7ebd3643a3d53f6aea5fc4f8935464fa2 192.168.3.101:6380
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: ec5fac133f0a4fcaff91e32fe1160e89d047ea44 192.168.3.101:6381
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: fc331235e462cc05462494d3b32ae95677f90e2c 192.168.3.101:6383
   slots: (0 slots) slave
   replicates ec5fac133f0a4fcaff91e32fe1160e89d047ea44
S: 635d0a39c21614b4af529ba45fbc7a381d5f0061 192.168.3.101:6384
   slots: (0 slots) slave
   replicates a459cc9e605645cd5a3efa402a6472b36e7ebc65
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

至此,一个redis集群搭建完毕了。

接入SpringBoot项目

创建一个maven项目,pom文件:



    4.0.0
    org.example
    WebProject
    1.0-SNAPSHOT

    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.12.RELEASE
    

    
        8
        8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
    

单节点配置

application.yml

server:
  # 端口号
  port: 8080
spring:
  redis:
    host: 192.168.3.101
    port: 6379
    password: 123456
测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {
    @Autowired
    RedisTemplate redisTemplate;

    @Test
    public void t1(){
        redisTemplate.opsForValue().set("k1","123");
        Object k1 = redisTemplate.opsForValue().get("k1");
        System.out.println(k1.toString());
    }
}

>>>>>>123

看似很完美,but:

所以redis集群是没办法单节点运行的。还是需要进行集群配置。

集群配置
spring:
  redis:
#    host: 192.168.3.101
#    port: 6379
    password: 123456
    cluster:
      nodes: 192.168.3.101:6379,192.168.3.101:6380,192.168.3.101:6381,192.168.3.101:6382,192.168.3.101:6383,192.168.3.101:6384


完结撒花!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/930465.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号