Pika
安裝 Pika
注意: ubuntu14.04
-
安裝相關依賴
apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libv4l-dev libgtk-3-0 \
apt-get install gcc-4.8 \
apt-get install g++-4.8 - 獲取項目源代碼
git clone --recursive https://github.com/Qihoo360/pika
- 更新子模塊(如果是從已有舊的代碼庫升級到2.3.4的版本)
pika目前submodule依賴glog,pink,slash,nemo(nemo -> nemo-rocksdb -> rocksdb);
cd pika ## 進入目錄更新子模塊 \
git submodule update --recursive --init
-
編譯
make
-
啓動
./output/bin/pika -c ./conf/pika.conf &
- 如果沒有意外,那麼啓動就回出現9221端口
netstat -lntup |grep pika
tcp 0 0 0.0.0.0:9221 0.0.0.0:* LISTEN 15805/pika
tcp 0 0 0.0.0.0:10221 0.0.0.0:* LISTEN 15805/pika
tcp 0 0 0.0.0.0:10321 0.0.0.0:* LISTEN 15805/pika
tcp 0 0 0.0.0.0:11221 0.0.0.0:* LISTEN 15805/pika
- 簡單版配置文件
cat > /opt/pika/conf/pika.conf <<EOF
port : 9221
thread-num : 2
sync-thread-num : 6
sync-buffer-size : 10
log-path : /data/pika/log/
loglevel : info
db-path : /data/pika/db
write-buffer-size : 268435456
timeout : 60
requirepass :
masterauth :
userpass :
userblacklist :
dump-prefix :
dump-path : /data/pika/dump/
dump-expire : 0
pidfile : ./pika.pid
maxclients : 20000
target-file-size-base : 20971520
expire-logs-days : 7
expire-logs-nums : 10
root-connection-num : 2
slowlog-log-slower-than : 10000
slave-read-only : 0
db-sync-path : /data/pika/dbsync/
db-sync-speed : -1
slave-priority : 100
server-id : 1
double-master-ip :
double-master-port :
double-master-server-id :
binlog-file-size : 104857600
compression : snappy
max-background-flushes : 1
max-background-compactions : 2
max-cache-files : 5000
max-bytes-for-level-multiplier : 10
EOF
如果使用上面的配置文件,就需要創建下面目錄
cp output /opt/pika -rfp
chown -R rela.rela /data/pika/log/ /data/pika/db /opt/pika/dump/ /data/pika/dbsyn
mkdir -p /data/logs/pika /data/pika/db /opt/pika/dump/ /data/pika/dbsync
chown -R rela.rela /data/logs/pika /data/pika/db /opt/pika/dump/ /data/pika/
cat > /etc/supervisor/conf.d/pika.conf <<EOF
[program:pika]
command=/opt/pika/bin/pika -c /opt/pika/conf/pika.conf
;process_name=%(process_num)02d
numprocs=1
user=rela
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/data/logs/pika/pika_sup.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5
EOF
supervisorctl update
安裝完成
pika 主從同步設置
master 無需修改
slave 只要修改添加一個配置
- /opt/pika/conf/pika.conf 配置文件加的內容如下
# replication
#slaveof : master-ip:master-port
slaveof : 172.31.15.151:9221
- 清空 slave 原有的 db 目錄內容,以及log 目錄內容
rm -rf /data/pika/log/* /data/pika/db/*
如果不清空的話,如果slave 原來存在內容,那邊出出現下面的故障:
W0108 10:58:02.447227 19749 pika_trysync_thread.cc:93] Reply from master after trysync: ERR InvalidOffset
W0108 10:58:02.447358 19749 pika_trysync_thread.cc:125] something wrong with sync, come in SyncError stage
W0108 10:58:02.447381 19749 pika_server.cc:684] Sync error, set repl_state to PIKA_REPL_ERROR
注意: 防火牆需要把pika的四個端口都開放,不然可能會出現無法slaveof成功
- 重啓 pika
supervisorctl restart pika
pika 雙主
修改雙主A的
pika.conf
配置文件... # server-id for hub server-id : 1 ... # The peer-master config double-master-ip : 192.168.10.2 配置另一個主的ip double-master-port : 9220 配置另一個主的port double-master-server-id : 2 配置另一個主的server id (注意不要與本機server id和已經連接的slave的sid重複)
修改雙主B的pika.conf
配置文件
# server-id for hub
server-id : 2
...
# The peer-master config
double-master-ip : 192.168.10.1 配置另一個主的ip
double-master-port : 9220 配置另一個主的port
double-master-server-id : 1 配置另一個主的server id (注意不要與本機server id和已經連接的slave的sid重複)
分別啓動兩個Pika實例, 使用info查看信息
...
# DoubleMaster(DOUBLEMASTER)
role:double_master
the peer-master host:192.168.10.2
the peer-master port:9220
double_master_mode: True
repl_state: 3
double_master_server_id:2
double_master_recv_info: filenum 0 offset 0