最早看Redis集羣搭建的文章,還是多開幾個虛擬機或者單機多開幾個端口的方法,後來發現其實用docker更加簡單方便。
1.拉取鏡像
docker search redis
docker pull redis
2.生成配置文件
mkdir redis-cluster
cd redis-cluster
vim redis-cluster.tmpl
port ${PORT}
masterauth 123456
requirepass 123456
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.10.83
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
參數描述
(1)port(端口號)
(2)masterauth(設置集羣節點間訪問密碼,跟下面一致)
(3)requirepass(設置redis訪問密碼)
(4)cluster-enabled yes(啓動集羣模式)
(5)cluster-config-file nodes.conf(集羣節點信息文件)
(6)cluster-node-timeout 5000(redis節點宕機被發現的時間)
(7)cluster-announce-ip(集羣節點的彙報ip,防止nat,預先填寫為網關ip後續需要手動修改配置文件)
(8)cluster-announce-port(集羣節點的彙報port,防止nat)
(9)cluster-announce-bus-port(集羣節點的彙報bus-port,防止nat)
(10) appendonly yes(開啓aof)
3.生成配置文件和數據目錄
執行以下命令,按模板生成文件以及文件夾
for port in `seq 7001 7006`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
4.創建6個redis容器
docker run -d --net=host -v /redis-cluster/7001/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/7001/data:/data --restart always --name=redis-7001 redis redis-server /etc/redis/redis.conf
docker run -d --net=host -v /redis-cluster/7002/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/7002/data:/data --restart always --name=redis-7002 redis redis-server /etc/redis/redis.conf
docker run -d --net=host -v /redis-cluster/7003/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/7003/data:/data --restart always --name=redis-7003 redis redis-server /etc/redis/redis.conf
docker run -d --net=host -v /redis-cluster/7004/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/7004/data:/data --restart always --name=redis-7004 redis redis-server /etc/redis/redis.conf
docker run -d --net=host -v /redis-cluster/7005/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/7005/data:/data --restart always --name=redis-7005 redis redis-server /etc/redis/redis.conf
docker run -d --net=host -v /redis-cluster/7006/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/7006/data:/data --restart always --name=redis-7006 redis redis-server /etc/redis/redis.conf
或者
for port in `seq 7001 7006`; do \
docker run -d --net=host -v /redis-cluster/${port}/conf/redis.conf:/etc/redis/redis.conf -v /redis-cluster/${port}/data:/data --restart always --name=redis-${port} redis redis-server /etc/redis/redis.conf \
done
docker ps
5.進入任一容器
docker exec -it redis-7001 bash
redis-cli -a 123456 --cluster create 192.168.10.83:7001 192.168.10.83:7002 192.168.10.83:7003 192.168.10.83:7004 192.168.10.83:7005 192.168.10.83:7006 --cluster-replicas 1
6.在Lumen中使用
/config/database.php redis 配置
Lumen版本
Lumen (7.1.2) (Laravel Components ^7.0)
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),//必須是predis,phpredis不支持集羣
'cluster' => false,這個實測好像並沒有用,true/false都一樣
'clusters' => [
'default' => [//填一個就好,自動分槽
[
'host' => '127.0.0.1',
'port' => 7001
],
],
],
'options' => [
'cluster' => 'redis',
'parameters'=>[//密碼要寫到這裏,之前寫到上面的配置裏,一直報錯
'password'=>'123456'
],
],
如果跟我一樣,也使用了laravel的隊列,則會報
Predis\NotSupportedException:
Cannot use 'EVAL' with redis-cluster.
解決辦法是將config/queue.php裏redis的配置
-'queue' => 'default',
+'queue' => '{default}',