首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MaxScale无从状态集

MaxScale无从状态集
EN

Stack Overflow用户
提问于 2022-03-15 10:07:22
回答 1查看 269关注 0票数 1

我们想要使用MaxScale和两个MariaDB数据库的对接-合成。

我们的问题是无法通过maxscale实现数据库的复制。在这两个数据库上都可以通过MaxScale获得写权限。通过maxscale容器中的命令maxscale list servers,我们可以看到这两个服务器。第一服务器具有状态Master, Running,第二服务器只有状态Running

我的docker-compose.yaml

代码语言:javascript
复制
version: '3'
services:

  # Application
  app:
    build:
      context: .
      dockerfile: app.dockerfile
    working_dir: /var/www/project
    volumes:
      - ./project:/var/www/project
      - ./php.ini:/usr/local/etc/php/php.ini
    links:
      - database:database
    environment:
      - "DATABASE_HOST=database"
      - "DATABASE_PORT=4006"

  # Web server
  web:
    image: nginx:latest
    volumes:
      - ./vhost.conf:/etc/nginx/conf.d/default.conf
      - ./nginx-logs:/var/log/nginx
      # Inherit from app container
      - ./project:/var/www/project
      - ./php.ini:/usr/local/etc/php/php.ini
    ports:
      - 0.0.0.0:8021:80
    links:
      - app:app

  # Database
  database:
    image: mariadb:latest
    ports:
      - 0.0.0.0:3306:3306
    volumes:
      - ./database:/var/lib/mysql
      - ./database-config:/etc/mysql/
    command: mysqld --log-bin=mariadb-bin --binlog-format=ROW --server-id=3001 --log-slave-updates
    environment:
      - "MYSQL_ROOT_PASSWORD=secretDummyPassword"
      - "MYSQL_DATABASE=database"
      - "MYSQL_USER=database"
      - "MYSQL_PASSWORD=secretDummyPassword"
      - "skip-networking=0"

  #Max Scale
  maxscale:
    image: mariadb/maxscale:6.2.3
    depends_on:
      - database
    volumes:
      - ./maxscale.cnf:/etc/maxscale.cnf
    ports:
      - 0.0.0.0:4006:4006 # readwrite port
      - 0.0.0.0:4008:4008 # readonly port
      - 0.0.0.0:8989:8989 # REST API port
    links:
      - database:database

volumes:
  app: {}

我的maxscale.cnf

代码语言:javascript
复制
[maxscale]
threads=auto

[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=database
password=secretDummyPassword
auto_failover=true
auto_rejoin=true
enforce_read_only_slaves=1

[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2
user=database
password=secretDummyPassword
master_failure_mode=fail_on_write

[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006

[server1]
type=server
address=195.XXX.123.22
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=142.XXX.186.188
port=3306
protocol=MariaDBBackend
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-15 15:11:45

如果没有手动配置复制,可以在Maxscale容器中使用以下命令在服务器之间设置复制:

代码语言:javascript
复制
maxctrl call command mariadbmon reset-replication MariaDB-Monitor server1

这将导致为MariaDB-Monitor配置的所有其他服务器开始从server1复制。

备注:此命令重置GTID位置,因此不应在活动系统上使用它。如果您使用的是活动系统,请使用带有正确GTID坐标的CHANGE MASTER TO命令。它不会触及数据,但您将丢失历史记录(它会执行RESET MASTER)。

如果希望在容器第一次启动时自动配置复制,可以在/docker-entrypoint-initdb.d上挂载包含SQL命令的文件,MariaDB将在启动时执行它们。这可能是一个更好的解决方案自动化系统,它是相当方便的测试设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71480345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档