事先说明以下步骤创建的都是redis集群的高可用集群的相关步骤,redis集群分为高可用集群和分布式集群。
首先我的Redis是安装在Centos里的,所以为了便于操作最好先安装连接服务器的工具,比如FinalShell或putty等。然后我的Redis是安装在docker里面的,如果你没有使用docker可以省去下面安装docker的步骤。
1.如果已安装可以先删除旧的版本
[root@localhost ~]# yum -y remove docker
2.安装yum-utils 管理yum源
[root@localhost ~]# yum install -y yum-utils
3.设置docker源
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4.设置元数据缓存
[root@localhost ~]# yum makecache fast
5.开始安装docker
[root@localhost ~]# yum -y install docker-ce
6.启动docker
[root@localhost ~]# systemctl start docker
7.验证
[root@localhost ~]# docker run hello-world
如果下载失败,可以通过vim /etc/docker/daemon.json进入配置,如下,双引号里填入下载源,可以使用阿里云的下载源,速度会比国外的快。配置好之后“systemctl daemon-reload”,然后重启docker服务。
{
"registry-mirrors": [""]
}
Redis安装
拉取镜像
[root@localhost ~]# docker pull redis
安装好redis之后,可以切换到根目录,创建redis目录,在redis目录里创建conf和data目录,从外部安装的redis或容器里面复制一份redis.conf文件到刚刚创建的目录里的conf文件夹,然后进行如下步骤:
接下来创建sentinel.conf,和上面一样都是创建三个。步骤如下:
接下来通过vim sentinel1.conf等,在三个sentinel1.conf、sentinel2.conf、sentinel3.conf里面都加入如下配置:
sentinel monitor mymaster 172.17.0.2 6379 1
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
# 和redis.conf中配置保持一致
protected-mode no
通过命令行vim redis1.conf编辑里面的内容,三个redis文件都得编辑,进入后处于命令行状态,输入/dir进行搜索,找到如图位置,将默认的dir ./修改为dir /data。然后切换为命令行方式,搜索/protected-mode,找到protected-mode yes,默认为yes,修改为protected-mode no。
在按照上面修改redis2.conf和redis3.conf配置时,顺便修改另一操作,因为把redis1.conf当作主,redis2和redis3当作从,所以需要配置从服务器。172.17.0.2是主redis的ip
接下来将我们创建的这些文件进行映射,映射到docker容器里的redis,下面我贴出图和代码,图里的红色方框都是需要注意的点,因为我是切换到了/redis/conf/目录下进行的配置,所以$PWD不需要改,不然就得改为对应的路径。
[root@localhost conf]# docker run -p 7000:6379 --name redis1 -v $PWD/redis1.conf:/etc/redis/redis.conf -v $PWD/sentinel1.conf:/etc/redis/sentinel.conf -d redis:latest redis-server /etc/redis/redis.conf
[root@localhost conf]# docker run -p 7002:6379 --name redis2 -v $PWD/redis2.conf:/etc/redis/redis.conf -v $PWD/sentinel2.conf:/etc/redis/sentinel.conf -d redis:latest redis-server /etc/redis/redis.conf
[root@localhost conf]# docker run -p 7003:6379 --name redis3 -v $PWD/redis3.conf:/etc/redis/redis.conf -v $PWD/sentinel3.conf:/etc/redis/sentinel.conf -d redis:latest redis-server /etc/redis/redis.conf
配置好之后可以通过docker inspect redis1查看对应redis1的信息。
以上步骤都完成后重新启动三个容器。
[root@localhost conf]# docker restart redis1
redis1
[root@localhost conf]# docker restart redis2
redis2
[root@localhost conf]# docker restart redis3
redis3
重启之后验证一下三个容器的主从关系是否为正确。
输入docker exec -it redis1 /bin/bash
之后输入redis-cli
再接下来输入info,便能看到主从关系的信息
[root@localhost conf]# docker exec -it redis1 /bin/bash
root@adf0aab58403:/data# redis-cli
127.0.0.1:6379> info
从上图可以看到role:master,代表主服务器,connected_slaves:2代表从连接有两个,接下来的两行分别表示他们的信息。看完之后可以通过exit退出,相同步骤查看另外两个是否正确(注:从服务器会显示role:slave和它的主服务器是哪个master_host:172.17.0.2)。
为了确保我们配置的是对的,我们可以验证一下,如下图向主服务器里写入数据,从从服务器里读出来。
接下来验证一下哨兵机制,哨兵机制的配置上面sentinel.conf里面已经配置过了,所以这里只需要验证一下即可。为了便于验证打开四个连接服务器的窗口,都切换到/redis/conf/目录下,然后在第一个窗口输入如下图中命令启动redis
如果有如下图形以及方框里的信息代表正常启动。同理另外两个在另外的两个窗口启动,把上图中的命令redis1改为对应的redis2或redis3即可。
我们在另外一个窗口通过docker stop redis1把redis1给关掉,验证一下哨兵机制有没有生效。关掉之后同样输入
[root@localhost ~]# docker exec -it redis2 /bin/bash
root@c8650f288777:/data# redis-cli
127.0.0.1:6379> info
通过上图我们可以看到redis1的主服务器挂掉之后,根据哨兵机制,把redis2选为了主服务器。以上步骤就是redis的集群配置,希望对你们有帮助。