<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis 6.X Cluster 集群搭建

          共 19675字,需瀏覽 40分鐘

           ·

          2021-04-06 19:29

          Part1Redis 6.X Cluster 集群搭建

          碼哥帶大家完成在 CentOS 7 中安裝 Redis 6.x 教程。在學(xué)習(xí) Redis Cluster 集群之前,我們需要先搭建一套集群環(huán)境。機(jī)器有限,實(shí)現(xiàn)目標(biāo)是一臺(tái)機(jī)器上搭建 6 個(gè)節(jié)點(diǎn),構(gòu)成一個(gè)三主三從集群模式。

          1下載解壓

          可直接到 Redis 官網(wǎng)下載最新穩(wěn)定包,地址:https://redis.io/download。或者使用 命令:sudo wget http://download.redis.io/releases/redis-6.0.9.tar.gz 下載安裝包.。

          1. 碼哥統(tǒng)一把軟件包放在 /opt/soft 目錄下,并創(chuàng)建目錄 mkdir redisCluster用于放置集群配置文件。在 redisCluster 目錄下執(zhí)行 mkdir 7000 7001 7002 7003 7004 7005 創(chuàng)建 6 個(gè)目錄分別對(duì)應(yīng)每個(gè)節(jié)點(diǎn) redis.conf 配置模板。
          2. tar -zxf redis-6.0.9.tar.gz -C redisCluster 解壓到 redisCluster 目錄中。

          2make 編譯

          在編譯之前我們需要確認(rèn) gcc 版本,自 redis 6.0.0 之后,編譯 redis 需要支持 C11 特性,C11 特性在 4.9 中被引入。Centos 7 默認(rèn) gcc 版本為 4.8.5,所以需要升級(jí)gcc版本。

          編譯錯(cuò)誤

          否則在編譯過(guò)程中會(huì)遇到如下錯(cuò)誤日志:

          In file included from server.c:31:0:
          server.c:4999:59: error: ‘struct redisServer’ has no member named ‘cluster’
                       (server.cluster_enabled && nodeIsMaster(server.cluster->myself)));
                                                                     ^
          cluster.h:58:27: note: in definition of macro ‘nodeIsMaster’
           #define nodeIsMaster(n) ((n)->flags & CLUSTER_NODE_MASTER)
                                     ^
          server.c: In function ‘main’:
          server.c:5047:11: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
               server.sentinel_mode = checkForSentinelMode(argc,argv);
                     ^
          server.c:5064:15: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
               if (server.sentinel_mode) {
                         ^
          server.c:5131:19: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
                   if (server.sentinel_mode && configfile && *configfile == '-') {
                             ^
          server.c:5153:168: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
                   serverLog(LL_WARNING, "Warning: no config file specified, using the default config. In order to specify a config file use %s /path/to/%s.conf", argv[0], server.sentinel_mode ? "sentinel" : "redis");
                                                                                                                                                                                  ^
          server.c:5158:11: error: ‘struct redisServer’ has no member named ‘supervised’
               server.supervised = redisIsSupervised(server.supervised_mode);
                     ^
          server.c:5158:49: error: ‘struct redisServer’ has no member named ‘supervised_mode’
               server.supervised = redisIsSupervised(server.supervised_mode);
                                                           ^
          server.c:5159:28: error: ‘struct redisServer’ has no member named ‘daemonize’
               int background = server.daemonize && !server.supervised;
                                      ^
          server.c:5159:49: error: ‘struct redisServer’ has no member named ‘supervised’
               int background = server.daemonize && !server.supervised;
                                                           ^
          server.c:5163:29: error: ‘struct redisServer’ has no member named ‘pidfile’
               if (background || server.pidfile) createPidFile();
                                       ^
          server.c:5168:16: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
               if (!server.sentinel_mode) {
                          ^
          server.c:5178:19: error: ‘struct redisServer’ has no member named ‘cluster_enabled’
                   if (server.cluster_enabled) {
                             ^
          server.c:5186:19: error: ‘struct redisServer’ has no member named ‘ipfd_count’
                   if (server.ipfd_count > 0 || server.tlsfd_count > 0)
                             ^
          server.c:5186:44: error: ‘struct redisServer’ has no member named ‘tlsfd_count’
                   if (server.ipfd_count > 0 || server.tlsfd_count > 0)
                                                      ^
          server.c:5188:19: error: ‘struct redisServer’ has no member named ‘sofd’
                   if (server.sofd > 0)
                             ^
          server.c:5189:94: error: ‘struct redisServer’ has no member named ‘unixsocket’
                       serverLog(LL_NOTICE,"The server is now ready to accept connections at %s", server.unixsocket);
                                                                                                        ^
          server.c:5190:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
                   if (server.supervised_mode == SUPERVISED_SYSTEMD) {
                             ^
          server.c:5191:24: error: ‘struct redisServer’ has no member named ‘masterhost’
                       if (!server.masterhost) {
                                  ^
          server.c:5201:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
                   if (server.supervised_mode == SUPERVISED_SYSTEMD) {
                             ^
          server.c:5208:15: error: ‘struct redisServer’ has no member named ‘maxmemory’
               if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
                         ^
          server.c:5208:39: error: ‘struct redisServer’ has no member named ‘maxmemory’
               if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
                                                 ^
          server.c:5209:176: error: ‘struct redisServer’ has no member named ‘maxmemory’
                   serverLog(LL_WARNING,"WARNING: You specified a maxmemory value that is less than 1MB (current value is %llu bytes). Are you sure this is what you really want?", server.maxmemory);
                                                                                                                                                                                          ^
          server.c:5212:31: error: ‘struct redisServer’ has no member named ‘server_cpulist’
               redisSetCpuAffinity(server.server_cpulist);
                                         ^
          server.c: In function ‘hasActiveChildProcess’:
          server.c:1480:1: warning: control reaches end of non-void function [-Wreturn-type]
           }
           ^
          server.c: In function ‘a(chǎn)llPersistenceDisabled’:
          server.c:1486:1: warning: control reaches end of non-void function [-Wreturn-type]
           }
           ^
          server.c: In function ‘writeCommandsDeniedByDiskError’:
          server.c:3826:1: warning: control reaches end of non-void function [-Wreturn-type]
           }
           ^
          server.c: In function ‘iAmMaster’:
          server.c:5000:1: warning: control reaches end of non-void function [-Wreturn-type]
           }
           ^
           ....

          解決方式

          yum -y install gcc gcc-c++ make tcl
          yum -y install centos-release-scl
          yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
          scl enable devtoolset-9 bash

          升級(jí)之后便可解決 make 報(bào)錯(cuò)問(wèn)題。

          注意:scl命令啟用只是臨時(shí)的,退出xshell或者重啟就會(huì)恢復(fù)到原來(lái)的gcc版本。如果要長(zhǎng)期生效的話,執(zhí)行如下 sudo echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

          cd /opt/soft/redisCluster/redis-6.0.9 切換到目錄執(zhí)行 make

          編譯完成使用 make install 對(duì) redis 進(jìn)行安裝 ,命令:sudo make install

          3修改配置文件

          cd /opt/soft/redisCluster/redis-6.0.9 將 redis.conf 分別復(fù)制到 7000 7001 7002 7003 7004 目錄中。

          分別修改  6 個(gè) redis.conf

          ## 7000-7005端口
          port 7000
          ## 后臺(tái)啟動(dòng)
          daemonize yes
          ## 如果是在單機(jī)模擬集群必須指定bind的IP,如果不修改ip的話使用程序連接集群會(huì)報(bào)錯(cuò)
          bind 192.168.221.150
          ## 開(kāi)啟redis-cluster集群
          cluster-enabled yes
          ## 每個(gè)實(shí)例還包含存儲(chǔ)此節(jié)點(diǎn)配置的文件的路徑,默認(rèn)情況下為nodes.conf,自動(dòng)創(chuàng)建
          cluster-config-file nodes_7000.conf
          ## 超時(shí)
          cluster-node-timeout 500
          ## 開(kāi)啟aof
          appendonly yes
           
          #
          注釋cluster集群下不允許復(fù)制。
          #replicaof 127.0.0.1 9000
          #關(guān)閉保護(hù)模式,如果開(kāi)啟需要設(shè)置密碼,比較繁瑣,可根據(jù)自己的需求來(lái)
          protected-mode no

          每個(gè)配置文件只需要修改 port 和 cluster-config-file 就可以了。

          4啟動(dòng)節(jié)點(diǎn)并創(chuàng)建集群

          啟動(dòng)節(jié)點(diǎn)

          進(jìn)入 redisCluster 目錄,執(zhí)行指令依次啟動(dòng)每個(gè)節(jié)點(diǎn)。redis-6.0.9/src/redis-server 700x/redis.conf 注意指定每個(gè)節(jié)點(diǎn)配置文件,如果不指定配置文件會(huì)默認(rèn)使用src下的配置

          創(chuàng)建集群

          進(jìn)入任意一個(gè)節(jié)點(diǎn),執(zhí)行以下指令創(chuàng)建集群

          指令如下:

          redis-6.0.9/src/redis-cli --cluster create 172.16.90.152:7000 172.16.90.152:7001 172.16.90.152:7002 172.16.90.152:7003 172.16.90.152:7004 172.16.90.152:7005 --cluster-replicas 1

          集群參數(shù)解釋:

          1. cluster-replicas 1:表示希望為集群中的每個(gè)主節(jié)點(diǎn)創(chuàng)建一個(gè)從節(jié)點(diǎn)(一主一從)。
          2. cluster-replicas 2:表示希望為集群中的每個(gè)主節(jié)點(diǎn)創(chuàng)建兩個(gè)從節(jié)點(diǎn)(一主二從)。

          控制臺(tái)響應(yīng):

          >>> Performing hash slots allocation on 6 nodes...
          Master[0] -> Slots 0 - 5460
          Master[1] -> Slots 5461 - 10922
          Master[2] -> Slots 10923 - 16383
          Adding replica 172.16.90.152:7004 to 172.16.90.152:7000
          Adding replica 172.16.90.152:7005 to 172.16.90.152:7001
          Adding replica 172.16.90.152:7003 to 172.16.90.152:7002
          >>> Trying to optimize slaves allocation for anti-affinity
          [WARNING] Some slaves are in the same host as their master
          M: 06c56f5a6a4436108fae931be499465985141d39 172.16.90.152:7000
             slots:[0-5460] (5461 slots) master
          M: 0ab7c9efd97319d94a8ea52452ec58f7708d812d 172.16.90.152:7001
             slots:[5461-10922] (5462 slots) master
          M: 096f076d99363270c02785a2fb298e2ee65d3f07 172.16.90.152:7002
             slots:[10923-16383] (5461 slots) master
          S: 69d621060295eb433af3e34e702142df0fd4d73d 172.16.90.152:7003
             replicates 06c56f5a6a4436108fae931be499465985141d39
          S: 1d37df0aa0e2310aedb5a380f95cc818256003f8 172.16.90.152:7004
             replicates 0ab7c9efd97319d94a8ea52452ec58f7708d812d
          S: d9204f6da875a4b2522c5fa25d9e6c1f95cf51ea 172.16.90.152:7005
             replicates 096f076d99363270c02785a2fb298e2ee65d3f07
          Can I set the above configuration? (type 'yes' to accept):

          Can I set the above configuration? (type 'yes' to accept): 詢問(wèn)是否確認(rèn)節(jié)點(diǎn) slots 分配方案, 我們輸入 ‘yes’。

          >>> Nodes configuration updated
          >>> Assign a different config epoch to each node
          >>> Sending CLUSTER MEET messages to join the cluster
          Waiting for the cluster to join
          .
          >>> Performing Cluster Check (using node 172.16.90.152:7000)
          M: 06c56f5a6a4436108fae931be499465985141d39 172.16.90.152:7000
             slots:[0-5460] (5461 slots) master
             1 additional replica(s)
          S: 1d37df0aa0e2310aedb5a380f95cc818256003f8 172.16.90.152:7004
             slots: (0 slots) slave
             replicates 0ab7c9efd97319d94a8ea52452ec58f7708d812d
          M: 0ab7c9efd97319d94a8ea52452ec58f7708d812d 172.16.90.152:7001
             slots:[5461-10922] (5462 slots) master
             1 additional replica(s)
          S: d9204f6da875a4b2522c5fa25d9e6c1f95cf51ea 172.16.90.152:7005
             slots: (0 slots) slave
             replicates 096f076d99363270c02785a2fb298e2ee65d3f07
          S: 69d621060295eb433af3e34e702142df0fd4d73d 172.16.90.152:7003
             slots: (0 slots) slave
             replicates 06c56f5a6a4436108fae931be499465985141d39
          M: 096f076d99363270c02785a2fb298e2ee65d3f07 172.16.90.152:7002
             slots:[10923-16383] (5461 slots) master
             1 additional replica(s)
          [OK] All nodes agree about slots configuration.
          >>> Check for open slots...
          >>> Check slots coverage...
          [OK] All 16384 slots covered.

          [OK] All 16384 slots covered.

          到此完成!

          5查看集群狀態(tài)

          redis-6.0.9/src/redis-cli --cluster check 172.16.90.152:7000

          6注意事項(xiàng)

          當(dāng)使用 redis-6.0.9/src/redis-cli --cluster create 172.16.90.152:7000 172.16.90.152:7001 172.16.90.152:7002 172.16.90.152:7003 172.16.90.152:7004 172.16.90.152:7005 --cluster-replicas 1 創(chuàng)建集群以后,一次創(chuàng)建,永久使用。之后直接啟動(dòng)每個(gè)節(jié)點(diǎn)即可構(gòu)建集群。

          結(jié)束命令:redis-6.0.9/src/redis-cli -c -h 192.168.124.23 -p 7004 shutdown

          進(jìn)入集群命令  redis-cli -c -h host -p prot 不帶-c 參數(shù)進(jìn)入的不是集群

          搭建好集群后,期待下一篇「Redis 高可用篇:Cluster 能支持的數(shù)據(jù)有多大?」

          往期推薦

          Redis 高可用篇:你管這叫 Sentinel 哨兵集群原理

          Redis 6.X Sentinel 哨兵集群搭建

          Redis 高可用篇:你管這叫主從架構(gòu)數(shù)據(jù)同步原理?

          Redis 日志篇:無(wú)畏宕機(jī)快速恢復(fù)的殺手锏

          Redis 核心篇:唯快不破的秘密




          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄片小视频免费看 | 久久国产主播 | 黄色一级操逼视频 | 黄色免费毛片 | 一本久道无码 |