[PolarDB实操课] 05.通过源码部署PolarDB-X标准版
内容介绍:
一、基于Paxos的MySQL三副本工作原理
二、基于Paxos的MySQL三副本技术特点
三、通过源码部署PolarDB-X的标准版
本节课学习如何通过源码来部署PolarDB-X的标准版。
一、基于Paxos的MySQL三副本工作原理
介绍基于Paxos的MySQL三副本。Paxos是一个基于多数派原理的共识协议。基于Paxos的三副本的工作原理图中可以看到集群里面有一个Leader节点,同时还有两个Follower节点。
1. 在同一个时刻,整个集群当中,最多会有一个Leader节点来承担数据写入的任务,然后其余的节点作为Follower节点来参与多数派的投票还有数据同步的工作。
2. Paxos的协议日志是Consensus Log,它是全面的融合了MySQL里面原有的binlog的内容,在Leader主节点上会在binlog协议中新增Consensus相关的binlog event,同时在Follower备节点上替换传统的Relay Log,备库会通过SQL Thread进行Relay 日志内容到数据文件里,可以把它简单的理解为在PolarDB-X标准版里面的Paxos Consensus log类似于MySQL数据库里面的binlog。
3. 基于Paxos的多数派自动选主机制里面,通过心跳机制,还有election timeout机制来监听Leader节点的变化,心跳机制可以简单的理解为这个节点是否还在活跃。会去自动的监听节点的活跃状态。当Leader节点不可用时,监听到heart beat有问题时,Follower节点就会自动的去完成切主,也就是会把Leader节点切换成新的Leader节点,新的Leader节点会去提供服务,在提供服务之前需要通过SQL Thread完成存量日志的Replay,从而确保新选出来的Leader节点会有最新的数据,从而保证集群的数据的可用性。
二、基于Paxos的MySQL三副本技术特点
基于Paxos的MySQL三副本的集群有一个技术特点。
1. 实现了高性能,它是采用单Leader的模式,可以提供类比于MySQL semi-sync模式的性能。它的性能比较好。
2. 可以保证数据不丢失,RPO等于0,Paxos协议会全面的融合MySQL里面原有的binlog的内容,然后基于多数派投票的机制去同步数据,从而保这种数据不丢失。
3. 自动HA,HA是一个高可用的切换,基于Paxos的选举心跳机制,当它监测到Leader节点的服务不可用时,MySQL会去自动的完成一个节点探活,会去实时的监测。并且当监测到Leader的节点不可用时,会迅速的完成HA的高可用切换,从而选出新的Leader节点来确保数据不丢。
三、通过源码部署PolarDB-X的标准版
现在学习如何通过源码编译来部署PolarDB-X的标准版,在编译的时候,需要用名为RPM的软件包管理器,可以下载RPM的安装包来安装。也可以通过编译的方式生成依赖。演示如何通过编译的方式安装RPM。首先需要安装一些必要的工具,例如git等工具,依次的执行相关命令就可以。创建一个目录,然后安装其他的一些工具。
然后去编译生成RPM。首先拉取Polardbx-engine的代码,Polardbx-engine对应的是DN节点,标准版只有一个DN节点,代码拉取完成之后编译生成RPM。进入Polardbx-engine目录,然后编译生成RPM,编译的过程需要一些时间。RPM包编译成功后检查是否编译成功。编译生成的这个RPM包会默认出现在/root/rpmbuild/RPMS/x86_64/
目录下,检查是否编译成功,执行ls/root/rpmbuild/RPMS/x86_64/
命令,看RPM包是否存在.看到目录下有RPM文件,基于安装包去快速的安装,需要把安装的地址改成RPM包所在的地址,也就是在/root/rpmbuild/RPMS/x86_64/
目录下面的t-polardbx-engine-2.3.0-2c1b76d.e17.x86_64.rpm
包。现在安装RPM。安装完成进行检查,安装完RPM之后会生成一个二进制文件叫mysqld,这个文件会出在/opt/polardbx-engine/bin
目录当中,查看二进制文件是否存在,查看是否安装成功。执行ls/opt/polardbx-engine/bin
命令来查看是否生成二进制文件,看到已经生成二进制文件说明安装成功。
接下来启动DN节点,DN节点可以理解为标准版里面的单机MySQL,首先需要创建polarx用户,然后创建密码。现在已经切换到polarx用户,然后创建必要的目录,创建polardbx-engine目录,并且创建一些文件夹,之后需要配置my.cnf文件,my.cnf文件是配置文件,在文件里面放入关于数据库的配置信息。
通过vim命令打开文本编辑器,然后配置文件,教程里面提供my.cnf文件的简单模板,可以直接把模板里面的代码复制到配置文件里面检查,粘贴的时候可能有些错误,所以需要进行修改,确保配置文件正确,粘贴的时候漏掉第一行mysqld声明,然后第二行的单词粘贴错误,需要改正,然后保存退出vim文件,回到命令终端,继续做下面命令的操作,准备好my.cnf文件之后进行初始化的操作,复制/opt/polardbx_engine/bin/mysqld--defaults-file=my.cnf--initialize-inse
cure
去初始化。初始化成功后继续执行/opt/polardbx_engine/bin/mysqld_safe--defaults-file=my.cnf &
来启动数据库,启动后登录数据库来验证状态,统一通过m
ysql-h127.0.0.1-P4886-uroot
来登录数据库,显示登录成功,然后来执行SELECT
*
FROM
INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL
来查看这台机器的paxos角色。可以看到这台机器的角色是Leader。目前配置文件里面只配置了单机模式,所以只有一台机器,只有一个Leader,没有Follower。
接下来体验基于Paxos的三副本高可用,体验三副本的高可用部署,需要准备三台机器。本次课程准备三台云服务器,第一台服务器的ip地址是172
.26.151
.
122
。第二台是172
.26.151
.
123
,第三台是172
.26.151
.
12
4
,使用这三台机器做一个演示,ip地址已经写好。然后在这三台机器上需要做一些设置,在设置之前需要按照前面的步骤,通过下载或者是通过源码编译的方式来安装RPM。
并且要准备my.cnf文件和目录,需要注意的是,这三台机器所使用的my.cnf文件是一致的,统一使用准备的简单模板,完成之后,分别在三台机器上去做一些配置,需要改三台机器的cluster information集群信息,需要把三台机器的ip地址以及它的端口号配置进去,按照主机1端口1,主机2端口2,主机3端口3的格式配置进去,然后通过idx来区分这三台机器,第一台机器的idx是1,第二台机器idx是2,第三台机器的idx是3。
通过这样的方式来区分三台机器,分别在三台机器上做一个设置,首先在第一台机器122上做一个配置。初始化完成后,做启动的配置,这个进程已经存在,然后再在第二个机器上做一个配置,第二个是123。在第三台机器124上做配置,然后启动第三台。之前已经启动,所以MySQL进程已经存在,如果第一次启动这三台机器,会提示连接成功。
启动完之后做三副本的启动,通过SELECT
*
FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL
验证数据库集群的状态,可能有一些错误。首先通过统一的命令三台数据库。三台机器登录成功后验证集群的状态,执行SELECT
*
FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL
验证集群的状态。输入\G命令,把状态打印出来,然后看到122这台机器在集群里面角色是Follower,123这台机器角色也是Follower,124这台机器的角色是Leader,说明它是一个主节点,三副本的集群部署成功。其中有两台机器是Follower的角色,其中一台是Leader的角色,他们有角色的分配。这三台机器成功启动.
然后体验高可用的切换,通过kill-9命令去结束其中一台机器的进程,集群如何重新的分配Leader和Follower,如何去保证数据是高可用的。如何保证数据服务不停,首先做一个演示,在Leader上建一个表,然后插入一些数据,Leader是第三台机器,现在Leader上插入一些数据,然后在Leader还有Follower上把数据查出来,然后在Leader上面查询集群的状态,现在执行SELECT SERVER_ID, IP_PORT, MATCH_INDEX, ROLE, APPLIED_INDEX FROMINFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL
命令,在Leader上查询数据,三台机器是联通的,有角色的分配,第三台是Leader,前两台是Follower,它们的APPLIED_INDEX
都是6,APPLIED_INDEX都是6说明三台机器的数据完全一致,三台机器是联通的,保证了集群的高可用,对其中的Leader节点做进程的结束,然后让集群重新选出新的Leader。
执行命令,回到linux的终端后,执行kil
l
-9$(pgrep -x mysqid)
结束进程的命令,进程结束后查询状态,重新执行命令查询集群的状态,首先在Follower上查询状态,看到刚才的Follower节点已经变成Leader节点,说明第三台机器原来的Leader结束进程之后集群重新选出一个Leader。
123数据库还是Follower。因为集群已经把Leader权限分配给122机器,所以123机器还是Follower。124机器需要重新登录数据库才能看到它的状态,执行命令登录数据库。登录成功后重新执行查询状态的命令,查询124的状态。124现在的状态应该是Follower。
因为集群已经有新的Leader出现,所以它只能当Follower,通过这样的方式体验基于Paxos的高可用部署,通过刚才的演示看到当原来的Leader节点结束进程之后,也就是模拟一个容灾的过程,原来的Leader节点如果出现问题,它的服务停掉之后。高可用集群会自动切换Leader节点,可以在剩余的节点当中重新选择一个节点当Leader,然后保证服务不停,保证数据的高可用。
总结内容:
1. polarDB-X的标准版。
2. 学习标准版里面基于Paxos的三副本的工作原理和技术特点。
3. 通过实际演示的方式体验如何通过源码来部署PolarDB-X的标准版。
(1)先体验单机模式,体验如何启动DN节点。
(2)体验三副本高可用的部署,准备三台机器,并且在三台机器上做简单的配置,然后通过设置拉起这三台机器,体验如何通过命令来结束其中的Leader节点的进程,从而使集群自动选举出新的Leader节点,完成HA的切换,保证数据的一致性,保证数据不丢。