在使用docker-compose启动Maxscale的Docker镜像时,将日志输出从标准输出更改为文件输出
MariaDB 10.4.8和Maxscale 2.4.2
git clone https://github.com/mariadb-corporation/maxscale-docker.git
cd maxscale-docker
cd maxscale
如果要将日志从标准输出更改为文件,请进行以下操作。
添加maxscale.cnf
[maxscale]
threads=auto
admin_host=0.0.0.0
logdir=/var/log/maxscale
[server1]
type=server
address=master
port=3306
protocol=mariadbbackend
[server2]
type=server
address=slave1
port=3306
protocol=mariadbbackend
[server3]
type=server
address=slave2
port=3306
protocol=mariadbbackend
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2,server3
user=maxuser
password=maxpwd
auto_failover=true
auto_rejoin=true
enforce_read_only_slaves=1
[Read-Only-Service]
type=service
router=readconnroute
servers=server1,server2,server3
user=maxuser
password=maxpwd
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=maxuser
password=maxpwd
master_failure_mode=fail_on_write
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=mariadbclient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=mariadbclient
port=4006
以下是对docker-compose.yml进行编辑的方式:
– 将mariadb的版本从10.3更改为10.4.8
– 将mariadb/maxscale的版本从latest更改为2.4.2
– 在maxscale中添加命令「command: [“maxscale”, “-d”, “-U”, “maxscale”, “-l”, “file”]」。
version: '2'
services:
master:
image: mariadb:10.4.8
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'Y'
volumes:
- ./sql/master:/docker-entrypoint-initdb.d
command: mysqld --log-bin=mariadb-bin --binlog-format=ROW --server-id=3000
ports:
- "4001:3306"
slave1:
image: mariadb:10.4.8
depends_on:
- master
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'Y'
volumes:
- ./sql/slave:/docker-entrypoint-initdb.d
command: mysqld --log-bin=mariadb-bin --binlog-format=ROW --server-id=3001 --log-slave-updates
ports:
- "4002:3306"
slave2:
image: mariadb:10.4.8
depends_on:
- master
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'Y'
volumes:
- ./sql/slave:/docker-entrypoint-initdb.d
command: mysqld --log-bin=mariadb-bin --binlog-format=ROW --server-id=3002 --log-slave-updates
ports:
- "4003:3306"
maxscale:
image: mariadb/maxscale:2.4.2-0
depends_on:
- master
- slave1
- slave2
volumes:
- ./maxscale.cnf:/etc/maxscale.cnf
command: ["maxscale", "-d", "-U", "maxscale", "-l", "file"]
ports:
- "4006:4006" # readwrite port
- "4008:4008" # readonly port
- "8989:8989" # REST API port
docker-compose up -d
docker-compose exec maxscale maxctrl list servers
┌─────────┬─────────┬──────┬─────────────┬─────────────────┬──────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server1 │ master │ 3306 │ 0 │ Master, Running │ 0-3000-5 │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server2 │ slave1 │ 3306 │ 0 │ Slave, Running │ 0-3000-5 │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server3 │ slave2 │ 3306 │ 0 │ Slave, Running │ 0-3000-5 │
└─────────┴─────────┴──────┴─────────────┴─────────────────┴──────────┘
docker stop maxscale_master_1
docker-compose exec maxscale maxctrl list servers
┌─────────┬─────────┬──────┬─────────────┬─────────────────┬──────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server1 │ master │ 3306 │ 0 │ Down │ 0-3000-5 │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server2 │ slave1 │ 3306 │ 0 │ Master, Running │ 0-3000-5 │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server3 │ slave2 │ 3306 │ 0 │ Slave, Running │ 0-3000-5 │
└─────────┴─────────┴──────┴─────────────┴─────────────────┴──────────┘
docker start maxscale_master_1
docker-compose exec maxscale maxctrl list servers
┌─────────┬─────────┬──────┬─────────────┬─────────────────┬──────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server1 │ master │ 3306 │ 0 │ Slave, Running │ 0-3000-5 │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server2 │ slave1 │ 3306 │ 0 │ Master, Running │ 0-3000-5 │
├─────────┼─────────┼──────┼─────────────┼─────────────────┼──────────┤
│ server3 │ slave2 │ 3306 │ 0 │ Slave, Running │ 0-3000-5 │
└─────────┴─────────┴──────┴─────────────┴─────────────────┴──────────┘
docker exec -t maxscale_maxscale_1 bash
ls /var/log/maxscale
maxscale.log
cat /var/log/maxscale/maxscale.log
# ログの出力例
2019-09-04 17:43:23 notice : Starting a total of 2 services...
2019-09-04 17:43:23 error : [Read-Write-Service] Failed to connect to server 'server1' ([master]:3306) when checking authentication user credentials and permissions: 2002 Can't connect to MySQL server on 'master' (115)
2019-09-04 17:43:23 error : [Read-Write-Service] Failed to connect to server 'server2' ([slave1]:3306) when checking authentication user credentials and permissions: 2002 Can't connect to MySQL server on 'slave1' (115)
2019-09-04 17:43:23 error : Monitor was unable to connect to server server1[master:3306] : 'Can't connect to MySQL server on 'master' (115)'
2019-09-04 17:43:23 error : [Read-Write-Service] Failed to connect to server 'server3' ([slave2]:3306) when checking authentication user credentials and permissions: 2002 Can't connect to MySQL server on 'slave2' (115)
2019-09-04 17:43:23 error : Failure loading users data from backend [master:3306] for service [Read-Write-Service]. MySQL error 2002, Can't connect to MySQL server on 'master' (115)