Ansible部署MariaDB galera集群(多主)

文章目录

  • Ansible部署MariaDB galera集群(多主)
    • 介绍
    • 节点规划
    • 基础环境准备
    • 编写剧本文件
    • 执行剧本文件
    • 查看集群状态
    • 测试

Ansible部署MariaDB galera集群(多主)

介绍

MariaDB Galera集群是一套基于同步复制的、多主的MySQL集群解决方案,使用节点没有单点故障,可用性高,读写性能高,可扩展性好。

主要特点

  • 同步复制,主备无延迟

  • 多主架构允许多个节点成为集群中的主节点,并且所有主节点都可以处理写入请求,这意味着你可以在任何节点上写入数据,而不仅仅是在单个节点上。

  • 无单点故障如果一个节点失败,其他节点仍然可以继续工作,并且当故障节点恢复时,它会自动重新加入集群

节点规划

IP主机名节点
192.168.200.10ansibleAnsible节点
192.168.200.20node1Node1节点
192.168.200.30node2Node2节点
192.168.200.40node3Node3节点

基础环境准备

(1)修改主机名

[root@localhost ~]# hostnamectl set-hostname ansible
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# hostnamectl set-hostname node3

(2)安装ansible

[root@ansible ~]# yum install -y epel-release
[root@ansible ~]# yum install -y ansible

(3)配置Ansible节点和远程主机的连接

[root@ansible ~]# ssh-keygen
[root@node1 ~]# ssh-keygen
[root@node2 ~]# ssh-keygen
[root@node3 ~]# ssh-keygen

(4)配置主机组

[root@ansible ~]# vim /etc/ansible/hosts
[node1]
192.168.200.20
[node2]
192.168.200.30
[node3]
192.168.200.40

(5)配置Yum文件

Mariadb10.3(10.3自带galera软件)

[root@ansible ~]# vim mariadb.repo
[mariadb]
name=MariaDB
baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

(6)配置server-node(1~3).conf文件,用于复制到远程节点

[root@ansible ~]# vim server-node1.cnf
[server]
[mysqld]
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.200.20,192.168.200.30,192.168.200.40"
binlog_format=row
default_storage_engine=InnoDB
wsrep_node_name=node1
[embedded]
[mariadb]
[mariadb-10.3]
[root@node1 ~]# cp server-node1.cnf server-node2.cnf 
[root@node1 ~]# cp server-node1.cnf server-node3.cnf 
[root@node1 ~]# sed -i 's/wsrep_node_name=node1/wsrep_node_name=node2/g' server-node2.cnf 
[root@node1 ~]# sed -i 's/wsrep_node_name=node1/wsrep_node_name=node3/g' server-node3.cnf 
配置文件server.conf参数详解
wsrep_on=ON    # 是否启用插件
wsrep_provider=/usr/lib64/galera/libgalera_smm.so  # 指定galera的库文件的地址
wsrep_cluster_address="gcomm://192.168.200.20,192.168.200.30,192.168.200.40" # 集群IP
binlog_format=row  # 二进制日志的格式为row
default_storage_engine=InnoDB # 默认的存储引擎为InnoDB
wsrep_node_name=node3 # 指定了当前节点名称

(7)测试主机连通性

[root@ansible ~]# ansible all -m ping
192.168.200.20 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
192.168.200.30 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
192.168.200.40 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

编写剧本文件

[root@ansible ~]# vim install_galera_cluster.yaml
- hosts: allremote_user: roottasks:- name: stop firewalld setenforce 0shell: systemctl stop firewalld && setenforce 0- name: copy hostscopy: src=/etc/hosts dest=/etc/hosts- name: copy repocopy: src=mariadb.repo dest=/etc/yum.repos.d/- name: install mariadbyum: name=mariadb-server state=installed- name: start mariadbservice: name=mariadb state=started enabled=yes- name: init_mysqlshell: mysqladmin -uroot password 000000- name: stop mariadbservice: name=mariadb state=stopped- hosts: node1remote_user: roottasks:- name: copy server-node1.cnfcopy: src=server-node1.cnf dest=/etc/my.cnf.d/server.cnf- name: chushihuashell: galera_new_cluster- hosts: node2remote_user: roottasks:- name: copy server-node2.cnfcopy: src=server-node2.cnf dest=/etc/my.cnf.d/server.cnf- hosts: node3remote_user: roottasks:- name: copy server-node3.cnfcopy: src=server-node3.cnf dest=/etc/my.cnf.d/server.cnf- hosts: node2,node3remote_user: roottasks:- name: start mariadbshell: systemctl start mariadb

