溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

docker搭建redis集群的方法

發(fā)布時(shí)間:2021-07-06 10:31:16 來(lái)源:億速云 閱讀:232 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“docker搭建redis集群的方法”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“docker搭建redis集群的方法”吧!

之前用redis單機(jī)搭建過(guò)偽集群,但是到了真實(shí)環(huán)境才發(fā)現(xiàn)處處是坑

搭建條件 3臺(tái)宿主機(jī) 同時(shí)安裝docker和docker-compose 可以用vm虛擬三臺(tái) 6個(gè)集群。

三臺(tái)服務(wù)器分別是 192.168.65.133、192.168.65.134、192.168.65.135

  1. 第一步 首先在任意一臺(tái)服務(wù)器,新建一個(gè)文件(主要是為了存放redis數(shù)據(jù)和一些配置信息)。 新建一個(gè) redis 文件,在redis文件中再新建一個(gè)master和slave,因?yàn)橐慌_(tái)機(jī)器上要放兩個(gè)redis實(shí)例(機(jī)器有限,當(dāng)然每個(gè)reids的master不要和slave放在同一臺(tái)機(jī)器上) 如圖:docker搭建redis集群的方法 以master為列,創(chuàng)建好之后 分別創(chuàng)建 docker-compose.yml文件和redis.conf文件,創(chuàng)建數(shù)據(jù)目錄data 如圖:docker搭建redis集群的方法

  2. docker-compose.yml:

version: '3.3'
services:
  redis-master:
    image: redis:latest
    container_name: redis-master
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf
    network_mode: host
    ports:
      - "6379:6379"
      - "16379:16379"
    volumes:
      - /home/docker_container/redis/master/data:/data
      - /home/docker_container/redis/master/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /home/docker_container/redis/master/log/redis.log:/root/redis/redis.log

上述network:host是為了解決Waiting for the cluster to join....................一直沒(méi)有成功

redis.conf #bind 192.168.65.133 127.0.0.1 #必須要注釋 port 6379 #端口 protected-mode no #requirepass admin #masterauth admin daemonize no appendonly yes cluster-enabled yes cluster-node-timeout 15000 cluster-config-file nodes.conf

對(duì)應(yīng)的192.168.65.133 上slave也配置一份需要修改配置文件 docker-compose.yml和redis.conf文件 docker-compose.yml version: '3.3' services: redis-slave: image: redis:latest container_name: redis-slave restart: always command: redis-server /usr/local/etc/redis/redis.conf network_mode: host ports: - "6380:6380" - "16380:16380" volumes: - /home/docker_container/redis/slave/data:/data - /home/docker_container/redis/slave/conf/redis.conf:/usr/local/etc/redis/redis.conf

redis.conf #bind 0.0.0.0 port 6380 protected-mode no #requirepass admin #masterauth admin daemonize no appendonly yes cluster-enabled yes cluster-node-timeout 15000 cluster-config-file nodes.conf 主要是改端口,上述配置文件 docker-compose.yml文件中 - "16380:16380" 是集群通信端口 我一般就是在redis 端口上+10000 把所有文件都準(zhǔn)備好了之后,用docker-compose up -d 啟動(dòng)master和slave的redis,并查看啟動(dòng)情況,啟動(dòng)沒(méi)啥問(wèn)題, 就可以把redis文件用 scp -r 命令 copy到另外兩臺(tái)服務(wù)器。 然后用docker-compose up -d 啟動(dòng)剩下的redis 一共是 6個(gè)redis. 啟動(dòng)完成后,我們就可以用 redis-trib 集群 redis. 可以在任意一臺(tái)機(jī)器上輸入集群命令: docker run --rm -it inem0o/redis-trib create --replicas 1 192.168.65.133:6379 192.168.65.133:6380 192.168.65.134:6379 192.168.65.134:6380 192.168.65.135:6379 192.168.65.135:6380 會(huì)出現(xiàn): `>>> Creating cluster

Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.30.70:7001 192.168.30.70:7002 192.168.30.70:7003 Adding replica 192.168.30.70:7004 to 192.168.30.70:7001 Adding replica 192.168.30.70:7005 to 192.168.30.70:7002 Adding replica 192.168.30.70:7006 to 192.168.30.70:7003 M: 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 192.168.30.70:7001 slots:0-5460 (5461 slots) master M: bb8fda08e1dcd39e937443f81b5458e80f52d804 192.168.30.70:7002 slots:5461-10922 (5462 slots) master M: d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 192.168.30.70:7003 slots:10923-16383 (5461 slots) master S: 52eee69afa751d71c84d5436d14b0e16a37536fa 192.168.30.70:7004 replicates 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 S: 701ed2fbb3df9fc63b083818620f5c020d05e323 192.168.30.70:7005 replicates bb8fda08e1dcd39e937443f81b5458e80f52d804 S: a3548a9dffa225f05786ea2289db65f5f1c623be 192.168.30.70:7006 replicates d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 Can I set the above configuration? (type 'yes' to accept):`

輸入** yes** ` Waiting for the cluster to join.....

