Redis 哨兵搭建的實(shí)現(xiàn)示例
一、單節(jié)點(diǎn)哨兵
1. 環(huán)境介紹
| 操作系統(tǒng) | Centos 7 |
|---|---|
| 內(nèi)核版本 | Linux 3.10.0-957.el7.x86_64 |
| 主機(jī)名稱 | master |
| IP | 192.168.1.100 |
| 端口 | master:16370 slaver1:16371 slaver2: 16372 sentinel:16379 |
2. 環(huán)境前準(zhǔn)備工作
# 關(guān)閉防火墻 systemctl stop firewalld systemctl disable firewalld # 修改 hostname hostnamectl set-hostname xxxx # 修改后退出當(dāng)前終端重新連接即可 # 更新下軟件源 # 地址 https://developer.aliyun.com/mirror/ # 時(shí)區(qū)調(diào)整,時(shí)間校準(zhǔn) date -R timedatectl set-timezone Asia/Shanghai yum -y install ntp ntpdate ntp1.aliyun.com # 關(guān)閉 selinux: sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0 # 修改內(nèi)存分配控制 vi /etc/sysctl.conf vm.overcommit_memory = 1 # 設(shè)置TPC積壓值 net.core.somaxconn= 1024 # 使其配置文件生效 sysctl -p /etc/sysctl.conf
3. 安裝 Redis 7.2.5
# 下載地址 http://download.redis.io/releases/ # 下載 wget http://download.redis.io/releases/redis-7.2.5.tar.gz # 解壓 tar -xf redis-7.2.5.tar.gz -C /opt/redis # 編譯 make MALLOC=libc # 安裝 注意如果安裝提示python3不存在 執(zhí)行 yum install -y python3 make install PREFIX=/usr/local/redis # 配置環(huán)境變量 vi /etc/profile.d/redis.sh #!/bin/bash export REDIS_HOME=/usr/local/redis export PATH=$PATH:$REDIS_HOME/bin # 使其配置生效 source /etc/profile.d/redis.sh
4. redis 配置修改并且啟動(dòng)
4.1 修改配置文件
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄
mkdir -p /usr/local/redis/data/1637{0..2}
# 創(chuàng)建redis配置文件存儲(chǔ)目錄
mkdir -p /usr/local/redis/conf/1637{0..2}
# 創(chuàng)建redis日志存儲(chǔ)目錄
mkdir -p /usr/local/redis/log/1637{0..2}
# 創(chuàng)建redis pid存儲(chǔ)目錄
mkdir /usr/local/redis/run
# redis配置文件 16370
# 開啟保護(hù)模式
protected-mode yes
# 添加本機(jī)的ip
bind 192.168.1.100
# 端口
port 16370
# pid存儲(chǔ)目錄
pidfile /usr/local/redis/run/redis_16370.pid
# 日志存儲(chǔ)目錄
logfile /usr/local/redis/log/16370/redis_16370.log
# 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好
dir /usr/local/redis/data/16370
# 設(shè)置實(shí)例的驗(yàn)證口令
requirepass dongdong
# 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。
# 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守護(hù)進(jìn)程
daemonize yes
# redis配置文件 16371
# 開啟保護(hù)模式
protected-mode yes
# 添加本機(jī)的ip
bind 192.168.1.100
# 端口
port 16371
# pid存儲(chǔ)目錄
pidfile /usr/local/redis/run/redis_16371.pid
# 日志存儲(chǔ)目錄
logfile /usr/local/redis/log/16370/redis_16371.log
# 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好
dir /usr/local/redis/data/16371
# 設(shè)置實(shí)例的驗(yàn)證口令
requirepass dongdong
# 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。
# 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守護(hù)進(jìn)程
daemonize yes
# redis配置文件 16372
# 開啟保護(hù)模式
protected-mode yes
# 添加本機(jī)的ip
bind 192.168.1.100
# 端口
port 16372
# pid存儲(chǔ)目錄
pidfile /usr/local/redis/run/redis_16372.pid
# 日志存儲(chǔ)目錄
logfile /usr/local/redis/log/16370/redis_16372.log
# 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好
dir /usr/local/redis/data/16372
# 設(shè)置實(shí)例的驗(yàn)證口令
requirepass dongdong
# 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。
# 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守護(hù)進(jìn)程
daemonize yes
# 復(fù)制下面命令即可
cat > /usr/local/redis/conf/redis_16370.conf <<EOF
# 開啟保護(hù)模式
protected-mode yes
# 添加本機(jī)的ip
bind 192.168.1.100
# 端口
port 16370
# pid存儲(chǔ)目錄
pidfile /usr/local/redis/run/redis_16370.pid
# 日志存儲(chǔ)目錄
logfile /usr/local/redis/log/16370/redis_16370.log
# 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好
dir /usr/local/redis/data/16370
# 設(shè)置實(shí)例的驗(yàn)證口令
requirepass dongdong
# 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。
# 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守護(hù)進(jìn)程
daemonize yes
EOF
cat > /usr/local/redis/conf/redis_16371.conf <<EOF
# 開啟保護(hù)模式
protected-mode yes
# 添加本機(jī)的ip
bind 192.168.1.100
# 端口
port 16371
# pid存儲(chǔ)目錄
pidfile /usr/local/redis/run/redis_16371.pid
# 日志存儲(chǔ)目錄
logfile /usr/local/redis/log/16370/redis_16371.log
# 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好
dir /usr/local/redis/data/16371
# 設(shè)置實(shí)例的驗(yàn)證口令
requirepass dongdong
# 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。
# 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守護(hù)進(jìn)程
daemonize yes
EOF
cat > /usr/local/redis/conf/redis_16372.conf <<EOF
# 開啟保護(hù)模式
protected-mode yes
# 添加本機(jī)的ip
bind 192.168.1.100
# 端口
port 16372
# pid存儲(chǔ)目錄
pidfile /usr/local/redis/run/redis_16372.pid
# 日志存儲(chǔ)目錄
logfile /usr/local/redis/log/16370/redis_16372.log
# 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好
dir /usr/local/redis/data/16372
# 設(shè)置實(shí)例的驗(yàn)證口令
requirepass dongdong
# 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。
# 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致
masterauth dongdong
# 配置RDB持久化策略
save 900 1
save 300 10
save 60 10000
# 配置AOF持久化
appendonly yes
appendfsync everysec
# 守護(hù)進(jìn)程
daemonize yes
EOF
4.2 編寫啟動(dòng)腳本
# 啟動(dòng)腳本
cat > /usr/local/redis/bin/master-slave_start.sh << EOF
#!/bin/bash
redis-server /usr/local/redis/conf/redis_16370.conf
redis-server /usr/local/redis/conf/redis_16371.conf
redis-server /usr/local/redis/conf/redis_16372.conf
EOF
# 賦予可執(zhí)行權(quán)限
chmod +x /usr/local/redis/bin/master-slave_start.sh
# 關(guān)閉腳本
vi /usr/local/redis/bin/master-slave_shutdown.sh
#!/bin/bash
kill -9 $(ps -ef | grep 1637 | grep -v grep | awk '{print $2}')
# 賦予可執(zhí)行權(quán)限
chmod +x /usr/local/redis/bin/master-slave_shutdown.sh
5. 開啟主從
5.1 開啟
# 以"192.168.1.100:16370"實(shí)例為主庫,以"192.168.1.100:16371"實(shí)例和"192.168.1.100:16372"實(shí)例為從庫。 # -a 參數(shù)指定密碼 # 從庫實(shí)例開啟主從 redis-cli -h 192.168.1.100 -p 16371 -a dongdong slaveof 192.168.1.100 16370 redis-cli -h 192.168.1.100 -p 16372 -a dongdong slaveof 192.168.1.100 16370 # Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # 警告:在命令行界面上使用帶有“-a”或“-u”選項(xiàng)的密碼可能不安全。 可以忽略 # 解決方式 # redis-cli -h 192.168.1.100 -p 16371 -a dongdong --no-auth-warning slaveof 192.168.1.100 16370
5.2 主庫實(shí)例查看主從信息
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication [root@master-slave ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:2 slave0:ip=192.168.1.100,port=16371,state=online,offset=8428,lag=0 slave1:ip=192.168.1.100,port=16372,state=online,offset=8428,lag=1 master_failover_state:no-failover master_replid:a292603e2c96a6f451055e6d84a60795f81f2928 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:8428 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:8428
6. 創(chuàng)建sentinel的配置文件并啟動(dòng)
6.1 創(chuàng)建配置文件
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄
mkdir -p /usr/local/redis/data/16379
# 創(chuàng)建redis配置文件存儲(chǔ)目錄
mkdir -p /usr/local/redis/conf/16379
# 創(chuàng)建redis日志存儲(chǔ)目錄
mkdir -p /usr/local/redis/log/16379
# 創(chuàng)建redis pid存儲(chǔ)目錄
mkdir /usr/local/redis/run
cat > /usr/local/redis/conf/sentinel.conf <<EOF
bind 192.168.1.100
port 16379
dir /usr/local/redis/data/16379
sentinel monitor redis_master 192.168.1.100 16370 1
sentinel down-after-milliseconds redis_master 5000
sentinel auth-pass redis_master dongdong
EOF
配置文件參數(shù)說明如下:
sentinel monitor redis_master 192.168.1.100 16370 1:
指定Redis初始集群的master庫節(jié)點(diǎn)并命名為"redis_master",注意這個(gè)"1"的含義,他表示sentinel需要最少的投票數(shù)。這在于多sentinel的場景下很有用,由于本案例只是用了1個(gè)sentinel,因此我就設(shè)置為1。
在生產(chǎn)環(huán)境中,建議配置多sentinel的模式,建議最少設(shè)置為3(建議設(shè)置奇數(shù))個(gè)sentinel物理節(jié)點(diǎn),而后將此處的"1"改為"2",表示3個(gè)sentinel中最少有2個(gè)節(jié)點(diǎn)認(rèn)為master庫宕機(jī)時(shí),才會(huì)真正意義上認(rèn)為master庫宕機(jī)。
sentinel down-after-milliseconds redis_master 5000:
監(jiān)控sentinel集群時(shí),如果超過了5000毫秒(即5秒)仍然沒有響應(yīng),則sentinel會(huì)判定master庫宕機(jī)了。
sentinel auth-pass redis_master dongdong:
由于sentinel需要訪問Redis集群,因此我們要設(shè)置訪問整個(gè)集群的密碼,我這里指定的密碼為"dongdong",這意味著所有的節(jié)點(diǎn)都使用相同的密碼。
6.2 啟動(dòng)
# 啟動(dòng) sentinel進(jìn)程 redis-sentinel /usr/local/redis/conf/sentinel.conf &> /usr/local/redis/log/16379/sentinel_16379.log & root@master ~]# redis-sentin el /usr/local/redis/conf/sentinel.conf &> /usr/local/redis/log/16379/sentinel_16379.log & [1] 29961 # 查看日志 tail -100f /usr/local/redis/log/16379/sentinel_16379.log [root@master ~]# tail -100f /usr/local/redis/log/16379/sentinel_16379.log 30008:X 17 Jul 2024 19:51:15.356 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 30008:X 17 Jul 2024 19:51:15.356 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=30008, just started 30008:X 17 Jul 2024 19:51:15.356 * Configuration loaded 30008:X 17 Jul 2024 19:51:15.356 * Increased maximum number of open files to 10032 (it was originally set to 1024). 30008:X 17 Jul 2024 19:51:15.356 * monotonic clock: POSIX clock_gettime 30008:X 17 Jul 2024 19:51:15.357 * Running mode=sentinel, port=16379. 30008:X 17 Jul 2024 19:51:15.357 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 30008:X 17 Jul 2024 19:51:15.357 * Sentinel ID is a91bf648c16246f3f7c7e1aa2b1fc6fad38f772b 30008:X 17 Jul 2024 19:51:15.357 # +monitor master redis_master 192.168.1.100 16370 quorum 1 # 通過redis-cli 進(jìn)入 查看 redis-cli -h 192.168.1.100 -p 16379 [root@master ~]# redis-cli -h 192.168.1.100 -p 16379 192.168.1.100:16379> ping PONG 192.168.1.100:16379>
6.3 手動(dòng)停止主庫運(yùn)行,模擬主庫宕機(jī)
# 切換前主從狀態(tài)正常
[root@master ~]# ss -npl | grep redis
tcp LISTEN 0 128 192.168.1.100:16370 *:* users:(("redis-server",pid=29871,fd=6))
tcp LISTEN 0 128 192.168.1.100:16371 *:* users:(("redis-server",pid=29873,fd=6))
tcp LISTEN 0 128 192.168.1.100:16372 *:* users:(("redis-server",pid=29881,fd=6))
tcp LISTEN 0 128 192.168.1.100:16379 *:* users:(("redis-sentinel",pid=30008,fd=6))
# 查看集群狀態(tài) master
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
[root@master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.100,port=16371,state=online,offset=111085,lag=0
slave1:ip=192.168.1.100,port=16372,state=online,offset=111085,lag=1
master_failover_state:no-failover
master_replid:208227bbd586d90841dcf753ba669dbde246bba7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:111085
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:111085
# 查看集群狀態(tài) slaver
redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication
[root@master ~]# redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.1.100
master_port:16370
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_read_repl_offset:118087
slave_repl_offset:118087
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:208227bbd586d90841dcf753ba669dbde246bba7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:118087
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:118073
# 查看集群狀態(tài) slaver
redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication
[root@master ~]# redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.1.100
master_port:16370
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:126869
slave_repl_offset:126869
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:208227bbd586d90841dcf753ba669dbde246bba7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126869
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:126855
# 手動(dòng)將主庫宕機(jī),觀察從庫被sentinel實(shí)現(xiàn)了自動(dòng)切換:
redis-cli -h 192.168.1.100 -p 16370 -a dongdong shutdown
[root@master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# 再查看集群狀態(tài) master
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication # 由于將主庫服務(wù)停了,因此無法再次連接主庫
[root@master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Could not connect to Redis at 192.168.1.100:16370: Connection refused
# 再查看集群狀態(tài) slaves 發(fā)現(xiàn)變成了master節(jié)點(diǎn)
redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication
[root@master ~]# redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.100,port=16372,state=online,offset=150234,lag=0
master_failover_state:no-failover
master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed
master_replid2:208227bbd586d90841dcf753ba669dbde246bba7
master_repl_offset:150234
second_repl_offset:134150
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:150220
# 查看集群狀態(tài) slaver
redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication
[root@master ~]# redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.1.100
master_port:16371
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_read_repl_offset:154406
slave_repl_offset:154406
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed
master_replid2:208227bbd586d90841dcf753ba669dbde246bba7
master_repl_offset:154406
second_repl_offset:134150
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:154392
# 查看sentinel的日志信息,不難發(fā)現(xiàn)有記錄切換的過程
tail -100f /usr/local/redis/log/16379/sentinel_16379.log
[root@master ~]# tail -100f /usr/local/redis/log/16379/sentinel_16379.log
30008:X 17 Jul 2024 19:51:15.356 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
30008:X 17 Jul 2024 19:51:15.356 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=30008, just started
30008:X 17 Jul 2024 19:51:15.356 * Configuration loaded
30008:X 17 Jul 2024 19:51:15.356 * Increased maximum number of open files to 10032 (it was originally set to 1024).
30008:X 17 Jul 2024 19:51:15.356 * monotonic clock: POSIX clock_gettime
30008:X 17 Jul 2024 19:51:15.357 * Running mode=sentinel, port=16379.
30008:X 17 Jul 2024 19:51:15.357 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
30008:X 17 Jul 2024 19:51:15.357 * Sentinel ID is a91bf648c16246f3f7c7e1aa2b1fc6fad38f772b
30008:X 17 Jul 2024 19:51:15.357 # +monitor master redis_master 192.168.1.100 16370 quorum 1
30008:X 17 Jul 2024 20:15:40.962 # +sdown master redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:40.962 # +odown master redis_master 192.168.1.100 16370 #quorum 1/1
30008:X 17 Jul 2024 20:15:40.962 # +new-epoch 1
30008:X 17 Jul 2024 20:15:40.962 # +try-failover master redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:40.968 * Sentinel new configuration saved on disk
30008:X 17 Jul 2024 20:15:40.968 # +vote-for-leader a91bf648c16246f3f7c7e1aa2b1fc6fad38f772b 1
30008:X 17 Jul 2024 20:15:40.968 # +elected-leader master redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:40.968 # +failover-state-select-slave master redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:41.026 # +selected-slave slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:41.027 * +failover-state-send-slaveof-noone slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:41.093 * +failover-state-wait-promotion slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:42.015 * Sentinel new configuration saved on disk
30008:X 17 Jul 2024 20:15:42.015 # +promoted-slave slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:42.015 # +failover-state-reconf-slaves master redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:42.096 * +slave-reconf-sent slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:43.040 * +slave-reconf-inprog slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:43.040 * +slave-reconf-done slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:43.094 # +failover-end master redis_master 192.168.1.100 16370
30008:X 17 Jul 2024 20:15:43.094 # +switch-master redis_master 192.168.1.100 16370 192.168.1.100 16371
30008:X 17 Jul 2024 20:15:43.095 * +slave slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16371
30008:X 17 Jul 2024 20:15:43.095 * +slave slave 192.168.1.100:16370 192.168.1.100 16370 @ redis_master 192.168.1.100 16371
30008:X 17 Jul 2024 20:15:43.100 * Sentinel new configuration saved on disk
30008:X 17 Jul 2024 20:15:48.121 # +sdown slave 192.168.1.100:16370 192.168.1.100 16370 @ redis_master 192.168.1.100 16371
6.4 手動(dòng)修復(fù)宕機(jī)的主庫,sentinel會(huì)自動(dòng)發(fā)現(xiàn)
# 修復(fù)之前,16370端口是連接不上的 redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication [root@master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. Could not connect to Redis at 192.168.1.100:16370: Connection refused [root@master ~]# redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:1 slave0:ip=192.168.1.100,port=16372,state=online,offset=190264,lag=1 master_failover_state:no-failover master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed master_replid2:208227bbd586d90841dcf753ba669dbde246bba7 master_repl_offset:190410 second_repl_offset:134150 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:15 repl_backlog_histlen:190396 [root@master ~]# redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.100 master_port:16371 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:192204 slave_repl_offset:192204 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed master_replid2:208227bbd586d90841dcf753ba669dbde246bba7 master_repl_offset:192204 second_repl_offset:134150 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:15 repl_backlog_histlen:192190 # 修復(fù)之后,之前宕機(jī)的主庫會(huì)自動(dòng)加入集群并成為slaves節(jié)點(diǎn) redis-server /usr/local/redis/conf/redis_16370.conf [root@master ~]# redis-server /usr/local/redis/conf/redis_16370.conf [root@master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.100 master_port:16371 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:199215 slave_repl_offset:199215 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed master_replid2:0000000000000000000000000000000000000000 master_repl_offset:199215 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:199047 repl_backlog_histlen:169 # 查看 redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication [root@master ~]# redis-cli -h 192.168.1.100 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:2 # slaves 變成兩個(gè)了 slave0:ip=192.168.1.100,port=16372,state=online,offset=203533,lag=1 slave1:ip=192.168.1.100,port=16370,state=online,offset=203533,lag=1 master_failover_state:no-failover master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed master_replid2:208227bbd586d90841dcf753ba669dbde246bba7 master_repl_offset:203533 second_repl_offset:134150 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:15 repl_backlog_histlen:203519 [root@master ~]# redis-cli -h 192.168.1.100 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.100 master_port:16371 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:207851 slave_repl_offset:207851 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:23729dc7d7aeafa6f85a2a647442965c80b379ed master_replid2:208227bbd586d90841dcf753ba669dbde246bba7 master_repl_offset:207851 second_repl_offset:134150 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:15 repl_backlog_histlen:207837 # 注意觀察sentinel日志喲,會(huì)有新日志記錄 tail -100f /usr/local/redis/log/16379/sentinel_16379.log [root@master ~]# tail -100f /usr/local/redis/log/16379/sentinel_16379.log 30008:X 17 Jul 2024 19:51:15.356 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 30008:X 17 Jul 2024 19:51:15.356 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=30008, just started 30008:X 17 Jul 2024 19:51:15.356 * Configuration loaded 30008:X 17 Jul 2024 19:51:15.356 * Increased maximum number of open files to 10032 (it was originally set to 1024). 30008:X 17 Jul 2024 19:51:15.356 * monotonic clock: POSIX clock_gettime 30008:X 17 Jul 2024 19:51:15.357 * Running mode=sentinel, port=16379. 30008:X 17 Jul 2024 19:51:15.357 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 30008:X 17 Jul 2024 19:51:15.357 * Sentinel ID is a91bf648c16246f3f7c7e1aa2b1fc6fad38f772b 30008:X 17 Jul 2024 19:51:15.357 # +monitor master redis_master 192.168.1.100 16370 quorum 1 30008:X 17 Jul 2024 20:15:40.962 # +sdown master redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:40.962 # +odown master redis_master 192.168.1.100 16370 #quorum 1/1 30008:X 17 Jul 2024 20:15:40.962 # +new-epoch 1 30008:X 17 Jul 2024 20:15:40.962 # +try-failover master redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:40.968 * Sentinel new configuration saved on disk 30008:X 17 Jul 2024 20:15:40.968 # +vote-for-leader a91bf648c16246f3f7c7e1aa2b1fc6fad38f772b 1 30008:X 17 Jul 2024 20:15:40.968 # +elected-leader master redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:40.968 # +failover-state-select-slave master redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:41.026 # +selected-slave slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:41.027 * +failover-state-send-slaveof-noone slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:41.093 * +failover-state-wait-promotion slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:42.015 * Sentinel new configuration saved on disk 30008:X 17 Jul 2024 20:15:42.015 # +promoted-slave slave 192.168.1.100:16371 192.168.1.100 16371 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:42.015 # +failover-state-reconf-slaves master redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:42.096 * +slave-reconf-sent slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:43.040 * +slave-reconf-inprog slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:43.040 * +slave-reconf-done slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:43.094 # +failover-end master redis_master 192.168.1.100 16370 30008:X 17 Jul 2024 20:15:43.094 # +switch-master redis_master 192.168.1.100 16370 192.168.1.100 16371 30008:X 17 Jul 2024 20:15:43.095 * +slave slave 192.168.1.100:16372 192.168.1.100 16372 @ redis_master 192.168.1.100 16371 30008:X 17 Jul 2024 20:15:43.095 * +slave slave 192.168.1.100:16370 192.168.1.100 16370 @ redis_master 192.168.1.100 16371 30008:X 17 Jul 2024 20:15:43.100 * Sentinel new configuration saved on disk 30008:X 17 Jul 2024 20:15:48.121 # +sdown slave 192.168.1.100:16370 192.168.1.100 16370 @ redis_master 192.168.1.100 16371 30008:X 17 Jul 2024 20:30:15.529 # -sdown slave 192.168.1.100:16370 192.168.1.100 16370 @ redis_master 192.168.1.100 16371 30008:X 17 Jul 2024 20:30:25.504 * +convert-to-slave slave 192.168.1.100:16370 192.168.1.100 16370 @ redis_master 192.168.1.100 16371 # 除了提到上面的變化外,還有一點(diǎn)變化就是配置文件也修改了,每個(gè)"slave"節(jié)點(diǎn)都新增了 下面三行 本案例只有192.168.1.100:16370 和 192.168.1.100:16372是 slave # Generated by CONFIG REWRITE replicaof 192.168.1.100 16371 latency-tracking-info-percentiles 50 99 99.9 user default on sanitize-payload #162fffe9f429e1fa5d351c11f5a7f2f3031806c5125eeb84993f68738cbb6c84 ~* &* +@all # Generated by CONFIG REWRITE replicaof 192.168.1.100 16371 latency-tracking-info-percentiles 50 99 99.9 user default on sanitize-payload #162fffe9f429e1fa5d351c11f5a7f2f3031806c5125eeb84993f68738cbb6c84 ~* &* +@all
二、多節(jié)點(diǎn)哨兵
一主兩從三哨兵
一共三臺(tái)機(jī)器,每臺(tái)機(jī)器部署一個(gè)哨兵
注意: 后面啟動(dòng)哨兵可能會(huì)出現(xiàn)兩個(gè)警告
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
警告:必須啟用內(nèi)存超量使用!沒有它,在內(nèi)存不足的情況下,后臺(tái)保存或復(fù)制可能會(huì)失敗。要解決此問題,請(qǐng)將“vm.overcommit_memory=1”添加到/etc/sysctl.conf中,然后重新啟動(dòng)或運(yùn)行命令“sysctl vm.overcommit_memory=1”以使其生效。
修改內(nèi)存分配控制
vi /etc/sysctl.conf vm.overcommit_memory = 1
使其配置文件生效
sysctl -p /etc/sysctl.conf
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
警告:無法強(qiáng)制執(zhí)行TCP積壓設(shè)置511,因?yàn)?proc/sys/net/core/somaxconn設(shè)置為較低的值128。
vi /etc/sysctl.conf net.core.somaxconn= 1024 sysctl -p /etc/sysctl.conf
| 操作系統(tǒng) | Centos 7 | Centos 7 | Centos 7 |
|---|---|---|---|
| 內(nèi)核版本 | Linux 3.10.0-957.el7.x86_64 | Linux 3.10.0-957.el7.x86_64 | Linux 3.10.0-957.el7.x86_64 |
| 主機(jī)名稱 | redis_master | redis_salve1 | redis_salve2 |
| IP | 192.168.1.100 | 192.168.1.200 | 192.168.1.250 |
| 端口 | 16370、26370 | 16371、26370 | 16372、26370 |
安裝前準(zhǔn)備工作已經(jīng)Redis安裝,請(qǐng)參照上面步驟進(jìn)行
1.Redis配置文件修改并啟動(dòng)
1.1 redis_master 節(jié)點(diǎn)
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /usr/local/redis/data/16370 # 創(chuàng)建redis配置文件存儲(chǔ)目錄 mkdir -p /usr/local/redis/conf/16370 # 創(chuàng)建redis日志存儲(chǔ)目錄 mkdir -p /usr/local/redis/log/16370 # 創(chuàng)建redis pid存儲(chǔ)目錄 mkdir /usr/local/redis/run/16370 # 修改配置文件 # 復(fù)制下面命令即可 cat > /usr/local/redis/conf/16370/redis_16370.conf <<EOF # 開啟保護(hù)模式 protected-mode yes # 添加本機(jī)的ip bind 192.168.1.100 # 端口 port 16370 # pid存儲(chǔ)目錄 pidfile /usr/local/redis/run/16370/redis_16370.pid # 日志存儲(chǔ)目錄 logfile /usr/local/redis/log/16370/redis_16370.log # 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好 dir /usr/local/redis/data/16370 # 設(shè)置實(shí)例的驗(yàn)證口令 requirepass dongdong # 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。 # 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致 masterauth dongdong # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 守護(hù)進(jìn)程 daemonize yes EOF # 啟動(dòng)Redis redis-server /usr/local/redis/conf/16370/redis_16370.conf
1.2 redis_slave1 節(jié)點(diǎn)
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /usr/local/redis/data/16371 # 創(chuàng)建redis配置文件存儲(chǔ)目錄 mkdir -p /usr/local/redis/conf/16371 # 創(chuàng)建redis日志存儲(chǔ)目錄 mkdir -p /usr/local/redis/log/16371 # 創(chuàng)建redis pid存儲(chǔ)目錄 mkdir /usr/local/redis/run/16371 # 修改配置文件 # 復(fù)制下面命令即可 cat > /usr/local/redis/conf/16371/redis_16371.conf <<EOF # 開啟保護(hù)模式 protected-mode yes # 添加本機(jī)的ip bind 192.168.1.200 # 端口 port 16371 # pid存儲(chǔ)目錄 pidfile /usr/local/redis/run/16371/redis_16371.pid # 日志存儲(chǔ)目錄 logfile /usr/local/redis/log/16371/redis_16371.log # 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好 dir /usr/local/redis/data/16371 # 設(shè)置實(shí)例的驗(yàn)證口令 requirepass dongdong # 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。 # 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致 masterauth dongdong # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 守護(hù)進(jìn)程 daemonize yes EOF # 啟動(dòng)Redis redis-server /usr/local/redis/conf/16371/redis_16371.conf
1.3 redis_slave2 節(jié)點(diǎn)
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /usr/local/redis/data/16372 # 創(chuàng)建redis配置文件存儲(chǔ)目錄 mkdir -p /usr/local/redis/conf/16372 # 創(chuàng)建redis日志存儲(chǔ)目錄 mkdir -p /usr/local/redis/log/16372 # 創(chuàng)建redis pid存儲(chǔ)目錄 mkdir /usr/local/redis/run/16372 # 修改配置文件 # 復(fù)制下面命令即可 cat > /usr/local/redis/conf/16372/redis_16372.conf <<EOF # 開啟保護(hù)模式 protected-mode yes # 添加本機(jī)的ip bind 192.168.1.250 # 端口 port 16372 # pid存儲(chǔ)目錄 pidfile /usr/local/redis/run/16372/redis_16372.pid # 日志存儲(chǔ)目錄 logfile /usr/local/redis/log/16372/redis_16372.log # 數(shù)據(jù)存儲(chǔ)目錄,目錄要提前創(chuàng)建好 dir /usr/local/redis/data/16372 # 設(shè)置實(shí)例的驗(yàn)證口令 requirepass dongdong # 以認(rèn)證的方式連接到master。 如果master中使用了“密碼保護(hù)”,slave必須交付正確的授權(quán)密碼,才能連接成功。 # 此配置項(xiàng)中值需要和master機(jī)器的“requirepass”保持一致 masterauth dongdong # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 守護(hù)進(jìn)程 daemonize yes EOF # 啟動(dòng)Redis redis-server /usr/local/redis/conf/16372/redis_16372.conf
2. 開啟主從
2.1 redis_slave1 節(jié)點(diǎn)
# 從庫實(shí)例開啟主從 redis-cli -h 192.168.1.200 -p 16371 -a dongdong slaveof 192.168.1.100 16370 [root@redis_slave1 ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong slaveof 192.168.1.100 16370 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. OK # 從庫實(shí)例查看主從信息 redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication [root@redis_slave1 ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.100 master_port:16370 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_read_repl_offset:210 slave_repl_offset:210 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:466362240f16a7414b9236f931c6f97252ee00be master_replid2:0000000000000000000000000000000000000000 master_repl_offset:210 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:15 repl_backlog_histlen:196
2.2 redis_slave2 節(jié)點(diǎn)
# 從庫實(shí)例開啟主從 redis-cli -h 192.168.1.250 -p 16372 -a dongdong slaveof 192.168.1.100 16370 [root@redis_slave2 ~]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong slaveof 192.168.1.100 16370 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. OK # 從庫實(shí)例查看主從信息 redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication [root@redis_slave2 ~]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.100 master_port:16370 master_link_status:up master_last_io_seconds_ago:10 master_sync_in_progress:0 slave_read_repl_offset:266 slave_repl_offset:266 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:466362240f16a7414b9236f931c6f97252ee00be master_replid2:0000000000000000000000000000000000000000 master_repl_offset:266 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:43 repl_backlog_histlen:224
2.3 redis_master 節(jié)點(diǎn)
# 主庫實(shí)例查看主從信息 redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:2 slave0:ip=192.168.1.200,port=16371,state=online,offset=42,lag=0 slave1:ip=192.168.1.250,port=16372,state=online,offset=42,lag=1 master_failover_state:no-failover master_replid:466362240f16a7414b9236f931c6f97252ee00be master_replid2:0000000000000000000000000000000000000000 master_repl_offset:56 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:56
3. 編寫sentinel配置文件并啟動(dòng)
3.1 redis_master 節(jié)點(diǎn)
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /usr/local/redis/data/26370 # 創(chuàng)建redis配置文件存儲(chǔ)目錄 mkdir -p /usr/local/redis/conf/26370 # 創(chuàng)建redis日志存儲(chǔ)目錄 mkdir -p /usr/local/redis/log/26370 # 創(chuàng)建redis pid存儲(chǔ)目錄 mkdir /usr/local/redis/run/26370 cat > /usr/local/redis/conf/26370/sentinel.conf <<EOF bind 192.168.1.100 port 26370 dir /usr/local/redis/data/26370 sentinel monitor redis_master 192.168.1.100 16370 2 sentinel down-after-milliseconds redis_master 5000 sentinel auth-pass redis_master dongdong EOF # 啟動(dòng) sentinel進(jìn)程 redis-sentinel /usr/local/redis/conf/26370/sentinel.conf &> /usr/local/redis/log/26370/sentinel_26370.log & [root@redis_master ~]# redis-sentinel /usr/local/redis/conf/26370/sentinel.conf &> /usr/local/redis/log/26370/sentinel_26370.log & [1] 30569 # 查看redis-sentinel 進(jìn)程 [root@redis_master ~]# ps -ef | grep redis root 30552 1 0 10:17 ? 00:00:01 redis-server 192.168.1.100:16370 root 30569 30499 0 10:33 pts/1 00:00:00 redis-sentinel 192.168.1.100:26370 [sentinel] # 已經(jīng)成功啟動(dòng)了 root 30574 30499 0 10:34 pts/1 00:00:00 grep --color=auto redis # 查看日志信息 tail -100f /usr/local/redis/log/26370/sentinel_26370.log [root@redis_master ~]# tail -100f /usr/local/redis/log/26370/sentinel_26370.log 30569:X 18 Jul 2024 10:33:50.636 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 30569:X 18 Jul 2024 10:33:50.636 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=30569, just started 30569:X 18 Jul 2024 10:33:50.636 * Configuration loaded 30569:X 18 Jul 2024 10:33:50.636 * Increased maximum number of open files to 10032 (it was originally set to 1024). 30569:X 18 Jul 2024 10:33:50.636 * monotonic clock: POSIX clock_gettime 30569:X 18 Jul 2024 10:33:50.637 * Running mode=sentinel, port=26370. 30569:X 18 Jul 2024 10:33:50.637 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 30569:X 18 Jul 2024 10:33:50.638 * Sentinel new configuration saved on disk 30569:X 18 Jul 2024 10:33:50.639 * Sentinel ID is 088b671eb4ac4c8d8a57805c1be88e4f76cf7ff8 30569:X 18 Jul 2024 10:33:50.639 # +monitor master redis_master 192.168.1.100 26370 quorum 2 30569:X 18 Jul 2024 10:33:52.638 * +sentinel sentinel 088b671eb4ac4c8d8a57805c1be88e4f76cf7ff8 192.168.1.100 26370 @ redis_master 192.168.1.100 26370 30569:X 18 Jul 2024 10:33:52.644 * Sentinel new configuration saved on disk
3.2 redis_slave1 節(jié)點(diǎn)
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /usr/local/redis/data/26370 # 創(chuàng)建redis配置文件存儲(chǔ)目錄 mkdir -p /usr/local/redis/conf/26370 # 創(chuàng)建redis日志存儲(chǔ)目錄 mkdir -p /usr/local/redis/log/26370 # 創(chuàng)建redis pid存儲(chǔ)目錄 mkdir /usr/local/redis/run/26370 cat > /usr/local/redis/conf/26370/sentinel.conf <<EOF bind 192.168.1.200 port 26370 dir /usr/local/redis/data/26370 sentinel monitor redis_master 192.168.1.100 16370 2 sentinel down-after-milliseconds redis_master 5000 sentinel auth-pass redis_master dongdong EOF # 啟動(dòng) sentinel進(jìn)程 redis-sentinel /usr/local/redis/conf/26370/sentinel.conf &> /usr/local/redis/log/26370/sentinel_26370.log & [root@redis_slave1 ~]# redis-sentinel /usr/local/redis/conf/26370/sentinel.conf &> /usr/local/redis/log/26370/sentinel_26370.log & [1] 38894 # 查看redis-sentinel 進(jìn)程 [root@redis_slave1 ~]# ps -ef | grep redis root 38879 1 0 10:19 ? 00:00:01 redis-server 192.168.1.200:16371 root 38894 38840 0 10:36 pts/0 00:00:00 redis-sentinel 192.168.1.200:26370 [sentinel] root 38899 38840 0 10:37 pts/0 00:00:00 grep --color=auto redis # 查看日志信息 tail -100f /usr/local/redis/log/26370/sentinel_26370.log [root@redis_slave1 ~]# tail -100f /usr/local/redis/log/26370/sentinel_26370.log 38894:X 18 Jul 2024 10:36:54.115 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 38894:X 18 Jul 2024 10:36:54.116 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 38894:X 18 Jul 2024 10:36:54.116 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=38894, just started 38894:X 18 Jul 2024 10:36:54.116 * Configuration loaded 38894:X 18 Jul 2024 10:36:54.116 * Increased maximum number of open files to 10032 (it was originally set to 1024). 38894:X 18 Jul 2024 10:36:54.116 * monotonic clock: POSIX clock_gettime 38894:X 18 Jul 2024 10:36:54.116 * Running mode=sentinel, port=26370. 38894:X 18 Jul 2024 10:36:54.116 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 38894:X 18 Jul 2024 10:36:54.119 * Sentinel new configuration saved on disk 38894:X 18 Jul 2024 10:36:54.119 * Sentinel ID is 93a83bf4770f1f8eda48b96ead065382ab2b5fe6 38894:X 18 Jul 2024 10:36:54.119 # +monitor master redis_slave1 192.168.1.200 26370 quorum 2 38894:X 18 Jul 2024 10:36:56.164 * +sentinel sentinel 93a83bf4770f1f8eda48b96ead065382ab2b5fe6 192.168.1.200 26370 @ redis_slave1 192.168.1.200 26370 38894:X 18 Jul 2024 10:36:56.170 * Sentinel new configuration saved on disk
3.3 redis_slave2 節(jié)點(diǎn)
# 創(chuàng)建redis數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /usr/local/redis/data/26370 # 創(chuàng)建redis配置文件存儲(chǔ)目錄 mkdir -p /usr/local/redis/conf/26370 # 創(chuàng)建redis日志存儲(chǔ)目錄 mkdir -p /usr/local/redis/log/26370 # 創(chuàng)建redis pid存儲(chǔ)目錄 mkdir /usr/local/redis/run/26370 cat > /usr/local/redis/conf/26370/sentinel.conf <<EOF bind 192.168.1.250 port 26370 dir /usr/local/redis/data/26370 sentinel monitor redis_master 192.168.1.100 16370 2 sentinel down-after-milliseconds redis_master 5000 sentinel auth-pass redis_master dongdong EOF # 啟動(dòng) sentinel進(jìn)程 redis-sentinel /usr/local/redis/conf/26370/sentinel.conf &> /usr/local/redis/log/26370/sentinel_26370.log & [root@redis_slave2 ~]# redis-sentinel /usr/local/redis/conf/26370/sentinel.conf &> /usr/local/redis/log/26370/sentinel_26370.log & [1] 39310 # 查看redis-sentinel 進(jìn)程 [root@redis_slave2 ~]# ps -ef | grep redis root 39290 1 0 10:20 ? 00:00:03 redis-server 192.168.1.250:16372 root 39310 39251 0 10:50 pts/0 00:00:00 redis-sentinel 192.168.1.250:26370 [sentinel] root 39316 39251 0 10:51 pts/0 00:00:00 grep --color=auto redis # 查看日志信息 tail -100f /usr/local/redis/log/26370/sentinel_26370.log [root@redis_slave2 ~]# tail -100f /usr/local/redis/log/26370/sentinel_26370.log 39310:X 18 Jul 2024 10:50:57.403 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 39310:X 18 Jul 2024 10:50:57.403 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 39310:X 18 Jul 2024 10:50:57.403 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=39310, just started 39310:X 18 Jul 2024 10:50:57.403 * Configuration loaded 39310:X 18 Jul 2024 10:50:57.404 * Increased maximum number of open files to 10032 (it was originally set to 1024). 39310:X 18 Jul 2024 10:50:57.404 * monotonic clock: POSIX clock_gettime 39310:X 18 Jul 2024 10:50:57.404 * Running mode=sentinel, port=26370. 39310:X 18 Jul 2024 10:50:57.405 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 39310:X 18 Jul 2024 10:50:57.407 * Sentinel new configuration saved on disk 39310:X 18 Jul 2024 10:50:57.407 * Sentinel ID is 9227635399651de294a88fa16281232b9cbbccaf 39310:X 18 Jul 2024 10:50:57.407 # +monitor master redis_slave2 192.168.1.250 26370 quorum 2 39310:X 18 Jul 2024 10:50:59.427 * +sentinel sentinel 9227635399651de294a88fa16281232b9cbbccaf 192.168.1.250 26370 @ redis_slave2 192.168.1.250 26370 39310:X 18 Jul 2024 10:50:59.434 * Sentinel new configuration saved on disk
4. 驗(yàn)證sentinel能夠自動(dòng)切換
4.1 手動(dòng)停止主庫運(yùn)行,模擬主庫宕機(jī)
# 查看主庫的狀態(tài)
redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.200,port=16371,state=online,offset=2898,lag=0
slave1:ip=192.168.1.250,port=16372,state=online,offset=2898,lag=0
master_failover_state:no-failover
master_replid:466362240f16a7414b9236f931c6f97252ee00be
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2898
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2898
# 查看從庫狀態(tài)
redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication
[root@redis_slave1 ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.1.100
master_port:16370
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:3066
slave_repl_offset:3066
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:466362240f16a7414b9236f931c6f97252ee00be
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3066
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:3052
redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication
[root@redis_slave2 ~]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.1.100
master_port:16370
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_read_repl_offset:3094
slave_repl_offset:3094
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:466362240f16a7414b9236f931c6f97252ee00be
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3094
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:3052
# 各節(jié)點(diǎn)運(yùn)行redis進(jìn)程情況
root@redis_master ~]# ss -npl | grep redis
tcp LISTEN 0 128 192.168.1.100:16370 *:* users:(("redis-server",pid=30552,fd=6))
tcp LISTEN 0 128 192.168.1.100:26370 *:* users:(("redis-sentinel",pid=30569,fd=6))
[root@redis_slave1 ~]# ss -npl | grep redis
tcp LISTEN 0 128 192.168.1.200:16371 *:* users:(("redis-server",pid=38879,fd=6))
tcp LISTEN 0 511 192.168.1.200:26370 *:* users:(("redis-sentinel",pid=38908,fd=6))
[root@redis_slave2 ~]# ss -npl | grep redis
tcp LISTEN 0 128 192.168.1.250:16372 *:* users:(("redis-server",pid=39290,fd=6))
tcp LISTEN 0 128 192.168.1.250:26370 *:* users:(("redis-sentinel",pid=39310,fd=6))
# 一切正常
# 手動(dòng)模擬主庫宕機(jī) 再來查看情況
redis-cli -h 192.168.1.100 -p 16370 -a dongdong shutdown
[root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# 再次執(zhí)行命令
[root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Could not connect to Redis at 192.168.1.100:16370: Connection refused # 發(fā)現(xiàn)連接不上 因?yàn)槲覀儼阎鲙戾戳?
4.2 當(dāng)16370 實(shí)例宕機(jī)后,查看集群情況
# 查看集群狀態(tài) redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication [root@redis_master ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master # 此時(shí)的slave1主機(jī)變成了master 節(jié)點(diǎn) connected_slaves:1 # slave 也變成了1個(gè) slave0:ip=192.168.1.250,port=16372,state=online,offset=14837,lag=1 master_failover_state:no-failover master_replid:c6e88908dbe348999f5406625612e76ee4d6ffd1 master_replid2:b23a9a971ad73ed23fb81186529c671e54acbac4 master_repl_offset:14837 second_repl_offset:14231 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14837 # 查看集群狀態(tài) redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication [root@redis_slave2 ~]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:87953 slave_repl_offset:87953 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:c6e88908dbe348999f5406625612e76ee4d6ffd1 master_replid2:b23a9a971ad73ed23fb81186529c671e54acbac4 master_repl_offset:87953 second_repl_offset:14231 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:87953 # 現(xiàn)在集群里面的情況就是 一主一從
4.3 恢復(fù)16370 實(shí)例會(huì)成為slaves節(jié)點(diǎn)
# 修復(fù)之前,16370端口是連接不上的 redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication [root@master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. Could not connect to Redis at 192.168.1.100:16370: Connection refused # 修復(fù)之后,之前宕機(jī)的主庫會(huì)自動(dòng)加入集群并成為slaves節(jié)點(diǎn) # 啟動(dòng)Redis redis-server /usr/local/redis/conf/16370/redis_16370.conf # 可能需要過了幾秒才會(huì)顯示哦 因?yàn)樾畔⑦€沒有同步過來哦 [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_read_repl_offset:165354 slave_repl_offset:165354 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:c6e88908dbe348999f5406625612e76ee4d6ffd1 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:165354 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:164602 repl_backlog_histlen:753
5. 手動(dòng)停掉一個(gè)sentinel實(shí)例
5.1 將redis_master主機(jī)中的sentinel實(shí)例給停止掉
# 查看redis進(jìn)程 [root@redis_master ~]# ps -ef | grep redis root 30646 30499 0 11:23 pts/1 00:00:06 redis-sentinel 192.168.1.100:26370 [sentinel] root 30663 1 0 11:42 ? 00:00:01 redis-server 192.168.1.100:16370 root 30672 30499 0 11:50 pts/1 00:00:00 grep --color=auto redis # 殺掉 進(jìn)程id為30646服務(wù) kill -9 30646 # 再次查看redis進(jìn)程 sentinel 已經(jīng)被殺掉了 [root@redis_master ~]# ps -ef | grep redis root 30663 1 0 11:42 ? 00:00:01 redis-server 192.168.1.100:16370 root 30676 30499 0 11:51 pts/1 00:00:00 grep --color=auto redis
5.2 驗(yàn)證主從切換
# 查看各節(jié)點(diǎn)狀況 此時(shí)slave1這臺(tái)是主庫 # 查詢從庫狀態(tài) redis_master主機(jī) redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:251306 slave_repl_offset:251306 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:c6e88908dbe348999f5406625612e76ee4d6ffd1 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:251306 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:164602 repl_backlog_histlen:86705 # 查詢從庫狀態(tài) redis_slave2主機(jī) redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication [root@redis_master ~]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_read_repl_offset:254136 slave_repl_offset:254136 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:c6e88908dbe348999f5406625612e76ee4d6ffd1 master_replid2:b23a9a971ad73ed23fb81186529c671e54acbac4 master_repl_offset:254136 second_repl_offset:14231 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:254136 # 查詢主庫狀態(tài) redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication [root@redis_master ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:2 slave0:ip=192.168.1.250,port=16372,state=online,offset=261722,lag=0 slave1:ip=192.168.1.100,port=16370,state=online,offset=261736,lag=0 master_failover_state:no-failover master_replid:c6e88908dbe348999f5406625612e76ee4d6ffd1 master_replid2:b23a9a971ad73ed23fb81186529c671e54acbac4 master_repl_offset:261882 second_repl_offset:14231 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:261882 # 此時(shí)干掉主庫 redis-cli -h 192.168.1.200 -p 16371 -a dongdong shutdown [root@redis_slave1 ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong shutdown Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # 再次查詢 [root@redis_slave1 ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. Could not connect to Redis at 192.168.1.200:16371: Connection refused # 此時(shí)查詢集群個(gè)節(jié)點(diǎn)狀態(tài) 看看哪個(gè)節(jié)點(diǎn)成功master 此時(shí)集群中只有兩個(gè)節(jié)點(diǎn) 分別是redis_master主機(jī) 和 redis_slave2主機(jī) # 先查看redis_master redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.250 master_port:16372 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:56377 slave_repl_offset:56377 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:a375e44a67edd4fb81880032ef927964da6c376f master_replid2:3288009c32135c1d1df6e8d56ceff7d45e572875 master_repl_offset:56377 second_repl_offset:55465 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:30454 repl_backlog_histlen:25924 # 是正常的
5.3 恢復(fù)Redis 實(shí)例
# 查看各節(jié)點(diǎn) redis 服務(wù)是否停用 如果停用 則重新啟動(dòng) ps -ef | grep redis # redis_master redis-server /usr/local/redis/conf/16370/redis_16370.conf # redis_slave1 redis-server /usr/local/redis/conf/16371/redis_16371.conf # redis_slave2 redis-server /usr/local/redis/conf/16372/redis_16372.conf
6. 手動(dòng)停掉兩個(gè)sentinel 實(shí)例
6.1 將redis_slave1 主機(jī)中的sentinel 實(shí)例停止
[root@redis_slave1 ~]# ps -ef | grep redis root 39196 1 0 13:43 ? 00:00:02 redis-server 192.168.1.200:16371 root 39207 38840 0 13:45 pts/0 00:00:03 redis-sentinel 192.168.1.200:26370 [sentinel] root 39220 38840 0 13:57 pts/0 00:00:00 grep --color=auto redis kill -9 39207 root@redis_slave1 ~]# ps -ef | grep redis root 39196 1 0 13:43 ? 00:00:02 redis-server 192.168.1.200:16371 root 39224 38840 0 13:59 pts/0 00:00:00 grep --color=auto redis
6.2 驗(yàn)證主從切換
# 查詢r(jià)edis_master主機(jī)集群狀態(tài) [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:140766 slave_repl_offset:140766 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:a375e44a67edd4fb81880032ef927964da6c376f master_replid2:3288009c32135c1d1df6e8d56ceff7d45e572875 master_repl_offset:140766 second_repl_offset:55465 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:30454 repl_backlog_histlen:110313 # 查詢r(jià)edis_slvae1主機(jī)集群狀態(tài) [root@redis_slave1 ~]# redis-cli -h 192.168.1.200 -p 16371 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:2 slave0:ip=192.168.1.100,port=16370,state=online,offset=143290,lag=0 slave1:ip=192.168.1.250,port=16372,state=online,offset=143290,lag=1 master_failover_state:no-failover master_replid:a375e44a67edd4fb81880032ef927964da6c376f master_replid2:3288009c32135c1d1df6e8d56ceff7d45e572875 master_repl_offset:143436 second_repl_offset:55465 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:15 repl_backlog_histlen:143422 # 查詢r(jià)edis_slave2主機(jī)集群狀態(tài) [root@redis_slave2 conf]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_read_repl_offset:1 slave_repl_offset:1 master_link_down_since_seconds:-1 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:eb44c8dbaaf01ca3b091a4005ecb563cc467dc76 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # 停掉redis_slvae1主機(jī)的redis 服務(wù) 看看是否可以進(jìn)行主從切換 [root@redis_slave1 ~]# ps -ef | grep redis root 39196 1 0 13:43 ? 00:00:03 redis-server 192.168.1.200:16371 root 39242 38840 0 14:03 pts/0 00:00:00 grep --color=auto redis kill -9 39196 # 再次查看redis_master主機(jī)集群狀態(tài) [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:down # master 已經(jīng)是 down 狀態(tài) 說明沒有進(jìn)行主從切換 master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_read_repl_offset:154925 slave_repl_offset:154925 master_link_down_since_seconds:49 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:a375e44a67edd4fb81880032ef927964da6c376f master_replid2:3288009c32135c1d1df6e8d56ceff7d45e572875 master_repl_offset:154925 second_repl_offset:55465 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:30454 repl_backlog_histlen:124472 # 再次查詢r(jià)edis_slvae2主機(jī)集群狀態(tài) [root@redis_slave2 conf]# redis-cli -h 192.168.1.250 -p 16372 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:down # master 已經(jīng)是 down 狀態(tài) 說明沒有進(jìn)行主從切換 master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_read_repl_offset:154925 slave_repl_offset:154925 master_link_down_since_seconds:133 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:a375e44a67edd4fb81880032ef927964da6c376f master_replid2:0000000000000000000000000000000000000000 master_repl_offset:154925 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:149549 repl_backlog_histlen:5377 # 是因?yàn)槲覀冊(cè)倥渲梦募兄付?sentinel monitor redis_master 192.168.1.100 16370 2 這個(gè)2 表示3個(gè)sentinel中最少有2個(gè)節(jié)點(diǎn)認(rèn)為master庫宕機(jī)時(shí),才會(huì)真正意義上認(rèn)為master庫宕機(jī)。 # 把redis_slvae1主機(jī)的redis 服務(wù)恢復(fù) redis-server /usr/local/redis/conf/16371/redis_16371.conf # 查看狀態(tài) [root@redis_master ~]# redis-cli -h 192.168.1.100 -p 16370 -a dongdong info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.1.200 master_port:16371 master_link_status:up # 恢復(fù)redis_slvae1主機(jī)的redis后 master服務(wù)up了 master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_read_repl_offset:3474 slave_repl_offset:3474 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:527f1bfc1c67513d0813d0c0fddb07964640d907 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:3474 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:476 repl_backlog_histlen:2999
到此這篇關(guān)于Redis 哨兵搭建的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Redis 哨兵搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
redis保存AtomicInteger對(duì)象踩坑及解決
這篇文章主要介紹了redis保存AtomicInteger對(duì)象踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Redis遍歷海量數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了 Redis遍歷海量數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Spring?redis使用報(bào)錯(cuò)Read?timed?out排查及解決過程
項(xiàng)目使用spring集成redis,偶爾會(huì)出現(xiàn)read timed out的情況,剛開始以為是網(wǎng)絡(luò)不穩(wěn)定引起的,后面發(fā)現(xiàn)影響業(yè)務(wù)測試的準(zhǔn)確性,這篇文章主要給大家介紹了關(guān)于Spring redis使用報(bào)錯(cuò)Read timed out排查及解決過程的相關(guān)資料,需要的朋友可以參考下2024-02-02
Redis?抽獎(jiǎng)大轉(zhuǎn)盤的實(shí)戰(zhàn)示例
本文主要介紹了Redis?抽獎(jiǎng)大轉(zhuǎn)盤的實(shí)戰(zhàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

