在四台虚拟机上都安装好docker

一、控制节点

1. 域名解析

[root@d ansible]# vim /etc/hosts

[root@d ansible]# scp /etc/hosts node1:/etc/hosts

[root@d ansible]# scp /etc/hosts node2:/etc/hosts

[root@d ansible]# scp /etc/hosts node2:/etc/hosts

做好ssh免密登陆node1,node2,node3

2. 将镜像解压后放在对应的目录

[root@d ~]# cd /opt/

[root@d opt]# tar xzf ansible-galera.tar.gz

[root@d ~]# yum install ansible -y

[root@d ansible-galera]# cd /etc/ansible/

[root@d ansible]# rm -rf *

[root@d ansible]# mv /opt/ansible-galera/* ./

[root@d bin]# cd /etc/ansible/bin/

[root@d bin]# cd /opt/

[root@d opt]# tar xzf galera.tar.gz

[root@d opt]# mv config.tar.gz mariadb-galera.tar /etc/ansible/bin/

[root@d opt]# cd /etc/ansible/bin/

3. 修改ansible的hosts配置文件

[root@d bin]# cd /etc/ansible/

[root@d ansible]# vim hosts

[all]

192.168.88.51

192.168.88.52

192.168.88.53

[master]

192.168.88.51

[slave1]

192.168.88.52

[slave2]

192.168.88.53

[all:vars]

#定义集群ip

master="192.168.88.51"

slave1="192.168.88.52"

slave2="192.168.88.53"

#部署目录,即 ansible 工作目录

base_dir="/etc/ansible"

#ansible默认软件安装目录

opt_dir="/opt"

[root@d ~]# ansible all -m ping

4. 开始部署

[root@d ~]# cd /etc/ansible/

[root@d ansible]# ansible-playbook install.yml

二、登陆node1,node2,node3查看状态

1. 各个节点上都运行了一个galera的容器

2. 在node1,2,3检查集群状态:

[root@node1 ~]# docker ps -a

[root@node1 ~]# docker exec -it galera1 /bin/bash

root@node1:/# mysql -uroot -p123

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';

3. 故障恢复

(1)集群中某slave节点down机,重启该节点后,重启docke容器即可;

将node3虚拟机shutdown

[root@d ~]# mysql -h node1 -uroot -p123 #远程登陆其他虚拟机上的数据库

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';

再将node3开机,查看集群状态

(2)集群中master节点down机,重启该master节点后,master-docker容器不能正常启动,因为这是master节点已经切换,需要将原先master-docker容器删除,再以非wrsep方式启动一个普通容器;

将master节点node1关机

[root@node1 ~]# shutdown -h now

[root@d ~]# mysql -h node2 -uroot -p123

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';

此时再将node1开机,然后查看集群状态,发现还是2台,没有加入集群中

[root@node1 ~]# docker ps -a

galera1容器启动失败

[root@node1 ~]# docker stop galera1

galera1

[root@node1 ~]# docker rm galera1

galera1

[root@node1 ~]# cd /opt/

[root@node1 opt]# ls

mariadb rh

[root@node1 opt]# cd mariadb/

[root@node1 mariadb]# ls

config mariadb-galera.tar slave1.sh

config.tar.gz master.sh slave2.sh

将上面的配置文件复制粘贴到txt中,然后修改提示信息,然后将修改后的内容再命令行下运行

[root@node1 mariadb]# docker run -d --net host --name galera1 \

> -e WSREP_NODE_ADDRESS=192.168.88.51 \

> -e WSREP_CLUSTER_ADDRESS=gcomm://192.168.88.51:4567,192.168.88.52:4567,192.168.88.53:4567 \

> -p 3306:3306 \

> -p 4567:4567/udp \

> -p 4567-4568:4567-4568 \

> -p 4444:4444 \

> -v /opt/mariadb/config/mysql:/etc/mysql \

> -v /opt/mariadb/config/data:/var/lib/mysql:Z \

> --restart=always \

> panubo/mariadb-galera mysqld

WARNING: Published ports are discarded when using host network mode

e03ee2f6ec1bb2c6e7592d75154cead7bf5dd621a452731e68a0a25d170bf64a

[root@node1 mariadb]# docker ps -a

容器启动成功

再查看集群状态

node1加入成功

(3)集群全部意外down机,强制找一台节点作为master节点;到如下路径,将 safe_to_bootstrap: 0修改为1(平时集群正常时,每个节点都为0)

将node1,node2,node3全部宕机

[root@d ~]# ansible all -m shell -a 'shutdown -h now'

然后,再将三台机子开机恢复

[root@d ~]# ansible all -m shell -a 'docker ps -a'

cat /opt/mariadb/master.sh

docker run -d --net host --name galera1 \

-e WSREP_NODE_ADDRESS=192.168.88.51 \

-e WSREP_CLUSTER_ADDRESS=gcomm://192.168.88.51:4567,192.168.88.52:4567,192.168.88.53:4567 \

-e MYSQL_ROOT_PASSWORD=123 \

-p 3306:3306 \

