【Linux】【Database】【MySQL】使用percona搭建高可用的MySQL数据库
1. 简介
1.1. 官方文档:
数据库架构:https://docs.openstack.org/ha-guide/shared-database.html
1.2. 本次使用的的是Percona XtraDB Cluster,5.7版本
https://www.percona.com/doc/percona-xtradb-cluster/5.7/index.html
1.3. 安装文件下载:
https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/
或者使用yum安装,本文中使用yum安装
https://www.percona.com/doc/percona-repo-config/yum-repo.html
这还有Docker的安装说明,等以后Docker文档中再详细说明
https://www.percona.com/doc/percona-xtradb-cluster/5.7/install/docker.html
2. 安装
| 功能与组件 | 机器名 | 服务IP | 管理IP | Processor Cores | RAM | Storage | 备注 |
| Mysql PXC | HCTJOSMYSQL01 | 10.30.2.25 | 172.16.0.25 | ||||
| Mysql PXC | HCTJOSMYSQL02 | 10.30.2.26 | 172.16.0.26 | ||||
| Mysql PXC | HCTJOSMYSQL03 | 10.30.2.27 | 172.16.0.27 | ||||
| HAPROXY | HCTJOSDR01 | 10.30.2.48 | 172.16.0.48 | ||||
| HAPROXY | HCTJOSDR02 | 10.30.2.49 | 172.16.0.49 | ||||
| Ansible | HCTJOSADM01 | 10.30.2.99 | 172.16.0.99 | ||||
| DNS/NTP | HCTJOSINFRA01 | 10.30.2.81 | 172.16.0.81 | ||||
| DNS/NTP | HCTJOSINFRA02 | 10.30.2.82 | 172.16.0.82 |
2.1. 在HCTJOSMYSQL01/02/03上安装MySQL
安装yum源
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
在RHEL7.4上虽然已经配置了EPEL源,但是仍然会出现找不到libev.so.4()的错误,请使用下面地址直接安装
https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libev-4.15-3.el7.x86_64.rpm
安装软件吧
yum install Percona-XtraDB-Cluster-57
先别着急启动,配置一个独立的分区用来存储数据库文件
vgcreate vg_mysql /dev/sdb
lvcreate -n lv_mysql -l +100%FREE vg_mysql
mkfs.xfs /dev/mapper/vg_mysql-lv_mysql
写进/etc/fstab
#Disk for mysql data
/dev/mapper/vg_mysql-lv_mysql /data_mysql xfs defaults 0 0
重新挂载,在分区内建立两个文件夹,mysql和backup
mkdir -pv /data_mysql
mount -a
mkdir -pv /data_mysql/{mysql,backup}
修改/etc/percona-xtradb-cluster.conf.d/mysqld.cnf
datadir=/data_mysql/mysql
起来试试吧
systemctl start mysql
看看密码是个啥
grep 'temporary password' /var/log/mysqld.log
连接数据库并输出刚才看见的密码
mysql -u root -p
为了将来管理方便,添加了远程的访问权限
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
Query OK, 0 rows affected (0.01 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "mysql";
Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
SST用户也要添加,否则其他结点无法正常连入主节点
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'mysql';
Query OK, 0 rows affected (0.00 sec) mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
服务停掉,准备配置集群吧
systemctl stop mysql
集群的配置文档在这:https://www.percona.com/doc/percona-xtradb-cluster/5.7/configure.html#configure
首先修改/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so # Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
#这里可以写域名或者IP地址
wsrep_cluster_address=gcomm://hctjosmysql01.hccos.cn,hctjosmysql02.hccos.cn,hctjosmysql03.hccos.cn # In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW # MyISAM storage engine has only experimental support
default_storage_engine=InnoDB # Slave thread to use
wsrep_slave_threads= 8 wsrep_log_conflicts # This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2 # Node IP address
# 这个可以写可以不写
wsrep_node_address=hctjoscontroller01.homecredit.cn
# Cluster name
wsrep_cluster_name=pxc-cluster-hcc #If wsrep_node_name is not specified, then system hostname will be used
wsrep_node_name=hctjosmysql01.hccos.cn #pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING # SST method
wsrep_sst_method=xtrabackup-v2
#这项一定要写
#Authentication for SST method
wsrep_sst_auth="sstuser:mysql"
启动主节点
systemctl start mysql@bootstrap.service
在其他节点上修改/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_cluster_address=gcomm://hctjosmysql01.hccos.cn,hctjosmysql02.hccos.cn,hctjosmysql03.hccos.cn
wsrep_node_name=hctjosmysql02.hccos.cn
wsrep_node_address=hctjosmysql02.hccos.cn
wsrep_cluster_address=gcomm://hctjosmysql01.hccos.cn,hctjosmysql02.hccos.cn,hctjosmysql03.hccos.cn
wsrep_node_name=hctjosmysql03.hccos.cn
wsrep_node_address=hctjosmysql03.hccos.cn
在其他结点上修改/etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
server-id=2
[mysqld]
server-id=3
在其他上启动mysql
systemctl start mysql
随便找一个节点验证
mysql> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.00 sec)
注意:如果cluster已经启动,主节点down机想重新加入这个集群,直接启动mysql即可
systemctl start mysql
如果这个集群中最后的节点也down机了,在任何一个节点都可以启动集群,重新启动集群需要执行
systemctl start mysql@bootstrap.service
3. 利用Haproxy实现高可用,在HCTJOSDR01/02上
安装文档在这,http://www.cnblogs.com/demonzk/p/8404085.html 已经装好了,只需要在/etc/haproxy/haproxy.cfg下面添加就好
#---------------------------------------------------------------------
# mysql
#---------------------------------------------------------------------
listen percona_cluster
bind *:3306
balance roundrobin
option mysql-check
mode tcp
server hctjosmysql01 172.16.0.25:3306 weight 1 maxconn 100000 check inter 10s
server hctjosmysql02 172.16.0.26:3306 weight 1 maxconn 100000 check inter 10s
server hctjosmysql03 172.16.0.27:3306 weight 1 maxconn 100000 check inter 10s
4. 在HCTJOSINFRA01上添加A记录,/var/named/hccos.cn.zone
;vip
mysql IN A 172.16.0.148
mysql IN A 172.16.0.149
【Linux】【Database】【MySQL】使用percona搭建高可用的MySQL数据库的更多相关文章
- 【线上测试之后的应用】基于MySQL+MHA+Haproxy构建高可用负载均衡数据库集群(详解)
这里我们先介绍一下MHA是什么,其次就是它的应用与测试,同时为了大家呈现了数据备份案例,最后总结了使用情况以及注意事项和解决办法 一.MHA 概述 MHA(Master High Availabili ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么 ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群—— 分片
从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出 ...
随机推荐
- C++ 指针的引用和指向引用的指针
指向引用的指针 简单使用指针的一个例子就是: int a = 1; int *p = &a; 预先强调: 没有指向引用的指针 原因: 因为引用 不是对象,没有地址. 但是指向引用的指针是什么形 ...
- 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解
文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...
- [loj3333]混合物
假设选择的调味瓶为$k_{1}<k_{2}<...<k_{s}$,即判定是否存在正有理数解$\{x_{1},x_{2},...,x_{s}\}$,满足$$(\sum_{i=1}^{s ...
- LifseaOS 悄然来袭,一款为云原生而生的 OS
作者:黄韶宇.初扬 审核&校对:溪洋.海珠 编辑&排版:雯燕 LifseaOS 在刚刚过去的云栖大会上,一款新的 Linux Base 操作系统悄悄发布,它就是 LifseaOS(Li ...
- springboot启动流程1
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.res ...
- emoji表情等特殊字符处理和存储的两个方案
方案1.改数据库配置 使之支持emoji表情等特殊字符,小公司或者个人开发还好,大公司用此方案代价较大. 以mysql为例,改配置方法参考:https://blog.csdn.net/u0107373 ...
- appdata 文件夹
appdata file AppData 的位置在 c:\Users\{UserName}\Appdata ,它是从 Windows Vista 开始引入的,直至今天的 Windows 7, 8, 1 ...
- [spring-core]作用域
本文试图从原理上讲解Spring IoC容器的作用域机制,建议对着源码阅读,事半功倍. 0 引入问题 当我们谈到Spring作用域的时候,自然而然会想到如下作用域(来自spring-core官方文档) ...
- C#.NET 操作Windows服务承载WCF
Windows服务的制作.安装可以参考这篇: C#.NET 操作Windows服务(安装.卸载) - runliuv - 博客园 (cnblogs.com) 本篇会在这个解决方案基础上,继续修改. 一 ...
- AT2558 [ARC073D] Many Moves
开始被标签带骗了. 考虑一个\(dp\),\(f[i][j]\)代表有一个棋子在\(x_i\),另外一个\(j\)的最小答案. 那么考虑转移. 如果\(j != x_{i - 1}\) 那么答案自然贡 ...