Percona Server

安装

地址

# 官网
https://www.percona.com


# 版本选择
https://www.percona.com/downloads/percona-release/

image-20210307181301703.png

安装

# 安装包源 - 可以通过上述地址选择最新版本的包源

yum install -y https://downloads.percona.com/downloads/percona-release/percona-release-1.0-9/redhat/percona-release-1.0-9.noarch.rpm

# 安装perrcona软件 版本5.7

yum install -y Percona-Server-server-57

启动

启动服务

# 启动服务

service mysql start

重置密码

# 查看密码 - 启动服务后才能看到

cat /var/log/mysqld.log | grep "password"
2021-03-07T10:59:08.481401Z 1 [Note] A temporary password is generated for root@localhost: Qk2ptXsv!wXG

# 重置密码 linux终端输入命令即可
mysql_secure_installation

# 首先输入root的密码
# 重置密码包括大些小写数字字符
# 设置的密码为: Kenan123!@#qwe
# 剩下的全都选Y即可

允许远程连接

# 进入mysql终端
# 设置root用于允许所有外网连接
grant all privileges on *.* to root@'%' identified by 'Kenan123!@#qwe';

# 刷新权限
flush privileges;

# 在外网链接成功即可

Percona XtraDB Cluster

PXC里包含PerconaServer, 安装PXC之前需要卸载掉PerconaServer

安装

地址

# 官网
https://www.percona.com


# 版本选择
https://www.percona.com/downloads/

# 选择安装环境版本
https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/

image-20210307200746890.png

安装

# 本地下载,将下载好的包拷贝到服务器
scp -r /Users/qvbilam/Downloads/Percona-XtraDB-Cluster-5.7.32-31.47-r588-el7-x86_64-bundle.tar  root@192.168.128.125:/data/pack

# 解压
cd /data/pack
tar -xvf Percona-XtraDB-Cluster-5.7.32-31.47-r588-el7-x86_64-bundle.tar

# 安装本地解压好的包
yum remove -y Percona-Server-server-57
yum -y localinstall *.rpm 

端口

端口说明
3306mysql端口
4444请求全量同步
4567节点通信
4568请求增量同步
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 4444 -j ACCEPT
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 4567 -j ACCEPT
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 4568 -j ACCEPT
service iptables save

配置

配置文件为:/etc/my.cnf其中包含了两个目录下的配置.如下

  • !includedir /etc/my.cnf.d/
  • !includedir /etc/percona-xtradb-cluster.conf.d/

为了方便管理配置,将列表下的配置全集成在/etc/my.cnf中.

[client]
socket=/var/lib/mysql/mysql.sock

[mysqld]
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin
log_slave_updates
expire_logs_days=7
# 最大连接数
max-connections=1000
# 堆栈,连接数满了会进入排队
back_log=100
# 并发线程数
innodb_thread_concurrency=2
# 连接超时时间,单位秒
wait-timeout=600
# innodb索引缓存大小
innodb_buffer_pool_size=150M
# Disabling symbolic-links is recommended to prevent assorted security risks
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# pxc节点ip,多个节点用,分开
wsrep_cluster_address=gcomm://192.168.128.125,192.168.128.126,192.168.127,192.168.128.128
# binlog日志格式
binlog_format=ROW
# 默认引擎
default_storage_engine=InnoDB
# 从节点线程
wsrep_slave_threads= 8
wsrep_log_conflicts
# innodb自增不锁表
innodb_autoinc_lock_mode=2
# 集群名称
wsrep_cluster_name=my-pxc
# 节点名称与ip
wsrep_node_name=my-pxc-1
wsrep_node_address=192.168.128.125
# 严格同步
pxc_strict_mode=ENFORCING
# 同步方式
wsrep_sst_method=xtrabackup-v2
# 数据库验证 账号:密码
wsrep_sst_auth="root:Kenan123!@#qwe"
# 修改防火墙
vi /etc/selinux/config

# 重启
reboot

启动

# 先将所有节点关闭mysql服务
service mysql stop

# 主节点启动pxc服务
systemctl start mysql@bootstrap.service

# 从节点加入集群
service mysql start

说明

使用 show status like '%wsrep%' 查看状态

状态信息