执行剧本文件

[root@ansible ~]# ansible-playbook install_galera_cluster.yaml PLAY [all] ***********************************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [192.168.200.20]
ok: [192.168.200.30]
ok: [192.168.200.40]TASK [stop firewalld setenforce 0] ***********************************************************************************************************************
changed: [192.168.200.20]
changed: [192.168.200.30]
changed: [192.168.200.40]TASK [copy hosts] ****************************************************************************************************************************************
ok: [192.168.200.40]
ok: [192.168.200.30]
ok: [192.168.200.20]TASK [copy repo] *****************************************************************************************************************************************
changed: [192.168.200.20]
changed: [192.168.200.30]
changed: [192.168.200.40]TASK [install mariadb] ***********************************************************************************************************************************
changed: [192.168.200.20]
changed: [192.168.200.30]
changed: [192.168.200.40]TASK [start mariadb] *************************************************************************************************************************************
changed: [192.168.200.40]
changed: [192.168.200.20]
changed: [192.168.200.30]TASK [init_mysql] ****************************************************************************************************************************************
changed: [192.168.200.20]
changed: [192.168.200.40]
changed: [192.168.200.30]TASK [stop mariadb] **************************************************************************************************************************************
changed: [192.168.200.40]
changed: [192.168.200.20]
changed: [192.168.200.30]PLAY [node1] *********************************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [192.168.200.20]TASK [copy server-node1.cnf] *****************************************************************************************************************************
changed: [192.168.200.20]TASK [chushihua] *****************************************************************************************************************************************
changed: [192.168.200.20]PLAY [node2] *********************************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [192.168.200.30]TASK [copy server-node2.cnf] *****************************************************************************************************************************
changed: [192.168.200.30]PLAY [node3] *********************************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [192.168.200.40]TASK [copy server-node3.cnf] *****************************************************************************************************************************
changed: [192.168.200.40]PLAY [node2,node3] ***************************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [192.168.200.30]
ok: [192.168.200.40]TASK [start mariadb] *************************************************************************************************************************************
changed: [192.168.200.40]
changed: [192.168.200.30]PLAY RECAP ***********************************************************************************************************************************************
192.168.200.20             : ok=11   changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.200.30             : ok=12   changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.200.40             : ok=12   changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

查看集群状态

(node1,node2,node3都可以查看)

[root@node1 ~]#  mysql -uroot -p000000MariaDB [(none)]> show status like '%wsrep%';
+-------------------------------+-------------------------------------------------------------+
| Variable_name                 | Value                                                       |
+-------------------------------+-------------------------------------------------------------+
| wsrep_applier_thread_count    | 1                                                           |
| wsrep_apply_oooe              | 0.000000                                                    |
| wsrep_apply_oool              | 0.000000                                                    |
| wsrep_apply_waits             | 0                                                           |
| wsrep_apply_window            | 0.000000                                                    |
| wsrep_causal_reads            | 0                                                           |
| wsrep_cert_deps_distance      | 0.000000                                                    |
| wsrep_cert_index_size         | 0                                                           |
| wsrep_cert_interval           | 0.000000                                                    |
| wsrep_cluster_conf_id         | 2                                                           |
| wsrep_cluster_size            | 3                                                           |
| wsrep_cluster_state_uuid      | 08f31069-2ec0-11ee-b090-fff9379da121                        |
| wsrep_cluster_status          | Primary                                                     |
| wsrep_cluster_weight          | 3                                                           |
| wsrep_commit_oooe             | 0.000000                                                    |
| wsrep_commit_oool             | 0.000000                                                    |
| wsrep_commit_window           | 0.000000                                                    |
| wsrep_connected               | ON                                                          |
| wsrep_desync_count            | 0                                                           |
| wsrep_evs_delayed             |                                                             |
| wsrep_evs_evict_list          |                                                             |
| wsrep_evs_repl_latency        | 0/0/0/0/0                                                   |
| wsrep_evs_state               | OPERATIONAL                                                 |
| wsrep_flow_control_active     | false                                                       |
| wsrep_flow_control_paused     | 0.000000                                                    |
| wsrep_flow_control_paused_ns  | 0                                                           |
| wsrep_flow_control_recv       | 0                                                           |
| wsrep_flow_control_requested  | false                                                       |
| wsrep_flow_control_sent       | 0                                                           |
| wsrep_gcomm_uuid              | 08f1dd06-2ec0-11ee-829f-06675c76d425                        |
| wsrep_gmcast_segment          | 0                                                           |
| wsrep_incoming_addresses      | 192.168.200.20:3306,192.168.200.40:3306,192.168.200.30:3306 |
| wsrep_last_committed          | 0                                                           |
| wsrep_local_bf_aborts         | 0                                                           |
| wsrep_local_cached_downto     | 18446744073709551615                                        |
| wsrep_local_cert_failures     | 0                                                           |
| wsrep_local_commits           | 0                                                           |
| wsrep_local_index             | 0                                                           |
| wsrep_local_recv_queue        | 0                                                           |
| wsrep_local_recv_queue_avg    | 0.111111                                                    |
| wsrep_local_recv_queue_max    | 2                                                           |
| wsrep_local_recv_queue_min    | 0                                                           |
| wsrep_local_replays           | 0                                                           |
| wsrep_local_send_queue        | 0                                                           |
| wsrep_local_send_queue_avg    | 0.000000                                                    |
| wsrep_local_send_queue_max    | 1                                                           |
| wsrep_local_send_queue_min    | 0                                                           |
| wsrep_local_state             | 4                                                           |
| wsrep_local_state_comment     | Synced                                                      |
| wsrep_local_state_uuid        | 08f31069-2ec0-11ee-b090-fff9379da121                        |
| wsrep_open_connections        | 0                                                           |
| wsrep_open_transactions       | 0                                                           |
| wsrep_protocol_version        | 9                                                           |
| wsrep_provider_name           | Galera                                                      |
| wsrep_provider_vendor         | Codership Oy <info@codership.com>                           |
| wsrep_provider_version        | 25.3.37(rd0a7bd7)                                           |
| wsrep_ready                   | ON                                                          |
| wsrep_received                | 9                                                           |
| wsrep_received_bytes          | 552                                                         |
| wsrep_repl_data_bytes         | 0                                                           |
| wsrep_repl_keys               | 0                                                           |
| wsrep_repl_keys_bytes         | 0                                                           |
| wsrep_repl_other_bytes        | 0                                                           |
| wsrep_replicated              | 0                                                           |
| wsrep_replicated_bytes        | 0                                                           |
| wsrep_rollbacker_thread_count | 1                                                           |
| wsrep_thread_count            | 2                                                           |
+-------------------------------+-------------------------------------------------------------+
  • wsrep_cluster_size 3 :集群成员有3个

  • wsrep_cluster_status Primary: 主服务器

  • wsrep_connected ON:是否处于连接中

  • wsrep_incoming_addresses 192.168.200.20:3306,192.168.200.40:3306,192.168.200.30:3306 :连接中的主机

  • wsrep_ready ON :插件是否应用中

测试

使用node1写入数据

[root@node1 ~]#  mysql -uroot -p000000
MariaDB [(none)]> create database node1;MariaDB [(none)]> use node1;MariaDB [node1]> CREATE TABLE employees (->   id INT PRIMARY KEY AUTO_INCREMENT,->   name VARCHAR(50),->   age INT,->   department VARCHAR(50)-> );MariaDB [node1]> INSERT INTO employees (name, age, department) VALUES->   ('John Doe', 30, 'Sales'),->   ('Jane Smith', 25, 'Marketing'),->   ('David Johnson', 35, 'HR');

