搭建redis集群
首先进入一个新目录,创建六个以端口号为名字的子目录
$ mkdir redis-cluster
$ cd redis-cluster
$ mkdir 8001 8002 8003 8004 8005 8006
添加集群配置文件
把编译好的redis.conf文件复制到redis-cluster/800*/文件夹中
修改对应文件夹的redis.conf,内容如下:
daemonize yes
port 8001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
cluster-enabled:用于开实例的集群模式
cluster-conf-file:设定了保存节点配置文件的路径,默认值为nodes.conf,节点配置文件无须人为修改,它由 Redis集群在启动时创建, 并在有需要时自动进行更新。要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。
创建集群
现在我们已经有了六个正在运行中的Redis实例,接下来我们需要使用这些实例来创建集群,并为每个节点编写配置文件。通过使用Redis集群命令行工具redis-trib,编写节点配置文件的工作可以非常容易地完成:redis-trib位于Redis源码的src文件夹中,它是一个Ruby程序,这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。
sudo apt-get update
sudo apt-get install ruby
sudo apt-get install rubygems
gem install redis
分别启动六个Redis实例,并检查是否启动成功:
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8001/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8002/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8003/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8004/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8005/redis.conf
$:/usr/local/bin/redis-server /usr/local/src/redis-cluster/8006/redis.conf
检查是否启动成功
ps -ef | grep redis
使用redis.trib.rb命令创建整个集群
root@iZwz97dkzcmzfg3epej2zdZ:/usr/local/src/redis-6.2.6/src# ./redis-cli --cluster create yourIP:8001 yourIP:8002 yourIP:8003 yourIP:8004 yourIP:8005 yourIP:8006 --cluster-replicas 1
有过有密码的话需要在上面命令后面跟上:
-a yourpassword
记住这里若是出现无休止的等待(下图),那就去看看是不是自己集群总线端口没有开放
解决办法开放集群总线端口:集群总线端口是redis客户端连接的端口+10000
然后重新执行创建集群命令--->成功:
到这你的redis伪分布式集群也就搭建好了 !!!
现在配置自动部署集群,也就是开机自启+自动部署集群
- 确保 Redis 已安装在目标机器上。
- 确定要创建的 Redis 实例数量(这里以六个为例),规划好每个实例的端口号(如 8001 - 8006)、配置文件名称(如 redis8001.conf、redis8002.conf 等)以及数据存储目录
- 为每个 Redis 实例在
/etc/systemd/system/
目录下创建一个对应的服务文件,文件名形如redis<端口号>.service
(如redis8001.service
、redis8002.service
等)。 -
例:redis8001.service
[Unit] Description=redis-server 8001 After=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-cluster/8001/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target
编写完保存后:
- 执行
systemctl daemon-reload
让 systemd 重新加载配置。 - 使用
systemctl enable redis8001.service
将 Redis 8001 实例设置为开机自启动。 - 重复上述步骤为
redis8001.service
到redis8006.service
进行相同操作(记得每个redis实例的redis800*.service的ExecStart得按
自己路径实际情况来)
走到这恭喜你这六台redis实例的开机自启动你已经完成了,接下来就差开机自动部署了:
- 创建启动脚本文件:
vim /opt/redis_cluster_setup.sh
2.打开的文件中输入以下内容:
#!/bin/bash
# 等待所有 Redis 实例启动完成
for port in {8001..8006}; do
while! nc -z localhost $port; do
sleep 1
done
done
# 创建集群
redis-cli --cluster create yourIP:8001 yourIP:8002 yourIP:8003 yourIP:8004 yourIP:8005 yourIP:8006 --cluster-replicas 1
保存后退出
赋予脚本执行权限:
sudo chmod +x /opt/redis_cluster_setup.sh
编辑 /etc/rc.local
文件来添加开机启动任务:
vim /etc/rc.local
文件末尾的 exit 0 之前添加以下内容:
/opt/redis_cluster_setup.sh
保存并退出编辑器.
如果你的系统中没有 /etc/rc.local
文件,可以用下面方法来实现类似的开机启动功能:
使用 systemd 的方法:
- 创建一个新的 systemd 服务文件来执行你的启动脚本。例如,创建一个名为
redis-cluster-init.service
的文件:
vim /etc/systemd/system/redis-cluster-init.service
打开文件后添加以下内容:
[Unit]
Description=Redis Cluster Initialization
After=network.target redis8001.service redis8002.service redis8003.service redis8004.service redis8005.service redis8006.service
[Service]
Type=oneshot
ExecStart=/opt/redis_cluster_setup.sh
[Install]
WantedBy=multi-user.target
编写完保存后:
- 执行
systemctl daemon-reload
让 systemd 重新加载配置。 - 使用
systemctl enable redis8001.service
将 Redis 8001 实例设置为开机自启动。
全部操作完就可以重启试试配置有没有生效啦!!
使用 ps -ef | grep redis
命令,应该能看到对应端口(8001 - 8006)的六个 Redis 进程都在运行。
然后再使用 redis-cli -c
进入 Redis 客户端(以集群模式连接),接着输入 cluster nodes
命令
用Redis客户端测试也可以: