redis5.0集羣搭建(用3臺虛擬機模擬3主3備)

Redis3.0版本之後支持Cluster,使用ruby方式創建集羣;2018年十月Redis發佈了5.0版本,新版本放棄了Ruby的集羣方式,改爲使用C語言編寫的redis-cli的方式,使集羣的構建方式複雜度大大降低,本文介紹5.0版本集羣的搭建。

- 所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.
- 節點的fail是通過集羣中超過半數的節點檢測失效時才生效.
- 客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集羣所有節點,連接集羣中任何一個可用節點即可.
- redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value.

redis-cluster選舉:容錯

  1. 領着選舉過程是集羣中所有master參與,如果半數以上master節點與master節點通信超過(cluster-node-timeout),認爲當前master節點掛掉.
  2. 什麼時候整個集羣不可用(cluster_state:fail),當集羣不可用時,所有對集羣的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤.
  • 如果集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也可以理解成進羣的slot映射[0-16383]不完成時進入fail狀態.
  • 如果進羣超過半數以上master掛掉,無論是否有slave集羣進入fail狀態.

redis cluster安裝部署

使用3臺虛擬機模擬6個redis節點,創建出3 master、3 salve 環境。

  1. 解壓redis包到home目錄下
tar -zxvf redis-5.0.3.tar.gz -C /home/
  1. 編譯
  • 如果沒有gcc環境,需要先安裝gcc
先通過如下命令檢查有無gcc
whereis gcc

如果沒有,則先安裝gcc
yum install gcc -y
  • 進入解壓出來的redis目錄,編譯
cd /home/redis-5.0.3/
make && make PREFIX=/opt/redis install
編譯成功後即會在/opt/redis/目錄下生成bin文件夾
  • 如果編譯時報錯:#error “Newer version of jemalloc required”,解決辦法爲:
make MALLOC=libc
  1. 修改配置文件
  • 在node01上創建目錄
mkdir -p /home/redis-5.0.3/redis_cluster/7001
mkdir -p /home/redis-5.0.3/redis_cluster/7002

其他node02、node03類似,對應修改文件夾名稱即可,然後在創建的文件夾內創建配置文件:

vi /home/redis-5.0.3/redis_cluster/7001/redis.conf

# 綁定服務器IP地址
bind 192.168.33.101
# 綁定端口號,必須修改,以此來區分Redis實例
port 7001
# 後臺運行
daemonize yes
# 修改pid進程文件名,以端口號命名
pidfile /var/run/redis-7001.pid
# 修改日誌文件名稱,以端口號爲目錄來區分
logfile /home/redis-5.0.3/redis_cluster/7001/redis.log
# 修改數據文件存放地址,以端口號爲目錄名來區分
dir /home/redis-5.0.3/redis_cluster/7001/
# 啓用集羣
cluster-enabled yes
# 配置每個節點的配置文件,同樣以端口號爲名稱
cluster-config-file nodes-7001.conf
# 配置集羣節點的超時時間,可改可不改
cluster-node-timeout 15000
# 啓動AOF增量持久化策略
appendonly yes
# 發生改變就記錄日誌
appendfsync always
  • 然後將node01上的/home/redis-5.0.3及/opt/redis分發到node02和node03的相同目錄。
  • node02:
mv /home/redis-5.0.3/redis_cluster/7001 /home/redis-5.0.3/redis_cluster/7003
mv /home/redis-5.0.3/redis_cluster/7002 /home/redis-5.0.3/redis_cluster/7004
  • node03:
mv /home/redis-5.0.3/redis_cluster/7001 /home/redis-5.0.3/redis_cluster/7005
mv /home/redis-5.0.3/redis_cluster/7002 /home/redis-5.0.3/redis_cluster/7006

並修改各redis.conf文件內對應的ip及端口。

  1. 配置各節點環境變量
vi /etc/profile

export REDIS_HOME=/opt/redis
export PATH=$REDIS_HOME/bin:$PATH
  1. 啓動各節點
redis-server /home/redis-5.0.3/redis_cluster/7001/redis.conf
redis-server /home/redis-5.0.3/redis_cluster/7002/redis.conf
……

查看節點是否啓動
ps -ef | grep redis
  1. 使用 reids-cli 搭建 Redis集羣
redis-cli --cluster create 192.168.33.101:7001 192.168.33.102:7003 192.168.33.103:7005 192.168.33.102:7004 1
92.168.33.103:7006 192.168.33.101:7002 --cluster-replicas 1
  • –cluster-replicas 1 命令的意思: 一主一從配置,六個節點就是 三主三從
  • 使用如下命令創建集羣的狀態:
redis-cli --cluster check 192.168.33.101:7001  #填寫任意節點即可,會帶出所有的
  1. 測試集羣
[root@node03 redis_cluster]# redis-cli -c -h 192.168.33.102 -p 7002
192.168.33.102:7002> set key1 lisi
OK
192.168.33.102:7002> get key1
"lisi"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章