从0开始搭建redis cluster集群
1、VMware Workstation Pro 15安装centos7 系统版本CentOS-7-x86_64-Minimal-2003.iso 这是教程,我跟着做的,网卡那一刻特别要注意配置,不然ping命令不通的
2、安装docker
3、安装redis
docker19搭建rediscluster5集群
1. 拉取镜像
docker pull redis
如果需要拉取指定版本,需要在redis后面添加版本号,如果不指定则拉取最新版本镜像,可以使用docker search redis来搜索镜像
如果想指定某个版本的redis的话,这里好像没办法显示, 所以你可以去这个网站搜索对应的版本。或者在百度搜索docker pull redis
看到一个Docker hub的就是了。
我下载了5.0.8
所以使用的命令是docker pull redis:5.0.8
,然后如果下载过程真的很慢,那就配置镜像地址,
cd /etc/docker
找到daemon.json文件,如果没有就新建一个:复制进去
{
"registry-mirrors":["https://almtd3fa.mirror.aliyuncs.com"]
}
systemctl docker restart
重启docker就可以啦
2.开始创建redis配置文件模板
mkdir -p /home/redis-cluster
# redis-cluster保存配置文件
cd /home/redis-cluster
#创建配置文件保存文件夹
mkdir -p /home/redis-cluster/7001/conf
#创建 db文件保存文件夹
mkdir -p mkdir -p /home/redis-cluster/7001/data
下面是需要配置的redis.conf配置文件配置简要说明:
# 注释掉 bind 127.0.0.1
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file node-${PORT}.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.135.129
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
requirepass foobared
port | 端口 |
---|---|
cluster-config-file node-${PORT}.conf | 这个是自动生成的,应该是关于集群的信息,包括集群中其他机器的信息 |
cluster-enabled yes | |
cluster-node-timeout 15000 | 节点存活超时时长,超过一定时长,认为节点宕机,master宕机的话,就会触发主备切换,slaver宕机就不会提供服务,单位毫秒 |
cluster-announce-ip | |
cluster-announce-port | |
cluster-announce-bus-port | 总线端口,一般是默认使用端口+1万 |
appendonly yes | 开启持久化模式 |
requirepass | 密码,如果你没有设置密码的话, bind就会生效,就是代表限制这个ip的来登录,除非你设置 protected-mode no来关掉它(保护模式 |
protected-mode no | 关闭保护模式 |
切记不要在上面将daemonize yes
改为yes,不然启动后的redis会一直处于重启状态,,
如果想看更详细的配置文件详解
然后呢,大家不要下载原版的配置文件,用记事本找出上面的配置项进行修改,如果复制进去使用docker会有奇怪的问题,比如启动成功了,但配置视乎不生效,比如没发现有aof文件,所以我就亲自到官网下载了redis5.0.8的源码下来,讲配置文件复制出来按照自己上述的配置i进行修改,然后upload到服务器上再用docker跑
3.使用配置文件构建redis容器
创建文件夹放配置文件和数据文件
/home/redis-cluster/7001/conf/redis.conf
# 讲你修改好的配置文件copy到这,如果没这个文件夹就创建
/home/redis-cluster/7001/data
# 这个文件夹保存rdb文件,aof文件
**执行下列命令:**构建7001的容器
docker run -it -d -p 7001:7001 -p 17001:17001 \
--privileged=true -v /home/redis-cluster/7001/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v /home/redis-cluster/7001/data:/data \
--sysctl net.core.somaxconn=1024 --net host \
--restart always --name redis-7001 975fe4b9f798 redis-server /usr/local/etc/redis/redis.conf
-d 代表后台启动
-p 7001:7001代表讲宿主机的端口映射到容器的端口
-v 就是文件夹映射,讲宿主机的配置文件映射到容器内部,然后你就可以使用本机的文件进行启动
然后容器产生的rdb,aof,你也可以在宿主机查看,不用进入容器内部才能查看
–privileged=true 赋予权限
–restart always 这个容器伴随着docker的启动而启动
–name redis-7001 975fe4b9f798 就是你这个容器叫什么名字 后面的975fe4b9f798,是我拉起的镜像的ID
redis-server /usr/local/etc/redis/redis.conf 使用这个配置文件启动,
效果图
docker logs ff
就是ff是生成的容器的id,你输入前面几个字母也可以的,docker能识别得到,不必全部复制进去
4.搭建集群
重复上述步骤,搞3台虚拟机,一台7001 7001,一台7003 7004 一台7005 7006,可以在同一台机器上配置,
我搭建了2个小时可算是搭建完成:
5. 创建集群
进入一个容器节点
docker exec -it redis_7001 /bin/bash
创建集群命令:
redis-cli -a foobared --cluster create 192.168.135.129:7001 192.168.135.130:7003 192.168.135.131:7005 192.168.135.129:7002 192.168.135.130:7004 192.168.135.131:7006 --cluster-replicas 1
注:因为我们开启了Redis密码认证,所以需要在这里-a foobared指明密码,其中foobared就是本人设置的密码。
注:–cluster-replicas 1中,1代表的是一个master有一个slave;前三个ip是master,后三个ip是对应的slave。
ps:内核参数调优
下列参数你可以在宿主机配置的,也可以在构造容器的时候添加进去,
1.vm.overcommit_memory
0: 检查有没有足够内存,没有的话申请内存失败
1: 允许使用内存直到用完为止
2: 内存地址空间不能超过swap + 50%
如果是0的话,可能导致fork等操作失败,申请不到足够的内存空间
怎么修改和查看这个参数呢?
cat /proc/sys/vm/overcommit_memory
默认是0的,你可以改为1
2.swapiness
cat /proc/version
,查看linux内核版本
如果linux内核版本<3.5,那么swapiness设置为0,这样系统宁愿swap也不会oom killer(杀掉进程)
如果linux内核版本>=3.5,那么swapiness设置为1,这样系统宁愿swap也不会oom killer
保证redis不会被杀掉
echo 0 > /proc/sys/vm/swappiness
echo vm.swapiness=0 >> /etc/sysctl.conf
3. 最大打开文件句柄
ulimit -n 10032 10032
这个建议配置宿主机就好, 容器感觉不配置的好
4. tcp baklog
cat /proc/sys/net/core/somaxconn
echo 511 > /proc/sys/net/core/somaxconn
参考资料
[使用docker搭建redis-cluster环境](https://www.cnblogs.com/surpassme/p/11832438.html)
[Docker搭建redis-cluster集群三主三备](https://www.cnblogs.com/lfl17718347843/p/12332396.html)