Codis3.2.2集群部署与使用

参考:https://blog.csdn.net/mnasd/article/details/80568003

环境:Centos7

机器:10.2.10.108,10.2.10.109,10.2.10.120

规划:

  zookeeper codis-server(主/从) codis-sentinel codis-proxy codis-dashboard codis-fe
10.2.10.108    
10.2.10.109
10.2.10.120    

部署:

目录

1.安装golang

2.安装jdk

3.安装配置zookeeper集群

4.下载配置codis-3.2.2

   1)下载

   2)配置启动codis-server(三台同样操作)

   3)配置redis-sentinel(三台)

   4)配置codis-proxy(三台)

   5)配置codis-dashboard(一台,我这里在10.2.10.109上)

  6)配置codis-fe(一台,我这里在10.2.10.109上)

5.界面使用

   1)添加proxy

   2)添加group和server

   3)添加sentinels

6.报错与解决

7.测试

8.管理界面添加用户认证

   1)安装nginx

   2)启动nginx

   3)设置账号密码

   4)重启nginx


1.安装golang

   先查看本地是否有go环境,go version,如果出现版本,则说明有,跳过该步骤;如果没有,显示command not found,则说明没有安装,需进行以下操作:

   yum install golang

   go version

2.安装jdk

   rpm -qa|grep java

   rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64

   yum install jdk-8u152-linux-x64.rpm

   javac -version

3.安装配置zookeeper集群

   百度安装

   启动:bin/zkServer.sh start(三台均启动)

4.下载配置codis-3.2.2

   1)下载

   https://github.com/CodisLabs/codis/releases/download/3.2.2/codis3.2.2-go1.9.2-linux.tar.gz

   解压:tar –zxf codis3.2.2-go1.9.2-linux.tar.gz –C /usr/local/software/

   将解压后的codis3.2.2发送到其他机器上:scp -r codis3.2.2-go1.9.2-linux/ 10.2.10.108:/usr/local/software/

                                                                      scp -r codis3.2.2-go1.9.2-linux/ 10.2.10.120:/usr/local/software/

   2)配置启动codis-server(三台同样操作)

   A.配置

  在10.2.10.109上执行

 mkdir -p  /redis/data/config/

   mkdir -p  /redis/data/logs/

   #master的配置文件

   vim /redis/data/config/redis_6379.conf

#允许后台运行

daemonize yes

#设置端口,最好是非默认端口

port 6379

#绑定登录IP,安全考虑,最好是内网

bind *

#命名并指定当前redis的PID路径,用以区分多个redis

pidfile "/redis/data/config/redis_6379.pid"

#命名并指定当前redis日志文件路径

logfile "/redis/data/logs/redis_6379.log"

#指定RDB文件名,用以备份数据到硬盘并区分不同redis,当使用内存超过可用内存的45%时触发快照功能

dbfilename "dump_6379.rdb"

#指定当前redis的根目录,用来存放RDB/AOF文件

dir "/redis/data"

#当前redis的认证密钥,redis运行速度非常快,这个密码要足够强大,

#所有codis-proxy集群相关的redis-server认证密码必须全部一致

requirepass "codisqwer"

#当前redis的最大容量限制,建议设置为可用内存的45%内,最高能设置为系统可用内存的95%,

#可用config set maxmemory 去在线修改,但重启失效,需要使用config rewrite命令去刷新配置文件

#注意,使用codis集群,必须配置容量大小限制,不然无法启动

maxmemory 100000kb

#LRU的策略,有四种,看情况选择

maxmemory-policy allkeys-lru

#如果做故障切换,不论主从节点都要填写密码且要保持一致

masterauth "codisqwer"

#修改库个数,默认为16

databases 64

   #创建slave的配置文件,暂时只配置这些,其他先默认

   vim /redis/data/config/redis_6380.conf

#允许后台运行

daemonize yes

#设置端口,最好是非默认端口

port 6380

#绑定登录IP,安全考虑,最好是内网

