yum install gcc –y、yum install tcl -y
2.使用ruby(5.x以上版本不用)
脚本搭建集群,需要ruby的运行环境。yum install ruby yum install rubygems gem install redis(5.x以后不用ruby)
安装ruby脚本运行所需的依赖包 redis-3.0.0.gem。gem install redis-.3.0.X.gem(或以上,与redis版本一致。)
3.JDK 1.8
若之前有残留需清理干净之前的rpm -a|grep java查找。Java Downloads | Oracle。这里不详细介绍,网上有很多
4.redis环境变量:(可选配)
export NODE_HOME=/usr/local/redis/bin;(redis路径)
export PATH= $PATH:NODE_HOME;
编辑完成,执行刷新使其生效source /etc/profile
redis5以后不用redis-trib.rb,用redis-cli。执行命令./redis-cli -a 密码 --cluster create 192.168.25.131:7001 192.168.25.131:7002 192.168.25.131:7003 192.168.25.131:7004 192.168.25.131:7005 192.168.25.131:7006 --cluster-replicas 1
进入src客户端执行 sh redis-cli -c -p 7001验证集群。
1、redis.conf配置
必配:
Include xxx/xx/xx/redis.conf(要全路径)
port 端口号
daemonize yes(异步启动)
cluster-enabled yes(集群开启)
appendonly yes (开启AOF)
bind 192.168.119.131(绑定当前机器 IP)
pidfile /var/run/redis_端口号.pid(进程文件位置)
appendfilename appendonly-端口号.aof(AOF文件名)
cluster-config-file nodes-端口号.conf(集群配置文件)
logfile /xxx/xx/logs/xxx.log(指定日志位置)
dir /xx/xx/redis_8288/ (快照路径)
rename-command KEYS ""(禁用命令)
rename-command FLUSHDB ""(禁用命令)
rename-command FLUSHALL ""(禁用命令)
选配:
repl-disable-tcp-nodelay no(主从复制,保证数据一致。默认)
maxclients 10000 (默认)
cluster-node-timeout 15000(节点等待超时,默认)
auto-aof-rewrite-percentage 80 (aof文件增长比例)
stop-writes-on-bgsave-error no(出rdb也可继续使用)
maxmemory 20gb (内存)
maxmemory-policy allkeys-lru/volatile-lru (淘汰策略)
appendfsync everysec/always (待定?)
tcp-backlog 551(取值不能超过系统的/proc/sys/net/core/somaxconn,默认)
requirepass 密码 (是否免密)
cluster-migration-barrier 1 (最少slave数,多从时设置)
2、其余配置
修改文件/etc/security/limits.conf
root soft nofile 102400(一个进程最大可以打开的文件个数,当与RedisServer的连接数多时,需要设定为合适的值)
root hard nofile 102400
修改文件/etc/sysctl.conf
net.core.somaxconn = 32767(TCP监听队列大小,默认128想,较小)
vm.overcommit_memory=1(默认0开启,1关闭Overcommit,表示允许申请超过CommitLimmit大小的内存)
执行命令“sysctl -p”以生效。
1)指定配置文件启动容器
sudo docker run --name=node1 \
--restart=always \
--privileged=true \
-v /mnt/data/redis/node1/:/data \
-v /mnt/logs/redis/redis.log:/logs \
-v /mnt/data/redis/node1/node1.conf:/data/node1.conf \
-d redis redis-server /data/node1.conf
sudo docker run --name=node2 \
--restart=always \
--privileged=true \
-v /mnt/data/redis/node2/:/data \
-v /mnt/logs/redis/redis.log:/logs \
-v /mnt/data/redis/node2/node2.conf:/data/node2.conf \
-d redis redis-server /data/node2.conf
sudo docker run --name=node3 \
--restart=always \
--privileged=true \
-v /mnt/data/redis/node3/:/data \
-v /mnt/logs/redis/redis.log:/logs \
-v /mnt/data/redis/node3/node3.conf:/data/node3.conf \
-d redis redis-server /data/node3.conf
配置文件样例:参看靠上文配置
说明:
-v /data/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置
--name= 容器名
-v /data/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
--net host 指定网络类型host,不需做端口映射。共享物理机的所有端口与IP服务,使项目和集群可在不同服务器上,这里单机部署暂时不用
敲黑板:
“:”后面的是容器的路径,后面的redis.conf也是容器内的路径,包配置文件里配置的路径。启动后若报容器内xx文件无权限则添加参数--privileged=true,增加特权。
2)查看集群窗台确定启动成功
docker ps
docker logs 容器名
3)获取节点信息-容器IP(若host类型则不用)
docker inspect node1
docker inspect node2
docker inspect node3
4)进入容器
docker exec -it node1 bash
5)集群组建
redis-cli --cluster create 172.17.0.6:25001 172.17.0.7:25002 172.17.0.8:25003 --cluster-replicas 0 (无从节点)
6)进入客户端验证集群
进入容器交互,sudo docker exec -it 容器名 bash
执行redis-cli -c -p端口
或者直接外部链接
sudo docker run -it --link 容器名:redis --rm redis redis-cli -h redis -p 端口
1)解压配置
下载xxx.tar.gz,解压至xxx/docker_redis/,并执行make编译。配置好redis.conf。进入到xxx/docker_redis/下编写vi Dockerfile。
2)编写dockerfile
示例:
# Redis
# Version 5.0.14
#指定基础镜像
FROM centos:7
#镜像作者
MAINTAINER yinsy
#定义路径的环境变量
ENV REDIS_HOME /mnt/software/
#将本地Dockerfile同级目录下的redis源码包复制到镜像的根路径下
#ADD命令会在复制过后自动解包。ADD后面必须使用相对路径
ADD redis-5.0.14.tar.gz /
#创建安装目录
RUN mkdir -p $REDIS_HOME/redis
#将Dockerfile同级目录下redis-5.0.14中的redis配置文件拷贝到容器的目录中
ADD redis-5.0.14/redis.conf $REDIS_HOME/redis/
#更新镜像的yum,安装gcc相关编译工
RUN yum -y update
RUN yum install -y gcc make
#指定工作目录
WORKDIR /redis-5.0.14
#执行编译
RUN make
#移动编译后的redis-server到容器相关的目录,容器中只需要可执行文件redis-server ???
RUN mv /redis-5.0.14/src/redis-server $REDIS_HOME/redis/
#移动到上一级,删除解压文件
WORKDIR /
RUN rm -rf /redis-5.0.14
#安装编译完成之后,删除多余的gcc、make
RUN yum remove -y gcc make
#添加数据卷
#/usr/local/redis/logs/redis-server.log
#此目录需要和redis.conf中logfile一致
VOLUME ["/mnt/logs/redis/"]
#暴露25100的端口
EXPOSE 25100
3)创建镜像
docker build -t jingxiang/redis-cluster
后面还有一个. 这个.表示当前目录下的Dockerfile
查看镜像docker images
4)制作节点镜像
mkdir /xxx/redis_docker/redis-node
cd /xxx/redis_docker/redis-node
vi Dockerfile,具体内容如下:
# Redis Node
# Version 5.0.14<
FROM jingxiang/ redis-cluster:latest
# MAINTAINER_INFO
MAINTAINER jingxiang [email protected]
#容器server和conf的位置(结合dockerfile中该文件的配置)
ENTRYPOINT ["/mnt/software/redis/redis-server", "/mnt/software/redis/redis.conf"]
5)构建节点镜像
docker build -t jingxiang/redis-node .
查看镜像docker images
6)启动各节点容器
sudo docker run -d --name redis-node-25100 -p 25100:6379 jingxiang/redis-node
sudo docker run -d --name redis-node-25200 -p 25200:6379 jingxiang /redis-node
sudo docker run -d --name redis-node-25300 -p 25300:6379 jingxiang /redis-node
sudo docker run -d --name redis-node-25400 -p 25400:6379 jingxiang /redis-node
sudo docker run -d --name redis-node-25500 -p 25500:6379 jingxiang /redis-node
sudo docker run -d --name redis-node-25600 -p 25600:6379 jingxiang /redis-node
7)查看容器关联IP
容器状态和ID查看docker ps
dIP关联查看ocker inspect 容器ID(根据自己的实际情况填) | grep IPAddress
8)配置集群
进入任意redis节点 redis-cli -h xx.x.x.xx -p 25000
集群感知,将以所有的redis服务都添加到redis集群的节点(节点添加)
CLUSTER MEET 容器IP 6379
CLUSTER MEET 容器IP 6379
CLUSTER MEET 容器IP 6379
CLUSTER MEET 容器IP 6379
CLUSTER MEET 容器IP 6379
CLUSTER MEET 容器IP 6379
查看CLUSTER NODES查看节点,此时未分配slot槽点且配置主从关系
9)分配槽点(选三个节点分配槽点作为master)
cd /xxx/redis_docker
vi addslots.sh 示例如下:
#!/bin/bash
#将0-5461的槽点配置在172.17.0.4:6379(宿主机127.0.0.1:7000)的redis上
n=0
for ((i=n;i<=5461;i++))
do
/xxx/bin/redis-cli -h 127.0.0.1 -p 7000 -a 密码 CLUSTER ADDSLOTS $i
done
#将5462-10922的槽点配置在172.17.0.5:6379(宿主机127.0.0.1:7001)的redis上
n=5462
for ((i=n;i<=10922;i++))
do
/xxx/bin/redis-cli -h 127.0.0.1 -p 7001 -a 密码 CLUSTER ADDSLOTS $i
done
#将10923-16383的槽点配置在172.17.0.6:6379(宿主机127.0.0.1:7002)的redis上
n=10923
for ((i=n;i<=16383;i++))
do
/xxx/bin/redis-cli -h 127.0.0.1 -p 7002 -a 密码 CLUSTER ADDSLOTS $i
done
执行脚本sh addslots.sh
10)主从配置(选3个未分配槽点的作为从节点)
编写脚本vi addSlaveNodes.sh
#CLUSTER REPLICATE后面跟的是172.17.0.4:6379的集群ID
/xxx/bin/redis-cli -h 127.0.0.1 -p 7003 -a 密码 CLUSTER REPLICATE ae3f32ffe860ab89b7f7e8f3c33e3f83a9b49226
#CLUSTER REPLICATE后面跟的是172.17.0.5:6379的集群ID
/xxx/bin/redis-cli -h 127.0.0.1 -p 7004 -a 密码 CLUSTER REPLICATE b727870ce91ad7389ab62d9088d4146947002af9
#CLUSTER REPLICATE后面跟的是172.17.0.6:6379的集群ID
/xxx/bin/redis-cli -h 127.0.0.1 -p 7005 -a 密码 CLUSTER REPLICATE 6c19857b5bbf4cbd91f3b2b11e9d055e9e288f87
执行脚本sh addSlaveNodes.sh
11)验证测试
略