利用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连接跳板机上配置ansible主机分组:
在跳板机书写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集群请见下一个博客: