codis集群搭建

                                                                                             codis分布式集群部署

1.codis简介

         Codis是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.

2.codis组件

         Codis基本框架由以下组件组成:

                   1、Codis Proxy

                   客户端连接的 Redis 代理服务, 实现了 Redis 协议。除部分命令不支持以外,表现的和原生的 Redis没有区别。

                   2、CodisDashboard

                   集群管理工具,支持codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。

                   3、Codis Server

                   基于 Redis 开发,增加了额外的数据结构,提供下层的 Redis 服务。

2.系统环境介绍

         实验用系统皆为centos7.1

         ip                                  role                                  hostname

         192.168.8.71   codis-proxy               atlan4

         192.168.8.72   codis-server                   atlan5

         192.168.8.73   codis-server             atlan6


3.安装go语言环境(三台都做)

         1.下载go语言二进制包

                

  wgethttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz

         2.解压go语言包

                 

 tar zxfhttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz -C /usr/local/

         3.配置环境变量

          

       vi /etc/profile.d/go.sh

                            exportGOPATH=/usr/local/codis

                            exportGOROOT=/usr/local/go

                            exportPATH=$PATH:/usr/local/go/bin

                   source/etc/profile.d/go.sh

         4.设置编译环境

                  

mkdir -p$GOPATH/src/github.com/CodisLabs

4.下载codis源码包并编译

        

wgethttps://codeload.github.com/CodisLabs/codis/zip/release3.2

         unzip codis-release3.2.zip

         mv codis-release3.2$GOPATH/src/github.com/CodisLabs/codis

         cd$GOPATH/src/github.com/CodisLabs/codis

         ls

                   admin    bin config  doc         dump.rdb  extern kubernetes  Makefile         pkg        scripts version

                   ansible  cmd deploy  Dockerfile  example  Godeps  log         MIT-LICENSE.txt  README.md vendor   wandoujia_license.txt

         yum install -ygcc git autoconf

         make MALLOC=libc

5.配置一个集群

       Codis源 码 编 译 完 成 后 , 组 件 的 启 动 脚 本 在GOPATH/src/github.com/CodisLabs/codis/admin目录下。配置文件在GOPATH/src/github.com/CodisLabs/codis/config目录下。日志在$GOPATH/src/github.com/CodisLabs/codis/log 目录下。

         1.codis-proxy配置

                   1。安装jdk

                         

  yum -y install yum -y install java-1.8.0-openjdk*

                   2.安装zookeeper

                         

  wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

                            tar zxfzookeeper-3.4.12.tar.gz -C /usr/local/

                            vim/etc/profile.d/zookeeper.sh

                                     exportZOOKEEPER_HOME=/usr/local/zookeeper-3.4.12

                                     exportPATH=$PATH:/usr/local/go/bin:$ZOOKEEPER_HOME/bin

                            source/etc/profile.d/zookeeper.sh

                   3.配置zookeeper,修改配置文件

                          

 cp /usr/local/zookeeper-3.4.12/conf/zoo_sample.cfg/usr/local/zookeeper-3.4.12/conf/zoo.cfg

 

                            vim/usr/local/zookeeper-3.4.12/conf/zoo.cfg

                                     tickTime=2000

                                     initLimit=10

                                     syncLimit=5

                                     dataDir=/data/zookeeper

                                     autopurge.snapRetainCount=500

                                     autopurge.purgeInterval=24

                                     clientPort=2181

                                     #server.1=codis-1:2888:3888

                                     #server.2=codis-2:2888:3888

                                     #server.2=codis-3:2888:3888

                            mkdir -pv/data/zookeeper

                            echo"1" > /data/zookeeper/myid

                   设置myid:

                            设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件配置的srver.X中的X为什么数字,则myid文件就输入这个数字,我只有一台zk,所以配置文件里可以不配置server.X,但还是要配置myid的,echo一个数字1进去即可。如果有多台zk,则分别在zk服务器上echo对应的数字进对应的myid文件

                   4.codis结合zookeeper

                           

vim /usr/local/codis/config.ini

                                     zk=localhost:2181  //zookeeper的地址, 如果是zookeeper集群,可以这么写:zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5:2181,如果是etcd,则写成http://hostname1:port,http://hostname2:port,http://hostname3:port

                                     product=test   //产品名称, 这个codis集群的名字, 可以认为是命名空间, 不同命名空间的codis没有交集

                                     proxy_id=proxy_1    //proxy会读取, 用于标记proxy的名字, 针对多个proxy的情况, 可以使用不同的config.ini, 只需要更改 proxy_id 即可

                                     net_timeout=5                  //检测状态时间间隔

                                     dashboard_addr=localhost:18087    //dashboard 服务的地址,CLI 的所有命令都依赖于 dashboard 的 RESTfu

                                     coordinator=zookeeper    //如果用etcd,则将zookeeper替换为etcd

