021、Python+fastapi,第一个Python项目走向第21步:ubuntu 24.04 docker 安装mysql8集群、redis集群(二)

系列文章目录

python+vue3+fastapi+ai 学习_浪淘沙jkp的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/jiangkp/category_12623996.html

前言

安装redis 我会以三种方式安装,在5月4号修改完成

第一、直接最简单安装,适用于测试环境玩玩

第二、conf配置安装

第三、集群环境安装


一、redis用途

Redis是一个开源的内存数据库,常用于缓存、消息队列、会话存储、实时分析等方面。其主要用途包括:

  1. 缓存:Redis可以将常用的数据存储在内存中,以提高数据访问速度,减轻后端数据库的压力。

  2. 消息队列:Redis支持发布/订阅模式,可以用作消息队列系统,实现异步通信。

  3. 会话存储:Redis可以用来存储用户会话信息,实现分布式会话管理。

  4. 实时分析:Redis支持多种数据结构,包括列表、集合、哈希表等,可以用于实时数据分析和统计。

  5. 分布式锁:Redis提供了分布式锁的实现方式,可以用来控制并发访问。

总的来说,Redis具有高性能、高可用性和丰富的数据结构,适用于多种场景下的数据存储和处理需求

二、简单安装

1、安装

docker run -d --name redis_test --restart=always -p 6379:6379 redis --requirepass 123456

-d  后台运行
--name redis_test   设置容器名为 redis_test
--restart=always   开机自启
-p 6379:6379    端口映射
redis  镜像名 直接获取光网lastest,可以指定版本
--requirepass 123456   密码为 123456

victor_t400@victort400:~$ docker run -d --restart=always --name victorredis redis -p 6379:6379 --requirepass 123456
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
b0a0cf830b12: Pull complete
214d0afb35ca: Pull complete
16a9d12e7a2c: Pull complete
cb9709829e8b: Pull complete
00e912971fa2: Pull complete
f7ebca356832: Pull complete
4f4fb700ef54: Pull complete
c16c264be546: Pull complete
Digest: sha256:f14f42fc7e824b93c0e2fe3cdf42f68197ee0311c3d2e0235be37480b2e208e6
Status: Downloaded newer image for redis:latest
b8922e41585aff4de14edc02b8caab80a6bef91decaecd5c0b50ac593a4fe275
 

注意:上面这条命令网上拷贝的不行,放在文件里编译了也不行,直接敲好了,我找谁去

ps下是肯定的

 victor_t400@victort400:~$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS                          PORTS     NAMES
b8922e41585a   redis     "docker-entrypoint.s…"   About a minute ago   Restarting (1) 34 seconds ago             victorredis

restarting啥意思? 

victor_t400@victort400:~$ docker logs b8922e41585a

*** FATAL CONFIG FILE ERROR (Redis 7.2.4) ***
Reading the configuration file, at line 2
>>> '"-p" "6379:6379"'
Bad directive or wrong number of arguments

*** FATAL CONFIG FILE ERROR (Redis 7.2.4) ***
Reading the configuration file, at line 2
>>> '"-p" "6379:6379"'
Bad directive or wrong number of arguments

*** FATAL CONFIG FILE ERROR (Redis 7.2.4) ***
Reading the configuration file, at line 2
>>> '"-p" "6379:6379"'
Bad directive or wrong number of arguments
 

