基于centos7.9搭建MariaDB10.5高可用集群

server/2024/11/27 21:50:44/

MariaDB-HA

    • 环境初始化
    • 安装MariaDB
    • 配置集群

基于centos7.9搭建MariaDB10.5数据库高可用集群,对标mysql5.7

节点IP
node1192.168.200.101
node2192.168.200.102
node3192.168.200.103

环境初始化

#!/bin/bash# 定义节点信息
NODES=("192.168.200.101 node1" "192.168.200.102 node2" "192.168.200.103 node3")# 定义当前节点的密码(默认集群统一密码)
HOST_PASS="000000"# 时间同步的目标节点
TIME_SERVER=node1# 时间同步的地址段
TIME_SERVER_IP=192.160.200.0/24# 欢迎界面
cat > /etc/motd <<EOF#################################    Welcome  to  mycluster    #################################
EOF#禁用selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0#firewalld
systemctl stop firewalld
systemctl disable firewalld  >> /dev/null 2>&1#关闭IPtables,清空规则
yum install  iptables-services  -y
if [ 0  -ne  $? ]; thenecho -e "\033[31mThe installation source configuration errors\033[0m"exit 1
fi
systemctl restart iptables
iptables -F
iptables -X
iptables -Z
/usr/sbin/iptables-save
systemctl stop iptables
systemctl disable iptables#禁用NetworkManager
systemctl stop NetworkManager >> /dev/null 2>&1
systemctl disable NetworkManager >> /dev/null 2>&1
yum remove -y NetworkManager firewalld
systemctl restart network# 优化ssh连接
sed -i -e 's/#UseDNS yes/UseDNS no/g' -e 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
systemctl reload sshd# 修改主机名
for node in "${NODES[@]}"; doip=$(echo "$node" | awk '{print $1}')hostname=$(echo "$node" | awk '{print $2}')# 获取当前节点的主机名和 IPcurrent_ip=$(hostname -I | awk '{print $1}')current_hostname=$(hostname)# 检查当前节点与要修改的节点信息是否匹配if [[ "$current_ip" == "$ip" && "$current_hostname" != "$hostname" ]]; thenecho "Updating hostname to $hostname on $current_ip..."hostnamectl set-hostname "$hostname"if [ $? -eq 0 ]; thenecho "Hostname updated successfully."elseecho "Failed to update hostname."fibreakfi
done# 遍历节点信息并添加到 hosts 文件
for node in "${NODES[@]}"; doip=$(echo "$node" | awk '{print $1}')hostname=$(echo "$node" | awk '{print $2}')# 检查 hosts 文件中是否已存在相应的解析if grep -q "$ip $hostname" /etc/hosts; thenecho "Host entry for $hostname already exists in /etc/hosts."else# 添加节点的解析条目到 hosts 文件sudo sh -c "echo '$ip $hostname' >> /etc/hosts"echo "Added host entry for $hostname in /etc/hosts."fi
doneif [[ ! -s ~/.ssh/id_rsa.pub ]]; thenssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q -b 2048
fi# 检查并安装 expect 工具
if ! which expect &> /dev/null; thenecho "expect 工具未安装,正在安装 expect..."sudo yum install -y expect
fi# 遍历所有节点
for node in "${NODES[@]}"; doip=$(echo "$node" | awk '{print $1}')hostname=$(echo "$node" | awk '{print $2}')expect -c "set timeout -1spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $hostnameexpect {\"*password:*\" { send -- \"$HOST_PASS\r\"; exp_continue }\"*(yes/no)*\" { send -- \"yes\r\"; exp_continue }eof { exit 1 }}"
done# 时间同步
if [[ $name == $TIME_SERVER ]]; then# 配置当前节点为时间同步源sed -i '3,6s/^/#/g' /etc/chrony.confsed -i "7s/^/server $TIME_SERVER iburst/g" /etc/chrony.confecho "allow $TIME_SERVER_IP" >> /etc/chrony.confecho "local stratum 10" >> /etc/chrony.conf
else# 配置当前节点同步到目标节点sed -i '3,6s/^/#/g' /etc/chrony.confsed -i "7s/^/server $TIME_SERVER iburst/g" /etc/chrony.conf
fi# 重启并启用 chrony 服务
systemctl restart chronyd
systemctl enable chronydecho "###############################################################"
echo "#################      集群初始化成功     #####################"
echo "###############################################################"

