PS:欢迎转载,但请注明出处,谢谢配合。
本人操作系统Windows,不想用VMware搭建Linux系统,正好学过Docker,所以用Docker容器实现Linux环境。
具体方法在我的上一篇文章中第一部分有,这里就不重复了。
Redis单机搭建(基于redis-6.0.6)
唯一不同的是,本次Redis Cluster使用3主3从,为了方便在容器外部访问容器里面的Redis集群,启动容器时需要映射6个端口,命令参考如下:
docker run -it -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 -p 7005:7005 --name redis-cluster -v D:\DockerContainerSharedFile:/DockerContainerSharedFile centos
1)检查操作系统是否默认安装 gcc make
gcc -v
make -v
2)安装gcc、make
yum install -y gcc
yum install -y make
在Redis官网上下载好Redis包,然后放到共享目录下。(共享目录可在Dokcer Desktop for Windows中指定,并通过启动容器时的-v参数设置,方便windows系统和docker容器的文件共享)
在CentOS容器环境中,将Redis包拷贝到要使用的目录里。
cp /DockerContainerSharedFile/redis-6.0.6.tar.gz /usr/local/
tar -zxvf /usr/local/redis-6.0.6.tar.gz
cd /usr/local/redis-6.0.6
make
补充说明:在线安装,可参考官网命令:wget http://download.redis.io/releases/redis-6.0.6.tar.gz
1)新建目录,并拷贝出6个节点的配置文件
cd /usr/local/redis-6.0.6
mkdir -p /usr/local/redis-6.0.6/config
mkdir -p /usr/local/redis-6.0.6/log
mkdir -p /usr/local/redis-6.0.6/data
mkdir -p /usr/local/redis-6.0.6/node
cp redis.conf ./config/redis-7000.conf
2)修改每个节点的配置文件内容(以 redis-7000.conf 为例)
a)远程访问需要把bind注释掉
bind 127.0.0.1 修改为 # bind 127.0.0.1
b)修改端口号
port 6379 修改为 port 7000
c)默认启动时为后台启动,yes为后台启动
daemonize no 修改为 daemonize yes
d)指定进程信息存储文件
pidfile /var/run/redis_6379.pid 修改为 pidfile /var/run/redis_7000.pid
e)指定日志文件
logfile "" 修改为 logfile "/usr/local/redis-6.0.6/log/redis-7000.log"
f)指定数据文件路径
dir ./ 修改为 dir "/usr/local/redis-6.0.6/data"
g)指定rdb持久化文件名(会自动生成到dir指定的路径下)
dbfilename dump.rdb 修改为 dbfilename "dump-7000.rdb"
h)指定aof持久化文件名(默认情况不会生成,因为默认 appendonly no)
appendfilename "appendonly.aof" 修改为 appendfilename "appendonly-7000.aof"
i)以集群方式启动
# cluster-enabled yes 将前面的 # 去掉
j)集群节点nodes信息配置文件(是自动生成的)
# cluster-config-file nodes-6379.conf 修改为 cluster-config-file "/usr/local/redis-6.0.6/node/nodes-7000.conf"
k)设置访问密码(也可不改,启动redis集群后,登录各节点,通过config set命令设置)
#requirepass foobared 修改为 requirepass redis123
3)准备其他节点的配置文件(将 redis-7000.conf 文件都复制一份并修改)
cd /usr/local/redis-6.0.6/config
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
(7002、7003、7004、7005 节点,以此类推)
cd /usr/local/redis-6.0.6
./src/redis-server ./config/redis-7000.conf
......
./src/redis-server ./config/redis-7005.conf
可以通过 ps -ef | grep redis,查看实列数量
cd /usr/local/redis-6.0.6/src
./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
选项–replicas 1 : 表示我们希望为集群中的每个主节点创建一个从节点
后面的节点,前3个是主节点,(若节点在不同的机器上,注意主节点的书写位置,要避免主节点在同一台机器上,影响性能)
注意:生产环境实际部署时,会用多个机器来部署Redis Cluster,届时注意节点的书写顺序,要避免主节点在同一台机器上,影响性能
执行后,会打印出一份预想中的配置给你看, 如果觉得没问题的话, 就可以输入 yes ,就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:
./redis-cli -h 127.0.0.1 -p 7000 -a redis123 cluster info
./redis-cli -h 127.0.0.1 -p 7000 -a redis123 cluster nodes
[root@97893fd42ad2 src]# ./redis-cli -c -h 127.0.0.1 -p 7000 -a redis123
127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
127.0.0.1:7002> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
127.0.0.1:7000> get hello
"world"
备注:redis cluster会根据key的hash值,对应hash槽,然后将操作转向(redirect)至正确的节点
使用 redis-trib.rb 创建集群
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
报错,主要信息如下:
因为redis5.0开始使用 redis-cli 作为创建集群的命令,使用c语言实现,不再使用ruby语言(所以Linux环境中也不用再安装Ruby)
1) (保留原有集群的)重启:
不需要再执行(形如src/redis-cli --cluster…这样的)集群生成指令。
第一步:先关闭各个Redis节点。
./src//redis-cli -p 7000 -a redis123 shutdown
第二步:再启动各个Redis节点即可。
./src/redis-server ./config/redis-7000.conf
2) (删除原有集群的)重启:
需要执行(形如src/redis-cli --cluster…这样的)集群生成指令。
第一步:先关闭各个Redis节点。
第二步:删除各个Redis安装目录下的节点配置文件nodes.conf、数据文件dump.rdb。
说明:此方式相当于重置到刚刚创建集群的时候了,所以需要删除节点配置文件nodes.conf、还需要删除数据存储文件dump.rdb。
访问密码若不直接在redis.conf中修改,也可在redis集群启动后,登录各redis节点,通过config set命令设置,参考命令如下:
redis-cli -h 127.0.0.1 -p 9379
config set masterauth spdb1234
config set requirepass spdb1234
quit
redis-cli -h 127.0.0.1 -p 9379 -a redis123
config rewrite
quit
1、https://blog.csdn.net/fst438060684/article/details/80712433
2、https://blog.csdn.net/justry_deng/article/details/89205155