利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境

时间:2019-10-30
本文章向大家介绍利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境,主要包括利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

PXC简介:       

       Galera是Codership提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,

并且可保障数据库的服务高可用及数据一致性。基于Galera的高可用方案主要有MariaDB Galera Cluster

和Percona XtraDB Cluster(简称PXC),目前PXC用的会比较多一些。mariadb的集群原理跟PXC一样,

maridb-cluster其实就是PXC,两者原理是一样的。

PXC特点:

--数据强一致性,无同步延迟

--没有主从切换操作,无需使用虚拟IP

--支持InnoDB存储引擎

--多线程复制

--部署使用简单

--支持节点自动加入,无需手动拷贝数据

PXC相关服务端口:

3306  数据库服务端口

4444  SST端口

4567  集群通信端口

4568  IST端口

SST   State Snapshot Transfer 全量同步

IST     Incremental State Transfer 增量同步

HAProxy介绍:

反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,

当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入

引入了frontend,backend;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。

Keepalived介绍:

Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。

一个服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),

一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,

当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性

keepalived双主模式:

双主模型是两台服务器互为主备,即一台为主备,另一台为备主,让两台服务器并行运行,也可以实现减轻单台keepalived主机上的压力。

双主模型需要注意此时需要有2个VIP地址。

PXC环境准备:

proxy 192.168.1.241(外网IP:139.9.219.*) 跳板机(堡垒主机)、安装ansible、数据库客户端
pxc-0001 192.168.1.181 PXC数据库服务器角色
pxc-0002 192.168.1.182 PXC数据库服务器角色
pxc-0003 192.168.1.183 PXC数据库服务器角色

华为云云主机具体购买流程请浏览:https://www.cnblogs.com/jrjs/p/11742221.html

一、使用Xshell连接跳板机书写playbook,playbook具体内容如下:

 1 ---
 2 #安装PXC相关软件包,替换wsrep.cnf配置文件
 3 - hosts: pxc
 4   tasks:
 5     - name: install PXC
 6       yum:
 7         name: libev-4.15-1.el6.rf.x86_64,percona-xtrabackup-24-2.4.13-1.el7.x86_64,qpress-1.1-14.11.x86_64,Percona-XtraDB-Cluster-57-5.7.25-31.35.1.el7.x86_64,Percona-XtraDB-Cluster-garbd-57-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-57-debuginfo-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-server-57-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-client-57-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-shared-57-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-devel-57-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-shared-compat-57-5.7.25-31.35.1.el7,Percona-XtraDB-Cluster-full-57-5.7.25-31.35.1.el7.x86_64,Percona-XtraDB-Cluster-test-57-5.7.25-31.35.1.el7.x86_64        
 8         state: installed
 9     - name: copy wsrep
10       copy:
11         src: /root/wsrep.cnf
12         dest: /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
13 #修改PXC各个节点的相关配置文件
14 - hosts: pxc-0001
15   tasks:
16     - name: modify  mysqld.cnf 
17       lineinfile:
18         path: "/etc/percona-xtradb-cluster.conf.d/mysqld.cnf"
19         regexp: "^server"
20         line: "server_id=181"
21     - name: modify  wsrep.cnf
22       lineinfile:
23         path: "/etc/percona-xtradb-cluster.conf.d/wsrep.cnf"
24         regexp: "^wsrep_node_name="
25         line: "wsrep_node_name=pxc-0001"
26     - name: modify  wsrep.cnf
27       lineinfile:
28         path: "/etc/percona-xtradb-cluster.conf.d/wsrep.cnf"
29         regexp: "^wsrep_node_address="
30         line: "wsrep_node_address=192.168.1.181"
31 - hosts: pxc-0002
32   tasks:
33     - name: modify mysqld.cnf 
34       lineinfile:
35         path: "/etc/percona-xtradb-cluster.conf.d/mysqld.cnf"
36         regexp: "^server"
37         line: "server_id=182"
38     - name: modify  wsrep.cnf
39       lineinfile:
40         path: "/etc/percona-xtradb-cluster.conf.d/wsrep.cnf"
41         regexp: "^wsrep_node_name="
42         line: "wsrep_node_name=pxc-0002"
43     - name: modify  wsrep.cnf
44       lineinfile:
45         path: "/etc/percona-xtradb-cluster.conf.d/wsrep.cnf"
46         regexp: "^wsrep_node_address="
47         line: "wsrep_node_address=192.168.1.182"
48 - hosts: pxc-0003
49   tasks:
50     - name: modify mysqld.cnf 
51       lineinfile:
52         path: "/etc/percona-xtradb-cluster.conf.d/mysqld.cnf"
53         regexp: "^server"
54         line: "server_id=183"
55     - name: modify  wsrep.cnf
56       lineinfile:
57         path: "/etc/percona-xtradb-cluster.conf.d/wsrep.cnf"
58         regexp: "^wsrep_node_name="
59         line: "wsrep_node_name=pxc-0003"
60     - name: modify  wsrep.cnf
61       lineinfile:
62         path: "/etc/percona-xtradb-cluster.conf.d/wsrep.cnf"
63         regexp: "^wsrep_node_address="
64         line: "wsrep_node_address=192.168.1.183"
65 - hosts: pxc-0001
66   tasks: 
67     - name: start pxc
68       service: 
69         name: mysql@bootstrap.service
70         enabled: yes
71         state: started

二、在pxc-0001上查看pxc集群是否搭建成功

通过查看端口发现PXC集群端口4567及3306已经开启。

三、在pxc-0001上通过初始密码登录、本地登录密码及授权数据同步授权用户sstuser,该设置在PXC的wsrep.cnf文件中设置。

配置文件如下:

1、初始密码登录

2、修改本地登录密码

3、通过修改后的本地密码登录后进行授权数据同步授权用户sstuser

4、在pxc-0002、pxc-0003上分别启动mysql服务

5、授权供客户端连接数据库的用户

6、跳板机上通过授权用户admin连接PXC集群

7、通过客户端连接pxc-0001建库建表,测试PXC集群

8、通过客户端连接pxc-0002,查看数据是否同步

9、测试PXC集群高可用性,及宕机后数据同步

①、在pxc-0003停服务

②、通过客户端连接pxc-0001存取数据

③、开启pxc-0003服务,查看数据是否同步

可以看出在pxc-0003宕机期间的数据已经同步。

haproxy+keepalived调度pxc集群请见下一个博客:

原文地址:https://www.cnblogs.com/jrjs/p/11764073.html