docker-compose部署redis集群和msyql

  • docker-compose部署redis集群和msyql
  • Redis Docker 服务配置
  • 1、首先创建一个简单的单例模式,通常该模式用于本地测试
  • 2、创建redis集群模式
  • (1) 创建配置文件: redis.conf
  • (2) 配置docker-compose.yml
  • 2、配置mysql
  • (1) docker-compose.yml文件
  • (2) 后台修改配置


docker-compose部署redis集群和msyql

docker 镜像查询: https://hub.docker.com/

Redis Docker 服务配置

1、首先创建一个简单的单例模式,通常该模式用于本地测试

创建docker-compose.yml文件,

version: "3.7"

services:
    redis-server:
        image: redis:alpine3.9
        ports:
            - "6379:6379"
        volumes:
            - ./redis/conf:/etc/redis/redis.conf - ./redis/data:/data
        command: redis-server /etc/redis/redis.conf

2、创建redis集群模式

(1) 创建配置文件: redis.conf

注意:该配置文件需要在每个redis节点都要存储一份,以下是一份模板,只需要改下IP地址和端口号即可

#端口
port 7001
##是否以守进程模式运行
daemonize no
##开启集群模式
cluster-enabled yes
##集群配置文件
cluster-config-file nodes_7001.conf
## timeout
tcp-keepalive 500
timeout 100
##aof
appendonly yes
#当daemonize=yes时候才会生效
pidfile /var/run/redis_7001.pid
#log 日志级别
loglevel notice
#日志文件存放路径
logfile "redis_7001.log"

#集群对外ip
cluster-announce-ip 192.168.12.12 # 本机IP地址,需要将该IP改成你本机的IP

port: 配置redis对外端口;
cluster-enabled: 是否开启集群模式;
cluster-announce-ip:集群对外IP
tcp-keppalive: 链接存活时间;
timeout: 超时时间;
appendonly: 配置redis数据持久化为aof模式;
loglevel:日志级别;
logfile:日志文件;
daemonize:守护进程模式。如果配置为yes,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程;
pidfile:存储进程守护模式的进程id。

(2) 配置docker-compose.yml
version: "3.7"
services:
  node1:
    image: redis
    container_name: redis-node1
    restart: always
    ports:
      - 7001:7001
      - 17001:17001
    volumes:
      - ./redis/7001/data:/data
      - ./redis/7001:/usr/local/etc/redis
    command:
      redis-server /usr/local/etc/redis/redis.conf
  node2:
    image: redis
    container_name: redis-node2
    restart: always
    ports:
      - 7002:7002
      - 17002:17002
    volumes:
      - ./redis/7002/data:/data
      - ./redis/7002:/usr/local/etc/redis
    command:
      redis-server /usr/local/etc/redis/redis.conf
  node3:
    image: redis
    container_name: redis-node3
    restart: always
    ports:
      - 7003:7003
      - 17003:17003
    volumes:
      - ./redis/7003/data:/data
      - ./redis/7003:/usr/local/etc/redis
    command:
      redis-server /usr/local/etc/redis/redis.conf
  node4:
    image: redis
    container_name: redis-node4
    restart: always
    ports:
      - 7004:7004
      - 17004:17004
    volumes:
      - ./redis/7004/data:/data
      - ./redis/7004:/usr/local/etc/redis
    command:
      redis-server /usr/local/etc/redis/redis.conf
  node5:
    image: redis
    container_name: redis-node5
    restart: always
    ports:
      - 7005:7005
      - 17005:17005
    volumes:
      - ./redis/7005/data:/data
      - ./redis/7005:/usr/local/etc/redis
    command:
      redis-server /usr/local/etc/redis/redis.conf
  node6:
    image: redis
    container_name: redis-node6
    restart: always
    ports:
      - 7006:7006
      - 17006:17006
    volumes:
      - ./redis/7006/data:/data
      - ./redis/7006:/usr/local/etc/redis
    command:
      redis-server /usr/local/etc/redis/redis.conf

redis 配置好之后,通过docker-compose up -d启动;
目前只是将 redis 各个容器启动成功,还需要将 6 个节点配置成集群模式;随便选择一台机器,进入终端模式,通过下面命令即可绑定 redis 集群: 启动之后将会是三主三从模式;

redis-cli --cluster create 192.168.12.12:7001 192.168.12.12:7002 192.168.12.12:7003 192.168.12.12:7004 192.168.12.12:7005 192.168.12.12:7006 --cluster-replicas 1

2、配置mysql

(1) docker-compose.yml文件
version: "3.7"

services:
    mysql-server:
        image: mysql:5.7.9
        environment:
            MYSQL_ROOT_PASSWORD: root
            TZ: Asia/Shanghai
        ports:
            - "3306:3306"
        volumes:
            - ./mysql/conf:/etc/mysql/
            - ./mysql/data:/data/mysql
        command:
            --max_connections=1000
            --character-set-server=utf8mb4
            --collation-server=utf8mb4_general_ci
            --explicit_defaults_for_timestamp=#
            --user=mysql
            --skip-grant-tables
            --skip-networking

启动配置注意事项

代码中需要添加 --user=mysql,否则会报以下错误
2022-06-20T12:54:24.672023Z 0 [ERROR] Fatal error: Please read “Security” section of the manual to find out how to run mysqld as root!

登录注意事项:

配置中需要添加下面两行,不然登录时会报错:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
–skip-grant-tables
–skip-networking

数据卷配置注意事项

注意:如果 services 中配置多个 server,如下 redis 和 mysql,在 volumes 映射中,不能是相同的路径
redis 配置 volumes: - ./redis/conf:/etc/redis/ - ./redis/data:/data/redis
mysql 配置 volumes: - ./mysql/conf:/etc/mysql/ - ./mysql/data:/data/mysql

(2) 后台修改配置

mysql启动成功之后,会出现本地无法访问的问题,所以需要修改一下配置,可以通过本地终端或者程序访问到mysql:
在登陆成功之后,选择 mysql 库,执行 update user set host = ’%’ where user = ’root’;,将 root 用户设置成任意 host 都可登录;
执行完成之后,需要将 docker-compose.yml 文件中的--skip-grant-tables--skip-networking删除,然后将 mysql 重启,再选择 mysql 库,执行grant all privileges on *.* to root@'%' identified by "root";;该行为是为了支持本地终端直接访问容器中的 mysql。