安装MariaDB

官网

在这里插入图片描述

三台节点操作

tar -xf mariadb-10.5.26-rhel-7-x86_64-rpms.tar -C /opt/

配置centos7.9仓库

mount /dev/sr0 /mnt/
mv /etc/yum.repos.d/* /media/
cat >> /etc/yum.repos.d/local.repo << EOF
[centos]
name=centos
baseurl=file:///mnt
gpgcheck=0
enabled=1
[DB]
name=DB
baseurl=file:///opt/mariadb-10.5.26-rhel-7-x86_64-rpms
gpgcheck=0
enabled=1
EOF

清理旧依赖

rpm  -qa  |  grep  mariadb
rpm  -e  --nodeps  mariadb-libs-5.5.68-1.el7.x86_64

安装数据库

yum install -y MariaDB-server MariaDB

启动数据库

systemctl enable --now mariadb

默认没有密码,手动设置

mysqladmin -uroot password root

配置集群

Galera Cluster 是 Galera 技术的一种应用实现,专为高可用性和数据一致性设计,通常用于支持 Percona XtraDB Cluster 和 MariaDB Cluster。它的核心特性包括多主复制、同步复制以及自动成员管理等,下面是对其主要特性的介绍。

  • Galera 的核心功能
    多主复制(Multi-Master Replication)

  • 集群中的每个节点都是一个主节点,应用可以对任意节点进行读写操作。
    多主复制提供了数据写入的灵活性和更高的可用性,当一个节点发生故障时,其他节点可以继续处理读写请求。
    同步复制(Synchronous Replication)

  • 数据在多个节点间同步写入,确保数据的一致性。
    使用 “并发控制”(Certification-based Replication),在事务提交时进行认证,以确保数据的同步和一致。
    自动故障转移与恢复(Automatic Failover and Recovery)

  • 节点发生故障时,集群会自动重新分配工作负载到其他节点。
    故障节点修复并重新加入后会自动同步数据,保持数据一致性。
    并行复制(Parallel Replication)

  • 支持多线程并行复制,优化数据同步效率,提高复制性能。
    一致性检查(Consistency Guarantees)

  • Galera 支持强一致性,即在所有节点中保证相同的数据副本,这对金融等高数据一致性要求的业务尤为重要。
    网络分区处理(Split-Brain Handling)

  • Galera 使用 Quorum 算法来管理节点的状态,避免在网络分区时产生脑裂。
    网络分区中,Galera 允许大多数节点继续工作,而隔离掉少数节点,确保集群的一致性。
    Galera 的工作机制

  • 认证(Certification):当一个事务在一个节点提交时,Galera 会在其他节点上进行一致性检查,确保不冲突后再提交到每个节点上。

  • 全同步(Whole-Sync):Galera 采用全同步方式将数据块复制到各节点,保证每个节点的数据库副本完全一致。
    WSREP API:Galera 使用的 Write Set Replication(WSREP)API 提供了与数据库服务器的接口,实现集群之间的数据写入集成。

三台节点关闭数据库

systemctl stop mariadb

三节点修改配置文件

cat > /etc/my.cnf.d/server.cnf << eof
[server]
# 服务器通用设置
[mysqld]
# MySQL守护进程的专用设置[galera]
# Galera 相关配置,用于高可用集群配置
wsrep_on=ON                          # 启用 Galera 复制
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so  # Galera 提供程序的库路径
wsrep_cluster_address="gcomm://192.168.200.101,192.168.200.102,192.168.200.103"  # 集群中各节点的IP地址列表
binlog_format=row                    # 使用行级二进制日志格式(Galera 必须)
default_storage_engine=InnoDB        # 设置默认存储引擎为 InnoDB
innodb_autoinc_lock_mode=2           # 配置自增锁模式,确保Galera兼容性# 网络绑定
bind-address=0.0.0.0                 # 允许所有网络接口连接到数据库服务
# 可选设置(根据需求调整)
wsrep_slave_threads=1                # 设置并行复制线程数
innodb_flush_log_at_trx_commit=0     # 提高写性能,适合非关键数据场景[embedded]
# 内嵌服务器的设置(一般不需改动)
[mariadb]
# MariaDB 专用设置
[mariadb-10.5]
# 仅适用于 MariaDB 10.5 版本及以上的设置
eof

node1节点启动集群

galera_new_cluster

其他节点重启数据库

systemctl restart mariadb

验证

[root@node1 ~]# mysql -uroot -proot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.5.26-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> show status like "wsrep_ready";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready   | ON    |
+---------------+-------+
1 row in set (0.001 sec)MariaDB [(none)]> show status like "wsrep_cluster_size";
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.001 sec)MariaDB [(none)]>

关闭集群,配置参数,三台节点逐个停止,从3到1

编辑配置文件

cat >> /etc/my.cnf <<eof[mysqld]
# 大小写不敏感设置
lower_case_table_names=1  # 设置为 1 使数据库表名不区分大小写# 性能优化设置
max_connections=1000  # 最大连接数
innodb_flush_log_at_trx_commit=2  # 提高写入性能
innodb_buffer_pool_size=3G  # 根据系统内存调整
thread_cache_size=100  # 线程缓存
table_open_cache=4096  # 表缓存
wsrep_slave_threads=4  # 根据 CPU 核数增加并行线程
innodb_locks_unsafe_for_binlog=1  # 提升并行性能# 其他可选设置
innodb_log_file_size=256M  # 日志文件大小
innodb_flush_method=O_DIRECT  # 刷新方法
innodb_read_io_threads=4  # 读取 I/O 线程数
innodb_write_io_threads=4  # 写入 I/O 线程数
eof

重新启动

galera_new_cluster

启动节点启动

systemctl restart mariadb

查看

[root@node1 ~]# mysql -uroot -proot -e'show status like "wsrep_cluster_size";'
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
[root@node1 ~]#

http://www.ppmy.cn/server/137769.html

相关文章

C#实现word和pdf格式互转

1、word转pdf 使用nuget&#xff1a; Microsoft.Office.Interop.Word winform页面&#xff1a; 后端代码&#xff1a; //using Spire.Doc; //using Spire.Pdf; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Sy…

部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio

1. 模块简介 Prometheus 是一个开源的监控系统和时间序列数据库。Istio 使用 Prometheus 来记录指标&#xff0c;跟踪 Istio 和网格中的应用程序的健康状况。Grafana 是一个用于分析和监控的开放平台。Grafana 可以连接到各种数据源&#xff0c;并使用图形、表格、热图等将数据…

Nginx 的 Http 模块介绍(中)

1. preaccess 阶段 在 preaccess 阶段在 access 阶段之前&#xff0c;主要是限制用户的请求&#xff0c;比如并发连接数&#xff08;limit_conn模块&#xff09;和每秒请求数&#xff08;limit_req 模块&#xff09;等。这两个模块对于预防一些攻击请求是很有效的。 1.1 limi…

如何将MySQL彻底卸载干净

目录 背景&#xff1a; MySQL的卸载 步骤1&#xff1a;停止MySQL服务 步骤2&#xff1a;软件的卸载 步骤3&#xff1a;残余文件的清理 步骤4&#xff1a;清理注册表 步骤五:删除环境变量配置 总结&#xff1a; 背景&#xff1a; MySQL卸载不彻底往往会导致重新安装失败…

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可&#xff0c;无特殊要求 PyCharm 2023.3.5&#xff08;下最新版本即可&#xff0c;无特殊要求&#xff09; 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…

利用Spring Boot框架打造信息学科平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

MySQL 和 PostgreSQL 的对比概述

MySQL 和 PostgreSQL 是两种广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们各自有其特点和优缺点。以下将从多个方面对它们进行详细比较。 1. 介绍 MySQL&#xff1a; MySQL 由瑞典公司 MySQL AB 开发&#xff0c;2008 年被 Sun Microsyst…

OnlyOffice 8.2 版本测评

引言 随着数字化办公的普及&#xff0c;各类文档协作工具如雨后春笋般涌现。OnlyOffice 作为一款开源且功能强大的协作平台&#xff0c;已吸引了众多用户的关注。近期推出的 OnlyOffice 8.2 版本带来了诸多更新和改进&#xff0c;旨在提升用户的文档处理体验。本文将对该版本进…