日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

簡介

redis Cluster是Redis官方的一個高可用分布式解決方案,其優點是高可用,缺點是不能保證數據強一致。在這里使用Docker容器來搭建一套6節點(3主,3從)Redis-Cluster集群環境。

環境準備

操作系統版本:centos linux release 7.6.1810 (Core)
docker版本:19.03.13
服務器IP地址:192.168.112.136
redis版本:5.0.9
redis實例端口:8001--8006

docker安裝

首先需要在CentOS系統上安裝好docker軟件,目前docker軟件分為社區版ce和企業版ee,企業版是需要收費的,所以在這里使用社區版,要安裝docker軟件,CentOS系統的內核版本高于 3.10。

下面是docker安裝步驟

yum install -y yum-utils device-mApper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce

啟動并加入開機啟動
systemctl start docker
systemctl enable docker

由于docker默認是從國外拉取鏡像,速度會比較慢,所以需要配置docker從國內的鏡像網站拉取鏡像,其配置步驟如下所示

利用docker輕松搭建Redis-Cluster集群環境

docker hub 鏡像加速資源列表

將國內鏡像網站添加到daemon.json配置文件

>/etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://reg-mirror.qiniu.com",
        "https://mirror.ccs.tencentyun.com"
    ]
}

添加完成之后,需要重啟docker服務器,使配置生效

systemctl daemon-reload
systemctl restart docker

docker服務器重啟之后,使用docker info命令,檢查配置是否生效

redis鏡像拉取

在docker-hub官網,有很多版本的redis鏡像可供選擇,在這里,選擇redis:5.0.9-buster進行拉取

利用docker輕松搭建Redis-Cluster集群環境

redis鏡像

[root@MySQL ~]# docker pull redis:5.0.9-buster
[root@mysql ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               5.0.9-buster        c440306287f4        7 days ago          98.3MB

創建redis目錄和配置文件

由于這里需要配置6個redis實例的配置文件,所以在這里,可以先創建一個模板配置文件,之后使用代碼批量替換的方式來創建每個redis的配置文件。

創建模板文件

創建目錄
mkdir -p /data/docker_redis/

編寫redis_cluster.conf.template文件
vi redis_cluster.conf.template
port ${PORT}
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.112.136
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}

在這里需要講解2個參數
cluster-announce-port:此端口為redis提供服務端口,用于應用客戶端連接
cluster-announce-bus-port:此端口用于redis集群進行故障檢測、配置更新、故障轉移授權和內部通訊使用,不用于應用客戶端連接使用。

創建6個redis實例的數據目錄,配置文件目錄和配置文件

for port in `seq 8001 8006`; do 
  mkdir -p /data/redis_data/${port}/conf 
  && PORT=${port} envsubst < /data/docker_redis/redis_cluster.conf.template > /data/redis_data/${port}/conf/redis.conf 
  && mkdir -p /data/redis_data/${port}/data;
done

使用tree命令檢查創建的目錄和文件

