Percona Server
安装
地址
# 官网
https://www.percona.com
# 版本选择
https://www.percona.com/downloads/percona-release/
安装
# 安装包源 - 可以通过上述地址选择最新版本的包源
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/
安装
# 本地下载,将下载好的包拷贝到服务器
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
端口
端口 | 说明 |
---|---|
3306 | mysql端口 |
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_name | value | 说明 |
---|---|---|
wsrep_local_state_comment | Synced | 节点状态 Joining: 正在加入集群 Joined: 以加入集群 Synced: 正常 Donar: 被其他节点进行同步,不提供服务 |
wsrep_cluster_status | Primary | 集群状态 Primary: 正常 Non-Primary: 部分宕机 Disconnected: 不提供服务 |
wsrep_connected | ON | 是否连接集群 |
wsrep_ready | ON | 集群状态 |
wsrep_cluster_size | 4 | 节点数量 |
wsrep_desync_count | 0 | 延时节点数量 |
wsrep_incoming_addresses | 192.168.128.126:3306, 192.168.128.127:3306, 192.168.128.128:3306, 192.168.128.125:3306 | 集群节点IP地址 |
复制信息
variable_name | value | 说明 |
---|---|---|
wsrep_last_applied | 2718 | 同步次数 |
wsrep_last_committed | 2718 | 事务提交次数 |
wsrep_replicated | 1711 | 其他节点复制数 |
wsrep_replicated_bytes | 615240 | 其他节点复制数据字节数 |
wsrep_received | 1076 | 从其他节点复制数 |
wsrep_received_bytes | 367586 | 从其他节点复制数据字节数 |
wsrep_local_commits | 1704 | 本地提交数 |
队列信息
- 操作数据会将数据写到
wsrep_local_send_queue
中.<br/> - 当其他节点写入数据会将数据同步到
wsrep_local_recv_queue
中,本地节点等待空闲的线程同步数据.
variable_name | value | 说明 |
---|---|---|
wsrep_local_send_queue | 0 | 发送队列长度 |
wsrep_local_send_queue_max | 1 | 发送队列最大长度 |
wsrep_local_send_queue_min | 0 | 发送队列最小长度 |
wsrep_local_send_queue_avg | 0.000000 | 发送队列平均长度 |
wsrep_local_recv_queue | 0 | 接受队列长度 |
wsrep_local_recv_queue_max | 2 | 接受队列最大长度 |
wsrep_local_recv_queue_min | 0 | 接受队列最小长度 |
wsrep_local_recv_queue_avg | 0.097584 | 接受队列平均长度 |
流控信息
- 当同步速度较慢的情况下会限制数据写入
variable_name | value | 说明 |
---|---|---|
wsrep_flow_control_paused_ns | 0 | 流量控制总时间/纳秒 |
wsrep_flow_control_paused | 0.000000 | 流量控制时间比 |
wsrep_flow_control_sent | 0 | 通知其他节点流控次数 |
wsrep_flow_control_recv | 0 | 接受其他节点流控次数 |
wsrep_flow_control_interval | [ 200, 200 ] | 流控下限与上限. 当队列达到上线拒绝请求 当队列达到下限允许请求 |
wsrep_flow_control_interval_low | 200 | 流控下限 |
wsrep_flow_control_interval_high | 200 | 流控上限 |
wsrep_flow_control_status | OFF | 流控状态 |
事务信息
variable_name | value | 说明 |
---|---|---|
wsrep_cert_deps_distance | 0 | 事务执行并发数 |
wsrep_apply_oooe | 0.245769 | 接收队列中事务的占比,越小同步速度越快 |
wsrep_apply_oool | 0.000000 | 接收队列中事务乱序执行的频率 |
wsrep_apply_window | 1.249080 | 接收队列中事务的平均数量 |
wsrep_commit_oooe | 0.000000 | 发送队列中事务的占比 |
wsrep_commit_oool | 0.000000 | 本地的乱序提交 |
wsrep_commit_window | 1.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