phxpaxos编译 完整流程(精简版)
以下流程从一个新的虚拟机开始安装环境:CentOS-7-x86_64-Minimal网络配置:安装net-tools,能用ifconfig命令和ssh连接即可。1. 安装依赖yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidocyum -y install ...
以下流程从一个新的虚拟机开始
安装环境:CentOS-7-x86_64-Minimal
网络配置:安装net-tools,能用ifconfig命令和ssh连接即可。
以下步骤具体的操作原因,详见:《phxpaxos编译 完整流程》
1. 安装依赖
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum -y install cmake wget git gcc gcc-c++ perl-ExtUtils-MakeMaker libtool libsysfs-dev
下载和编译两个软件:
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvzf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make && make install
cd ..
tar xvzf automake-1.14.tar.gz
cd automake-1.14
./configure
make && make install
// 验证:
automake --version
>>> automake (GNU automake) 1.14
2. 下载phxpaxos项目
git clone --recursive https://github.com/tencent-wechat/phxpaxos.git
3. 编译leveldb
cd phxpaxos/third_party
rm -rf leveldb
wget https://github.com/google/leveldb/archive/v1.18.tar.gz
tar xvzf v1.18.tar.gz
mv leveldb-1.18 leveldb
cd leveldb
make
mkdir lib
cd lib
ln -s ../libleveldb.a libleveldb.a
至此,leveldb编译完成,在lib目录下建立了一个软链,PhxPaxos通过lib这个目录来寻址静态库。
4. 编译protobuf
cd ../.. // 到phxpaxos/third_party/目录下
mv gmock protobuf/
cd protobuf
libtoolize --copy --force
./autogen.sh
pwd
./configure CXXFLAGS=-fPIC --prefix=[当前目录绝对路径pwd]
make && make install
至此,protobuf编译完成,检查是否在当前目录成功生成bin,include,lib三个子目录。
5. 编译PhxPaxos静态库
cd ../.. // 到PhxPaxos/目录下
./autoinstall.sh
make && make install //默认使用-O2编译优化参数,如需编译debug版本,则命令为make debug=y
至此,PhxPaxos静态库编译完成,检查是否在当前目录成功生成lib子目录,在lib目录是否成功生成静态库libphxpaxos.a.
6. 编译glog
cd third_party/glog/
pwd
./configure CXXFLAGS=-fPIC -prefix=[当前目录绝对路径pwd]
automake --add-missing
make && make install
至此,glog编译完成,检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libglog.a.
7. 编译PhxPaxos Plugin静态库
cd ../../plugin/ // 到PhxPaxos/plugin/目录下
make && make install
至此,PhxPaxos Plugin静态库编译成功,检查上层lib目录下是否成功生成静态库libphxpaxos_plugin.a.
8. 编译gflags
cd ../third_party/gflags/ // 到phxpaxos/third_party/gflags目录下
cmake .
make -j 24
make install
至此,gflags静态库编译成功,检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libgflags.a
9. 编译sample
9.1 phxecho
cd ../../sample/phxecho/ // 到phxpaxos/sample/phxecho目录下
make
mkdir log
运行:
// 启动三个进程:
./phxecho 127.0.0.1:11111 127.0.0.1:11111,127.0.0.1:11112,127.0.0.1:11113
./phxecho 127.0.0.1:11112 127.0.0.1:11111,127.0.0.1:11112,127.0.0.1:11113
./phxecho 127.0.0.1:11113 127.0.0.1:11111,127.0.0.1:11112,127.0.0.1:11113
每个进程都保持如下的阻塞状态:
run paxos ok
echo server start, ip 127.0.0.1 port 11113
please input: <echo req value>
随意选择其中某个进程,在其终端输入”hello, chao”,结果如下:
hello, chao
[SM Execute] ok, smid 1 instanceid 0 value hello, chao
echo resp value hello, chao
其他两个进程会显示如下:
[SM Execute] ok, smid 1 instanceid 0 value hello, chao
9.2 phxelection
cd ../phxelection/
make
运行:
// 启动三个进程:
./phxelection 127.0.0.1:11111 127.0.0.1:11111,127.0.0.1:11112,127.0.0.1:11113
./phxelection 127.0.0.1:11112 127.0.0.1:11111,127.0.0.1:11112,127.0.0.1:11113
./phxelection 127.0.0.1:11113 127.0.0.1:11111,127.0.0.1:11112,127.0.0.1:11113
进程为如下的状态:
// 启动进程1时,进程1:
run paxos ok
master: nodeid 0 version 18446744073709551615 ip 0.0.0.0 port 0
...
// 启动进程2时,进程2:
run paxos ok
master change!!! groupidx 0 newmaster ip 127.0.0.1 port 11112 version 0
master: nodeid 72058139498785640 version 0 ip 127.0.0.1 port 11112
...
// 启动进程2时,进程1:
master change!!! groupidx 0 newmaster ip 127.0.0.1 port 11112 version 0
master: nodeid 72058139498785640 version 0 ip 127.0.0.1 port 11112
...
// 启动进程3时,进程3:
run paxos ok
master: nodeid 0 version 18446744073709551615 ip 0.0.0.0 port 0
master: nodeid 0 version 18446744073709551615 ip 0.0.0.0 port 0
master: nodeid 0 version 18446744073709551615 ip 0.0.0.0 port 0
master change!!! groupidx 0 newmaster ip 127.0.0.1 port 11112 version 0
master: nodeid 72058139498785640 version 47 ip 127.0.0.1 port 11112
...
// 启动进程3时,进程1和进程2状态不变:
master: nodeid 72058139498785640 version 47 ip 127.0.0.1 port 11112
...
依次终止进程:
// 终止进程2时,进程1:
master: nodeid 0 version 149 ip 0.0.0.0 port 0
master change!!! groupidx 0 newmaster ip 127.0.0.1 port 11111 version 150
master: nodeid 72058139498785639 version 151 ip 127.0.0.1 port 11111
...
// 终止进程2时,进程3:
master change!!! groupidx 0 newmaster ip 127.0.0.1 port 11111 version 150
master: nodeid 72058139498785639 version 150 ip 127.0.0.1 port 11111
...
// 终止进程1时,进程3(只有单进程存活时,都是这个状态):
master: nodeid 0 version 218 ip 0.0.0.0 port 0
...
9.3 phxkv
要编译grpc:失败待续。
更多推荐
所有评论(0)