victor_t400@victort400:~$ sudo lsof -nP -iTCP -sTCP:LISTEN  #6379 没有被占用
COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd      1            root   93u  IPv6   5638      0t0  TCP *:22 (LISTEN)
systemd-r  586 systemd-resolve   15u  IPv4   7612      0t0  TCP 127.0.0.53:53 (LISTEN)
systemd-r  586 systemd-resolve   17u  IPv4   7614      0t0  TCP 127.0.0.54:53 (LISTEN)
container  733            root    8u  IPv4   8382      0t0  TCP 127.0.0.1:37721 (LISTEN)
sshd      1200            root    3u  IPv6   5638      0t0  TCP *:22 (LISTEN)
victor_t400@victort400:~$ ^C
victor_t400@victort400:~$ ^C
victor_t400@victort400:~$ docker stop b8922e41585a
b8922e41585a
victor_t400@victort400:~$ docker kill b8922e41585a
Error response from daemon: Cannot kill container: b8922e41585a: Container b8922e41585aff4de14edc02b8caab80a6bef91decaecd5c0b50ac593a4fe275 is not running
victor_t400@victort400:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
victor_t400@victort400:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS     NAMES
b8922e41585a   redis         "docker-entrypoint.s…"   50 minutes ago   Exited (1) 36 seconds ago             victorredis
a18ad488d054   hello-world   "/hello"                 2 hours ago      Exited (0) 2 hours ago                elegant_edison
victor_t400@victort400:~$ docker rm b8922e41585a
b8922e41585a
victor_t400@victort400:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED       STATUS                   PORTS     NAMES
a18ad488d054   hello-world   "/hello"   2 hours ago   Exited (0) 2 hours ago             elegant_edison
victor_t400@victort400:~$ ^C
victor_t400@victort400:~$ docker run -d --restart=always --name victorredis -p 6379:6379  redis --requirepass 123456
341e11bffc02971d177b23d32779b5ff11da559832b050bf585985918439a76b
victor_t400@victort400:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                   PORTS                                       NAMES
341e11bffc02   redis         "docker-entrypoint.s…"   7 seconds ago   Up 5 seconds             0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   victorredis
a18ad488d054   hello-world   "/hello"                 2 hours ago     Exited (0) 2 hours ago                                               elegant_edison
victor_t400@victort400:~$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                                       NAMES
341e11bffc02   redis     "docker-entrypoint.s…"   11 seconds ago   Up 9 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   victorredis
victor_t400@victort400:~$

 

有问题 

docker run -d --restart=always --name victorredis redis -p 6379:6379 --requirepass 123456 

没有问题,看出问题了吗,反正我是没有

docker run -d --restart=always --name victorredis -p 6379:6379  redis --requirepass 123456 


2、测试 

本地测试

victor_t400@victort400:~$ docker exec -it 341e11bffc02  bash
root@341e11bffc02:/data# redis-cli
127.0.0.1:6379> set a 1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"
127.0.0.1:6379>
 

版本 7.2.4 这应该是最新的 

root@341e11bffc02:/data# redis-cli --version
redis-cli 7.2.4
 

外部连接

用nvicat 16版本,需要的可以留言,我可以给个百度网盘地址

连接不上,估计是端口没有开放吧!去试试再说。

victor_t400@victort400:~$ sudo ufw allow 6379
Rule added
Rule added (v6)
victor_t400@victort400:~$ sudo ufw allow 3306
Rule added
Rule added (v6)
victor_t400@victort400:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
6379                       ALLOW       Anywhere
3306                       ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
6379 (v6)                  ALLOW       Anywhere (v6)
3306 (v6)                  ALLOW       Anywhere (v6)

victor_t400@victort400:~$ sudo ufw reload
Firewall reloaded
 

 再连接

点击底下的ok,不是中间的,进入下面界面,说明连到redis了,可以操作的

测试用测试用,开发玩着用,生产是不能上的,就数据不能安全的保存,就不能用 

 三、单机指定 redis.conf 配置文件安装

这也是我们一般情况下的安装方式,测试生产两不误

我们把前面安装的redis删除掉,免得还要改端口号

1、删除上一节安装的redis

victor_t400@victort400:~/redis$ docker stop 341e11bffc02
341e11bffc02
victor_t400@victort400:~/redis$ docker rm 341e11bffc02
341e11bffc02
victor_t400@victort400:~/redis$ ps
    PID TTY          TIME CMD
   2378 pts/1    00:00:00 bash
   3060 pts/1    00:00:00 ps
victor_t400@victort400:~/redis$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
victor_t400@victort400:~/redis$ docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED       STATUS                   PORTS     NAMES
a18ad488d054   hello-world   "/hello"   8 hours ago   Exited (0) 8 hours ago             elegant_edison
victor_t400@victort400:~/redis$
 

2、建映射目录,下载redis.conf

版本7.2.4,前面得到过

redis.conf里修改3个地方

port 6379===》port 6479

bind 127.0.0.1 -::1===》bind 0.0.0.0

requirepass foobared===》requirepass 123456

appendonly no===》appendonly yes

victor_t400@victort400:/home$ cd victor_t400/
victor_t400@victort400:~$ mkdir redis

victor_t400@victort400:~$ cd redis

victor_t400@victort400:~/redis$ mkdir data
victor_t400@victort400:~/redis$ ls
data

victor_t400@victort400:~/redis$ wget https://raw.githubusercontent.com/redis/redis/7.2/redis.conf

