zoukankan      html  css  js  c++  java
  • SSDB分布式部署

    本文档主要介绍用于线上环境SSDB部署步骤,利用Twemproxy代理实现SSDB的分布式存储,部署SSDB节点为主主模式,仅对单个SSDB节点进行读写,SSDB节点down后切换到另一个SSDB节点进行读写。

    操作系统:               CentOS  6.7 

    节点规划:

          Twemproxy       192.168.10.100    

          ssdb1 master    192.168.10.101

          ssdb2 master    192.168.10.102

    部署SSDB

          SSDB 是基于底层存储引擎 LevelDB 实现的NOSQL 数据库,接口支持类似于 Redis,完全兼容 Redis 的协议,支持 list, has, zset 等数据结构。与 Redis 相比较,SSDB 利用持久化设备存储,避免了纯内存数据库的容量问题,与 LevelDB 的关系是 SSDB 利用了 LevelDB 的高性能存储实现,为其实现了网络和多数据结构支持,除此之外,支持多节点的主备、主主模式。

    安装SSDB

    1 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
    2 unzip master
    3 cd ssdb-master
    4 make
    5 # 将安装在 /usr/local/ssdb 目录下
    6 sudo make install
    7 #/usr/local/ssdb目录下的脚本用于管理ssdb

    主主配置

    下面开始配置节点ssdb1,ssdb2配置类似

     1 cd /usr/local/ssdb
     2 #编辑配置文件ssdb.conf
     3 vim ssdb.conf
     4   
     5 work_dir = ./var         #data保存位置
     6 pidfile = ./var/ssdb.pid
     7 server:
     8         ip: 192.168.10.101
     9         port: 8889
    10 replication:
    11         binlog: yes
    12                 capacity: 20000000
    13         # Limit sync speed to *MB/s, -1: no limit
    14         sync_speed: -1
    15         slaveof:
    16                 # to identify a master even if it moved(ip, port changed)
    17                 # if set to empty or not defined, ip:port will be used.
    18                 id: svc_1
    19                 # sync|mirror, default is sync
    20                 type: mirror
    21                 host: 192.168.10.102
    22                 port: 8888
    23                 #auth: password
    24 logger:
    25         level: debug
    26         output: log.txt #log保存位置
    27         rotate:
    28                 size: 1000000000
    29 leveldb:
    30         # in MB
    31         cache_size: 500
    32         # in KB
    33         block_size: 32
    34         # in MB
    35         write_buffer_size: 64
    36         # in MB
    37         compaction_speed: 200
    38         # yes|no
    39         compression: no

    启动SSDB

     1 cd /usr/local/ssdb
     2 # 启动主库, 此命令会阻塞住命令行
     3 ./ssdb-server ssdb.conf
     4  
     5 # 或者启动为后台进程(不阻塞命令行)
     6 ./ssdb-server -d ssdb.conf
     7  
     8 # 启动 ssdb 命令行
     9 ./tools/ssdb-cli -p 8888
    10  
    11 # 停止 ssdb-server
    12 ./ssdb-server ssdb.conf -s stop

     SSDB开机启动

     1 # 将ssdb源代码目录下的 ./tools/ssdb.sh 脚本放到 /etc/init.d 目录下
     2 cp ${ssdb_home}/tools/ssdb.sh /etc/init.d/ssdb
     3   
     4 #配置/etc/init.d/ssdb 的configs,configs的值为ssdb.conf的路径,如下所示
     5 vim /etc/init.d/ssdb
     6   
     7 configs="/usr/local/ssdb/ssdb.conf"
     8   
     9 #将ssdb加入开机启动
    10 sudo chkconfig --add ssdb
    11 sudo chkconfig ssdb on

    部署Twemproxy

          wemproxy是twtter开源的一个redis和memcache代理服务器,这里我们使用Twemproxy代理来代理SSDB集群来实现数据的分布式存储,即shared。

    安装Twemproxy

     1 ## 安装automake、libtool 、xz工具
     2 $  yum install automake libtool xz -y
     3 ## 安装autoconf
     4 $  wget  http://down1.chinaunix.net/distfiles/autoconf-2.69.tar.xz
     5 $  xz -d autoconf-2.69.tar.xz
     6 $  tar xf autoconf-2.69.tar -C /opt
     7 $  cd /opt/autoconf-2.69
     8 $  ./configure
     9 $  make && make install
    10 ## 安装Twemproxy
    11 $  git clone https://github.com/twitter/twemproxy.git
    12 $  cd  twemproxy/
    13 $  autoreconf -fvi
    14 $  ./configure
    15 $  make && make install
    16 ## 将Twemproxy的配置文件放置在/etc/下、
    17 $  mkdir /etc/nutcracker
    18 $  cp  conf/nutcracker.yml  /etc/nutcracker/nutcracker.yml

    配置Twemproxy

    ## 修改配置文件
    $ vim   /etc/nutcracker/nutcracker.yml 
    beta:
      listen: 127.0.0.1:22122   # 监听地址和端口
      hash: fnv1a_64            # 散列算法
      hash_tag: "{}"            # 假设ssdb中一个对象有多个key属性,如kora这个人的姓名name:kora:,kora的年龄age:kora:,kora的住址 loc:kora:,
                                # 为了保证这kora这三个属性能被路由到后端的同一个分片上,我们就需要指定hash_tag: "                  {::}",这样就避免读取数据的时候跨分片检索
      distribution: ketama      # 分片的算法,有ketama(一致性hash)、module(取模)、random(随机)三种算法
      auto_eject_hosts: false   # 是否在节点无法响应时自动从服务器列表中剔除,重新响应时自动加入服务器列表中
      timeout: 400
      redis: true               # 后端代理的是否为redis
      servers:                  # 分片服务器列表
       - 192.168.10.101:8888:1 server1
       - 192.168.10.102:8888:1 server2

    启动Twemproxy

    1 ## 启动
    2 $  nutcracker -d -c/etc/nutcracker/nutcracker.yml -p /var/run/redisproxy.pid -o /var/log/redisproxy.log&
    3 ## 验证22122端口是否被监听
    4  $  netstat -alnut |grep 22122
    5 tcp       0      0 127.0.0.1:22122             0.0.0.0:*                   LISTEN

    SSDB Python Client

     社区提供多个Python Client,从社区项目活跃度及发布版本的数量角度考虑,选择pyssdb 0.1.2作为访问SSDB的driver。

     安装及使用参见:https://github.com/ifduyue/pyssdb

    SSDB性能压测

        压测详情参见: http://www.wjxfpf.com/2015/10/601347.html

    参考文档:

          http://ssdb.io/zh_cn/

          http://www.wzxue.com/ssdb/

          http://www.ideawu.net/blog/archives/765.html?cp=1#comments

          http://quenlang.blog.51cto.com/4813803/1635778

  • 相关阅读:
    Ansible之AWX安装部署
    Nacos 高可用集群部署
    kubernetes之Pod中的容器共享进程Namespace
    kubernetes之使用ConfigMap管理Pod配置文件
    kubernetes之给容器的生命周期事件添加处理器
    kubernetes之创建初始化容器
    kubernetes之Pod分配到指定Node
    kubernetes之容器健康状态检测
    centos7源码编译安装LNMP+ZABBIX4.0LTS(5)——zabbix proxy+zabbix agent
    centos7源码编译安装LNMP+ZABBIX4.0LTS(4)——zabbix server+zabbix agent
  • 原文地址:https://www.cnblogs.com/gaozhengwei/p/7101239.html
Copyright © 2011-2022 走看看