在现代应用开发中,数据库的高可用性和可扩展性是至关重要的。MariaDB作为MySQL的一个流行分支,提供了多种集群解决方案,如Galera Cluster和Replication,以满足不同的需求。Docker作为一种轻量级的容器化技术,能够简化数据库集群的部署和管理。本文将详细介绍如何使用Docker搭建MariaDB集群,包括Galera Cluster和Replication两种方式。
MariaDB Galera Cluster是一种基于同步复制的多主集群解决方案。它允许所有节点同时读写数据,并且数据在所有节点之间实时同步。Galera Cluster的主要特点包括:
MariaDB Replication是一种基于异步复制的主从架构。它允许一个主节点处理写操作,并将数据异步复制到一个或多个从节点。Replication的主要特点包括:
Docker是一种开源的容器化平台,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。Docker的主要优势包括:
在开始搭建MariaDB集群之前,首先需要在所有节点上安装Docker。以下是在Ubuntu系统上安装Docker的步骤:
# 更新包索引
sudo apt-get update
# 安装必要的依赖包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加Docker仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 更新包索引
sudo apt-get update
# 安装Docker CE
sudo apt-get install docker-ce
# 启动Docker服务
sudo systemctl start docker
# 设置Docker开机自启
sudo systemctl enable docker
以下是一些常用的Docker命令,用于管理和操作容器:
docker --version
docker ps -a
docker start <container_id>
docker stop <container_id>
docker rm <container_id>
docker logs <container_id>
docker exec -it <container_id> /bin/bash
在搭建MariaDB Galera Cluster之前,需要准备以下内容:
为了确保集群节点之间的通信,首先需要创建一个Docker网络:
docker network create galera-network
在每个节点上启动MariaDB容器,并配置Galera Cluster参数。以下是在第一个节点上启动容器的示例:
docker run -d \
--name mariadb-node1 \
--network galera-network \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my_database \
-e MYSQL_USER=my_user \
-e MYSQL_PASSWORD=my_password \
-e GALERA_CLUSTER_NAME=my_galera_cluster \
-e GALERA_NODE_NAME=node1 \
-e GALERA_WSREP_CLUSTER_ADDRESS=gcomm:// \
-p 3306:3306 \
mariadb:10.5
在第二个和第三个节点上启动容器时,需要指定GALERA_WSREP_CLUSTER_ADDRESS
为第一个节点的地址:
docker run -d \
--name mariadb-node2 \
--network galera-network \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my_database \
-e MYSQL_USER=my_user \
-e MYSQL_PASSWORD=my_password \
-e GALERA_CLUSTER_NAME=my_galera_cluster \
-e GALERA_NODE_NAME=node2 \
-e GALERA_WSREP_CLUSTER_ADDRESS=gcomm://mariadb-node1 \
-p 3307:3306 \
mariadb:10.5
docker run -d \
--name mariadb-node3 \
--network galera-network \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my_database \
-e MYSQL_USER=my_user \
-e MYSQL_PASSWORD=my_password \
-e GALERA_CLUSTER_NAME=my_galera_cluster \
-e GALERA_NODE_NAME=node3 \
-e GALERA_WSREP_CLUSTER_ADDRESS=gcomm://mariadb-node1 \
-p 3308:3306 \
mariadb:10.5
在每个节点的MariaDB配置文件中,添加以下Galera Cluster配置:
[mysqld]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name=my_galera_cluster
wsrep_cluster_address=gcomm://mariadb-node1,mariadb-node2,mariadb-node3
wsrep_node_name=node1
wsrep_node_address=172.18.0.2
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
在所有节点启动后,可以通过以下命令验证集群状态:
docker exec -it mariadb-node1 mysql -uroot -pmy-secret-pw -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
输出应显示集群中有三个节点:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
在搭建MariaDB Replication之前,需要准备以下内容:
为了确保主从节点之间的通信,首先需要创建一个Docker网络:
docker network create replication-network
在主节点上启动MariaDB容器:
docker run -d \
--name mariadb-master \
--network replication-network \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my_database \
-e MYSQL_USER=my_user \
-e MYSQL_PASSWORD=my_password \
-p 3306:3306 \
mariadb:10.5
在从节点上启动MariaDB容器:
docker run -d \
--name mariadb-slave \
--network replication-network \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my_database \
-e MYSQL_USER=my_user \
-e MYSQL_PASSWORD=my_password \
-p 3307:3306 \
mariadb:10.5
在主节点上,配置主从复制:
docker exec -it mariadb-master mysql -uroot -pmy-secret-pw -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';"
docker exec -it mariadb-master mysql -uroot -pmy-secret-pw -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"
docker exec -it mariadb-master mysql -uroot -pmy-secret-pw -e "FLUSH PRIVILEGES;"
docker exec -it mariadb-master mysql -uroot -pmy-secret-pw -e "SHOW MASTER STATUS;"
记录File
和Position
的值,用于从节点的配置。
在从节点上,配置主从复制:
docker exec -it mariadb-slave mysql -uroot -pmy-secret-pw -e "CHANGE MASTER TO MASTER_HOST='mariadb-master', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='<File>', MASTER_LOG_POS=<Position>;"
docker exec -it mariadb-slave mysql -uroot -pmy-secret-pw -e "START SLAVE;"
在从节点上,可以通过以下命令验证复制状态:
docker exec -it mariadb-slave mysql -uroot -pmy-secret-pw -e "SHOW SLAVE STATUS\G;"
输出中的Slave_IO_Running
和Slave_SQL_Running
应显示为Yes
,表示复制已成功启动。
在MariaDB集群中,管理节点和监控集群状态是非常重要的。以下是一些常用的管理命令:
SHOW STATUS LIKE 'wsrep%';
SHOW SLAVE STATUS\G;
在MariaDB集群中,定期备份数据是确保数据安全的重要措施。以下是一些常用的备份和恢复方法:
mysqldump -u root -pmy-secret-pw --all-databases > backup.sql
xtrabackup --backup --user=root --password=my-secret-pw --target-dir=/backup
mysql -u root -pmy-secret-pw < backup.sql
在MariaDB集群中,监控和日志记录是确保系统稳定运行的重要手段。以下是一些常用的监控和日志工具:
在搭建和管理MariaDB集群时,可能会遇到一些常见问题。以下是一些常见问题及其解决方案:
通过Docker搭建MariaDB集群,可以简化部署和管理过程,提高系统的可用性和可扩展性。本文详细介绍了如何使用Docker搭建MariaDB Galera Cluster和Replication,并提供了相关的配置和管理方法。希望本文能够帮助读者更好地理解和应用MariaDB集群技术。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/wuzsheng/blog/3170993