一、环境准备

1、各主机配置静态域名解析:

[root@node1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.254.20 reg.yunwei.edu
#192.168.42.30 reg.yunwei.edu
192.168.42.172 node3
192.168.42.122 node2
192.168.42.121 node1
192.168.42.30 dlp

2、并配置各节点ssh无密钥登陆

 

3、安装docker环境

[root@node1 ~]# ls
anaconda-ks.cfg docker docker.tar.gz image yum-repo.sh
[root@node1 ~]# cd docker
[root@node1 docker]# ls
ca.crt docker-app.tar.gz docker.sh remove.sh
[root@node1 docker]# bash docker.sh

4、下载配置文件并且导入镜像

wget http://download2.yunwei.edu/shell/ansible-galera.tar.gz
[root@dlp ~]# ls
anaconda-ks.cfg                       config.tar.gz  docker.tar.gz  kubernetes.tar.gz   test      username
ansible-galera.tar.gz                 data           galera.tar.gz  mariadb-galera.tar  total.sh  yum-repo.sh
bash-completion-2.1-6.el7.noarch.rpm  docker         kubernetes     password            try.html
[root@dlp ~]# tar xf ansible-galera.tar.gz
[root@dlp ~]# ls
anaconda-ks.cfg        bash-completion-2.1-6.el7.noarch.rpm  docker         kubernetes          password  try.html
ansible-galera         config.tar.gz                         docker.tar.gz  kubernetes.tar.gz   test      username
ansible-galera.tar.gz  data                                  galera.tar.gz  mariadb-galera.tar  total.sh  yum-repo.sh
[root@dlp ~]# cd ansible-galera
[root@dlp ansible-galera]# ls
bin  delete.yml  hosts  install.yml  roles
[root@dlp ansible-galera]# mv * /etc/ansible/
[root@dlp ansible-galera]# cd /etc/ansible/
[root@dlp ansible]# ls
bin  delete.yml  hosts  install.yml  roles wget http://download2.yunwei.edu/shell/galera.tar.gz
[root@dlp ~]# mv config.tar.gz mariadb-galera.tar /etc/ansible/bin/
[root@dlp ~]# cd /etc/ansible/
[root@dlp ansible]# ls
bin  delete.yml  hosts  install.yml  roles
[root@dlp ansible]# cat hosts
[all]
192.168.42.121
192.168.42.122
192.168.42.172 [master]
192.168.42.121 [slave1]
192.168.42.122 [slave2]
192.168.42.172 [all:vars]
#定义集群ip
master="192.168.42.121"
slave1="192.168.42.122"
slave2="192.168.42.172" #部署目录,即 ansible 工作目录
base_dir="/etc/ansible" #默认软件安装目录
opt_dir="/opt" 在部署节点:
docker run -itd -v /etc/ansible:/etc/ansible -v /etc/kubernetes/:/etc/kubernetes/ -v /root/.kube:/root/.kube -v /usr/local/bin/:/usr/local/bin/ 1acb4fd5df5b  /bin/sh
进入容器设置免密钥,测试是否能ping通:
ansible all -m ping
/ # cd /etc/ansible/
/etc/ansible # ls
bin          delete.yml   hosts        install.yml  roles
/etc/ansible # ansible-playbook install.yml

二、配置集群

#######node1
docker run -d --net host --name galera1 \
-e WSREP_NODE_ADDRESS=192.168.210.131 \
-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
 
#######node2
docker run -d --net host --name galera2 \
-e WSREP_NODE_ADDRESS=192.168.210.130 \
-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
 
#########node3
docker run -d --net host --name galera3 \
-e WSREP_NODE_ADDRESS=192.168.210.132 \
-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

三、查看集群是否同步

[root@node1 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08ccff9d97ad panubo/mariadb-galera "/galera-entrypoint.…" minutes ago Up minutes galera1
[root@node1 docker]# docker exec -it 08ccff9d97ad sh
# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 10.1.-MariaDB-~jessie mariadb.org binary distribution Copyright (c) , , 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_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | |
+--------------------+-------+
row in set (0.34 sec) MariaDB [(none)]> create database test1;
Query OK, row affected (0.30 sec) [root@node2 ~]# docker exec -it d8b804886305 sh
# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 10.1.-MariaDB-~jessie mariadb.org binary distribution Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| test1 |
+--------------------+
rows in set (0.73 sec)

四、登陆数据库时,安装mariadb客户端

yum install mariadb -y
mysql -h 192.168.210.131 -P 3306 -u root -p123
 
检查集群状态:
SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

五、故障恢复:

(1)集群中某slave节点down机,重启该节点后,重启docke容器即可;
(2)集群中master节点down机,重启该master节点后,master-docker容器不能正常启动,因为这是master节点已经切换,
         需要将原先master-docker容器删除,再以非wrsep方式启动一个普通容器;
(3)集群全部意外down机,强制找一台节点作为master节点;到如下路径,将 safe_to_bootstrap: 0修改为1(平时集群正常时,每个节点都为0)
[root@con3 data]# pwd
/opt/mariadb/data
[root@con3 data]# cat grastate.dat
# GALERA saved state
version: 2.1
uuid:    6a26abec-e7b5-11e8-b15b-b74046986de4
seqno:   -1
safe_to_bootstrap: 0
 
之后在该节点启动wsrep进程的docker

最新文章

  1. Ansible playbook API 开发 调用测试
  2. Spring AOP 详解
  3. MySQL数据库MyISAM和InnoDB存储引擎的比较
  4. android学习笔记16——对话框
  5. typedef 及其与struct的结合使用
  6. HDU 4749-Parade Show(KMP变形)
  7. WinForm 控件库
  8. SharpDevelop 编译时,任务失败,因为未找到“resgen.exe”的解决方法
  9. sdk 命令行
  10. 并发与多版本:update重启动问题
  11. 【原创教程】一、Angular教程系列之认识angular
  12. springMVC入门配置及helloworld实例
  13. C++ 动态链接库 DLL 的一些笔记
  14. js中创建对象的4种方法
  15. Flipping an Image
  16. Python 在 Terminal 中的自动补全
  17. BZOJ.3591.最长上升子序列(状压DP)
  18. 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)
  19. Can’t connect to local MySQL server through socket的解决方法
  20. Android 模拟输入那点事

热门文章

  1. 解决MYSQL的You can't specify target table 'xxxxxxxxxx' for update in FROM clause
  2. MySQL批量SQL插入各种性能优化
  3. 菜鸟nginx源代码剖析数据结构篇(十) 自旋锁ngx_spinlock
  4. Catalan数(卡特兰数)
  5. 阿里云centos系统上安装ftp
  6. js返回16位随机数
  7. bzoj3687简单题(dp+bitset优化)
  8. selenium3 + python - gird分布式(转载)
  9. Django day03 orm介绍
  10. Python 38 初识数据库