【Linux】【Database】【MySQL】使用percona搭建高可用的MySQL数据库
阅读原文时间:2023年07月11日阅读:1

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章