node2查看是否同步

[root@node2 ~]# mysql -uroot -p000000
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| node1              |
| performance_schema |
| test               |
+--------------------+
MariaDB [node1]> select * from employees;
+----+---------------+------+------------+
| id | name          | age  | department |
+----+---------------+------+------------+
|  1 | John Doe      |   30 | Sales      |
|  4 | Jane Smith    |   25 | Marketing  |
|  7 | David Johnson |   35 | HR         |
+----+---------------+------+------------+

如果此时node3宕机了

[root@node3 ~]# systemctl stop mariadb

查看集群信息

MariaDB [node1]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+
# 立马剔除宕机的主机

如果给他恢复?数据是否还在

MariaDB [node1]> select * from employees;
+----+---------------+------+------------+
| id | name          | age  | department |
+----+---------------+------+------------+
|  1 | John Doe      |   30 | Sales      |
|  4 | Jane Smith    |   25 | Marketing  |
|  7 | David Johnson |   35 | HR         |
+----+---------------+------+------------+
# 数据还在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react native web RN webpack nginx 部署

# nginx配置 location /app {root html;index index.html;# url 切换时始终返回index.htmltry_files $uri /app/index.html; } # 图片样式缓存1年 location ~* /app.*\.(js|css|png|jpg)$ {access_log off;expires 365d; } # html/xml/json 文件不缓存 location ~* /app.…

ChatGPT 实现前一天

提出需求 个人输入需求&#xff1a; Java实现键盘输入日期 输出前一天&#xff0c;需要考虑润年和非润年&#xff0c;2月是否有29号&#xff0c;大月小月的区分等细节处理&#xff0c;不符合的有对应提示&#xff0c;不使用java包里的封装好的类 ChatGPT4分析出的语义&#xff…

QGIS3.28的二次开发一:编译工程

环境&#xff1a;VS2019OSGeo4WCMake_3.26Cygwin64QGIS_3.28 注意&#xff1a;一定要按照步骤顺序来&#xff01; 一、配置环境 &#xff08;一&#xff09;VS2019 VS2019下载链接https://my.visualstudio.com/Downloads?qvisual%20studio%202019&wt.mc_ido~msft~vsco…

elasticsearch批量导入问题

