Twemproxy+ssdb双主配置

SSDB双主配置


特性


替代 Redis 数据库, Redis 的 100 倍容量
LevelDB 网络支持, 使用 C/C++ 开发
Redis API 兼容, 支持 Redis 客户端
适合存储集合数据, 如 list, hash, zset...
客户端 API 支持的语言包括: C++、PHP、Python、Cpy、Java、NodeJS、Ruby、Go。
持久化的队列服务
主从复制, 负载均衡




介绍:
levelDB是一个key->value 的数据存储库,其只能在本地保存数据,支持持久化,并且支持保存非常大的数据,单机redis在保存较大数据的时候数十G的时候会出现响应慢等问题,
而单机levelDB数据在150G以内的时候依然可以保持比较好的性能,其随机写入key->value的数据每秒可达到40W条,每秒随机读在6W,写比读还要快,因此适用于写操作大于读操作的场景
,并且不支持网络传输, 即只能本机访问数据,官网地址http://leveldb.org/,国内有360基于levelDB开发支持了网络接口的SSDB,SSDB是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 
支持 KV, list, map(hash), zset(sorted set) 等数据结构, 用来替代或者与 Redis 配合存储十亿级别列表的数据,SSDB支持100倍与redis的容量,
因此宣称要替换redis,SSDB支持网络、支持redis客户端、支持python/java/go/PHP/C++语言、支持持久化、支持主从复制、主主复制和负载均衡等功能。






安装环境
centos7 
master1 192.168.1.209   node1
master2 192.168.1.208   node2


下载安装并编译:
cd /usr/local/src
wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
unzip master.zip
默认会编译安装到/usr/local/ssdb
cd ssdb-master/
make
make install
修改启动脚本
cp tools/ssdb.sh /etc/init.d/ssdb
vim /etc/init.d/ssdb
configs="/usr/local/ssdb/ssdb.conf"


加入启动项
chkconfig --add ssdb
chkconfig ssdb on
chkconfig --list ssdb


配置环境变量
vim /etc/profile
PATH=$PATH:/usr/local/ssdb
export PATH


source /etc/profile






SSDB 数据库是支持双主(双 Master)和多主架构的. 而且, 我们的应用也是部署双主架构, 但当作单主来用. 也就是说, 平时只往其中一个写, 当出现故障时, 
整体切换到另一个主上面. 如果应用层已经解决了数据拆分, 也即不会两个节点同时操作一个 key, 那么就可以放心使用双主同时写入.


SSDB 双主的配置非常简单:
只需要将 type 设置为 mirror, 然后每个节点各指向对方即可.
如果是多主, 则每个节点要指向其它 n-1 个节点.






双主配置文件:
主库配置文件:
vim /usr/local/ssdb/ssdb.conf
# ssdb-server config
# MUST indent by TAB!


# relative to path of this file, directory must exists
work_dir = ./var
pidfile = ./var/ssdb.pid


server:
        ip:  192.168.1.209
        port: 8888
        # bind to public ip
        #ip: 0.0.0.0
        # format: allow|deny: all|ip_prefix
        # multiple allows or denys is supported
        #deny: all
        #allow: 127.0.0.1
        #allow: 192.168
        # auth password must be at least 32 characters
        #auth: very-strong-password
        #readonly: yes


replication:
        binlog: yes
        # Limit sync speed to *MB/s, -1: no limit
        sync_speed: -1
        slaveof:
                id: node2
                type: mirror
                host: 192.168.1.208
                port: 8888
                # to identify a master even if it moved(ip, port changed)
                # if set to empty or not defined, ip:port will be used.
                #id: svc_2
                # sync|mirror, default is sync
                #type: sync
                #host: localhost
                #port: 8889
logger:
        level: debug
        output: log.txt
        rotate:
                size: 1000000000


leveldb:
        # in MB
        cache_size: 500
        # in MB
        write_buffer_size: 64
        # in MB/s
        compaction_speed: 1000
        # yes|no
        compression: yes


