環境信息:
redis-master----192.168.12.135
redis-slave-1-----192.168.12.136
redis-slave-2-----192.168.12.137
單機版Redis
安裝Redis
yum install -y gcc make jemalloc jemalloc-devel gcc-c++ wget tcl
yum groupinstall -y "Development Tools"
wget http://download.redis.io/releases/redis-8.0.2.tar.gz
tar xzf redis-8.0.2.tar.gz -C /usr/local/
mv /usr/local/redis-8.0.2 /usr/local/redis
cd /usr/local/redis
mkdir /usr/local/redis/data
vim redis.conf
#找到以下內容進行修改
bind 0.0.0.0 #監聽ip地址
protected-mode no #關閉保護模式
daemonize yes #后臺運行
logfile "/var/log/redis.log" #日志存放位置
save 3600 1 300 100 60 10000 #RDB持久化觸發設置
dir /usr/local/redis/data #持久化生成文件存放位置
appendonly yes #開啟AOF持久化make MALLOC=libc
make MALLOC=libc install
編寫使用system管理
vim /lib/systemd/system/redis.service #編寫使用system管理
[Unit]
Description=Redis
After=network.target[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown[Install]
WantedBy=multi-user.target
連接數據庫
systemctl daemon-reload #重新加載system
systemctl start redis #啟動redis
systemctl status redis #查看redis是否啟動
netstat -tnlp #查看6379端口是否監聽
cd /usr/local/redis/src/
./redis-cli -h 192.168.12.135 -p 6379 #連接數據庫
#輸入ping,返回pong測試連接成功
Redis主從
設置主從
從節點根據單機版先進行安裝redis
#以下操作在兩個從節點進行操作
cd /usr/local/redis/
vim redis.conf
replicaof 192.168.12.135 6379 #添加主節點ip及端口號
protected-mode no #關閉保護模式
#保護模式單節點部署已經關閉systemctl restart redis.service
測試主從
#主節點
cd /usr/local/redis/src/
./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name Disallow
OK
127.0.0.1:6379> get name
"Disallow"
#從節點
127.0.0.1:6379> get name
"Disallow"
查看復制狀態
#主節點
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.12.137,port=6379,state=online,offset=1469,lag=0
slave1:ip=192.168.12.136,port=6379,state=online,offset=1469,lag=0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455#從節點
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.12.135
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_read_repl_offset:1469
slave_repl_offset:1469
replica_full_sync_buffer_size:0
replica_full_sync_buffer_peak:0
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455
Redis哨兵
設置哨兵
#三臺機器都操作
cd /usr/local/redis/
vim sentinel.conf
daemonize yes #設置哨兵放后臺運行
logfile "/var/log/sentinel.log" #設置哨兵日志
sentinel monitor mymaster 192.168.12.135 6379 2 #當集群中有2個sentinel認為master死了時,才能真正認為該master已經不可用了。 (slave上面寫的是master的ip,master寫自己ip)
sentinel down-after-milliseconds mymaster 3000 #單位毫秒,默認是30000,根據自己需求修改
sentinel failover-timeout mymaster 10000 ##若sentinel在該配置值內未能完成failover(故障轉移)操作(即故障時master/slave自動切換),則認為本次failover失敗
protected-mode no #關閉加密模式--新添加到sentinel配置文件中 ----老版本中需需要添加./src/redis-sentinel sentinel.conf #運行redis
#老版本:./src/redis-sentinel sentinel.conf &
測試哨兵
#主節點停止redis
systemctl stop redis.service
#從節點登錄數據庫查看主從狀態
cd /usr/local/redis/src
./redis-cli
127.0.0.1:6379> info replication
Redis集群搭建
本次搭建使用3臺機器搭建,每臺機器上面兩個redis實例,一個master一個slave,第一列做主庫,第二列做備庫。
redis-cluster1 192.168.12.135 7000、7001
redis-cluster2 192.168.12.136 7002、7003
redis-cluster3 192.168.12.137 7004、7005
Redis安裝及配置文件修改
三臺機器Redis安裝按照單機版先進行按照
#分別在三臺機器創建集群目錄、持久化目錄、配置文件及修改配置文件
#redis-cluster1
mkdir -p /usr/local/redis/cluster/{7000,7001}
mkdir -p /usr/local/redis/data/{7000,7001}
cp /usr/local/redis/redis.conf /usr/local/redis/data/7000
cp /usr/local/redis/redis.conf /usr/local/redis/data/7001
vim /usr/local/redis/data/7000/redis.conf
bind 192.168.12.135 #每個實例的配置文件修改為對應節點的ip地址
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid #pid文件,運行多個實例時,需要指定不同的pid文件
logfile /var/log/redis_7000.log #日志文件位置,運行多實例時,需要將文件修改的不同。
dir /usr/local/redis/data/7000
appendonly yes #開啟AOF持久化
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes #啟用集群
cluster-config-file nodes-7000.conf #集群配置文件,由redis自動更新,不需要手動配置,運行多實例時請注修改為對應端口
cluster-node-timeout 15000 #單位毫秒。集群節點超時時間,即集群中主從節點斷開連接時間閾值,超過該值則認為主節點不可以,從節點將有可能轉為master
cluster-replica-validity-factor 10 #在進行故障轉移的時候全部slave都會請求申請為master,但是有些slave可能與master斷開連接一段時間了導致數據過于陳舊,不應該被提升為master。該參數就是用來判斷slave節點與master斷線的時間是否過長。
cluster-migration-barrier 1 #一個主機將保持連接的最小數量的從機,以便另一個從機遷移到不再被任何從機覆蓋的主機
cluster-require-full-coverage yes #集群中的所有slot(16384個)全部覆蓋,才能提供服務#7001配置文件將7000內的所有7000更換成7001即可#redis-cluster2
mkdir -p /usr/local/redis/cluster/{7002,7003}
mkdir -p /usr/local/redis/data/{7002,7003}
cp /usr/local/redis/redis.conf /usr/local/redis/data/7002
cp /usr/local/redis/redis.conf /usr/local/redis/data/7003#7002配置文件將7000內配置文件bind改為‘redis-cluster2’機器的ip,同時將配置文件內7000改為7002即可,7003同理#redis-cluster3
mkdir -p /usr/local/redis/cluster/{7004,7005}
mkdir -p /usr/local/redis/data/{7004,7005}
cp /usr/local/redis/redis.conf /usr/local/redis/data/7004
cp /usr/local/redis/redis.conf /usr/local/redis/data/7005#7004配置文件將7000內配置文件bind改為‘redis-cluster3’機器的ip,同時將配置文件內7000改為7004即可,7005同理
Redis啟動及集群創建
#啟動三臺機器上面的每個節點
#redis-cluster1
cd /usr/local/redis/src/
./redis-server ../cluster/7000/redis.conf
./redis-server ../cluster/7001/redis.conf#redis-cluster2
cd /usr/local/redis/src/
./redis-server ../cluster/7002/redis.conf
./redis-server ../cluster/7003/redis.conf#redis-cluster3cd /usr/local/redis/src/
./redis-server ../cluster/7004/redis.conf
./redis-server ../cluster/7005/redis.conf#創建集群:在其中一個節點操作就可以
#redis節點搭建起來后,需要完成redis cluster集群搭建,搭建集群過程中,需要保證6個redis實例都是運行狀態。Redis是根據IP和Port的順序,確定master和slave的,所以要排好序,再執行。
cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005
#--cluster-replicas 1:表示為集群中的每個主節點創建一個從節點.書寫流程:主節點ip+port 對應一個從節點ip+port(正常是前面三個節點為主節點,后面的為從節點)
查看Redis集群狀態
cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005
執行完這個顯示類似如下內容則集群部署成功,中途需要輸入yes確認
>>> 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.12.136:7003 to 192.168.12.135:7000
Adding replica 192.168.12.137:7005 to 192.168.12.136:7002
Adding replica 192.168.12.135:7001 to 192.168.12.137:7004
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000slots:[0-5460] (5461 slots) master
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001replicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002slots:[5461-10922] (5462 slots) master
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003replicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004slots:[10923-16383] (5461 slots) master
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005replicates e0370608cd33ddf5bb6de48b5627799e181de3b6
Can I set the above configuration? (type 'yes' to accept): yes #寫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.12.135:7000)
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001slots: (0 slots) slavereplicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003slots: (0 slots) slavereplicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005slots: (0 slots) slavereplicates e0370608cd33ddf5bb6de48b5627799e181de3b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看集群狀態可連接集群中的任一節點,此處連接了集群中的節點192.168.12.135:7000
[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.136:7002> cluster info #查看集群信息
cluster_state:ok #集群狀態
cluster_slots_assigned:16384 #分配的槽
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6 #集群實例數
......192.168.12.135:7000> cluster nodes #查看集群實例
集群操作
客戶端登陸–測試鏈接redis,存取數據(鏈接集群中任意一臺機器就可以。)
[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.135:7000> set name qianfeng
-> Redirected to slot [5798] located at 192.168.12.136:7002
OK
192.168.12.136:7002>讀
[root@redis-cluster3 src]# ./redis-cli -h 192.168.12.136 -c -p 7002
192.168.12.136:7002> ping
PONG
192.168.12.136:7002> get name
"qianfeng"
192.168.12.136:7002> exists name #查看某一個key是否存在
(integer) 1
主從切換
將節點內主節點關閉,登錄從節點查看執行CLUSTER nodes查看是否主從切換成功