[root@mysql data]$ tree redis_data/
redis_data/
|-- 8001
|   |-- conf
|   |   `-- redis.conf
|   `-- data
|-- 8002
|   |-- conf
|   |   `-- redis.conf
|   `-- data
|-- 8003
|   |-- conf
|   |   `-- redis.conf
|   `-- data
|-- 8004
|   |-- conf
|   |   `-- redis.conf
|   `-- data
|-- 8005
|   |-- conf
|   |   `-- redis.conf
|   `-- data
`-- 8006
    |-- conf
    |   `-- redis.conf
    `-- data

18 directories, 6 files

批量創建容器

在這里使用for循環批量創建redis容器,代碼如下所示

for port in $(seq 8001 8006); do 
  docker run -d -it -p ${port}:${port} -p 1${port}:1${port} --restart always --name redis-${port} 
  -v /data/redis_data/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf 
  -v /data/redis_data/${port}/data:/data 
  redis:5.0.9-buster redis-server /usr/local/etc/redis/redis.conf; 
done

在這里使用-v參數,讓容器的redis配置參數和數據全部使用宿主機的文件目錄。這樣做的好處是,保證redis的數據不丟失。

查看剛剛創建的redis容器

[root@mysql data]# docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                                        NAMES
f4c971ce2d84        redis:5.0.9-buster   "docker-entrypoint.s鈥 6 seconds ago       Up 5 seconds        0.0.0.0:8006->8006/tcp, 6379/tcp, 0.0.0.0:18006->18006/tcp   redis-8006
1b5a8b0a1c93        redis:5.0.9-buster   "docker-entrypoint.s鈥 7 seconds ago       Up 6 seconds        0.0.0.0:8005->8005/tcp, 6379/tcp, 0.0.0.0:18005->18005/tcp   redis-8005
35d8fe01fc71        redis:5.0.9-buster   "docker-entrypoint.s鈥 7 seconds ago       Up 6 seconds        0.0.0.0:8004->8004/tcp, 6379/tcp, 0.0.0.0:18004->18004/tcp   redis-8004
408e5302378a        redis:5.0.9-buster   "docker-entrypoint.s鈥 8 seconds ago       Up 7 seconds        0.0.0.0:8003->8003/tcp, 6379/tcp, 0.0.0.0:18003->18003/tcp   redis-8003
c1c23c543233        redis:5.0.9-buster   "docker-entrypoint.s鈥 8 seconds ago       Up 7 seconds        0.0.0.0:8002->8002/tcp, 6379/tcp, 0.0.0.0:18002->18002/tcp   redis-8002
c752fab6c6b8        redis:5.0.9-buster   "docker-entrypoint.s鈥 9 seconds ago       Up 8 seconds        0.0.0.0:8001->8001/tcp, 6379/tcp, 0.0.0.0:18001->18001/tcp   redis-8001

創建redis-cluster集群

6個redis容器創建好之后,選擇其中的一個容器進入,進行redis-cluster集群創建

[root@mysql bin]# docker-enter f4c971ce2d84
root@f4c971ce2d84:~# redis-cli -a 1234 --cluster create 192.168.112.136:8001 192.168.112.136:8002 192.168.112.136:8003 192.168.112.136:8004 192.168.112.136:8005 192.168.112.136:8006 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.112.136:8005 to 192.168.112.136:8001
Adding replica 192.168.112.136:8006 to 192.168.112.136:8002
Adding replica 192.168.112.136:8004 to 192.168.112.136:8003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: c9e549f4d04d4466d2550d1e027412304099b1f2 192.168.112.136:8001
   slots:[0-5460] (5461 slots) master
M: 0956927ee74737d5ff91a1885e77f94d531dab76 192.168.112.136:8002
   slots:[5461-10922] (5462 slots) master
M: d6321788b2717b4142390c158ba70ca758f70964 192.168.112.136:8003
   slots:[10923-16383] (5461 slots) master
S: 96d2cb55f163ecc13a714ba01d90348c1c3ad02f 192.168.112.136:8004
   replicates c9e549f4d04d4466d2550d1e027412304099b1f2
S: 8a771c26a95e82d9a6818e372d7c0226937670ac 192.168.112.136:8005
   replicates 0956927ee74737d5ff91a1885e77f94d531dab76
S: aa7c2f6173904973f041b35efc5200359188eb0f 192.168.112.136:8006
   replicates d6321788b2717b4142390c158ba70ca758f70964
Can I set the above configuration? (type 'yes' to accept): 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 192.168.112.136:8001)
M: c9e549f4d04d4466d2550d1e027412304099b1f2 192.168.112.136:8001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 0956927ee74737d5ff91a1885e77f94d531dab76 192.168.112.136:8002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 96d2cb55f163ecc13a714ba01d90348c1c3ad02f 192.168.112.136:8004
   slots: (0 slots) slave
   replicates c9e549f4d04d4466d2550d1e027412304099b1f2
S: aa7c2f6173904973f041b35efc5200359188eb0f 192.168.112.136:8006
   slots: (0 slots) slave
   replicates d6321788b2717b4142390c158ba70ca758f70964
S: 8a771c26a95e82d9a6818e372d7c0226937670ac 192.168.112.136:8005
   slots: (0 slots) slave
   replicates 0956927ee74737d5ff91a1885e77f94d531dab76
M: d6321788b2717b4142390c158ba70ca758f70964 192.168.112.136:8003
   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.

上述命令執行之后,redis-cluster集群就搭建好了,下面是整個redis-cluster集群的架構圖

利用docker輕松搭建Redis-Cluster集群環境

redis-cluster集群架構圖

redis-cluster集群狀態檢查

檢查redis-cluster集群狀態

root@f4c971ce2d84:~# redis-cli -a 1234 --cluster check 192.168.112.136:8001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.112.136:8001 (c9e549f4...) -> 0 keys | 5461 slots | 1 slaves.
192.168.112.136:8002 (0956927e...) -> 0 keys | 5462 slots | 1 slaves.
192.168.112.136:8003 (d6321788...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.112.136:8001)
M: c9e549f4d04d4466d2550d1e027412304099b1f2 192.168.112.136:8001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 0956927ee74737d5ff91a1885e77f94d531dab76 192.168.112.136:8002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 96d2cb55f163ecc13a714ba01d90348c1c3ad02f 192.168.112.136:8004
   slots: (0 slots) slave
   replicates c9e549f4d04d4466d2550d1e027412304099b1f2
S: aa7c2f6173904973f041b35efc5200359188eb0f 192.168.112.136:8006
   slots: (0 slots) slave
   replicates d6321788b2717b4142390c158ba70ca758f70964
S: 8a771c26a95e82d9a6818e372d7c0226937670ac 192.168.112.136:8005
   slots: (0 slots) slave
   replicates 0956927ee74737d5ff91a1885e77f94d531dab76
M: d6321788b2717b4142390c158ba70ca758f70964 192.168.112.136:8003
   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.

檢查redis集群節點信息

root@f4c971ce2d84:~# redis-cli -c -a 1234 -h 192.168.112.136 -p 8001
192.168.112.136:8001> cluster nodes
0956927ee74737d5ff91a1885e77f94d531dab76 192.168.112.136:8002@18002 master - 0 1603265855374 2 connected 5461-10922
96d2cb55f163ecc13a714ba01d90348c1c3ad02f 192.168.112.136:8004@18004 slave c9e549f4d04d4466d2550d1e027412304099b1f2 0 1603265856080 4 connected
aa7c2f6173904973f041b35efc5200359188eb0f 192.168.112.136:8006@18006 slave d6321788b2717b4142390c158ba70ca758f70964 0 1603265855575 6 connected
8a771c26a95e82d9a6818e372d7c0226937670ac 192.168.112.136:8005@18005 slave 0956927ee74737d5ff91a1885e77f94d531dab76 0 1603265855575 5 connected
d6321788b2717b4142390c158ba70ca758f70964 192.168.112.136:8003@18003 master - 0 1603265856382 3 connected 10923-16383
c9e549f4d04d4466d2550d1e027412304099b1f2 192.168.112.136:8001@18001 myself,master - 0 1603265855000 1 connected 0-5460

在這里可以很清晰明了的看到有3個master節點和3個slave節點的IP地址和端口信息。

redis-cluster連接測試

redis-cluster搭建好之后,隨意連接一個redis節點,無論是主節點還是從節點都可以,在這里選擇連接一個從節點。

192.168.112.136:8001> cluster nodes
0956927ee74737d5ff91a1885e77f94d531dab76 192.168.112.136:8002@18002 master - 0 1603265855374 2 connected 5461-10922
96d2cb55f163ecc13a714ba01d90348c1c3ad02f 192.168.112.136:8004@18004 slave c9e549f4d04d4466d2550d1e027412304099b1f2 0 1603265856080 4 connected
aa7c2f6173904973f041b35efc5200359188eb0f 192.168.112.136:8006@18006 slave d6321788b2717b4142390c158ba70ca758f70964 0 1603265855575 6 connected
8a771c26a95e82d9a6818e372d7c0226937670ac 192.168.112.136:8005@18005 slave 0956927ee74737d5ff91a1885e77f94d531dab76 0 1603265855575 5 connected
d6321788b2717b4142390c158ba70ca758f70964 192.168.112.136:8003@18003 master - 0 1603265856382 3 connected 10923-16383
c9e549f4d04d4466d2550d1e027412304099b1f2 192.168.112.136:8001@18001 myself,master - 0 1603265855000 1 connected 0-5460


root@f4c971ce2d84:~# redis-cli -c -a 1234 -h 192.168.112.136 -p 8004
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.112.136:8004> 
192.168.112.136:8004> set 5 test5
-> Redirected to slot [9974] located at 192.168.112.136:8002
192.168.112.136:8002> 

仔細看一下,當在slave節點寫入數據時,redis-cluster將你的寫請求重定向到另一個master節點了,至于原因,在這里就不說了,下次再講解redis-cluster集群原理篇再細講。

測試查詢

root@f4c971ce2d84:~# redis-cli -c -a 1234 -h 192.168.112.136 -p 8006
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.112.136:8006> 
192.168.112.136:8006> get 5
-> Redirected to slot [9974] located at 192.168.112.136:8002
"test5"
192.168.112.136:8002>

在這里查詢也被路由重定向了。

致謝

1.如果您喜歡,請在評論區評論+點贊+轉發

2.如果您很喜歡,請關注本頭條號

分享到:
標簽:集群 環境
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定