从库配置文件
vim /usr/local/ssdb/ssdb.conf
# ssdb-server config
# MUST indent by TAB!


# relative to path of this file, directory must exists
work_dir = ./var
pidfile = ./var/ssdb.pid


server:
        ip: 192.168.1.208
        port: 8888
        # bind to public ip
        #ip: 0.0.0.0
        # format: allow|deny: all|ip_prefix
        # multiple allows or denys is supported
        #deny: all
        #allow: 127.0.0.1
        #allow: 192.168
        # auth password must be at least 32 characters
        #auth: very-strong-password
        #readonly: yes


replication:
        binlog: yes
        # Limit sync speed to *MB/s, -1: no limit
        sync_speed: -1
        slaveof:
                id: node1
                type: mirror
                host: 192.168.1.209
                port: 8888
                # to identify a master even if it moved(ip, port changed)
                # if set to empty or not defined, ip:port will be used.
                #id: svc_2
                # sync|mirror, default is sync
                #type: sync
                #host: localhost
                #port: 8889


logger:
        level: debug
        output: log.txt
        rotate:
                size: 1000000000


leveldb:
        # in MB
        cache_size: 500
        # in MB
        write_buffer_size: 64
        # in MB/s
        compaction_speed: 1000
        # yes|no
        compression: yes








启动服务:
/etc/init.d/ssdb start




此时在任意节点写入数据都会在另外的节点查询到


node2 登录
ssdb-cli -h 192.168.1.208 -p 8888


ssdb 192.168.1.208:8888> set mic wangxin
ok
(0.000 sec)
ssdb 192.168.1.208:8888> get mic
wangxin
(0.000 sec)




node1 登录 查询


ssdb-cli -h 192.168.1.209 -p 8888
ssdb 192.168.1.209:8888> get mic
wangxin
(0.001 sec)






项目链接:https://github.com/ideawu/ssdb 


=====================================================================================================================================================================
Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。
该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题
这里我们使用Twemproxy代理来代理SSDB集群来实现数据的分布式存储,即shared。




Twemproxy部署环境
centos7 


192.168.1.206




编译安装autoconf:
cd /usr/local/src/
wget  http://down1.chinaunix.net/distfiles/autoconf-2.69.tar.xz
xz -d autoconf-2.69.tar.xz 
tar xf autoconf-2.69.tar 
cd autoconf-2.69
./configure 
make
make install


编译安装twemproxy:
cd /usr/local/src
wget https://codeload.github.com/twitter/twemproxy/zip/master
unzip master
cd twemproxy-master/
autoreconf -fvi
./configure  --prefix=/usr/local/twemproxy
make -j 8
make install




设置环境变量
echo "PATH=$PATH:/usr/local/twemproxy/sbin/" >> /etc/profile
source  /etc/profile


创建相关目录(存放配置文件和pid文件)
cd /usr/local/twemproxy/
mkdir run conf




添加proxy配置文件
vim /usr/local/twemproxy/conf/nutcracker.yml
alpha:
  listen: 192.168.1.206:22121     ## 监听地址和端口
  hash: fnv1a_64                  ## 散列算法
  distribution: ketama            ## 分片的算法,有ketama(一致性hash)、module(取模)、random(随机)三种算法
  auto_eject_hosts: true          ## 是否在节点无法响应时自动从服务器列表中剔除,重新响应时自动加入服务器列表中
  redis: true                     ## 后端代理的是否为redis
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 192.168.1.209:8888:1 server1
   - 192.168.4.208:8888:1 server2


启动Twemproxy测试服务
cd /usr/local/twemproxy/
cp -a conf sbin/
cd sbin/
./nutcracker -t


测试通过即可正式启动
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/ssdbproxy.pid -o /usr/local/twemproxy/run/ssdbproxy.log


查看进程
ps -ef | grep nutcracker | grep -v grep


登录 测试
redis-cli -h 192.168.1.206 -p 22121




项目链接:https://github.com/twitter/twemproxy

















你可能感兴趣的:(redis)