3、启动redis容器

docker run --restart=always --privileged=true \
-p 6379:6379 \
--name redis-conf \
-v /home/victor_t400/redis/redis.conf:/etc/redis/redis.conf \
-v /home/victor_t400/redis/data:/data \
-d redis:latest redis-server /etc/redis/redis.conf

victor_t400@victort400:~/redis$ docker run --restart=always \
-p 6379:6379 \
--name redis-conf \
-v /home/victor_t400/redis/redis.conf:/etc/redis/redis.conf \
-v /home/victor_t400/redis/data:/data \
-d redis:latest redis-server /etc/redis/redis.conf
0aec664502c3013bcb3b2fa2cee12d5f2272e49ec125d35bbc1fa2ad522aa918
victor_t400@victort400:~/redis$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
0aec664502c3   redis:latest   "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis-conf

 4、测试

其实上面那个“爱了爱了“连接也是可以连接的,端口 IP 密码都一样

5、我们看看log,改了下 

victor_t400@victort400:~/redis$ docker logs redis-conf
1:C 03 May 2024 10:18:03.574 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:C 03 May 2024 10:18:03.574 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 03 May 2024 10:18:03.574 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 03 May 2024 10:18:03.574 * Configuration loaded
1:M 03 May 2024 10:18:03.575 * monotonic clock: POSIX clock_gettime
1:M 03 May 2024 10:18:03.576 # Failed to write PID file: Permission denied
1:M 03 May 2024 10:18:03.576 * Running mode=standalone, port=6379.
1:M 03 May 2024 10:18:03.576 * Server initialized
1:M 03 May 2024 10:18:03.576 * Ready to accept connections tcp
victor_t400@victort400:~/redis$ sudo vi /etc/sysctl.conf

在最后添加vm.overcommit_memory = 1
victor_t400@victort400:~/redis$ sudo sysctl -p
vm.overcommit_memory = 1
 

非常意外的发现data下没有数据,我还重新装了一遍,还是没有,结果在里面加了点数据,就有了,哎,我能怎么说呢,这个玩意是dockers里面的redis引起映射的data目录变化,有数据才会有映射吧

四、集群安装

大晚上写的集群安装今天早上发现没了,没点发布,哎,造孽啊,正好装得不满意,redis创建集群时卡在Waiting for the cluster to join,全部删了,重新来过,昨天安装设置配置为

  • docker端口号→宿主机对外暴露的端口:8000→8000,8001→8001,8002→8002,8003→8003,8004→8004,8005→8005
  • 以上一条在安装时没成功,成功了一次,不知道改了什么就不成功了,呵呵,所以我没上传,导致我再来一边,其实分析了一下,节点容器是拥有单独的内部ip(后面会有实际操作),相当于是一个个体,直接用默认6379就行
  • docker端口号→宿主机对外暴露的端口变为:8001→8001,8002→8002,8003→8003,8004→8004,8005→8005 8002→8006
  • 网传每个cluster需要打开两个TCP,官网有描述,是真的,别不信,名字叫做集群总线端口,内部通信用的,前面一条是与客户通信的端口,如果你设置了其它端口,那么就是其它端口+10000,比如8001就是18001
  • 挂载目录:data(数据) → /home/redis/node-端口号/data/
    conf(配置文件)→ /home/redis/node-端口号/conf/redis.conf
  • 集群模式:三主三从
  • 节点容器名称:redis-8001,redis-8002,redis-8003,redis-8004,redis-8005,redis-8006

1、删除以前安装集群历史

以下是以前装的,现在变了,后面会贴上去,和节点容器名称:redis-1,redis-2,redis-3,redis-4,redis-5,redis-6有关

for port in $(seq 8001 8006); 
do 
docker stop redis-${port}
done

for port in $(seq 8001 8006); 
do 
docker rm redis-${port}
done


victor_t400@victort400:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
victor_t400@victort400:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
victor_t400@victort400:~$
 

删干净吧

docker rmi [IMAGE_ID_OR_NAME]  删除一个image

docker rmi $(docker images -q) 删除所有

我全删了

victor_t400@victort400:~$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
 

非常干净了

好像还有点删啊,这个目录删除吧,否则,其实也没关系,后面我目录变了

sudo rm -rf /home/redis

2、开放所有需要端口

 sudo ufw allow 8001

