<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] > [參考](https://juejin.im/post/5c9ca08f5188252d5a14a31b) ## 概述 為甚么填入任何一個節點地址都可以操作redisCluster呢? 在集群模式下,Redis接收任何鍵相關命令時首先計算鍵對應的槽, 假如初始化的是從節點, 首先會向從節點發送redis命令, 從節點根據槽找出所對應的節點,如果節點是自身,則處理鍵命令; 如果不是自身, 則MOVED重定向錯誤,通知客戶端請求正確的節點。這個過程稱為MOVED重定向 重定向信息包含了鍵所對應的槽以及負責該槽的節點地址,根據這些信 息客戶端就可以向正確的節點發起請求 ## 安裝 ### docker [CentOS Docker 安裝](https://www.runoob.com/docker/centos-docker-install.html "CentOS Docker 安裝") ### redis:5.0 `docker pull redis:5.0` ## 集群搭建 ### 創建Redis 容器 /home/redis-cluster ``` mdkir -p /home/redis-cluster cd /home/redis-cluster ``` /home/redis-cluster/redis-cluster.tmpl ``` port ${PORT} protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 192.168.0.229 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes #daemonize no ``` > 備注:此模版文件為集群節點通用文件 其中${PORT} 將讀取命令行變量 ip則根據**網卡分配ip**進行替換 以保證節點配置文件除端口以及ip外 全部一致 > ip 可為實際網卡ip > ### 自動生成配置 ``` for port in `seq 7000 7005`; do \ mkdir -p ./${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; \ done ``` ### 創建自定義network ``` docker network create redis-net docker network ls ``` > 備注:創建redis-net虛擬網卡 目的是讓docker容器能與宿主(centos7)橋接網絡 并間接與外界連接 #### 查看redis-net虛擬網卡網關ip ``` docker network inspect redis-net | grep "Gateway" | grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' "Gateway": "172.18.0.1" ``` ### 創建6個redis容器 ``` for port in `seq 7000 7005`; do \ docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /home/redis-cluster/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \ done ``` 備注:命令譯為 循環7010 - 7005 運行redis 容器 ``` docker run 運行 -d 守護進程模式 --restart always 保持容器啟動 --name redis-710* 容器起名 --net redis-net 容器使用虛擬網卡 -p 指定宿主機器與容器端口映射 701*:701* -P 指定宿主機與容器redis總線端口映射 170**:1700* --privileged=true -v /home/redis-cluster/701*/conf/redis.conf:/usr/local/etc/redis/redis.conf 付權將宿主701*節點文件掛載到容器/usr/local/etc/redis/redis.conf 文件中 --privileged=true -v /home/redis-cluster/${port}/data:/data \ 付權將宿主701*/data目錄掛載到容器/data目錄中 --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; 容器根據掛載的配置文件啟動 redis服務端 ``` ### 查看容器分配ip ``` docker network inspect redis-net ... "600aa2f84dfbe72a19caf5dc684cb7691e89a43753f70d74355468b7659caa23": { "Name": "redis-7000", "EndpointID": "75873081222c7a2eedc5f3ee639df5cc7645790012dd72e34c97fd97dcb5cf47", "MacAddress": "02:42:ac:15:00:02", "IPv4Address": "172.21.0.2/16", "IPv6Address": "" }, ... ``` > 備注:每個容器對應分配了ip 需要修改節點配置文件redis.conf與其對應并重啟容器。 ``` vim /home/redis-cluster/700*/conf/redis.conf //編輯ip為查詢分配的ip 并wq退出 port 7000 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 172.21.0.2 # 設置網卡ip 可為真實ip cluster-announce-port 7000 cluster-announce-bus-port 17000 appendonly yes ``` ### 啟動集群 ``` docker exec -it redis-7000 bash redis-cli --cluster create 172.21.0.2:7000 172.21.0.3:7001 172.21.0.4:7002 172.21.0.5:7003 172.21.0.6:7004 172.21.0.7:7005 --cluster-replicas 1 ``` ### 連接集群 ``` docker exec -it redis-7000 bash redis-cli -c -p 7000 //注意連接集群 需要參數c 127.0.0.1:7000> info replication ... 127.0.0.1:7000> set name cpj -> Redirected to slot [360] located at 192.168.0.229:7000 ``` ### 停止進群 ``` for port in `seq 7000 7005`; do \ docker stop redis-${port}; docker rm redis-${port}; done ``` ## 注意事項 ### 開放端口 ``` for port in `seq 7000 7005`; do \ firewall-cmd --zone=public --add-port=${port}/tcp --permanent done #重新載入 firewall-cmd --reload = ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看