bind *

#命名并指定当前redis的PID路径,用以区分多个redis

pidfile "/redis/data/config/redis_6380.pid"

#命名并指定当前redis日志文件路径

logfile "/redis/data/logs/redis_6380.log"

#指定RDB文件名,用以备份数据到硬盘并区分不同redis,当使用内存超过可用内存的45%时触发快照功能

dbfilename "dump_6380.rdb"

#指定当前redis的根目录,用来存放RDB/AOF文件

dir "/redis/data"

#当前redis的认证密钥,redis运行速度非常快,这个密码要足够强大

#所有codis-proxy集群相关的redis-server认证密码必须全部一致

requirepass "codisqwer"

#当前redis的最大容量限制,建议设置为可用内存的45%内,最高能设置为系统可用内存的95%,

#可用config set maxmemory 去在线修改,但重启失效,需要使用config rewrite命令去刷新配置文件

#注意,使用codis集群,必须配置容量大小限制,不然无法启动

maxmemory 100000kb

#LRU的策略,有四种,看情况选择

maxmemory-policy allkeys-lru

#如果做故障切换,不论主从节点都要填写密码且要保持一致

masterauth "codisqwer"

#配置主节点信息

slaveof 10.2.10.109 6379

#修改库个数,默认为16

databases 64

   将master和slave的配置文件发送到其他机器:scp –r /redis/ 10.2.10.108:/

                                                                             scp –r /redis/ 10.2.10.120:/

   修改slave配置文件中的主节点信息:slaveof 10.2.10.108 6379

                                                               slaveof 10.2.10.120 6379

 

   B.启动(三台均执行)

   #然后就可以启动了, codis-server就是redis-server

    /usr/local/software/codis3.2.2-go1.9.2-linux/codis-server /redis/data/config/redis_6379.conf

    /usr/local/software/codis3.2.2-go1.9.2-linux/codis-server /redis/data/config/redis_6380.conf

   #验证一下

   ss -ntplu |grep codis-server

   3)配置redis-sentinel(三台)

   redis-sentinel是要配置主从架构才能生效,但是在codis集群中并不一样,因为他的配置由zookeeper来维护,所以,这里codis使用       的redis-sentinel只需要配置一些基本配置就可以了。

   在10.2.10.109上执行

   vim /redis/data/config/sentinel.conf

bind 0.0.0.0

protected-mode no

port 26379

dir "/redis/data"

pidfile "/redis/data/config/sentinel_26379.pid"

logfile "/redis/data/logs/sentinel_26379.log"

daemonize yes

  将sentinel的配置文件发送到其他机器上:

   scp /redis/data/config/sentinel.conf 10.2.10.108:/redis/data/config/

   scp /redis/data/config/sentinel.conf 10.2.10.120:/redis/data/config/

 #然后就可以启动了

   /usr/local/software/codis3.2.2-go1.9.2-linux/redis-sentinel  /redis/data/config/sentinel.conf

   #验证一下

   /usr/local/software/codis3.2.2-go1.9.2-linux/redis-cli -p 26379 -c info Sentinel

   4)配置codis-proxy(三台)

   #在10.2.10.109上执行,先生成一下默认的配置文件

   /usr/local/software/codis3.2.2-go1.9.2-linux/codis-proxy --default-config | tee ./proxy.conf

   #然后把配置放到redis数据目录的配置文件目录,再更改关键位置,其他默认即可。同样,参数的设置也可参照源码codis-           3.2.2/pkg/proxy/config.go

   vim /redis/data/config/proxy.conf

#项目名称,会登记在zookeeper里,如果你想一套zookeeper管理多套codis,就必须区分好

product_name = "codis-test1"

# 设置登录dashboard的密码(与真实redis中requirepass一致)

product_auth = "codisqwer"

#客户端(redis-cli)的登录密码(与真实redis中requirepass不一致),是登录codis的密码

session_auth = "qwer!23"

