Centos7中搭建Redis6集群操作步驟


下載安裝包

# 進入軟件下載目錄
cd /root/software

# 下載安裝包
wget https://download.redis.io/releases/redis-6.2.0.tar.gz

# 確認下載安裝包
ll

解壓安裝裝包

# 進入安裝目錄
cd /root/program

# 創建安裝軟件目錄
mkdir redis
cd redis

# 確認當前目錄
pwd
# /root/program/redis

# 復制安裝包
cp /root/software/redis-6.2.0.tar.gz .

# 解壓目錄
tar -xvf redis-6.2.0.tar.gz

安裝依賴

# 確認gcc是否已安裝及版本
gcc -v

# 安裝gcc依賴
yum install gcc

# CentOS7默認安裝的是4.8.5,而redis6.0只支持5.3以上版本,這里將gcc升級到9
yum install centos-release-scl

yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

# 永久切換gcc版本
echo “source /opt/rh/devtoolset-9/enable” >> /etc/profile

# 臨時切換gcc版本
scl enable devtoolset-9 bash

# 查看gcc版本
gcc -v

安裝

# 進入解壓后目錄
cd /root/program/redis/redis-6.2.0

# 編譯
make MALLOC=libc

# 安裝
make install PREFIX=/usr/local/redis

# 確認是否安裝成功
cd /usr/local/redis/bin

# 如果出現下面的結果則證明已安裝成功
[root@localhost bin]# ll
total 8424
-rwxr-xr-x. 1 root root  963456 Mar  1 10:00 redis-benchmark
lrwxrwxrwx. 1 root root      12 Mar  1 10:00 redis-check-aof -> redis-server
lrwxrwxrwx. 1 root root      12 Mar  1 10:00 redis-check-rdb -> redis-server
-rwxr-xr-x. 1 root root 1202888 Mar  1 10:00 redis-cli
lrwxrwxrwx. 1 root root      12 Mar  1 10:00 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 6452272 Mar  1 10:00 redis-server

# 配置全局可以使用Redis命令
cp redis-cli /usr/bin/redis-cli

cp redis-server /usr/bin/redis-server

# 確認是否可以使用全局變量
redis-cli

創建目錄

# 創建對應數據文件目錄
cd /root/
mkdir data
cd data/
mkdir redis
cd redis/

# 確認當前所在的操作目錄
pwd
# /root/data/redis

# 創建相應的文件目錄
mkdir run log data conf

# 創建數據對應rdb文件每個端口對應目錄
cd data
mkdir 7000 7001 7002 7003 7004 7005

設置配置文件

# 進入安裝包目錄
cd /root/program/redis/redis-6.2.0

# 復制配置文件到目標目錄
cp redis.conf /root/data/redis/conf/redis_7000.conf

# 進入配置文件對應目錄
cd /root/data/redis/conf

# 配置配置文件內容,修改文件內容如下:
vim redis_7000.conf
# 一.允許遠程訪問
#1. 注釋掉下面代碼,或者改為 bind 0.0.0.0,第75行
bind 0.0.0.0
#2. 關閉保護模式,第94行
protected-mode no

# 二.通用配置
#1. 開啟守護進程,第247行
daemonize yes
#2. 配置密碼(必須設置相同的密碼,不設masterauth的話宕機了不能自動恢復),第879行
requirepass tdfdsfnkinki.net
#集群節點間的訪問密碼,第474行
masterauth tdfdsfnkinki.net
# 持久化類型
appendonly yes
appendfilename "appendonly-7000.aof"

# 三.集群配置
port 7000 #配置端口,第98行
cluster-enabled yes #開啟集群,第1363行
cluster-config-file nodes-7000.conf  #集群節點配置文件,第1371行
pidfile /root/data/redis/run/redis_7000.pid #進程文件ID對應文件,第279行
cluster-node-timeout 5000 #集群節點超時時間,超過這個時間,集群認為該節點故障,如果是主節點,會進行相應的主從切換,第1377行

# 四.配置對應目錄
logfile /root/data/redis/log/redis_7000.log #日志文件,第292行
dir /root/data/redis/data/7000 #目錄要提前創建好,第444行
# 將當前7000的配置文件復制為其他端口的配置文件,7001、7002、7003、7004、7005
# 復制配置文件
cp redis_7000.conf redis_7001.conf
cp redis_7000.conf redis_7002.conf
cp redis_7000.conf redis_7003.conf
cp redis_7000.conf redis_7004.conf
cp redis_7000.conf redis_7005.conf

# 修改與端口號有關的配置,對應端口號與當前端口號一致,在所有的配置文件中均需要進行修改配置,具體修改內容如下所示:
# 二.通用配置
appendfilename "appendonly-7000.aof"

# 三.集群配置
port 7001 #配置端口,第98行
cluster-config-file nodes-7001.conf  #集群節點配置文件,第1371行
pidfile /root/data/redis/run/redis_7001.pid #進程文件ID對應文件,第279行

# 四.配置對應目錄
logfile /root/data/redis/log/redis_7001.log #日志文件,第292行
dir /root/data/redis/data/7001 #目錄要提前創建好,第444行

創建啟動服務

下面以7000端口為例創建系統服務,其余端口模仿此配置進行修改,需修改對應的端口號數據。

# 創建服務文件
vim /etc/systemd/system/redis-7000.service

