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。