#管理的端口,0.0.0.0即对所有ip开放,基于安全考虑,可以限制内网

admin_addr = "0.0.0.0:11080"

#用哪种方式通信,假如你的网络支持tcp6的话就可以设别的

proto_type = "tcp4"

#客户端(redis-cli)访问代理的端口,0.0.0.0即对所有ip开放

proxy_addr = "0.0.0.0:19000"

#外部配置存储类型,我们用的就是zookeeper,当然也是还有其他可以支持,这里不展开说

jodis_name = "zookeeper"

#配置zookeeper的连接地址,这里是三台就填三台

jodis_addr = "10.2.10.108:2181,10.2.10.109:2181,10.2.10.120:2181"

#zookeeper的密码,假如有的话

jodis_auth = ""

#codis代理的最大连接数,默认是1000,并发大要调大

proxy_max_clients = 1000

#假如并发太大,你可能需要调这个pipeline参数,大多数情况默认就够了

session_max_pipeline = 10000

# 修改库的个数,默认是16,这里与上面redis.conf保持一致

backend_number_databases = 64

   拷贝到其他机器上:

   scp  /redis/data/config/proxy.conf 10.2.10.108:/redis/data/config/

   scp  /redis/data/config/proxy.conf 10.2.10.120:/redis/data/config/

   #然后就可以启动了(三台),

   /usr/local/software/codis3.2.2-go1.9.2-linux/codis-proxy --ncpu=4 --config=/redis/data/config/proxy.conf --log=/redis/data/logs/proxy.log &

   #验证一下

   ss -ntplu |grep codis-proxy

   说明:

--ncpu    指定使用多少个cpu,(lscpu)

--config    指定配置文件,就是刚才的配置文件

--log    指定输出日志文件

   5)配置codis-dashboard(一台,我这里在10.2.10.109上)

   #我们也可以用程序来生成一下默认配置文件

   /usr/local/software/codis3.2.2-go1.9.2-linux/codis-dashboard --default-config | tee ./dashboard.conf

   #然后我们把配置放到redis数据目录的配置文件目录,再更改关键位置,其他默认即可

   vim /redis/data/config/dashboard.conf

#外部配置存储类型,我们用的就是zookeeper,当然也是还有其他可以支持,这里不展开说

coordinator_name="zookeeper"                                                                                                 
coordinator_addr = "10.2.10.108:2181,10.2.10.109:2181,10.2.10.120:2181"

coordinator_auth = ""

#项目名称,会登记在zookeeper里,如果你想一套zookeeper管理多套codis,就必须区分好

product_name = "codis-test1"

#所有redis的登录密码(与真实redis中requirepass一致),因为要登录进去修改数据

product_auth = "codisqwer"


#codis-dashboard的通信端口,0.0.0.0表示对所有开放,最好使用内网地址

admin_addr = "0.0.0.0:18080"


# Set arguments for data migration (only accept 'sync' & 'semi-async').

migration_method = "semi-async"

migration_parallel_slots = 100

migration_async_maxbulks = 200

migration_async_maxbytes = "32mb"

migration_async_numkeys = 500

migration_timeout = "30s"


# Set configs for redis sentinel.

sentinel_client_timeout = "10s"

sentinel_quorum = 2

sentinel_parallel_syncs = 1

sentinel_down_after = "30s"

sentinel_failover_timeout = "5m"

#如果想要在codis集群在故障切换功能上执行一些脚本,可以配置以下两个配置

sentinel_notification_script = ""

sentinel_client_reconfig_script = ""

  #然后就可以启动了,

   /usr/local/software/codis/codis-dashboard --ncpu=4 --config=/redis/data/config/dashboard.conf --    log=/redis/data/logs/codis_dashboard.log --log-level=WARN &

  #验证一下

  ss -ntplu |grep codis-dashboard

  6)配置codis-fe(一台,我这里在10.2.10.109上)

