参考官方文档:https://docs.microsoft.com/en-us/windows/wsl/install
微软商店里没有提供CentOS 7,可以在这里下载:https://github.com/mishamosher/CentOS-WSL/releases
验证过的版本是:https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2111
解压后运行CentOS7.exe(右键以管理员身份运行)即可完成安装,再次运行CentOS7.exe即可打开一个终端。
- 安装wget:
yum install wget -y
- 使用阿里云的yum仓库:
cd /etc/yum.repos.d/ && \
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum clean all
cd /root
- 安装工具链
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
- 安装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
- 创建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
- 安装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>
- 下载编译工程
git clone https://github.com/ApsaraDB/PolarDB-X.git
cd PolarDB-X
- 编译
make
注意:如果机器内存<=16G,请修改PolarDB-X/Makefile中编译的并行度,否则容易出现OOM,将 CPU_CORES
修改为 2
- 运行
./build/run/bin/polardb-x.sh start
- 停止
./build/run/bin/polardb-x.sh stop
我们使用IDEA来运行CN的代码,并使用CentOS中启动的GalaxyEngine节点作为GMS与DN节点。
- 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
- 在CentOS上登录GMS,并修改DN的IP。
mysql -h127.1 -P4886 -uroot polardbx_meta_db_polardbx -e 'update storage_info set ip="172.27.47.106";'
- 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
- 在Windows中clone代码:
git clone https://github.com/ApsaraDB/galaxysql.git
cd galaxysql
git submodule update --init
- 在IDEA中打开该maven工程,并修改IDEA的maven仓库为阿里云的maven仓库:
- 调整IDEA编译的内存上限:
- 使用CentOS中的
PolarDB-X/build/run/galaxysql/conf/server.properties
内容覆盖IDEA中CN的galaxysql\polardbx-server\src\main\resources
,并将metaDbAddr
中的127.0.0.1
修改为WSL的IP:
同时,修改代码中 polardbx-server/src/main/resources/server.properties 文件:
a. 将metaDbAddr
改为 127.0.0.1:4886
b. 将metaDbXprotoPort
改为 34886
c. 将galaxyXProtocol
改为 2
d. 在shell中执行这行命令以获取metaDbPasswd
:mysql -h127.1 -P4886 -uroot -padmin -D polardbx_meta_db_polardbx -e "select passwd_enc from storage_info where inst_kind=2"
e. 增加metaDbPasswd=<查询到的密码>
。
-
运行一次
com.alibaba.polardbx.server.TddlLauncher
,此时会启动失败 -
修改
TddlLauncher
的Run/Debug Configurations
,添加dnPasswordKey=asdf1234ghjk5678
到环境变量中:
-
再次运行
com.alibaba.polardbx.server.TddlLauncher
即可 -
mysql终端可以连上本地的CN了
mysql -h 127.0.0.1 -upolardbx_root -p123456 -P8527
注意,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后运行该命令。