-p 4567:4567/udp \

-p 4567-4568:4567-4568 \

-p 4444:4444 \

-v /opt/mariadb/config/mysql:/etc/mysql \ # 配置文件所处的位置

-v /opt/mariadb/config/data:/var/lib/mysql:Z \ #数据库表数据,临时数据,数据库集群,运行状态集群

--restart=always \

panubo/mariadb-galera mysqld --wsrep-new-cluster

选择一台虚拟机作为master节点

[root@node1 ~]# cd /opt/mariadb/config/data/

[root@node1 data]# vim grastate.dat

[root@node1 data]# docker stop galera1

galera1

[root@node1 data]# docker rm galera1

galera1

[root@node1 mariadb]# vim master.sh

[root@node1 mariadb]# sh master.sh

登陆节点查看数据库集群状态

[root@d ~]# mysql -h node1 -uroot -p123

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';

添加成功

Ansible-galera的更多相关文章

  1. Docker 版ansible galera集群

    1. 部署galera集群 利用四台主机cicd.node1.node2.node3来搭建galera集群. 1> 上传压缩包至cicd,解压得到ansible配置文件 [root@cicd ~ ...

  2. ansible无网络安装openstack(Newton)

    概要 apt使用本地源,pip使用本地源 网络环境 物理机环境 网络名 网络地址 VLAN br-ex 192.168.200.250/24 90 br-mgmt 92.0.0.100/24 92 a ...

  3. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  4. 《Ansible权威指南》笔记(2)——Inventory配置

    四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...

  5. useful Ansible commands

    This article includes some useful Ansible commands. I will try to write blogs by English. You may wa ...

  6. 《Ansible权威指南》笔记(4)——Playbook

    七.Playbook1.语法特性如下:(1)"---"首行顶格开始(2)#号注释(3)缩进统一,不同的缩进代表不同的级别,缩进要对齐,空格和tab不能混用(4)区别大小写,键值对k ...

  7. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  8. 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令

    2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...

  9. 自动化运维工具ansible部署以及使用

    测试环境master 192.168.16.74webserver1 192.168.16.70webserver2 192.168.16.72安装ansiblerpm -Uvh http://ftp ...

  10. Ansible Ubuntu 安装部署

    一.安装: $ sudo apt-get install ansible 二.配置: a.基本配置 $ cd /etc/ansible/ $ sudo cp hosts hosts_back 备份一个 ...

随机推荐

  1. Vue项目中的文件导出

    项目中涉及到文件导出,分xml和excel导出.不同的文件导出格式不同,需要根据文件类型判断导出格式. exportAllData(val){ //全部导出 if(!val){ this.export ...

  2. 01windows7下安装rabbitmq

     1.直接双击rabbitmq-server-3.6.10.exe,会提示你缺少Erlang安装包,问你是否下载,点击是就可以了,因为我自己下载,我就直接先安装otp_win64_20.0.exe,直 ...

  3. 【2-sat】8.14B. 黑心老板

    2-sat 只写过板子 题目大意 有一个长度为$k$取值只有01的序列,现在$n$个人每人下注三个位置,请构造一个序列使每个人最多猜对一个位置 $k\le 5000,n \le 10000$ 题目分析 ...

  4. CodeForces 839B - Game of the Rows | Codeforces Round #428 (Div. 2)

    血崩- - /* CodeForces 839B - Game of the Rows [ 贪心,分类讨论] | Codeforces Round #428 (Div. 2) 注意 2 7 2 2 2 ...

  5. [转]vue解决刷新页面vuex数据、params参数消失的问题

    一般项目都会有一些逻辑需要传递值给另一个页面,那么有的时候就会出现一个问题:用户刷新了页面,诶?数据没了,参数错误.那么今天经过总结,解决了这个问题.我在最新的项目中,通过了一下几种情况进行传值: 1 ...

  6. Luogu P4141 消失之物 背包 分治

    题意:给出$n$个物品的体积和最大背包容量$m$,求去掉一个物品$i$后,装满体积为$w\in [1,m]$背包的方案数. 有 N 个物品, 体积分别是 W1, W2, …, WN. 由于她的疏忽, ...

  7. HGOI20191114 CSP模拟赛 反思

    Problem A 宇宙魔方 有一个$N \times N \times N$的魔方,每一次操作可以整体转动该魔方,也可以对于一层整体+X. 给出最后魔方的最终状态,其中有一个位置为-1.利用其它位置 ...

  8. Codeforces 1051 D.Bicolorings(DP)

    Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...

  9. Java基础线程系列大纲

    ## Java 多线程之 线程创建 ## Java 多线程之 Sleep ## Java 多线程之 Join ## Java 多线程之 生命周期 ## Java 多线程之 wait, notify a ...

  10. PHP 根据两个坐标计算距离 圆形围栏的计算

    可以应用于圆形电子围栏入 出围栏计算 圆形电子围栏的计算方式是: 根据圆心坐标和当前检查的坐标进行距离计算,如果距离长度超出围栏的半径,则判定为出围栏,反之是在围栏之内 <?php /** * ...