docker-compose例子
Kavita漫画
1 | version: '3.9' |
lazydocker
lazydocker是一个TUI应用程序,可以帮助您在一个地方管理和监控所有的Docker容器。
1 | version: '3' |
MySQL一主二从同步高可用集群
docker-compose文件配置
建立如下目录结构
1 | mysql |
master/docker-compose.yml
1 | version: '3' # 使用docker-compose版本3 |
slave1/docker-compose.yml
1 | version: '3' |
slave2/docker-compose.yml
1 | version: '3' |
主节点配置
进入主节点
1 | docker exec -it mysql-master bash |
rpl_semi_sync_master_timeout就是半同步复制时等待应答的最长等待时间,默认是10秒,可以根据情况自行调整。rpl_semi_sync_master_wait_point其实表示一种半同步复制的方式。半同步复制有两种方式,一种是我们现在看到的这种默认的AFTER_SYNC方式。这种方式下,主库把日志写入binlog,并且复制给从库,然后开始等待从库的响应。从库返回成功后,主库再提交事务,接着给客户端返回一个成功响应。而另一种方式是叫做AFTER_COMMIT方式。他不是默认的。这种方式,在主库写入binlog后,等待binlog复制到从库,主库就提交自己的本地事务,再等待从库返回给自己一个成功响应,然后主库再给客户端返回响应。
1 | 打开半同步复制的开关,命令如下: |
1 | 授权,命令如下: |
1 | show master status;#查看master的binlog信息 |
需要注意的是File和Position的值,在配置从节点时需要对应上。
从节点配置
进入每个slave节点操作
1 | docker exec -it mysql-slave1 bash |
最后授权就可以使用navicat连接了
1 | 授权,命令如下: |
redis高可用一主二从三哨兵集群
建立如下目录结构
1 | redis-sentinel |
一主二从
其中redis目录下docker-compose.yml文件内容如下:
protected-mode no
:关闭就可以其他地方连接使用了
slave-announce-ip
:使用宿主机的ip
1 | version: '4.1' |
Redis启用密码认证
Redis主从和clsuter支持密码认证的。redis启用密码认证一定要requirepass和masterauth同时设置。如果主节点设置了requirepass登录验证,在主从切换,slave在和master做数据同步的时候首先需要发送一个ping的消息给主节点判断主节点是否存活,再监听主节点的端口是否联通,发送数据同步等都会用到master的登录密码,否则无法登录,log会出现响应的报错。也就是说slave的masterauth和master的requirepass是对应的,所以建议redis启用密码时将各个节点的masterauth和requirepass设置为相同的密码,降低运维成本。当然设置为不同也是可以的,注意slave节点masterauth和master节点requirepass的对应关系就行。
- masterauth作用:主要是针对master对应的slave节点设置的,在slave节点数据同步的时候用到。
- requirepass作用:对登录权限做限制,redis每个节点的requirepass可以是独立、不同的。
Redis Sentinel
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossipprotocols) 来接收关于主服务器是否下线的信息, 并使用投票协议(agreementprotocols) 来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。 虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 –sentinel 选项来启动 Redis Sentinel 。
sentinel哨兵目录下docker-compose.yml文件内容如下:
1 | version: '4.1' |
sentinel1.conf、sentinel2.conf、sentinel3.conf中内容如下:
1 | protected-mode no |
分别在redis和sentinel目录下使用docker compose up -d运行,加参数 -d 可以实现后台运行
看到如下打印输出说明集群已经启动起来了
验证
主节点
docker exec -it redis-master redis-cli
进入主机器
1 | info之前先进行授权 auth redis_pwd(requirepass的值) |
可以看到当前redis的角色和从节点数以及从节点信息:
从节点
docker exec -it redis-slave-1 redis-cli
进入从机器
1 | info之前先进行授权 auth redis_pwd(requirepass的值) |
哨兵节点
docker exec -it redis-sentinel-1 bash
查看哨兵信息
1 | redis-cli -p 26379 #连接客户端,注意端口号为26379 |
在sentinel目录下docker compose logs -f
查看日志
此时我们停掉redis-master
1 | docker stop redis-master |
查看哨兵日志可以发现哨兵经过投票将新的master节点赋予了redis-slave-1(你的可能跟我的不一样,根据你的从节点容器ip确定)
进入redis-slave-1查看信息
1 | docker exec -it redis-slave-1 redis-cli #进入redis-slave-1 |
发现redis-slave-1的角色变为了master
主观下线和客观下线
由上述配置知down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。 如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN)
- 主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
- 客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。 (一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)客观下线条件只适用于主服务器
如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复[+PONG 、 -LOADING 或者 -MASTERDOWN 。], 那么 Sentinel 就会将这个服务器标记为主观下线。
Sentinel 命令
- PING :返回 PONG 。
- SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态。
- SENTINEL slaves :列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。 SENTINEL get-master-addr-by-name : 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和端口号。
- SENTINEL reset : 重置所有名字和给定模式 pattern 相匹配的主服务器。 pattern 参数是一个 Glob 风格的模式。 重置操作清楚主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
- SENTINEL failover : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移 (不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新)。
RocketMQ
1 | version: '3.8' |
xxl-job
1 | # 命令执行 docker-compose up -d |
新建 sql/xxl-job.sql
文件目录如下:
xxl-job.sql内容如下:
1 | # 获取地址:https://github.com/xuxueli/xxl-job/tree/master/doc/db |
Jenkins
CI/CD工具
1 | version: '3.9' |
zookeeper
1 | version: '3.9' |
Ignite
内存数据库
1 | version: '3.9' |