# 文件內容如下:
[Unit]
Description=The redis-cluster-server-7000 Process Manager
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /root/data/program/redis/data/conf/redis_7000.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# 重新加載
systemctl daemon-reload

# 啟動服務
systemctl start redis-7000

# 查看服務狀態
systemctl status redis-7000

# 設置開機啟動
systemctl enable redis-7000

制作啟動文件

# 系統對應的服務即可
systemctl start redis-7000
systemctl start redis-7001
systemctl start redis-7002
systemctl start redis-7003
systemctl start redis-7004
systemctl start redis-7005

啟動並驗證Redis

# 查看啟動狀態
ps aux | grep redis

開放防火牆端口

# 查看防火牆狀態
systemctl status firewalld

# 查看已經開放的端口
firewall-cmd --list-ports

# 開放端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent

# 開放通信端口
firewall-cmd --zone=public --add-port=17000/tcp --permanent
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
firewall-cmd --zone=public --add-port=17003/tcp --permanent
firewall-cmd --zone=public --add-port=17004/tcp --permanent
firewall-cmd --zone=public --add-port=17005/tcp --permanent

# 重新加載配置
firewall-cmd --reload

# 查看端口開放狀態
firewall-cmd --list-ports

創建集群

用以下命令創建集群,--cluster-replicas 1 參數表示希望每個主服務器都有一個從服務器,這里則代表3主3從,前3個代表3個master,后3個代表3個slave。

通過該方式創建的帶有從節點的機器不能夠自己手動指定主節點,Redis集群會盡量把主從服務器分配在不同機器上。

# 進入啟動腳本目錄
cd /root/data/redis

# 啟動集群
./cluster_start.sh

# 創建集群
redis-cli -a tdfdsfnkinki.net --cluster create 192.168.110.129:7000 192.168.110.129:7001 192.168.110.129:7002 192.168.110.129:7003 192.168.110.129:7004 192.168.110.129:7005 --cluster-replicas 1

# 確認對應主從節點配置信息,沒有問題后輸入yes即可,輸出的信息如下所示:
[root@localhost redis]# redis-cli -a ttknoa@cnki.net --cluster create 192.168.110.129:7000 192.168.110.129:7001 192.168.110.129:7002 192.168.110.129:7003 192.168.110.129:7004 192.168.110.129:7005 --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.110.129:7004 to 192.168.110.129:7000
Adding replica 192.168.110.129:7005 to 192.168.110.129:7001
Adding replica 192.168.110.129:7003 to 192.168.110.129:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: a91202256714e5c1988e651e0561f36fa3e893af 192.168.110.129:7000
   slots:[0-5460] (5461 slots) master
M: 9e9a9dd3256aef33108c33955237b593df64448c 192.168.110.129:7001
   slots:[5461-10922] (5462 slots) master
M: e6c4b9ead90526d54713f5471f4bdb763a32156f 192.168.110.129:7002
   slots:[10923-16383] (5461 slots) master
S: 1c1a7082395374d3364f856317afaaec01251c9a 192.168.110.129:7003
   replicates e6c4b9ead90526d54713f5471f4bdb763a32156f
S: 81880bd5afd523932df5f201141fbca2c422d267 192.168.110.129:7004
   replicates a91202256714e5c1988e651e0561f36fa3e893af
S: c7f24bdc1d7648f1841d3a958d108279bd552025 192.168.110.129:7005
   replicates 9e9a9dd3256aef33108c33955237b593df64448c
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.110.129:7000)
M: a91202256714e5c1988e651e0561f36fa3e893af 192.168.110.129:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: e6c4b9ead90526d54713f5471f4bdb763a32156f 192.168.110.129:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: c7f24bdc1d7648f1841d3a958d108279bd552025 192.168.110.129:7005
   slots: (0 slots) slave
   replicates 9e9a9dd3256aef33108c33955237b593df64448c
M: 9e9a9dd3256aef33108c33955237b593df64448c 192.168.110.129:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 1c1a7082395374d3364f856317afaaec01251c9a 192.168.110.129:7003
   slots: (0 slots) slave
   replicates e6c4b9ead90526d54713f5471f4bdb763a32156f
S: 81880bd5afd523932df5f201141fbca2c422d267 192.168.110.129:7004
   slots: (0 slots) slave
   replicates a91202256714e5c1988e651e0561f36fa3e893af
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

集群其他操作

# 連接到集群上(任何一個節點即可),進行集群信息的查看
redis-cli -c -h 192.168.110.129 -p 7000 -a tdfdsfnki.net

# 查看節點信息
cluster nodes

# 查看集群信息
cluster info

# 查看槽位信息
cluster slots

# 計算某個key的槽位
cluster keyslot xxx

# 關閉redis
./redis-cli shutdown
#直接結束線程
kill -p pid

注意

這里是在一台服務器部署的,所以各個redis實例之間是可以相互通信的,如果是多服務器部署cluster,除了保證redis基礎端口開放,還要保證cluster的通信端口開放,即 通信端口=基礎端口號 + 10000 。

主節點上有槽位,刪除前必須先把槽位遷移。

新加進去的節點默認都為master主節點。

當被刪除掉的節點重新起來之后不能自動加入集群,但其和主的復制還是正常的,也可以通過該節點看到集群信息(通過其他正常節點已經看不到該被del-node節點的信息)。

如果想要再次加入集群,則需要先在該節點執行cluster reset,再用add-node進行添加,進行增量同步復制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM