天天看點

Pika 部署

Pika

  • Pika WIKI
  • Pika w3c WIKI

安裝 Pika

注意: ubuntu14.04
  1. 安裝相關依賴

    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

  2. 擷取項目源代碼
git clone --recursive https://github.com/Qihoo360/pika
  1. 更新子子產品(如果是從已有舊的代碼庫更新到2.3.4的版本)

pika目前submodule依賴glog,pink,slash,nemo(nemo -> nemo-rocksdb -> rocksdb);

cd pika ## 進入目錄更新子子產品 \

git submodule update --recursive --init

  1. 編譯
    make
  2. 啟動
    ./output/bin/pika -c ./conf/pika.conf &
  3. 如果沒有意外,那麼啟動就回出現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                 
  1. 簡單版配置檔案
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 隻要修改添加一個配置

  1. /opt/pika/conf/pika.conf 配置檔案加的内容如下
# replication
#slaveof : master-ip:master-port
slaveof : 172.31.15.151:9221           
  1. 清空 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成功

  1. 重新開機 pika
    supervisorctl restart pika

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重複)           
# 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重複)
           
...
  # 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           

其他

繼續閱讀