Performing Cluster Check (using node 192.168.30.70:7001) M: 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 192.168.30.70:7001 slots:0-5460 (5461 slots) master 1 additional replica(s) M: d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 192.168.30.70:7003@17003 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: a3548a9dffa225f05786ea2289db65f5f1c623be 192.168.30.70:7006@17006 slots: (0 slots) slave replicates d907530ee9f6356e0e61a6c7f4d0cc1b22da1189 S: 701ed2fbb3df9fc63b083818620f5c020d05e323 192.168.30.70:7005@17005 slots: (0 slots) slave replicates bb8fda08e1dcd39e937443f81b5458e80f52d804 S: 52eee69afa751d71c84d5436d14b0e16a37536fa 192.168.30.70:7004@17004 slots: (0 slots) slave replicates 5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 M: bb8fda08e1dcd39e937443f81b5458e80f52d804 192.168.30.70:7002@17002 slots:5461-10922 (5462 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. `

master和slave應(yīng)該是可以通過(guò)集群順序調(diào)整,沒(méi)有嘗試過(guò),不知道是不是這樣。 docker run --rm -it inem0o/redis-trib check 192.168.65.133:6379測(cè)試是否連接上集群

搭建集群采坑 1、創(chuàng)建集群的時(shí)候會(huì)遇到Waiting for the cluster to join....................一直沒(méi)有成功 修改 網(wǎng)絡(luò)模式改成host,docker run 的方式加上--net host,在每個(gè)redis的docker-compose方式加上network_mode: host。 2、防火墻未關(guān)閉會(huì)導(dǎo)致或者redis未正確啟動(dòng) 錯(cuò)誤:can't connect to node 192.168.65.134:6379 解決方案:關(guān)閉防火墻

關(guān)閉防火墻

systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall開(kāi)機(jī)啟動(dòng)

開(kāi)啟端口

firewall-cmd --zone=public --add-port=80/tcp --permanent 如果還是不行,需要去檢查redis是否 啟動(dòng)成功,可以嘗試在訪問(wèn)其他端口,看能不能連上 大部分原因可能是 redis.conf配置問(wèn)題,配置文件 bind 參數(shù)配置或者其他配置不對(duì) docker搭建redis集群的方法 注釋掉或者 改為0.0.0.0 試著改為ip 加127.0.0.1 還是有問(wèn)題 3、redis-cli 連接集群時(shí) 加上 -c 參數(shù) redis-cli -c -h yourhost -p yourpost

集群密碼設(shè)置: 使用redis-trib.rb工具構(gòu)建集群,集群構(gòu)建完成前不要配置密碼,集群構(gòu)建完畢再通過(guò)config set + config rewrite命令逐個(gè)機(jī)器設(shè)置密碼 如果對(duì)集群設(shè)置密碼,那么requirepass和masterauth都需要設(shè)置,否則發(fā)生主從切換時(shí),就會(huì)遇到授權(quán)問(wèn)題 各個(gè)節(jié)點(diǎn)的密碼都必須一致,否則Redirected就會(huì)失敗 具體指令如下: 第一種 集群密碼 cd /mnt/redis-cluster; chmod 777 9001/conf/redis.conf; //配置文件授權(quán) ... chmod 777 9003/conf/redis.conf; //兩臺(tái)配置文件都需要授權(quán)

//鏈接redis docker ps -a //查看容器ID

//5.0.2 docker run -it --link redis-9001:redis --net redis-net --rm redis redis-cli -h XX.XXX.XX.XX -c -p 9001 //5.0(這里設(shè)置的是單臺(tái)redis的密碼,所以需要每臺(tái)redis都要進(jìn)入執(zhí)行以下操作設(shè)置密碼) docker exec -it redis容器ID redis-cli -h XX.XXX.XX.XX -c -p 9001

第二種 //設(shè)置密碼 config set masterauth 123456 config set requirepass 123456 auth 123456 config rewrite

設(shè)置masterauth config set masterauth 密碼

設(shè)置requirepass config set requirepass 密碼

驗(yàn)證密碼,以繼續(xù)操作 auth LinShen

回寫(xiě)到文件,使其永久生效(如果這里出現(xiàn)Permission denied,則說(shuō)明Dockerfile少了RUN chmod 777 /usr/local/etc/redis/redis.conf) config rewrite

到此,相信大家對(duì)“docker搭建redis集群的方法”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI