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

news2024/11/28 14:54:33

系列文章目录

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.coloradmin.cn/o/1659196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试智慧:巧妙应对,展现真我风采

你是否曾经因为面试时太过“老实”&#xff0c;而错失了心仪的职位&#xff1f;很多人学历高、经验足&#xff0c;却在面试中未能如愿以偿。其实&#xff0c;面试不仅仅是考察你的能力和经验&#xff0c;更是考察你如何巧妙地展现自己。 下面&#xff0c;我将为你揭示一些常见的…

python循环结构练习

目录 前言 1、使用while实现模拟用户登录 1.1 题目要求 1.2 解题 2、输入数字&#xff0c;生成对应等腰三角形 2.1 题目要求 2.2 解题 3、输入数字&#xff0c;生成对应的菱形 3.1 题目要求 3.2 解题 总结 前言 本系列主要是讲解python中的题目&#xff0c;目的是为…

【网站项目】SpringBoot819图书馆管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

ASP.NET MVC 如何使用 Form Authentication?

前言 .NET 的 Form Authentication 是一种基于表单的简单且灵活的身份验证机制&#xff0c;用户通过输入用户名和密码来登录应用程序&#xff0c;并且通过配置来控制用户访问权限。 在使用 Form Authentication 时&#xff0c;我们需要在 web.config 文件中配置身份验证和授权…

【资源分享】最新版PS2024免费和谐安装教程

“时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;——时问桫椤 非…

Jmeter(三十三) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy6(详解教程)

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 今天分享的就是在上一篇文章的基础上来进行讲解和分享&#xff1a;Badboy使用数据源Excel进行脚本参数化。然后在使用读取的参数进行对比断言。 2.具体场景 Badboy录制一个搜索…

高端建站和普通建站有哪些不同

高端建站与普通建站之间存在着显著的差异&#xff0c;从设计到功能、用户体验以及服务质量等各个方面都有所区别。以下是高端建站和普通建站的不同之处&#xff1a; ### 1. 设计质量 - **高端建站**&#xff1a;注重精美、独特的设计风格&#xff0c;通常由专业设计师团队负责。…

深入了解二叉搜索树:原理、操作与应用

文章目录 二叉搜索树二叉搜索树的操作1.查找操作2.插入操作3.查找最大值或者最小值4.删除操作5.前序中序后序遍历 总结 二叉搜索树 形如上图的二叉树就是二叉搜索树&#xff0c;接下来我们来具体阐述一下什么是二叉搜索树。 二叉搜索树的概念&#xff1a;满足左子树的值小于根…

NVIDIA 配置 Jetson 扩展针座

系列文章目录 前言 每个 Jetson 开发套件包括多个扩展接头和连接器&#xff08;统称 "接头"&#xff09;&#xff1a; 40 针扩展接头&#xff1a; 可让您将 Jetson 开发套件连接到现成的 Raspberry Pi HAT&#xff08;顶部附加硬件&#xff09;&#xff0c;如 Seee…

智慧公厕:打造智能、安全、舒适的公共厕所新时代

随着智慧城市建设的不断推进&#xff0c;公共设施的智能化也已成为一种必然趋势。在这一背景下&#xff0c;智慧公厕作为城市管理的一个重要方面&#xff0c;正逐渐走进人们的视野。通过对所在辖区内所有公共厕所的全域感知、全网协同、全业务融合以及全场景智慧的赋能&#xf…

保姆级Lora炼丹教程,让你实现真人模特定制

最近发现很多朋友学会了Stable Diffusion后&#xff0c;都是停留在“玩”的层面。但我觉得让大家“用”起来&#xff0c;才是关键 于是我思考了很久&#xff0c;找出了SD在“应用”层面&#xff0c;最重要的两个功能&#xff1a;Lora和ControlNet Lora负责把自己生活中有关联的…

一篇教你学会HTML:常用标签 | 表格 | 表单 | 特殊符号转义

标题标签 <h1></h1>....<h6></h6> <h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3>我们可以添加 align属性 来改变标签的位置 (左对齐&#xff0c;居中&#xff0c;右对齐)&#xff0c;还可以设置颜色等。 …

InfiniGate自研网关实现四

13.服务发现组件搭建和注册网关连接 以封装 api-gateway-core 为目的&#xff0c;搭建 SpringBoot Starter 组件&#xff0c;用于服务注册发现的相关内容处理。 这里最大的目的在于搭建起用于封装网关算力服务的 api-gateway-core 系统&#xff0c;提供网关服务注册发现能力。…

什么是包装ERP软件

在当今的商业环境中&#xff0c;ERP软件已经成为了企业管理的关键工具。然而&#xff0c;许多企业主可能还不完全明白什么是ERP软件&#xff0c;特别是包装ERP软件。 首先&#xff0c;我们需要了解ERP软件的基本概念。它是一种集成的软件应用程序&#xff0c;旨在帮助企业管理…

HTML+VUE3组合式+ELEMENT的容器模板示例(含侧栏导航,表格,...)

一个简单的在html中使用Vue3及Element-plus vue-icons的整合示例&#xff1a; 一、示例截图 二、文件代码 直接复制到html文件在浏览器打开即可预览 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title&g…

智慧仓储可视化大屏,以最直观的形式展示海量数据。

智慧仓储可视化大屏是一种通过数据可视化技术&#xff0c;将仓储管理系统中的海量数据以图表、地图、仪表盘等形式直观展示在大屏上的解决方案。它可以帮助仓储管理人员更清晰地了解仓库的运营情况&#xff0c;从而做出更明智的决策。 智慧仓储可视化大屏通常包括以下功能和特点…

React 第二十六章 Hook useCallback

useCallback 是 React 提供的一个 Hook 函数&#xff0c;用于优化性能。它的作用是返回一个记忆化的函数&#xff0c;当依赖发生变化时&#xff0c;才会重新创建并返回新的函数。 在 React 中&#xff0c;当一个组件重新渲染时&#xff0c;所有的函数都会被重新创建。这可能会…

如何通过汽车制造供应商协同平台,提高供应链的效率与稳定性?

汽车制造供应商协同是指在汽车制造过程中&#xff0c;整车制造商与其零部件供应商之间建立的一种紧密合作的关系。这种协同关系旨在优化整个供应链的效率&#xff0c;降低成本&#xff0c;提高产品质量&#xff0c;加快创新速度&#xff0c;并最终提升整个汽车产业的竞争力。以…

vue2基础语法01——基础语法使用了解

vue2基础语法01——基础语法使用了解 1. vue模板语法1.1 插值语法1.2 指令语法1.3 简单测试完整代码 2. vue中各选项使用&#xff08;简单说几个&#xff09;2.1 el选项2.2 data选项2.2.1 简述2.2.2 data选项的两种类型2.2.3 注意&#xff08;限制&#xff09;2.2.4 更多了解参…

JAVA快速工具代码集

一、前言 在开发过程中&#xff0c;特别是维护老系统&#xff0c;有时候想使用的工具类却使用不了。又要重新造轮子。所以准备点工具类代码是必须的&#xff0c;无奈之举。 二、JSON数据转换 String content cdfQhOrderResModel.getContent(); List<CdfQH…