Testvoid bulkIndex() throws IOException{List<Product> products new ArrayList<Product>();products.add(new Product("香烟",135,1)); // products.add(new Product("瓜子",154,2)); // products.add(new Product("矿…

github前端开源json2html

软件介绍 前端低代码工具包&#xff0c;通过 JSON 配置就能生成各种页面。 应用场景 json解析超大数据动态渲染&#xff0c;渲染速度、性能解决问题 包引用列表 vue3 (cdn模式开发)element plusnodehttp-serveraxios 操作步骤 1.环境准备下载node&#xff1a;https://no…

【实战】 九、深入React 状态管理与Redux机制(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十六)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

jenkinsfile小试牛刀

序 本文主要演示一下如何用jenkinsfile来编译java服务 安装jenkins 这里使用docker来安装jenkins docker run --name jenkins-docker \ --volume $HOME/jenkins_home:/var/jenkins_home \ -p 8080:8080 jenkins/jenkins:2.416之后访问http://${yourip}:8080&#xff0c;然后…

华为OD机试真题 Java 实现【报文回路】【2023 B卷 100分】,俗称“礼尚往来”

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、报文回路2、异常情况&#xff1a;3、解题思路 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&…

FPGA学习——FPGA利用状态机实现电子锁模拟

文章目录 一、本次实验简介二、源码及分析三、总结 一、本次实验简介 本次是实验是为了利用状态机模拟电子锁&#xff0c;相关要求如下&#xff1a; 顺序输入4位密码&#xff0c;密码为1234&#xff0c;用按键来键入密码用led灯指示键入第几位密码&#xff0c;&#xff08;博…

C++模拟实现反向迭代器

1.代码实现 1.有了解正向迭代器的应该知道&#xff0c;比如list的正向迭代器其实本质是一个类&#xff0c;而有些人想模拟实现反向迭代器&#xff0c;依旧想再创建一个类&#xff0c;但是库里面想要的是&#xff0c;你给我一个迭代器&#xff0c;我就能给你反馈一个反向迭代器…

word显示书签并给书签添加颜色

CTRg 定位书签 在 Word 的用户界面中&#xff0c;没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏&#xff0c;它可以设置当前文档中所有书签内文本的颜色&#xff1a;vba Sub ColorAllBookmark…

Gromacs-plumed元动力学

标准的meta动力学模拟需要设定如下标准参数 metad: ARG__FILL__ PACE__FILL__ HEIGHT__FILL__ BIASFACTOR__FILL__ SIGMA__FILL__ FILE__FILL__ GRID_MIN__FILL__ GRID_MAX__FILL__ GRID_BIN__FILL__ TEMP__FILL__ARG: 需要添加高斯偏置势的集合变量CV (e.g. distance, angle,…

MySQL基于复制线程实现MTS并行恢复binlog

文章目录 一、MySQL备份恢复流程二、并行恢复binlog原理三、操作步骤四、总结 一、MySQL备份恢复流程 MySQL数据恢复通常分为两个步骤&#xff1a; 恢复全备数据&#xff0c;MySQL有多种备份工具&#xff0c;分为物理备份和逻辑备份&#xff1b;具体可以参看下面这篇文章 MySQL…

零代码编程:PDF文件名和Excel数据进行比对找不同

F盘“北交所招股说明书”文件夹下有150个文件&#xff1b; F盘”北证A股20230703.xlsx”表格中证券名称有200多个&#xff1b; 现在想找出文件夹下的哪些证券名称不在表格里面。 在ChatGPT中输入提示词&#xff1a; 写一段Python程序&#xff1a; F盘“北交所招股说明书”文…

ElementUI Select选择器如何根据value值显示对应的label

修改前效果如图所示&#xff0c;数据值状态应显示为可用&#xff0c;但实际上仅显示了状态码1&#xff0c;并没有显示其对应的状态信息。在排查了数据类型对应关系问题后&#xff0c;并没有产生实质性影响&#xff0c;只好对代码进行了如下修改。 修改前代码&#xff1a; <…

Python自动化测试----生成测试报告

如何才能让用例自动运行完之后&#xff0c;生成一张直观可看易懂的测试报告呢&#xff1f; 对于自动化测试有兴趣的朋友可以观看这个视频&#xff1a; 【整整200集】超超超详细的Python接口自动化测试进阶教程&#xff0c;真实模拟企业项目实战&#xff01;&#xff01; 小编使…

【暑期每日一练】 day9

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一 …

python学习之【浅拷贝】

前言 上一篇文章&#xff0c;python学习之【继承、封装、多态】主要学习了面向对象的三大特征。这篇文章记录下对python的浅拷贝的学习&#xff0c;下一篇文章接着学习深拷贝。 简单了解 浅拷贝&#xff1a;python拷贝一般都是浅拷贝&#xff0c;拷贝时&#xff0c;对象包含的…

ARM基础(6):内存屏障指令之DMB、DSB和ISB详解

内存屏障是一个通用术语&#xff0c;用于指代一条或多条指令&#xff0c;它们强制处理器在执行加载(load)或存储(store)指令时进行同步事件。ARMv7-M 和 ARMv6-M架构都提供了三个内存屏障指令来支持内存顺序模型。这三个内存屏障指令分别是&#xff1a;DMB、DSB和ISB。 文章目录…

零信任安全解决方案

什么是零信任 零信任网络架构 &#xff08;ZTNA&#xff09; 或零信任安全是一种新的组织网络安全方法。它旨在修复传统基于边界的安全性中的缺陷并简化网络设计。 它以“永不信任&#xff0c;始终验证”的原则运作。这意味着&#xff0c;无论用户或设备位于何处&#xff0c;…