PXC + LVS + Keepalived实践总结文档

本文详述了一种使用PXC(Percona XtraDB Cluster)作为数据库集群,结合LVS负载均衡器和Keepalived实现高可用性的实践过程。从系统规划、依赖包安装、PXC节点配置、LVS和Keepalived的安装配置,到RealServer网络配置,每个步骤都有详细的指导。通过这种方法,可以确保在单个节点故障时,服务能够自动切换,保持连续性和稳定性。

PXC + LVS + Keepalived实践总结文档

 

目录

 

第1章    总体规划.. 2

1.1   系统规划.. 2

第2章    安装依赖包及准备工作.. 3

2.1   先卸载CentOS7及以上版本自带的mariadb. 3

2.2   检查相关依赖包.. 3

2.3   安装缺少的依赖包.. 3

2.4   配置防火墙和关闭selinux. 4

第3章    安装配置PXC. 5

3.1   安装XtraBackup. 5

3.2   创建mysql用户与安装目录.. 5

3.3   安装配置PXC. 5

3.4   启动PXC. 11

3.5   数据同步测试.. 18

3.6   配置PXC节点监控(所有PXC节点执行).. 19

第4章    安装配置LVS负载均衡软件.. 22

4.1   安装LVS. 23

4.2   配置LVS(强烈建议在keepalived配置文件中进行配置以自动切换管理).. 24

4.3   LVS扩展知识.. 28

第5章    安装配置keepalived. 28

5.1   安装keepalived. 28

5.2   配置keepalived(包含LVS配置).. 29

5.3   启动keepalived. 30

5.4   测试利用keepalived实现高可用-自动切换LVS. 31

第6章    RealServer网络配置(PXC MySQL 节点).. 32

6.1   编写RealServer网络配置脚本.. 32

6.2   启动/etc/init.d/realserver测试.. 33

第7章    启动PXC + RealServer + LVS + Keepalived 测试负载均衡分发情况.. 35

7.1   先启动所有PXC节点.. 35

7.2   启动所有PXC节点的/etc/init.d/realserver服务脚本.. 35

7.3   启动所有LVS节点的Keepalived服务.. 35

7.4   LVS分发连接测试.. 36

 

  1. 总体规划
    1. 系统规划
  1. 单纯的PXC(Percona XtraDB Cluster)环境官方强烈建议至少三个服务器节点及以上的单数节点数(以便于节点间的心跳投票),本例为实验环境,为节省资源,只采用两个PXC节点

2. 服务器部署规划如下表:

节点类型

主机名

IP地址

VIP地址

(Keepalived)

操作系统

及版本

CPU配置

LVS(keepalived)
节点1

centos-mysql-mycat-1

192.168.56.6

192.168.56.99
(enp0s3:vip)

CentOS 7.2 x86_64

Intel i5 2.5GHz 2 Cores 4 Threads

LVS(keepalived)
节点2

centos-mysql-mycat-2

192.168.56.7

CentOS 7.2 x86_64

Intel i5 2.5GHz 2 Cores 4 Threads

PXC节点1

centos-mysql-pxc-1

192.168.56.8

192.168.56.99
(lo:vip)

CentOS 7.2 x86_64

Intel i5 2.5GHz 2 Cores 4 Threads

PXC节点2

centos-mysql-pxc-2

192.168.56.9

CentOS 7.2 x86_64

Intel i5 2.5GHz 2 Cores 4 Threads

软件包及版本

Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101.tar.gz

ssl101:表示对应CentOS6/7系统,其它对应关系见官方文档。

percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm

mysql或pxc执备份工具,使用pxc的sst特性必须组件

ipvsadm-1.27-7.el7.x86_64(yum安装)

HA高可用负载均衡管理软件

keepalived-1.3.5-8.el7_6.x86_64(yum安装)

高可用VIP漂移切换软件

 

 

 

  1. 安装依赖包及准备工作

(以下操作在所有节点进行,所有包最好所有节点都安装,多总比少好)

    1. 先卸载CentOS7及以上版本自带的mariadb

[root@centos-mysql-pxc-1 tmp]# rpm -qa | grep -i mariadb   ##查询是否已经安装了mariadb相关软件包

[root@centos-mysql-pxc-1 tmp]# yum remove -y mariadb*   ##卸载mariadb相关软件包

[root@centos-mysql-pxc-1 tmp]# find / -name "*my.cnf*" 2>/dev/null | xargs rm -rf ##删除mariadb创建的mysql配置文件

 

    1. 检查相关依赖包