6.启动顺序

        

  

start zookeeper //启动zookeeper服务

   change config items in config.ini //修改codis配置文件

   ./start_dashboard.sh //启动 dashboard

   ./start_redis.sh //启动redis实例

   ./add_group.sh //添加redis组,一个redis组只能有一个master

   ./initslot.sh //初始化槽

    ./start_proxy.sh //启动proxy

   ./set_proxy_online.sh //上线proxy项目

   open browser to http://localhost:18087/admin //访问web

7.启动各个组件

         启动zookeeper

                 

 [root@atlan4conf]# zkServer.sh start

                            ZooKeeperJMX enabled by default

                            Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg

                            Startingzookeeper ... STARTED

                   [root@atlan4conf]# zkServer.sh status

                            ZooKeeperJMX enabled by default

                            Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg

                            Mode:standalone

         启动codisproxy

               

  [root@atlan4 conf]#/usr/local/codis/src/github.com/CodisLabs/codis/admin/codis-proxy-admin.shstart

                   /usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/proxy.toml

                   startingcodis-proxy ...

                   [root@atlan4codis]# pwd

                            /usr/local/codis/src/github.com/CodisLabs/codis

                   [root@atlan4codis]# tail log/codis-proxy.log.2018-06-30

                            2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca7e0] to192.168.8.72:6379, db-11 round-[0]

                            2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 start service

                            2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 round-[0]

                            2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306caa20] to 192.168.8.72:6379,db-14 start service

                            2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306caa20] to192.168.8.72:6379, db-14 round-[0]

                            2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/start/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920 []

                            2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/sentinels/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920[]

                            2018/06/3018:46:49 proxy.go:293: [WARN] [0xc4200c08f0] set sentinels = []

                            2018/06/3018:46:49 main.go:343: [WARN] rpc online proxy seems OK

                            2018/06/3018:46:50 main.go:233: [WARN] [0xc4200c08f0] proxy is working ...

         启动codis-server(三台都启动)

                 

 [root@atlan4codis]# ./admin/codis-server-admin.sh start

                            /usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/redis.conf

                            startingcodis-server ...

                   [root@atlan4codis]# tail /tmp/redis_6379.log

                            1803:M 30Jun 18:50:36.064 * Background saving terminated with success

                            1803:M 30Jun 18:50:36.064 * Synchronization with slave 192.168.8.72:6379 succeeded

                            1803:M 30Jun 18:50:36.089 * Slave 192.168.8.73:6379 asks for synchronization

                            1803:M 30Jun 18:50:36.089 * Partial resynchronization not accepted: Runid mismatch(Client asked for runid 'd585494bee79e778b05737b465dacffc29dd520e', my runid is'3ce28d86c88e2713dae1180d390e685949873248')

                            1803:M 30Jun 18:50:36.089 * Starting BGSAVE for SYNC with target: disk

                            1803:M 30Jun 18:50:36.089 * Background saving started by pid 1808

                            1808:C 30Jun 18:50:36.090 * DB saved on disk

                            1808:C 30Jun 18:50:36.091 * RDB: 0 MB of memory used by copy-on-write

                            1803:M 30Jun 18:50:36.165 * Background saving terminated with success

                            1803:M 30Jun 18:50:36.165 * Synchronization with slave 192.168.8.73:6379 succeeded

 

         启动codisFe

                 

 [root@atlan4 codis]#./admin/codis-fe-admin.sh start

 

                            startingcodis-fe ...

                   [root@atlan4codis]# tail log/codis-fe.

                            codis-fe.log.2018-06-30  codis-fe.out

                            [root@atlan4codis]# tail log/codis-fe.log.2018-06-30

                            2018/06/3016:58:50 main.go:101: [WARN] set ncpu = 1

                            2018/06/3016:58:50 main.go:104: [WARN] set listen = 0.0.0.0:9090

                            2018/06/3016:58:50 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets

                            2018/06/3016:58:50 main.go:162: [WARN] set --filesystem = /tmp/codis

                            2018/06/3016:58:50 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid

                            2018/06/3018:53:27 main.go:101: [WARN] set ncpu = 1

                            2018/06/3018:53:27 main.go:104: [WARN] set listen = 0.0.0.0:9090

                            2018/06/3018:53:27 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets

                            2018/06/3018:53:27 main.go:162: [WARN] set --filesystem = /tmp/codis

                            2018/06/3018:53:27 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid

8.web界面

         浏览器访问http://192.168.8.71:9090即可进入web管理页面

codis集群搭建_第1张图片

codis-proxy已经激活

配置新的codis集群

codis集群搭建_第2张图片

先在新建一个组我的是1

添加主机


Data center在此处不需要填,在codis server address中填入codis主机的IP和端口

Group填如你刚才创建的组我的1

完成之后是这样的

codis集群搭建_第3张图片

至此codis集群已经创建完成

你可能感兴趣的:(redis)