Skip to content

Latest commit

 

History

History
236 lines (164 loc) · 7.26 KB

compile_and_run_polardbx_on_windows.md

File metadata and controls

236 lines (164 loc) · 7.26 KB

Windows下编译运行PolarDB-X

安装WSL

参考官方文档:https://docs.microsoft.com/en-us/windows/wsl/install

安装CentOS 7

微软商店里没有提供CentOS 7,可以在这里下载:https://github.com/mishamosher/CentOS-WSL/releases

验证过的版本是:https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2111

解压后运行CentOS7.exe(右键以管理员身份运行)即可完成安装,再次运行CentOS7.exe即可打开一个终端。

环境准备

  1. 安装wget:
yum install wget -y
  1. 使用阿里云的yum仓库:
cd /etc/yum.repos.d/ && \
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum clean all

cd /root
  1. 安装工具链
yum install -y git

yum install -y centos-release-scl

yum install -y mysql

yum install -y java-1.8.0-openjdk-devel

yum install -y make automake openssl-devel ncurses-devel bison libaio-devel

yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils

echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile && source /etc/profile
  1. 安装cmake:

仓库里没有cmake3,需要从源码编译安装

wget https://cmake.org/files/v3.23/cmake-3.23.2.tar.gz && tar -zxvf cmake-3.23.2.tar.gz && cd cmake-3.23.2/
./bootstrap && gmake && gmake install 
  1. 创建admin用户:

CN与DN都不允许以root用户启动,需要创建一个用户。

useradd -ms /bin/bash admin && \
echo "admin:admin" | chpasswd && \
echo "admin    ALL=(ALL)    NOPASSWD: ALL" >> /etc/sudoers &&   \
su admin

cd /home/admin
  1. 安装maven:

仓库中的maven版本太老了,装一个最新版本。

wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz && tar -zxvf apache-maven-3.8.6-bin.tar.gz

echo 'PATH=/home/admin/apache-maven-3.8.6/bin:$PATH' >> /home/admin/.bashrc && \
    echo "export PATH" >> /home/admin/.bashrc && \
	source  /home/admin/.bashrc

国内使用阿里云的maven仓库比较快,https://developer.aliyun.com/mvn/guide

修改maven的配置文件:

vi /home/admin/apache-maven-3.8.6/conf/settings.xml

<mirrors></mirrors>标签中添加 mirror 子节点:

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

编译PolarDB-X

  1. 下载编译工程
git clone https://github.com/ApsaraDB/PolarDB-X.git

cd PolarDB-X
  1. 编译
make

注意:如果机器内存<=16G,请修改PolarDB-X/Makefile中编译的并行度,否则容易出现OOM,将 CPU_CORES 修改为 2

image

  1. 运行
./build/run/bin/polardb-x.sh start
  1. 停止
./build/run/bin/polardb-x.sh stop

使用IDEA开发GalaxySQL(CN)

我们使用IDEA来运行CN的代码,并使用CentOS中启动的GalaxyEngine节点作为GMS与DN节点。

  1. WSL与Windows是同一个LAN内的两个IP,在上述的Demo中,GMS中记录的DN的IP为127.0.0.1,Windows无法直接通过这个IP来访问与GMS/DN,因此需要获取到WSL的LAN IP,并做相应的替换。

在CentOS中执行ip addr,记录eth0中的IP,如本例中,IP为172.27.47.106

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 7a:44:78:58:e8:32 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 7a:e5:bd:1e:a3:ba brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:05:db:9b brd ff:ff:ff:ff:ff:ff
    inet 172.27.47.106/20 brd 172.27.47.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe05:db9b/64 scope link
       valid_lft forever preferred_lft forever
  1. 在CentOS上登录GMS,并修改DN的IP。
 mysql -h127.1 -P4886 -uroot polardbx_meta_db_polardbx -e 'update storage_info set ip="172.27.47.106";'
  1. Kill掉CentOS中的CN进程,避免冲突:
[admin@DESKTOP-UGTN860 PolarDB-X]$ jps
13174 Jps
15625 DaemonBootStrap
16105 DumperBootStrap
16139 TaskBootStrap
17334 TddlLauncher
[admin@DESKTOP-UGTN860 PolarDB-X]$ kill -9 17334
  1. 在Windows中clone代码:
git clone https://github.com/ApsaraDB/galaxysql.git

cd galaxysql

git submodule update --init
  1. 在IDEA中打开该maven工程,并修改IDEA的maven仓库为阿里云的maven仓库:

image

  1. 调整IDEA编译的内存上限:

image

  1. 使用CentOS中的PolarDB-X/build/run/galaxysql/conf/server.properties内容覆盖IDEA中CN的galaxysql\polardbx-server\src\main\resources,并将metaDbAddr中的127.0.0.1修改为WSL的IP:

image

同时,修改代码中 polardbx-server/src/main/resources/server.properties 文件:

a. 将metaDbAddr 改为 127.0.0.1:4886

b. 将metaDbXprotoPort 改为 34886

c. 将galaxyXProtocol 改为 2

d. 在shell中执行这行命令以获取metaDbPasswdmysql -h127.1 -P4886 -uroot -padmin -D polardbx_meta_db_polardbx -e "select passwd_enc from storage_info where inst_kind=2"

e. 增加metaDbPasswd=<查询到的密码>

  1. 运行一次com.alibaba.polardbx.server.TddlLauncher,此时会启动失败

  2. 修改TddlLauncherRun/Debug Configurations,添加dnPasswordKey=asdf1234ghjk5678 到环境变量中:

image image image

  1. 再次运行com.alibaba.polardbx.server.TddlLauncher即可

  2. mysql终端可以连上本地的CN了

mysql -h 127.0.0.1 -upolardbx_root -p123456 -P8527

固定WSL的IP地址

注意,WSL2每次重启都会重新分配一个IP,这会导致GMS与server.properties中记录的IP失效。有一个折中的方法,执行以下命令,会分别为WSL2与Windows分配一个指定的IP地址:

wsl -d CentOS7 -u root ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0 label eth0:1
netsh interface ip add address “vEthernet (WSL)” 192.168.50.1 255.255.255.0

这样可以将GMS与server.properties中的IP固定为192.168.50.2即可。

确保每次重启WSL后运行该命令。