8001~8006  18001~18006 一共13个全部打开,16739应该不用,这个是内部的吧,我打开了,就不管了

全打开吧

victor_t400@victort400:/home$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
6379                       ALLOW       Anywhere
3306                       ALLOW       Anywhere
8000                       ALLOW       Anywhere
8001                       ALLOW       Anywhere
8002                       ALLOW       Anywhere
8003                       ALLOW       Anywhere
8004                       ALLOW       Anywhere
8005                       ALLOW       Anywhere
18000                      ALLOW       Anywhere
18001                      ALLOW       Anywhere
18002                      ALLOW       Anywhere
18003                      ALLOW       Anywhere
18004                      ALLOW       Anywhere
18005                      ALLOW       Anywhere
16379                      ALLOW       Anywhere
18006                      ALLOW       Anywhere
8006                       ALLOW       Anywhere
 

3、创建redis集群所需的network

#创建docker内部网络
docker network create redis-net
#查询网卡信息
docker network ls
#删除
docker network rm redis-net
#查询网关
docker network inspect redis-net  | grep "Gateway" |  grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o
#查询详情,可以查询各容器分配的ip地址
docker network inspect redis-net

victor_t400@victort400:~$ docker network create redis-net
a09e80dd07168838838e5d90e06a3ff09a7278f9ae4a710427c80efc953e596c