[root@centos-mysql-pxc-1 tmp]# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' \

libaio \  ## pxc mysql 依赖包

numactl-libs \  ## pxc mysql 5.7.19及以上版本numa特性依赖包

perl-DBI \  ## xtrabackup的依赖包

perl-DBD-MySQL \  ## xtrabackup的依赖包

perl-IO-Socket-SSL \  ## xtrabackup的依赖包

perl-Digest-MD5 \  ## xtrabackup的依赖包

libev \ ## xtrabackup的依赖包

libev-devel \ ## xtrabackup的依赖包

nc \  ## CentOS7中软件包名为nmap-ncat

socat \

mysql-libs \   ## xtrabackup的依赖包,CentOS7后,用 mariadb 替代了 mysql ,对应的 mysql-libs 变成了 mariadb-libs

                       ##可先不用安装也能成功安装xtrabackup2.4.11,后续安装了pxc后,会有libmysqlclient.so文件的

pcre \

pcre-devel \

openssl \

openssl-devel \

zlib \

zlib-devel \

percona-release \

perl-Time-HiRes \

percona-xtrabackup | sort

    1. 安装缺少的依赖包
      1. 先安装比较齐全的yum软件包资源库 epel-release

[root@centos-mysql-pxc-1 tmp]# yum install epel-release

 

      1. 安装缺少的依赖包

[root@centos-mysql-pxc-1 tmp]# yum install -y \

libaio \

numactl-libs \

perl-DBI \

perl-DBD-MySQL \

perl-IO-Socket-SSL \

perl-Digest-MD5 \

libev \

libev-devel \

nc \

socat \

mysql-libs \

pcre \

pcre-devel \

openssl \

openssl-devel \

zlib \

zlib-devel \

perl-Time-HiRes

 

【注】:CentOS系统的,建议先安装以上依赖包,如无需要,可不安装percona-release-0.1-6.noarch.rpm软件包,否则可能会导致安装以上依赖包失败,报如下图错误:

 

    1. 配置防火墙和关闭selinux
      1. 关闭或添加相应防火墙端口

[root@centos-mysql-pxc-1 tmp]# systemctl stop firewalld     ##关闭防火墙

[root@centos-mysql-pxc-1 tmp]# systemctl disable firewalld  ##禁用开机启动防火墙

[root@centos-mysql-pxc-1 tmp]# systemctl status firewalld        ##查看防火墙状态

 

      1. 关闭selinux

[root@centos-mysql-pxc-1 tmp]# setenforce 0    ##即时关闭

[root@centos-mysql-pxc-1 tmp]# vi /etc/selinux/config  ##SELINUX=enforcing 改成 SELINUX=disabled,禁止开机启用

 

[root@centos-mysql-pxc-1 tmp]# getenforce   ##查看selinux状态

 

  1. 安装配置PXC

(以下操作在所有PXC节点进行)

    1. 安装XtraBackup

[root@centos-mysql-pxc-1 tmp]# rpm -ivh percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm

 

    1. 创建mysql用户与安装目录
      1. 创建mysql用户及用户组

[root@centos-mysql-pxc-1 tmp]# groupadd -r mysql

[root@centos-mysql-pxc-1 tmp]# useradd -r -g mysql -s /bin/false mysql

[root@centos-mysql-pxc-1 tmp]# passwd mysql

 

      1. 创建安装目录

[root@centos-mysql-pxc-1 tmp]# mkdir /app

[root@centos-mysql-pxc-1 tmp]# mkdir -p /data/mysql/{data,logs/binlog,tmp}

 [root@centos-mysql-pxc-1 tmp]# chown -R mysql:mysql /data/mysql  ##必须更改mysql目录属主为mysql:mysql

 

 

    1. 安装配置PXC
      1. 解压PXC

[root@centos-mysql-pxc-1 tmp]#

 tar --no-same-owner -zxvf Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101.tar.gz -C /app/

 

[root@centos-mysql-pxc-1 tmp]# cd /app

[root@centos-mysql-pxc-1 app]# mv Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101 mysql ##程序主目录改名为mysql

[root@centos-mysql-pxc-1 app]# chown -R mysql:mysql mysql  ##必须更改mysql程序主目录属主为mysql:mysql

[root@centos-mysql-pxc-1 app]# du -sh mysql

1006M   mysql  ##解压后的pxc主目录大约1G左右

 

      1. 链接PXC初始化数据库时需要的库文件

