以下流程从一个新的虚拟机开始
- 1. 安装依赖
- 2. 下载phxpaxos项目
- 3. 编译leveldb
- 4. 编译protobuf
- 5. 编译PhxPaxos静态库
- 6. 编译glog
- 7. 编译PhxPaxos Plugin静态库
- 8. 编译gflags
- 9. 编译sample
- 9.1 phxecho
- 9.2 phxelection
- 9.3 phxkv
安装环境: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-.tar.gz
wget http://ftp.gnu.org/gnu/autoconf/autoconf-.tar.gz
tar xvzf autoconf-.tar.gz
cd autoconf-
./configure
make && make install
cd ..
tar xvzf automake-.tar.gz
cd automake-
./configure
make && make install
// 验证:
automake --version
>>> automake (GNU automake)
2. 下载phxpaxos项目
3. 编译leveldb
cd phxpaxos/third_party
rm -rf leveldb
wget https://github.com/google/leveldb/archive/v1.tar.gz
tar xvzf v1.tar.gz
mv leveldb- 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
make install
至此,gflags静态库编译成功,检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libgflags.a
9. 编译sample
9.1 phxecho
cd ../../sample/phxecho/ // 到phxpaxos/sample/phxecho目录下
make
mkdir log
运行:
// 启动三个进程:
./phxecho : :,:,:
./phxecho : :,:,:
./phxecho : :,:,:
每个进程都保持如下的阻塞状态:
run paxos ok
echo server start, ip port
please input: <echo req value>
随意选择其中某个进程,在其终端输入”hello, chao”,结果如下:
hello, chao
[SM Execute] ok, smid instanceid value hello, chao
echo resp value hello, chao
其他两个进程会显示如下:
[SM Execute] ok, smid instanceid value hello, chao
9.2 phxelection
cd ../phxelection/
make
运行:
// 启动三个进程:
./phxelection : :,:,:
./phxelection : :,:,:
./phxelection : :,:,:
进程为如下的状态:
// 启动进程时,进程:
run paxos ok
master: nodeid version ip port
...
// 启动进程时,进程:
run paxos ok
master change!!! groupidx newmaster ip port version
master: nodeid version ip port
...
// 启动进程时,进程:
master change!!! groupidx newmaster ip port version
master: nodeid version ip port
...
// 启动进程时,进程:
run paxos ok
master: nodeid version ip port
master: nodeid version ip port
master: nodeid version ip port
master change!!! groupidx newmaster ip port version
master: nodeid version ip port
...
// 启动进程时,进程和进程状态不变:
master: nodeid version ip port
...
依次终止进程:
// 终止进程时,进程:
master: nodeid version ip port
master change!!! groupidx newmaster ip port version
master: nodeid version ip port
...
// 终止进程时,进程:
master change!!! groupidx newmaster ip port version
master: nodeid version ip port
...
// 终止进程时,进程(只有单进程存活时,都是这个状态):
master: nodeid version ip port
...
9.3 phxkv
要编译grpc:失败待续。