victor_t400@victort400:~$ docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
40f6bef4b332   bridge      bridge    local
d009f7a9343b   host        host      local
f9c89145d9ab   none        null      local
a09e80dd0716   redis-net   bridge    local
80b376b422b8   victornet   bridge    local
victor_t400@victort400:~$ docker network inspect redis-net  | grep "Gateway" |  grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o
172.19.0.1
victor_t400@victort400:~$ docker network inspect redis-net
[
    {
        "Name": "redis-net",
        "Id": "a09e80dd07168838838e5d90e06a3ff09a7278f9ae4a710427c80efc953e596c",
        "Created": "2024-05-04T01:35:38.052341737Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
 还没有创造节点,所以没有节点信息,后面会看到的 

4、分别创建个节点的配置文件,并添加配置信息

for port in $(seq 8001 8006); 
do 
sudo mkdir -p /home/redis/node-${port}/conf
sudo touch /home/redis/node-${port}/conf/redis.conf
sudo chmod 777 /home/redis/node-${port}/conf/redis.conf
sudo cat  << EOF > /home/redis/node-${port}/conf/redis.conf
port ${port}
bind 0.0.0.0
protected-mode no
daemonize no
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-node-timeout 20000
cluster-announce-ip  192.168.1.124
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
EOF
done

参数说明: 

 port:节点端口;
appendonly:是否开启 AOF 持久化模式,默认 no;
cluster-enabled:是否开启集群模式,默认 no;
cluster-config-file:集群节点信息文件;
cluster-node-timeout:集群节点连接超时时间;
cluster-announce-ip:集群节点 IP
cluster-announce-port:集群节点映射端口;
cluster-announce-bus-port:集群节点总线端口。

requirepass 123456   这里可以设置密码,放上面就行了。,我没设置,局域网玩玩

5、启动redis容器

for port in $(seq 8001 8006); \
do \
   docker run -it -p ${port}:${port} -p 1${port}:1${port}\
  --privileged=true -v /home/redis/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  --privileged=true -v /home/redis/node-${port}/data:/data \
  --restart always --name redis-${port} \
  --sysctl net.core.somaxconn=1024 -d --net redis-net redis redis-server /usr/local/etc/redis/redis.conf
done

参数说明:

-it:交互

-d:后台运行,容器启动完成后打印容器

–privileged:是否让docker 应用容器 获取宿主机root权限(特殊权限-)

-p :端口映射

-v:文件挂载

–sysctl参数来设置系统参数,通过这些参数来调整系统性能

–restart always:在容器退出时总是重启容器

–name :给容器取名

–net redis-net:使用我们创建的虚拟网卡

如果以前没有pull image,这时候会先下载一个redis镜像

状态:


Digest: sha256:f14f42fc7e824b93c0e2fe3cdf42f68197ee0311c3d2e0235be37480b2e208e6
Status: Downloaded newer image for redis:latest
42bd3b3a1bc34fee885ea3fb6cc295c9017fe82ff429d0f18a2e14e121794801
9dd01223dfdfb49f6589d8497a78176b9b3543208a24f883bf33dfc126069de3
e8f5745bb1abe19bf63e071dca75ebbf1049c8c8ef662b2a0b41e17b977de1ce
f4311c6159995cffa5d1084b2f44460e7998b03a2b410682773ef3ddd70b8b7b
e1d8e72bb0335c2fe435e294c917efcaa87068982e8091356c8c624badd2bf8d
2c7c197087127358ae7586ea9cf8d8e01904b1bc77d8e93235f2345b89b2729d
 

 victor_t400@victort400:/home/redis/node-1/conf$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
2c7c19708712   redis     "docker-entrypoint.s…"   48 seconds ago   Up 46 seconds   0.0.0.0:8006->6379/tcp, :::8006->6379/tcp, 0.0.0.0:18006->16379/tcp, :::18006->16379/tcp   redis-6
e1d8e72bb033   redis     "docker-entrypoint.s…"   50 seconds ago   Up 48 seconds   0.0.0.0:8005->6379/tcp, :::8005->6379/tcp, 0.0.0.0:18005->16379/tcp, :::18005->16379/tcp   redis-5
f4311c615999   redis     "docker-entrypoint.s…"   52 seconds ago   Up 50 seconds   0.0.0.0:8004->6379/tcp, :::8004->6379/tcp, 0.0.0.0:18004->16379/tcp, :::18004->16379/tcp   redis-4
e8f5745bb1ab   redis     "docker-entrypoint.s…"   54 seconds ago   Up 52 seconds   0.0.0.0:8003->6379/tcp, :::8003->6379/tcp, 0.0.0.0:18003->16379/tcp, :::18003->16379/tcp   redis-3
9dd01223dfdf   redis     "docker-entrypoint.s…"   56 seconds ago   Up 54 seconds   0.0.0.0:8002->6379/tcp, :::8002->6379/tcp, 0.0.0.0:18002->16379/tcp, :::18002->16379/tcp   redis-2
42bd3b3a1bc3   redis     "docker-entrypoint.s…"   59 seconds ago   Up 56 seconds   0.0.0.0:8001->6379/tcp, :::8001->6379/tcp, 0.0.0.0:18001->16379/tcp, :::18001->16379/

这个看着舒服多了,以前安装的没有用默认的6379,在这个信息里也有,说明有默认的端口号起作用了,这个总是不好的,对吧。 

victor_t400@victort400:/home/redis/node-1/conf$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
2c7c19708712   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8006->6379/tcp, :::8006->6379/tcp, 0.0.0.0:18006->16379/tcp, :::18006->16379/tcp   redis-6
e1d8e72bb033   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8005->6379/tcp, :::8005->6379/tcp, 0.0.0.0:18005->16379/tcp, :::18005->16379/tcp   redis-5
f4311c615999   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8004->6379/tcp, :::8004->6379/tcp, 0.0.0.0:18004->16379/tcp, :::18004->16379/tcp   redis-4
e8f5745bb1ab   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8003->6379/tcp, :::8003->6379/tcp, 0.0.0.0:18003->16379/tcp, :::18003->16379/tcp   redis-3
9dd01223dfdf   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8002->6379/tcp, :::8002->6379/tcp, 0.0.0.0:18002->16379/tcp, :::18002->16379/tcp   redis-2
42bd3b3a1bc3   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:8001->6379/tcp, :::8001->6379/tcp, 0.0.0.0:18001->16379/tcp, :::18001->16379/tcp   redis-1
 

红色字代表创建了,启动了,好了 ,只是第一步

查看一下分配ip情况,是否与你预期一样

victor_t400@victort400:/home/redis/node-1/conf$ docker network inspect redis-net
[
    {
        "Name": "redis-net",
        "Id": "a09e80dd07168838838e5d90e06a3ff09a7278f9ae4a710427c80efc953e596c",
        "Created": "2024-05-04T01:35:38.052341737Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "2c7c197087127358ae7586ea9cf8d8e01904b1bc77d8e93235f2345b89b2729d": {
                "Name": "redis-6",
                "EndpointID": "74d01dc6370822276420257575d8caabf9963d9cb10793230dc8bddf53d300a9",
                "MacAddress": "02:42:ac:13:00:07",
                "IPv4Address": "172.19.0.7/16",
                "IPv6Address": ""
            },
            "42bd3b3a1bc34fee885ea3fb6cc295c9017fe82ff429d0f18a2e14e121794801": {
                "Name": "redis-1",
                "EndpointID": "a7f7a4dfc9f8b61d23b99f3e7e152c5fb0770e988fb2f7ea9318a9e1da131f7b",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "9dd01223dfdfb49f6589d8497a78176b9b3543208a24f883bf33dfc126069de3": {
                "Name": "redis-2",
                "EndpointID": "9538a2815fc70275383f55a8086c457ba5e1f4d7e3d5c3979e4d78d5a092a97c",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "e1d8e72bb0335c2fe435e294c917efcaa87068982e8091356c8c624badd2bf8d": {
                "Name": "redis-5",
                "EndpointID": "96e9e35065b256d9e04df2bbd7178c395f9c4acfed5082f86d993f440e5f10e5",
                "MacAddress": "02:42:ac:13:00:06",
                "IPv4Address": "172.19.0.6/16",
                "IPv6Address": ""
            },
            "e8f5745bb1abe19bf63e071dca75ebbf1049c8c8ef662b2a0b41e17b977de1ce": {
                "Name": "redis-3",
                "EndpointID": "85e94ba076a8d39a70242fc8d8909446e496cf9c970d1345443c4c880bf1bd73",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            },
            "f4311c6159995cffa5d1084b2f44460e7998b03a2b410682773ef3ddd70b8b7b": {
                "Name": "redis-4",
                "EndpointID": "fb857dd8ae6a28fd50b7aa41835315d4ddaa7a279ee60ac8f8b696954157aa9e",
                "MacAddress": "02:42:ac:13:00:05",
                "IPv4Address": "172.19.0.5/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
 

6、创建Redis Cluster集群

(1)、任意进入一个容器内部

docker exec -it redis-8001 /bin/bash

 (2)、启动集群

redis-cli --cluster create \
192.168.1.124:8001 \
192.168.1.124:8002 \
192.168.1.124:8003 \
192.168.1.124:8004 \
192.168.1.124:8005 \
192.168.1.124:8006 \
--cluster-replicas 1

 root@1313926bf245:/data# redis-cli --cluster create \
192.168.1.124:8001 \
192.168.1.124:8002 \
192.168.1.124:8003 \
192.168.1.124:8004 \
192.168.1.124:8005 \
192.168.1.124:8006 \
--cluster-replicas 1
>>> 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.1.124:8005 to 192.168.1.124:8001
Adding replica 192.168.1.124:8006 to 192.168.1.124:8002
Adding replica 192.168.1.124:8004 to 192.168.1.124:8003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 0e8f0813c125d42e2308f5eaabee618d69bb8a9c 192.168.1.124:8001
   slots:[0-5460] (5461 slots) master
M: 3a942f79e568f88a4acbee7177e29327fde5d404 192.168.1.124:8002
   slots:[5461-10922] (5462 slots) master
M: 41f6b40d95dd90b5220af4ff47b9fe24621c6e1e 192.168.1.124:8003
   slots:[10923-16383] (5461 slots) master
S: 005116c21e3e67b28e737943ef3f06b881ba2999 192.168.1.124:8004
   replicates 0e8f0813c125d42e2308f5eaabee618d69bb8a9c
S: 0773701fd0b0705979c4a6bc8d0876fe6481301e 192.168.1.124:8005
   replicates 3a942f79e568f88a4acbee7177e29327fde5d404
S: f4953da8e2e62618d00dbfc1cc53d7cd18e489dd 192.168.1.124:8006
   replicates 41f6b40d95dd90b5220af4ff47b9fe24621c6e1e
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.1.124:8001)
M: 0e8f0813c125d42e2308f5eaabee618d69bb8a9c 192.168.1.124:8001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 41f6b40d95dd90b5220af4ff47b9fe24621c6e1e 192.168.1.124:8003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 0773701fd0b0705979c4a6bc8d0876fe6481301e 192.168.1.124:8005
   slots: (0 slots) slave
   replicates 3a942f79e568f88a4acbee7177e29327fde5d404
S: 005116c21e3e67b28e737943ef3f06b881ba2999 192.168.1.124:8004
   slots: (0 slots) slave
   replicates 0e8f0813c125d42e2308f5eaabee618d69bb8a9c
M: 3a942f79e568f88a4acbee7177e29327fde5d404 192.168.1.124:8002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: f4953da8e2e62618d00dbfc1cc53d7cd18e489dd 192.168.1.124:8006
   slots: (0 slots) slave
   replicates 41f6b40d95dd90b5220af4ff47b9fe24621c6e1e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 (3)、注意问题

注意:安装时人如果碰到,redis创建集群时卡在Waiting for the cluster to join...... 

那么不好意思有问题了

我在安装过程中的问题:

  • redis-cli --cluster create \
    192.168.1.124:8001 \
    192.168.1.124:8002 \
    192.168.1.124:8003 \
    192.168.1.124:8004 \
    192.168.1.124:8005 \
    192.168.1.124:8006 \
    --cluster-replicas 1     这里的ip地址时宿主机ip地址,不是docker里的127.19.0.*,本来我开始用的是主机地址,后来找了个教程,搞得我,哎,难啊,其实想想也是啊,我这是一台电脑上装,一般集群都是几台电脑,肯定是外部ip地址啊,至少是个外部局域网地址,要不怎么搞成集群呢?你用docker里的内部网络,两台电脑之间如何连接呢?还是有点小蠢,至少装了5次,还好这个删除安装非常快。提醒删除时要删除/home/redis目录,有数据的注意保存
  • 端口要开放,怎么开放前面写了的,特别是+10000的端口,
  • 不要完全相信网上的教程,有些照着来也不行,原因未知,自我安慰下就是环境不同导致结果也不同

7、测试

(1)、内网

root@1313926bf245:/data# redis-cli -c -h 127.19.0.2 -p 8001 --raw
127.19.0.2:8001> set a 1
-> Redirected to slot [15495] located at 192.168.1.124:8003
OK
192.168.1.124:8003> get a
1
192.168.1.124:8003>

8001里存进去,8003里读出来

(2)外网nvicat,试了可以

上面图可以看出内网存的在这里能看到,而且我用8001和8002登录都一样

总结

安装虽然顺利,但是还是碰到一些问题,不停查,不停装。。。。。

后面我们将要安装mysql,这个好像也有集群?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/596266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode 42】 接雨水

基础思路&#xff1a; &#xff08;1&#xff09;需要将问题最小化&#xff0c;首先计算第i个位置最多容纳多少雨水&#xff08;细长的一条水柱&#xff09;&#xff0c;然后求和就是总的雨水量&#xff1b; &#xff08;2&#xff09;第i个位置容纳雨水量 min(左侧最高, 右…

​《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制德国每日风能和太阳能产量3D线图

在MATLAB中&#xff0c;要绘制3D线图&#xff0c;可以使用 plot3 函数。 在《MATLAB科研绘图与学术图表绘制从入门到精通》书中通过绘制德国每日风能和太阳能产量3D线图解释了如何在MATLAB中绘制3D线图。 购书地址&#xff1a;https://item.jd.com/14102657.html

牛客热题:单链表排序

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;单链表排序题目链接方法一&…

【XR806开发板试用】基于MQTT与Cjson库的花式点灯

一、项目介绍 久闻openharmony大名&#xff0c;一直没有机会接触&#xff0c;感谢极术社区和全志社区的这次活动&#xff0c;让我能够了解并上手这个系统。 openhamony 1.1的内核是基于liteos内核系统进行构建的&#xff0c;liteos作为物联网系统&#xff0c;结合xr806小型开…

美团KV存储squirrel和Celler学习

文章目录 美团在KV存储squirrel优化和改进在水平方向1、对Gossip协议进行优化 在垂直扩展方面1、forkless RDB数据复制优化2、使用多线程&#xff0c;充分利用机器的多核能力 在高可用方面 美团持久化kv存储celler优化和改进水平扩展优化1、使用bulkload进行数据导入2、线程模型…

Adobe系列软件安装

双击解压 先运行Creative_Cloud_Set_Up.exe。 完毕后&#xff0c;运行AdobeGenP.exe 先Path&#xff0c;选路径&#xff0c;如 C:\Program Files\Adobe 后Search 最后Patch。 关闭软件&#xff0c;修图&#xff01;

电力能源箱3D可视化:开启智慧能源管理新篇章

随着科技的不断进步&#xff0c;电力能源箱的管理与维护逐渐向着智能化、可视化的方向发展。3D可视化技术的崛起&#xff0c;不仅极大地提升了能源管理的效率&#xff0c;更以其直观、生动的特点&#xff0c;引领着电力能源管理领域迈入了一个全新的时代。 电力能源箱作为电力系…

解决一个朋友的nbcio-boot的mysql数据库问题

1、原先安装mysql5.7数据库&#xff0c;导入我的项目里的带数据有报错信息 原因不明 2、只能建议用docker进行msyql5.7的安装 如下&#xff0c;可以修改成自己需要的信息 docker run -p 3306:3306 --name mastermysql -v /home/mydata/mysql/data:/var/lib/mysql -e MYSQL_R…

为什么感觉没有效果

以前在辅导小儿作业的时候&#xff0c;我会在常用的搜索引擎里去寻找答案&#xff0c;一般情况下都能解决问题。 但是最近一段时间&#xff0c;我发现&#xff0c;搜索引擎搜出来的结果还没有利用短视频搜出来的答案更全面&#xff0c;短视频软件不仅可以显示AI整理出来的答案…

js api part4

其他事件 页面加载事件 外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件 原因&#xff1a;有些时候需要等页面资源全部处理完了做一些事情&#xff0c;老代码喜欢把 script 写在 head 中&#xff0c;这时候直接找 dom 元素找不到。 事件…

2010-2022年上市公司彭博ESG披露评分、分项得分数据

2010-2022年上市公司彭博ESG披露评分、分项得分数据 1、时间&#xff1a;2010-2022年 2、来源&#xff1a;Bloomberg ESG 指数 3、指标&#xff1a;股票代码、股票简称、年份、ESG披露评分、环境披露评分、社会信息披露评分、治理披露评分 4、范围&#xff1a;上市公司 5、…

OpenNJet:下一代云原生应用引擎

OpenNJet&#xff1a;下一代云原生应用引擎 前言一、技术架构二、新增特性1. 透明流量劫持2. 熔断机制3. 遥测与故障注入 三、Ubuntu 发行版安装 OpentNJet1. 添加gpg 文件2. 添加APT 源3. 安装及启动4. 验证 总结 前言 OpenNJet&#xff0c;是一款基于强大的 NGINX 技术栈构建…

Java苍穹外卖04-

一、缓存菜品 1.问题说明 2.实现思路 就是点击到这个分类的时候就可以展示相应的菜品数据 3.代码实现 在user的菜品的contoller中&#xff1a;增加判断redis中是否存在所需数据&#xff0c;不存在添加&#xff0c;存在直接取得 这里注意&#xff1a;你放进去用的是List<Di…

【Osek网络管理测试】[TG3_TC3]tSleepRequestMin_L

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 验证DUT进入NMLimpHome状态后请求睡眠的最短时间是否正确…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

SpringBoot+Vue+Element-UI实现学生综合成绩测评系统

前言介绍 学生成绩是高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而学生所在学院多采用半手工管理学生成绩的方式&#xff0c;所以有必要开发学生综合成绩测评系…

校园寄取快递代拿小程序源码系统 带完整的安装代码包以及搭建教程

在数字化快速发展的今天&#xff0c;校园生活也在不断地与时俱进&#xff0c;向着更加便捷、高效的方向迈进。为了满足学生们对于快递寄取代拿的便捷需求&#xff0c;小编给大家分享一款校园寄取快递代拿小程序源码系统&#xff0c;该系统不仅提供了完整的安装代码包&#xff0…

矩池云jupyter运行opengait代码 未完成版

文章目录 前言——矩池云的使用技巧1.切换源 一、下载数据集二、下载模型三、环境配置1.查看python、torch、torchvision版本2.查看一些包版本是否过高3.下载包 四、开始训练1.设置环境变量2.遇到的问题&#xff08;1&#xff09;torch.cuda.is_available()返回false&#xff0…

python绘图(pandas)

matplotlib绘图 import pandas as pd abs_path rF:\Python\learn\python附件\pythonCsv\data.csv df pd.read_csv(abs_path, encodinggbk) # apply根据多列生成新的一个列的操作&#xff0c;用apply df[new_score] df.apply(lambda x : x.数学 x.语文, axis1)# 最后几行 …

接口自动化测试拓展:接口Mock的理念与实战场景!

接口自动化测试是软件开发过程中不可或缺的一环。在实际开发中&#xff0c;我们常常会遇到需要依赖其他模块的接口或者服务来完成测试的情况。而在开发初期或者接口尚未完成的情况下&#xff0c;就需要使用接口Mock来模拟未实现的接口功能。接口Mock是一种模拟接口行为的技术&a…