无法创建MariaDB Galera Cluster

时间:2016-09-28 10:32:22

标签: mariadb galera

我已基于mariadb:10.1构建了一个图像,它基本上添加了一个新的cluster.conf,但在第一个节点开始成功运行后,在第二个节点上面临以下错误。有人可以帮我调试吗?

错误日志尾部

2016-09-28 10:12:55 139799503415232 [ERROR] WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 (Connection timed out)
     at gcomm/src/pc.cpp:connect():162
2016-09-28 10:12:55 139799503415232 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():208: Failed to open backend connection: -110 (Connection timed out)
2016-09-28 10:12:55 139799503415232 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1380: Failed to open channel 'test_cluster' at 'gcomm://172.17.0.2,172.17.0.3,172.17.0.4': -110 (Connection timed out)
2016-09-28 10:12:55 139799503415232 [ERROR] WSREP: gcs connect failed: Connection timed out
2016-09-28 10:12:55 139799503415232 [ERROR] WSREP: wsrep::connect(gcomm://172.17.0.2,172.17.0.3,172.17.0.4) failed: 7
2016-09-28 10:12:55 139799503415232 [ERROR] Aborting

MySQL init process failed.

调试步骤

注意:确保容器IP地址与显示的相同。

  1. 为了确保容器之间的网络正常工作,尝试创建另一个可以登录到第一个容器的mysql实例的容器。
  2. 这绝对与MYSQL_HOST
  3. 无关
  4. 为了查看容器是否内存不足,我使用docker stats并看到失败的容器在其生命周期中仅使用了少量的142MB,直到它失败,这比总内存少了被允许(约4GB)。
  5. 我正在使用Docker for Mac,但尝试在CentOS VirtualBox上运行相同的结果并提供相同的结果。看起来不像Mac上的Docker有问题。
  6. 配置

    [mysqld]
    user=mysql
    binlog_format=ROW
    bind-address=0.0.0.0
    default_storage_engine=innodb
    innodb_autoinc_lock_mode=2
    innodb_flush_log_at_trx_commit=0
    innodb_buffer_pool_size=122M
    innodb_file_per_table=1
    innodb_doublewrite=1
    query_cache_size=0
    query_cache_type=0
    wsrep_on=ON
    wsrep_provider=/usr/lib/libgalera_smm.so
    wsrep_sst_method=rsync
    

    启动容器的步骤

    # bootstrap node
    docker run --rm -e MYSQL_ROOT_PASSWORD=123 \ 
      activatedgeek/mariadb:devel \
        --wsrep-cluster-name=test_cluster \
        --wsrep-cluster-address=gcomm://172.17.0.2,172.17.0.3,172.17.0.4 \
        --wsrep-new-cluster
    
    # add node into cluster
    docker run --rm -e MYSQL_ROOT_PASSWORD=123 \ 
      activatedgeek/mariadb:devel \
        --wsrep-cluster-name=test_cluster \
        --wsrep-cluster-address=gcomm://172.17.0.2,172.17.0.3,172.17.0.4
    
    # add node into cluster
    docker run --rm -e MYSQL_ROOT_PASSWORD=123 \ 
      activatedgeek/mariadb:devel \
        --wsrep-cluster-name=test_cluster \
        --wsrep-cluster-address=gcomm://172.17.0.2,172.17.0.3,172.17.0.4
    

2 个答案:

答案 0 :(得分:0)

此问题是由挂起init process引起的。上面的配置和CLI参数是正确的。在init进程启动之前唯一要做的就是在数据目录中创建并清空mysql目录(默认情况下为/var/lib/mysql)。必须仅在除引导节点之外的所有节点上创建。

mkdir -p /var/lib/mysql/mysql

请参阅示例MariaDB Cluster以了解使用自定义MariaDB图像的用法,并且是创建群集的概念证明。

答案 1 :(得分:0)

我猜你的容器应该暴露所需的端口:

==

或应该-p 3306:3306 -p 4444:4444 -p 4567:4567 -p 4568:4568 在一起。