这个工具本身不需要配置文件就能启动,只需要指定codis-dashboard的ip和端口就可以了,但是我为了方便管理,还是生成一个配置文件的好.

    vi /redis/data/config/codis.json 

[

    {

        "name": "codis-test1",

        "dashboard": "10.2.10.109:18080"

    }

]

   #然后就可以启动了,

   /usr/local/software/codis/codis-fe --ncpu=4 --log=/redis/data/logs/fe.log --log-level=WARN --dashboard-list=/redis/data/config/codis.json --listen=0.0.0.0:8090 &

5.界面使用

   打开网址:http://10.2.10.109:8090/

   1)添加proxy

因为10.2.10.109,10.2.10.108,10.2.10.120上均配置proxy,因此需要添加三个proxy.

   2)添加group和server

   因为在10.2.10.109,10.2.10.108,10.2.10.120上均配置server,每个机器上有一个master,一个slave,因此需要添加三组,每组添加主从服务的地址。

Codis3.2.2集群部署与使用_第1张图片

   3)添加sentinels

Codis3.2.2集群部署与使用_第2张图片

因为在10.2.10.109,10.2.10.108,10.2.10.120上均配置sentinels,因此需要添加三个sentinels。

6.报错与解决

  1)[email protected]:11080 check xauth failed, Get http://devopssvr.localhost.com:11080/api/proxy/xping/f26f4d92d86a056c49b9914fa99d1359: dial tcp: lookup devopssvr.localhost.com on 10.1.1.223:53: no such host",

   解决:需要在109机器上的/etc/hosts中添加10.2.10.108,10.2.10.120的host

   2)dashboard启动失败,或者dashboard界面打不开。日志文件中显示listen tcp 0.0.0.0:18080: bind: address already in use

   解决:netstat -nap | grep 18080

              kill pid

  3) codis-proxy:backend conn failure, set tcp 10.2.10.120:50053: use of closed network connection(删除错误)

   解决:在机器109上操作:/usr/local/software/codis-admin --dashboard=127.0.0.1:18080 --remove-proxy --addr=127.0.0.1:11080 --force #选项 --force 表示,无论 offline 操作是否成功,都从外部存储中将该节点删除。所以操作前,一定要确认该 codis-proxy 进程已经退出。

  4)codis-proxy:[email protected]:11080fetch model failed, Get http://10.2.10.108:11080/api/proxy/model: dial tcp 10.2.10.108:11080: getsockopt: connection refused(添加报错)

解决:10.2.10.108需要先启动proxy,才能在面板上进行添加操作。

5)codis-proxy总是莫名其妙地挂掉,codis-server正常

解决:三个机器上均关闭seniux防火墙,setenforce 06)客户端如何通过proxy实现keys类似模糊操作

解答:https://github.com/CodisLabs/codis/issues/1152,借助proxy的slotsscan命令遍历1024个slot实现类似keys效果。

7.测试

在其中一个机器上执行(这里选10.2.10.109):

/usr/local/software/codis/redis-cli -h 10.2.10.109 -p 19000 -a qwer!23

8.管理界面添加用户认证

  因为codis-fe集群管理界面打开后没有用户认证,存在一定的风险性,这里借助nginx为该集群管理界面添加用户认证功能。

   1)安装nginx

   yum install nginx

   ps –ef | grep nginx

   2)启动nginx

   sudo systemctl start nginx.service

   sudo systemctl enable nginx.service

   3)设置账号密码

     sudo yum install -y httpd-tools

    htpasswd -b -c /etc/nginx/passwd.db admin codis*#pwd

    vi /etc/nginx/conf.d/codis.conf

server {

    listen       80;

    server_name  codis.example.com;

    auth_basic "Restricted Access";

    auth_basic_user_file /etc/nginx/passwd.db;

   location /{

          proxy_pass http://10.2.10.109:8090;

    }

}

setenforce 0

   4)重启nginx

   sudo systemctl restart nginx.service

你可能感兴趣的:(Redis)