(如果系统是最小化安装,事先做这两个软链接,避免初始化报库文件缺失的错误)

      1. 创建编辑/etc/my.cnf文件

[root@centos-mysql-pxc-1 tmp]# vi /etc/my.cnf

[client]

port = 3306

socket = /data/mysql/tmp/mysql.sock

 

[mysql]

port = 3306

socket = /data/mysql/tmp/mysql.sock

default_character_set = utf8mb4

prompt = '\\u@\\d*\\h \\R:\\m:\\s> '

no-auto-rehash

user = root

password = caserver

 

[mysqldump]

quick

max_allowed_packet = 16M

 

[mysqld]

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#transaction_isolation = READ-COMMITTED

default_storage_engine = InnoDB

default_authentication_plugin = mysql_native_password

basedir = /app/mysql

datadir = /data/mysql/data

pid_file = /data/mysql/logs/mysqld.pid

log_error = /data/mysql/logs/mysqld.err

log_timestamps = SYSTEM

slow_query_log = 1

slow_query_log_file = /data/mysql/logs/slow_query.log

long_query_time = 10  ##设置慢查询时长阀值,默认10

port = 3306

socket = /data/mysql/tmp/mysql.sock

tmpdir = /data/mysql/tmp

explicit_defaults_for_timestamp = 1

lower_case_table_names = 1

skip_name_resolve = 1

character_set_server = utf8mb4

server_id = 1  ##必须唯一,其它节点,请改为不冲突的ID

log_bin = /data/mysql/logs/binlog/mysql-bin

log_bin_index = /data/mysql/logs/binlog/mysql-bin.index

binlog_rows_query_log_events = 1

binlog_row_image = MINIMAL

gtid_mode = on  ##开启GTID

enforce_gtid_consistency = 1  ##开启GTID

innodb_buffer_pool_size = 256M

innodb_log_buffer_size = 64M

innodb_max_dirty_pages_pct = 50

sync_binlog = 1

innodb_flush_log_at_trx_commit = 1

innodb_file_per_table = 1

max_allowed_packet = 16M

max_connections = 1000

max_user_connections = 200

max_connect_errors = 100

#query_cache_type = 2

user = mysql

 

### Configure for PXC ###

innodb_autoinc_lock_mode = 2

binlog_format = ROW

pxc_strict_mode = ENFORCING

wsrep_cluster_name = pxc-cluster

wsrep_cluster_address = gcomm://192.168.56.8,192.168.56.9

wsrep_node_address = 192.168.56.8

 

wsrep_provider = /app/mysql/lib/libgalera_smm.so

#wsrep_provider_options="gcache.size = 1G;debug = yes"

wsrep_provider_options="gcache.size = 64M"

wsrep_slave_threads = 2

#wsrep_sst_method = rsync  ##很大,上T用这个

wsrep_sst_method = xtrabackup-v2  ##100-200G

wsrep_sst_auth = sst:xxxxxx

 

 

      1. 初始化数据库文件

[root@centos-mysql-pxc-1 tmp]# cd /app/mysql

 

[root@centos-mysql-pxc-1 mysql]#

bin/mysqld --defaults-file=/etc/my.cnf --basedir=/app/mysql --datadir=/data/mysql/data --user=mysql –initialize

  • 提前告诉你,如果系统是最小化安装的,事先做这两个软连接避免初始化报so库文件缺失错误,操作如下(操作前请先记录原链接位置并备份,避免对其它应用产生影响):

#> ls -l /usr/lib64/libssl.so.10     /usr/lib64/libssl.so.6

#> ls -l /usr/lib64/libcrypto.so.10  /usr/lib64/libcrypto.so.6

 

#> ln -sv /usr/lib64/libssl.so.10    /usr/lib64/libssl.so.6

#> ln -sv /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.6

 

#> ls -l /usr/lib64/libcrypto.so.10  /lib64/libcrypto.so.6

#> ls -l /usr/lib64/libssl.so.10     /lib64/libssl.so.6

 

#> ln -sv /usr/lib64/libcrypto.so.10 /lib64/libcrypto.so.6

#> ln -sv /usr/lib64/libssl.so.10    /lib64/libssl.so.6

 

  • 本例没有做以上so库文件链接,初始化数据库文件也是成功的,本例的这些so库文件默认链接版本如下:

 

      1. 查看并记录生成的数据库root用户的临时密码

执行如上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值