Ansible-galera
在四台虚拟机上都安装好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';
添加成功

![clip_image001[1] clip_image001[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717090744755-1973174635.png)
![clip_image002[1] clip_image002[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717090758448-1528151694.png)
![clip_image005[1] clip_image005[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717090838307-1911518492.png)
![clip_image006[1] clip_image006[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717090850993-261955810.png)
![clip_image008[1] clip_image008[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717090916034-636940705.png)
![clip_image013[1] clip_image013[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091021451-1932883744.png)
![clip_image014[1] clip_image014[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091034168-1572587209.png)
![clip_image015[1] clip_image015[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091046392-1742752185.png)
![clip_image016[1] clip_image016[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091059096-763086233.png)
![clip_image018[1] clip_image018[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091138439-1242886787.png)
![clip_image020[1] clip_image020[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091207951-1283779020.png)
![clip_image021[1] clip_image021[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091226404-268805504.png)
![clip_image022[1] clip_image022[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091240359-225338576.png)
![clip_image023[1] clip_image023[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091253712-1000681083.png)
![clip_image024[1] clip_image024[1]](https://img2018.cnblogs.com/blog/1629934/201907/1629934-20190717091306153-1447313853.png)
浙公网安备 33010602011771号