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}
donefor 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.mzph.cn/news/832449.shtml

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

相关文章

Redis的数据类型及使用场景

redis命令大全官网: Commands | Docs (redis.io) 基本介绍 redis起初主要就是为了解决性能问题的&#xff0c;那么redis为什么快? 基于内存操作的&#xff0c;所以操作不需要跟磁盘进行交互&#xff0c;单次的执行会很快 命令执行是单线程 因为基于内存操作 单次执行时间反…

Java面试题:多线程3

CAS Compare and Swap(比较再交换) 体现了一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性. 线程A和线程B对主内存中的变量c同时进行修改 在线程A中存在预期值a,修改后的更新值a1 在线程B中存在预期值b,修改后的更新值b1 当且仅当预期值和主内存中的变量值相等…

MYSQL基础架构、执行过程分析、事务的实现、索引的选择、覆盖索引

本文是mysql45讲的1-5的总结 文章目录 基础架构连接器分析器优化器执行器SQL查询执行过程详细执行步骤 SQL更新执行过程重要的日志模块&#xff1a;redo log重要的日志模块&#xff1a;binlog阶段性提交 事务事务隔离的实现启动 索引数据库索引模型InnoDB索引组织结构主键选择…

【数据可视化-02】Seaborn图形实战宝典

Seaborn介绍 Seaborn是一个基于Python的数据可视化库&#xff0c;它建立在matplotlib的基础之上&#xff0c;为统计数据的可视化提供了高级接口。Seaborn通过简洁美观的默认样式和绘图类型&#xff0c;使数据可视化变得更加简单和直观。它特别适用于那些想要创建具有吸引力且信…

从零开始学RSA: [WUSTCTF2020]情书等5题

1 [WUSTCTF2020]情书 题目 Premise: Enumerate the alphabet by 0、1、2、..... 、25 Using the RSA system Encryption:0156 0821 1616 0041 0140 2130 1616 0793 Public Key:2537 and 13 Private Key:2537 and 937flag: wctf2020{Decryption}解题 前提&#xff1a;用0、…

高效、精准:皮秒激光切割机在陶瓷基板加工中的应用

皮秒激光切割机&#xff08;激光划片机&#xff09;在陶瓷基板切割领域具有显著的优势和潜力&#xff0c;主要体现在以下几个方面&#xff1a; 1. 高精度&#xff1a;皮秒激光切割机能够实现极高的切割精度&#xff0c;对于陶瓷基板这种需要精细加工的材料尤为重要。它能够在不…

【网络原理】IP协议详解

一.与IP协议相关的基本概念 IP协议&#xff0c;即网际互连协议&#xff08;Internet Protocol&#xff09;&#xff0c;是TCP/IP体系中的核心网络层协议。 网络层IP协议解决的问题 数据传输的过程中,不是直接进行的传输,而是经过层层的封装和分用的过程才能到达对端. IP协议主…

13 【PS作图】人物绘画理论-脸型

三庭五眼 三庭&#xff1a;脸的长度比例 &#xff08;1&#xff09;发际线到眉毛 &#xff08;2&#xff09;眉毛到鼻底 &#xff08;3&#xff09;鼻底到下巴 三个部分大致为三等分 五眼&#xff1a;脸的宽度比例 以眼睛长度为单位&#xff0c;把脸的宽度分成五等分&#x…

day1Qt作业

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->resize(540,415);//窗口大小this->setFixedSize(540,415);//固定窗口大小this->setWindowTitle("QQ");//标题this->setWindowIcon(QIcon("E:\\hqyjap…

大数据在互联网领域的“九大”应用

当下越来越多的应用涉及到大数据&#xff0c;而这些大数据的属性&#xff0c;包括数量&#xff0c;速度&#xff0c;多样性等等都呈现出大数据不断增长的复杂性&#xff0c;所以大数据的分析方法在大数据领域就显得尤为重要&#xff0c;目前互联网大数据运用的九大领域&#xf…

网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN

前言 文章主要介绍常见名词以及其在各自领域实现的功能价值。 01 裸纤 裸光纤&#xff08;裸光纤&#xff09;由运营商提供&#xff0c;是无中继的光纤线路&#xff0c;仅通过配线架连接。相比传统光纤&#xff0c;裸光纤提供纯粹的物理传输路径&#xff0c;无需额外网…

Linux字符设备驱动-详解与实操:驱动架构、设备树、Pinctrl子系统和GPIO子系统、platform、设备树下的platform

如何编写一个驱动程序&#xff1a; &#xff08;1&#xff09;确定主设备号 &#xff08;2&#xff09;定义自己的file_operations结构体&#xff1a; 包含对应的open(drv_open)/read(drv_read)等设备操作函数&#xff0c;需要到内核中去注册 &#xff08;3&#xff09;实现…

为什么需要自动化测试?自动化有哪些优势?

前言 自动化测试&#xff0c;最近些年可谓是大火。招聘上的要求也好&#xff0c;培训班的广告也罢&#xff0c;比比皆是&#xff0c;足以说明它在业内的火爆程度。 虽然说会写自动化测试并不能说明你就很牛批&#xff0c;但是你不会的话&#xff0c;那么很抱歉&#xff0c;你…

力扣每日一题-拆炸弹-2024.5.5

力扣题目&#xff1a;拆炸弹 题目链接: 1652.拆炸弹 题目描述 代码思路 根据代码实现分为k等于0和k不等于0的情况。k等于0很容易处理&#xff0c;而k不等于0时&#xff0c;需要使用滑动窗口的方式来解决。先根据小于0或大于0确定一个窗口&#xff0c;然后移动&#xff0c;获…

【Mac】 DSync for mac(文件比较同步工具) v2.7安装教程

软件介绍 DSync是一款文件比较同步工具&#xff0c;通过简便的三步即可完成繁琐的比较、同步操作&#xff0c;您甚至可以通过跳过、删除或反转您选择的文件的复制方向来微调您的同步。这是在Mac上同步文件的最简单方法。 安装教程 1.打开安装包&#xff0c;将「DSync」拖到右…

YUM源仓库部署和NFS共享存储服务

一.YUM源仓库部署 1.YUM 概述 &#xff08;1&#xff09;是基于RPM软件包构建的软件更新机制 &#xff08;2&#xff09;可以自动解决依赖关系 &#xff08;3&#xff09;所有软件包有集中的YUM软件仓库提供 2.准备YUM源 &#xff08;1&#xff09;软件仓库的提供方式&…

个人直播/流媒体服务解决方案实践

目录 1. 说明 1.1 拓扑结构图 2. 准备工作 2.1 软硬件清单 3. 步骤 3.1 按上面的软硬件清单准备好材料 3.2 内网检查测试 3.3 透传到公网服务器 3.5 机顶盒配置 4. 总结 5. 参考 6. 后语 1. 说明 - 在本地局域网建立流媒体服务&#xff0c;并发布到公网服务器供终…

【Unity 组件思想-预制体】

【Unity 组件思想-预制体】 预制体&#xff08;Prefab&#xff09;是Unity中一种特殊的组件 特点和用途&#xff1a; 重用性&#xff1a; 预制体允许开发者创建可重复使用的自定义游戏对象。这意味着你可以创建一个预制体&#xff0c;然后在场景中多次实例化它&#xff0c;…

轻松上手的LangChain学习说明书

一、Langchain是什么&#xff1f; 如今各类AI模型层出不穷&#xff0c;百花齐放&#xff0c;大佬们开发的速度永远遥遥领先于学习者的学习速度。。为了解放生产力&#xff0c;不让应用层开发人员受限于各语言模型的生产部署中…LangChain横空出世界。 Langchain可以说是现阶段…

快速了解Oracle 数据库 23ai

Oracle Database 23ai 于2024年5月2日正式发布。快速了解可以看官网主页和官方博客。 官网主页 23ai的3个要点&#xff0c;核心都是数据&#xff1a; 数据的人工智能 主要指数据库内置机器学习和AI向量搜索。这实际是Oracle融合数据库策略的延续&#xff0c;避免了复杂的数据…