下載安裝包
# 進入軟件下載目錄
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進行添加,進行增量同步復制。