PolarDB 高可用集群搭建

张开发
2026/4/18 19:51:12 15 分钟阅读

分享文章

PolarDB 高可用集群搭建
PolarDB 高可用集群搭建准备三台机器注意每个节点需配置一致192.168.142.23192.168.142.24192.168.142.251、关闭透明大页cat /sys/kernel/mm/transparent_hugepage/enabled如返回结果为always madvise [never]则表示已关闭透明大页。否则执行以下操作以关闭透明大页。echo never /sys/kernel/mm/transparent_hugepage/enabled关闭防火墙systemctl disable firewalldsystemctl stop firewalld2、安装主程序[rootstandby PolarDB]# yum -y install t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64.rpmLoaded plugins: ulninfoExamining t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64.rpm: t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64Marking t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64.rpm to be installedResolving Dependencies-- Running transaction check--- Package t-polardbx-engine.x86_64 0:8.4.19-20250825_17558853.el7 will be installed-- Finished Dependency ResolutionDependencies ResolvedPackage Arch Version Repository SizeInstalling:t-polardbx-engine x86_64 8.4.19-20250825_17558853.el7 /t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64 2.8 GTransaction SummaryInstall 1 PackageTotal size: 2.8 GInstalled size: 2.8 GDownloading packages:Running transaction checkRunning transaction testTransaction test succeededRunning transactionInstalling : t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64 1/1Copying /u01/xcluster80_20250825_current to /u01/xcluster80Copying /u01/xcluster80_20250825_current to /u01/xcluster80_20250825Verifying : t-polardbx-engine-8.4.19-20250825_17558853.el7.x86_64 1/1Installed:t-polardbx-engine.x86_64 0:8.4.19-20250825_17558853.el7Complete!注安装完成后默认会创建/u01/目录可以在u01目录下看到对应的数据库二进制文件如下。[rootstandby PolarDB]# cd /u01/[rootstandby u01]# lldrwxr-xr-x 11 root root 4096 Apr 14 11:59 xcluster80drwxr-xr-x 11 root root 4096 Apr 14 11:59 xcluster80_202508253、创建并切换到 polardbx 用户useradd -ms /bin/bash polardbxecho polardbx:polardbx | chpasswdecho polardbx ALL(ALL) NOPASSWD: ALL /etc/sudoerssu - polardbx4、配置初始化参数确认当前操作系统用户是 polardbx 用户而不是 root 用户。准备文件目录建议将数据存放到单独的存储路径下mkdir -p /u01/polardbx-enginechown -R polardbx:polardbx /u01/polardbx-enginesu - polardbxcd /u01/polardbx-engine mkdir log mysql run data tmp准备配置文件/u01/polardbx-engine/my.cnf创建文件 touch my.cnf并粘贴如下文本节点一$ vi my.cnf[mysqld]basedir /u01/xcluster80datadir /u01/polardbx-engine/datatmpdir /u01/polardbx-engine/tmpsocket /u01/polardbx-engine/tmp/mysql.socklog_error /u01/polardbx-engine/log/alert.logport 4886default_authentication_plugin mysql_native_passwordlower_case_table_names 1gtid_mode ONenforce_gtid_consistency ONlog_bin 1sync_binlog1innodb_flush_log_at_trx_commit1log_error_verbosity 3mysqlx0enable_polarx_rpc0loose-mysqlx-sslDISABLEDssl0cluster_id 1749112302cluster_info 192.168.142.23:148861server_id 1001[mysqld_safe]pid_file /u01/polardbx-engine/run/mysql.pid节点二$ vi my.cnf[mysqld]basedir /u01/xcluster80datadir /u01/polardbx-engine/datatmpdir /u01/polardbx-engine/tmpsocket /u01/polardbx-engine/tmp/mysql.socklog_error /u01/polardbx-engine/log/alert.logport 4886default_authentication_plugin mysql_native_passwordlower_case_table_names 1gtid_mode ONenforce_gtid_consistency ONlog_bin 1sync_binlog1innodb_flush_log_at_trx_commit1log_error_verbosity 3mysqlx0enable_polarx_rpc0loose-mysqlx-sslDISABLEDssl0cluster_id 1749112302cluster_info 192.168.142.24:148862server_id 1002[mysqld_safe]pid_file /u01/polardbx-engine/run/mysql.pid节点三$ vi my.cnf[mysqld]basedir /u01/xcluster80datadir /u01/polardbx-engine/datatmpdir /u01/polardbx-engine/tmpsocket /u01/polardbx-engine/tmp/mysql.socklog_error /u01/polardbx-engine/log/alert.logport 4886default_authentication_plugin mysql_native_passwordlower_case_table_names 1gtid_mode ONenforce_gtid_consistency ONlog_bin 1sync_binlog1innodb_flush_log_at_trx_commit1log_error_verbosity 3mysqlx0enable_polarx_rpc0loose-mysqlx-sslDISABLEDssl0cluster_id 1749112302cluster_info 192.168.142.25:148863server_id 1003[mysqld_safe]pid_file /u01/polardbx-engine/run/mysql.pid5、高可用集群初始化每个节点依次按如下步骤初始化、启动节点一/u01/xcluster80/bin/mysqld --defaults-filemy.cnf --cluster-info192.168.142.23:14886;192.168.142.24:14886;192.168.142.25:148861 --initialize-insecure/u01/xcluster80/bin/mysqld_safe --defaults-filemy.cnf 节点二/u01/xcluster80/bin/mysqld --defaults-filemy.cnf --cluster-info192.168.142.23:14886;192.168.142.24:14886;192.168.142.25:148862 --initialize-insecure/u01/xcluster80/bin/mysqld_safe --defaults-filemy.cnf 节点三/u01/xcluster80/bin/mysqld --defaults-filemy.cnf --cluster-info192.168.142.23:14886;192.168.142.24:14886;192.168.142.25:148863 --initialize-insecure/u01/xcluster80/bin/mysqld_safe --defaults-filemy.cnf 参数说明--cluster-info其中的格式为 [host1]:[port1];[host2]:[port2];[host3]:[port3][idx] 不同的机器只有 [idx] 不同[idx] 也反映了该机器是第几个 [host][port]请根据实际机器的 ip 修改该配置项。比如192.168.142.23/192.168.142.24/192.168.142.25 组成了Paxos多副本在192.168.142.24上配置--cluster-info192.168.142.23:14886;192.168.142.24:14886;192.168.142.25:148862其中2代表192.168.142.24是在paxos集群配置里使用第二个节点的ip和端口注意参数的差异。6、登录集群数据库验证状态/u01/xcluster80/bin/mysql -h127.0.0.1 -P4886 -uroot查询本机的paxos角色mysql SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL\G查询集群所有机器的paxos角色只有在Leader节点查询才会返回数据mysql SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL \G*************************** 1. row ***************************SERVER_ID: 1IP_PORT: 192.168.142.23:14886MATCH_INDEX: 1NEXT_INDEX: 0ROLE:LeaderHAS_VOTED: YesFORCE_SYNC: NoELECTION_WEIGHT: 5LEARNER_SOURCE: 0APPLIED_INDEX: 1PIPELINING: NoSEND_APPLIED: NoINSTANCE_TYPE: NormalDISABLE_ELECTION: NoSERVER_IP:SERVER_PORT: 0*************************** 2. row ***************************SERVER_ID: 2IP_PORT: 192.168.142.24:14886MATCH_INDEX: 1NEXT_INDEX: 2ROLE: FollowerHAS_VOTED: YesFORCE_SYNC: NoELECTION_WEIGHT: 5LEARNER_SOURCE: 0APPLIED_INDEX: 1PIPELINING: YesSEND_APPLIED: NoINSTANCE_TYPE: NormalDISABLE_ELECTION: NoSERVER_IP:SERVER_PORT: 0*************************** 3. row ***************************SERVER_ID: 3IP_PORT: 192.168.142.25:14886MATCH_INDEX: 1NEXT_INDEX: 2ROLE: FollowerHAS_VOTED: NoFORCE_SYNC: NoELECTION_WEIGHT: 5LEARNER_SOURCE: 0APPLIED_INDEX: 1PIPELINING: YesSEND_APPLIED: NoINSTANCE_TYPE: NormalDISABLE_ELECTION: NoSERVER_IP:SERVER_PORT: 03 rows in set (0.00 sec)注意Paxos三副本在逐台启动时刚启动第一台时会因为不满足Paxos多数派无法产生选主结果此时数据库无法登录。至少需要第二个节点加入并成功选主才能登录数据库。创建数据库、表验证数据mysql create database zzh;Query OK, 1 row affected (0.01 sec)mysql use zzh;Database changedmysql create table test (id int);Query OK, 0 rows affected (0.02 sec)mysql insert into test values(1),(2);Query OK, 2 rows affected (0.11 sec)Records: 2 Duplicates: 0 Warnings: 0在 Leader 上查询集群的状态mysql SELECT SERVER_ID,IP_PORT,MATCH_INDEX,ROLE,APPLIED_INDEX FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL ;-----------------------------------------------------------------------| SERVER_ID | IP_PORT | MATCH_INDEX | ROLE | APPLIED_INDEX |-----------------------------------------------------------------------| 1 | 192.168.142.23:14886 | 4 | Leader | 4 || 2 | 192.168.142.24:14886 | 4 | Follower | 4 || 3 | 192.168.142.25:14886 | 4 | Follower | 4 |-----------------------------------------------------------------------3 rows in set (0.00 sec)注其中 APPLIED_INDEX 都是 4 说明数据目前Paxos三节点上的Log Index是完全一致的。7、验证重新选主kill Leader 主节点进程注意观察日志kill -9 $(pgrep -x mysqld)kill 后集群会选出新的 Leader并且 mysqld_safe 会立马重新拉起 mysqld 进程如下... ...2026-04-17T02:38:58.502718Z mysqld_safe Rename corefile from to2026-04-17T02:38:58.536787Z mysqld_safe Number of processes running now: 02026-04-17T02:38:58.547884Z mysqld_safe mysqld restarted再次查看集群Leader 变成了 192.168.142.24 节点23节点变成了 Follower 如下mysql SELECT SERVER_ID,IP_PORT,MATCH_INDEX,ROLE,APPLIED_INDEX FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL ;-----------------------------------------------------------------------| SERVER_ID | IP_PORT | MATCH_INDEX | ROLE | APPLIED_INDEX |-----------------------------------------------------------------------| 1 | 192.168.142.23:14886 | 5 | Follower | 5 || 2 | 192.168.142.24:14886 | 5 | Leader | 5 || 3 | 192.168.142.25:14886 | 5 | Follower | 5 |-----------------------------------------------------------------------3 rows in set (0.00 sec)至此polardb 高可用集群搭建并验证完成。

更多文章