基于docker实现mariadb galera集群

环境配置:

节点名称 IP地址
node01 192.168.10.207
node02 192.168.10.167

基础环境配置:

  1. 删除firewalld
yum remove firewalld -y
  1. 关闭selinux
sudo vim  /etc/selinux/config

修改以下:
SELINUX=disabled

  1. 安装iptables-services、bash-completion
yum install -y iptables-services bash-completion
systemctl enable iptables
systemctl start iptables
iptables -F
service iptables save
systemctl restart iptables
  1. 添加hosts主机名解析
cat /etc/hosts
192.168.10.207	node01
192.168.10.167 node02
  1. 添加mariadb所需的iptables规则组
iptables -A INPUT -p tcp -m multiport --dport 3306,4567,4444 -j ACCEPT

部署galera集群

1.下载mariadb 10.3.10最新的docker镜像

docker pull mariadb:10.3.10

2.创建数据库所需要的目录,用来保存mariadb的配置文件和mariadb data

mkdir -p /opt/mariadb/conf
mkdir -p /opt/mariadb/data

node1节点操作:
1.在node01节点第一次运行mariadb,运行目的。复制mariadb的配置文件到宿主机,在/opt/mariadb/data目录下生成数据库文件
docker run -d
–name mariadb-node01
-v /opt/mariadb/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
mariadb:10.3.10
2. 复制mariadb容器配置文件到/opt/mariadb/conf目录下

docker cp mariadb-node01:/etc/mysql /opt/mariadb/conf

3.进入容器并进入到mysql数据库命令行为mysql数据库赋予远程登陆的权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '' WITH GRANT OPTION;

4.退出容器并删除该容器(删除容器的母的就是为了之前在/opt/mariadb/data目录下生成数据库所需要的数据文件)

docker sotp mariadb-node01 && docker rm mariadb-node01

5.修改复制在/opt/mariadb/conf目录下my.cnf配置文件中[galera]部分配置

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.10.207:4567,192.168.10.167:4567
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=192.168.10.207
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0

6.第二次在node01节点启动mariadb容器,以集群的第一个数据库启动需要加–wsrep-new-cluster参数

docker run -d \
--name mariadb-node01 \
-p 3306:3306 \
-p 4567:4567 \
-p 4444:4444 \
-v /opt/mariadb/conf:/etc/mysql \
-v /opt/mariadb/data/:/var/lib/mysql \
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes  \
-e TIMEZONE=Asia/Shanghai \
mariadb:10.3.10 --wsrep-new-cluster

node02节点操作
1.在node02节点第一次运行mariadb,运行目的。复制mariadb的配置文件到宿主机,在/opt/mariadb/data目录下生成数据库文件

docker run -d \
--name mariadb-node02 \
-v /opt/mariadb/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mariadb:10.3.10

2.复制mariadb容器配置文件到/opt/mariadb/conf目录下

docker cp mariadb-node02:/etc/mysql /opt/mariadb/conf

3进入容器并进入到mysql数据库命令行为mysql数据库赋予远程登陆的权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '' WITH GRANT OPTION;

4.退出容器并删除该容器(删除容器的母的就是为了之前在/opt/mariadb/data目录下生成数据库所需要的数据文件)

docker sotp mariadb-node02 && docker rm mariadb-node02

5.修改复制在/opt/mariadb/conf目录下my.cnf配置文件中[galera]部分配置

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.1010.207:4567,192.168.10.167:4567
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=192.168.10.167
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0

6.第二次在node01节点启动mariadb容器,以集群的第一个数据库启动需要加–wsrep-new-cluster参数

docker run -d \
--name mariadb-node02 \
-p 3306:3306 \
-p 4567:4567 \
-p 4444:4444 \
-v /opt/mariadb/conf:/etc/mysql \
-v /opt/mariadb/data/:/var/lib/mysql \
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes  \
-e TIMEZONE=Asia/Shanghai \
mariadb:10.3.10 --wsrep-new-cluster

验证galera集群工作正常

show status like '%wsrep%';

链接

你可能感兴趣的:(galera,cluster)