variable_namevalue说明
wsrep_local_state_commentSynced节点状态
Joining: 正在加入集群
Joined: 以加入集群
Synced: 正常
Donar: 被其他节点进行同步,不提供服务
wsrep_cluster_statusPrimary集群状态
Primary: 正常
Non-Primary: 部分宕机
Disconnected: 不提供服务
wsrep_connectedON是否连接集群
wsrep_readyON集群状态
wsrep_cluster_size4节点数量
wsrep_desync_count0延时节点数量
wsrep_incoming_addresses192.168.128.126:3306,
192.168.128.127:3306,
192.168.128.128:3306,
192.168.128.125:3306
集群节点IP地址

复制信息

variable_namevalue说明
wsrep_last_applied2718同步次数
wsrep_last_committed2718事务提交次数
wsrep_replicated1711其他节点复制数
wsrep_replicated_bytes615240其他节点复制数据字节数
wsrep_received1076从其他节点复制数
wsrep_received_bytes367586从其他节点复制数据字节数
wsrep_local_commits1704本地提交数

队列信息

  • 操作数据会将数据写到wsrep_local_send_queue中.<br/>
  • 当其他节点写入数据会将数据同步到wsrep_local_recv_queue中,本地节点等待空闲的线程同步数据.
variable_namevalue说明
wsrep_local_send_queue0发送队列长度
wsrep_local_send_queue_max1发送队列最大长度
wsrep_local_send_queue_min0发送队列最小长度
wsrep_local_send_queue_avg0.000000发送队列平均长度
wsrep_local_recv_queue0接受队列长度
wsrep_local_recv_queue_max2接受队列最大长度
wsrep_local_recv_queue_min0接受队列最小长度
wsrep_local_recv_queue_avg0.097584接受队列平均长度

流控信息

  • 当同步速度较慢的情况下会限制数据写入
variable_namevalue说明
wsrep_flow_control_paused_ns0流量控制总时间/纳秒
wsrep_flow_control_paused0.000000流量控制时间比
wsrep_flow_control_sent0通知其他节点流控次数
wsrep_flow_control_recv0接受其他节点流控次数
wsrep_flow_control_interval[ 200, 200 ]流控下限与上限.
当队列达到上线拒绝请求
当队列达到下限允许请求
wsrep_flow_control_interval_low200流控下限
wsrep_flow_control_interval_high200流控上限
wsrep_flow_control_statusOFF流控状态

事务信息

variable_namevalue说明
wsrep_cert_deps_distance0事务执行并发数
wsrep_apply_oooe0.245769接收队列中事务的占比,越小同步速度越快
wsrep_apply_oool0.000000接收队列中事务乱序执行的频率
wsrep_apply_window1.249080接收队列中事务的平均数量
wsrep_commit_oooe0.000000发送队列中事务的占比
wsrep_commit_oool0.000000本地的乱序提交
wsrep_commit_window1.000000发送队列中事务的平均数量

服务管理

节点命令说明
systemctl start mysql@bootstrap.service开启节点
service mysql start开启节点
systemctl stop mysql@bootstrap.service关闭节点
service mysql stop关闭节点

故障模拟

当所有的节点都关闭再重启服务需要注意只有pxc认定的节点才能当主节点启动.如主节点是125先关闭.从节点128最后一个关闭.在128节点的配置中safe_to_bootstap=1.其他节点配置的safe_to_bootstap=0. 只有当safe_to_bootstap=1时才可以当作主节点启动.

当所有节点以外宕机,可以看到所有的配置safe_to_bootstap=0,这时候就要手动修改其中一个节点的`safe_to_bootstap=1后按照正常节点启动顺序启动即可.

所有节点将mysql强制杀死进程

# 查看mysql进程

lsof -i:3306

# 返回如下
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  9539 mysql   27u  IPv4  45722      0t0  TCP *:mysql (LISTEN)

# 通过kill PID将mysql强制关闭
kill -9 9539

验证参数

# 在每一个节点查看能以主节点启动的 (safe_to_bootstap=1)
cat /var/lib/mysql/grastate.dat | grep safe_to_bootstrap

# 发现所有的节点都是0
safe_to_bootstrap: 0

# 在节点中使用任何命令启动服务是无效的.

# 通过修改任意一台节点配置(将safe_to_bootstrap值改为1)
vi /var/lib/mysql/grastate.dat

# 在主节点启动服务(safe_to_bootstrap值为1)
systemctl start mysql@bootstrap.service

# 从节点启动服务
service mysql start
Last modification:March 15th, 2021 at 05:47 pm