Redis主從搭建
redis安裝相對來說比較簡單,下面為具體安裝步驟。
安裝 Redis
安裝前準備
下載最新安裝包
安裝依賴包
yum install gcc-c++
yum install tcl
解壓安裝包
解壓目錄隨機,沒有特別要求。
tar zxf redis-5.0.5.tar.gz
安裝Reids
在redis 解壓路徑下執行make ,進行安裝
[root@localhost redis]# cd redis-5.0.5
[root@localhost redis-5.0.5]# make
執行 make test 命令,檢測redis 的編譯結果
[root@localhost redis-5.0.5]# make test
執行 make install 命令,安裝redis
[root@localhost redis-5.0.5]# make PREFIX=/redis/redis-5.0.5/redis_master install
安裝完後,會在redis_master 目錄下安裝並形成bin 目錄
[root@localhost redis-5.0.5]# cd redis_master /
[root@localhost redis_master]# ls
bin
[root@localhost redis_master]# cd bin/
[root@localhost bin]# ls -rtl
total 54320
-rwxr-xr-x. 1 root root 12277469 Jun 11 14:49 redis-server
-rwxr-xr-x. 1 root root 9202931 Jun 11 14:49 redis-benchmark
-rwxr-xr-x. 1 root root 9580032 Jun 11 14:49 redis-cli
-rwxr-xr-x. 1 root root 12277469 Jun 11 14:49 redis-check-rdb
-rwxr-xr-x. 1 root root 12277469 Jun 11 14:49 redis-check-aof
lrwxrwxrwx. 1 root root 12 Jun 11 14:49 redis-sentinel -> redis-server
至此,redis 安裝完成。
同樣步驟安裝三臺redis 。只是個別目錄用於以後區分可以去不一樣的名字。如:其他兩個從的目錄可以設定為redis/redis-5.0.5/redis_slave1 和redis/redis-5.0.5/redis_slave2 。
配置Reids
配置redis 環境變數
編輯.bash_profile 檔案,新增下面內容:
export REDIS_HOME=/redis/redis-5.0.5/redis_master
export PATH=$PATH:$REDIS_HOME/bin
生效環境變數
source .bash_profile
修改 redis 配置檔案
複製redis 原始碼包目錄下的 redis.conf 到redis_master 目錄下修改名字為redis_6379.conf ,當然直接修改也是可以的,但要養成備份的習慣,複製的檔名為 redis_6379.conf ,這是配置redis 的一種習慣,因為我們啟動redis 服務要用的埠預設為6379 ,假如要在一臺節點上啟動多個服務,那麼每個服務的配置檔案為 redis_${port}.conf ,這樣很清楚的知道每個服務使用的埠號。
[root@localhost redis_master]# cp redis.conf redis_master/redis_6379.conf
Redis 配置檔案主要引數解析參考
#redis 程式是否以守護程式的方式執行,yes 為是,no 為否( 不以守護程式的方式執行會佔用一個終端)
daemonize no
# 指定redis 程式的PID 檔案存放位置
pidfile /var/run/redis.pid
#redis 程式的埠號
port 6379
# 繫結的主機地址
bind 127.0.0.1
# 客戶端閒置多長時間後關閉連線, 預設此引數為0 即關閉此功能
timeout 300
#redis 日誌級別, 可用的級別有debug.verbose.notice.warning
loglevel verbose
#log 檔案輸出位置, 如果程式以守護程式的方式執行, 此處又將輸出檔案設定為stdout 的話, 就會將日誌資訊輸出到/dev/null 裡面去了
logfile stdout
# 設定資料庫的數量, 預設為0 可以使用select <dbid> 命令在連線上指定資料庫id
databases 16
# 指定在多少時間內重新整理次數達到多少的時候會將資料同步到資料檔案;
save <seconds><changes>
# 指定儲存至本地資料庫時是否壓縮檔案, 預設為yes 即啟用儲存;
rdbcompression yes
# 指定本地資料庫檔名
dbfilename dump.db
# 指定本地資料問就按存放位置;
dir ./
# 指定當本機為slave 服務時, 設定master 服務的IP 地址及埠, 在redis 啟動的時候他會自動跟master 進行資料同步
replicaof <masterip><masterport>
# 當master 設定了密碼保護時,slave 服務連線master 的密碼;
masterauth <master-password>
# 設定redis 連線密碼, 如果配置了連線密碼, 客戶端在連線redis 是需要透過AUTH<password> 命令提供密碼, 預設關閉
requirepass footbared
# 設定同一時間最大客戶連線數, 預設無限制;redis 可以同時連線的客戶端數為redis 程式可以開啟的最大檔案描述符, 如果設定maxclients 0 ,表示不作限制。當客戶端連線數到達限制時,Redis 會關閉新的連線並向客戶端返回max number of clients reached 錯誤資訊
maxclients 128
# 指定Redis 最大記憶體限制,Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis 會先嚐試清除已到期或即將到期的Key ,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的vm 機制,會把Key 存放記憶體,Value 會存放在swap 區
maxmemory<bytes>
# 設定記憶體快取策略
5.0 新增allkeys-lfu ,volatile-lfu
建議使用volatile-ttl ,最近要過期策略
maxmemory-policy volatile-ttl
# 指定是否在每次更新操作後進行日誌記錄,Redis 在預設情況下是非同步的把資料寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為 redis 本身同步資料檔案是按上面save 條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設為no
appendonly no
# 指定跟新日誌檔名預設為appendonly.aof
appendfilename appendonly.aof
#aof 持久化方式,建議採用appendfsync everysec 方式,即5.0 預設的,每秒,always 資料一致性保證了,但是效能太差,no 就更不行了,不開啟。指定更新日誌的條件, 有三個可選引數no :表示等作業系統進行資料快取同步到磁碟( 快),always :表示每次更新操作後手動呼叫fsync() 將資料寫到磁碟( 慢,安全), everysec :表示每秒同步一次( 折衷,預設值);
appendfsync everysec
# 大併發的網際網路公司aof 引數設定很重要,預設是如下圖: 建議把64MB 修改成GB 單位的, 高併發的網際網路公司,至少3GB 以上
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
同時,由於在恢復的時候,如果持久化都是使用的aof 和rdb, 建議rdb 檔案是15 分鐘備份一次,太頻繁影響效能。
編輯redis_6379.conf 檔案,根據需要修改以下內容
# 服務以守護程式方式啟動
daemonize yes
# 允許Redis 被遠端訪問
bind 0.0.0.0
# 啟動服務佔用的埠
port 6379
# 日誌檔案存放的路徑
logfile /redis/redis-5.0.5/redis_master/redis_6379.log
# pid 檔案存放的路徑
pidfile /redis/redis-5.0.5/redis_master/redis_6379.pid
# 主庫的密碼(本機可以不配置)最好配置因為等下配置哨兵,如果主機掛了重啟之後(等於變成了從機)不能直接連上。(主機會根據哨兵投票決定)
masterauth hzmcdba
# 持久化檔案的儲存路徑
dir /redis-data/master/6379
# 指定本地資料庫檔名
dbfilename dump-master.rdb
# 設定記憶體快取策略
maxmemory-policy volatile-ttl
#aof 持久化方式
appendfsync everysec
依次修改其他兩個從節點的配置檔案。
服務啟停
啟動redis 服務
[root@localhost bin]# pwd
/redis/redis-5.0.5/redis_master/bin
[root@localhost bin]# ./redis-server /redis/redis-5.0.5/redis_master/redis_6379.conf
檢查redis 程式,已經存在
[root@localhost redis]# ps -ef |grep redis
root 24092 1 0 15:49 ? 00:00:00 ./redis-server 0.0.0.0:6379
root 24122 24102 0 15:49 pts/0 00:00:00 grep redis
檢查日誌
[root@localhost redis_master]# tail -100f redis_6379.log
24091:C 16 Jun 2020 15:49:13.259 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 24091:C 16 Jun 2020 15:49:13.259 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=24091, just started 24091:C 16 Jun 2020 15:49:13.259 # Configuration loaded 24092:M 16 Jun 2020 15:49:13.263 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 24092 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 24092:M 16 Jun 2020 15:49:13.269 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 24092:M 16 Jun 2020 15:49:13.269 # Server initialized 24092:M 16 Jun 2020 15:49:13.269 # WARNING overcommit_memory is set to 0! Background save 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. 24092:M 16 Jun 2020 15:49:13.270 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 24092:M 16 Jun 2020 15:49:13.270 * Ready to accept connections
可以看到redis 已經正常啟動
停止redis 服務
[root@localhost bin]# ./redis-cli shutdown
檢視日誌
24092:M 16 Jun 2020 16:12:14.935 # User requested shutdown... 24092:M 16 Jun 2020 16:12:14.935 * Saving the final RDB snapshot before exiting. 24092:M 16 Jun 2020 16:12:14.954 * DB saved on disk 24092:M 16 Jun 2020 16:12:14.954 * Removing the pid file. 24092:M 16 Jun 2020 16:12:14.955 # Redis is now ready to exit, bye bye...
設定redis 服務開機自啟動
把 redis-4.0.12/utils 目錄下的 redis_init_script 指令碼複製為 redis_6379 ,並移動到 /etc/init.d 目錄下
[root@localhost utils]# cp redis_init_script /etc/init.d/redis_6379
修改以下配置資訊,使其與redis_6379.conf 保持一致:
#!/bin/sh
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See
### END INIT INFO
REDISPORT=6379
EXEC=/redis/redis-5.0.5/redis_master/bin/redis-server
CLIEXEC=/redis/redis-5.0.5/redis_master/bin/redis-cli
PIDFILE=/redis/redis-5.0.5/redis_master/redis_6379.pid
CONF="/redis/redis-5.0.5/redis_master/redis_6379.conf"
修改redis_6379 指令碼的許可權為777
chmod 777 /etc/init.d/redis_6379
設定redis 開機自啟動
sudo chkconfig redis_6379 on
驗證redis 是否安裝成功以及是否可以開機自啟動
# 重啟伺服器
[root@localhost init.d]# reboot
# 查詢redis 服務是否啟動
[root@localhost ~]# ps -ef |grep redis
root 1960 1 0 16:29 ? 00:00:00 /redis/redis-5.0.5/redis_master/bin/redis-server 0.0.0.0:6379
# 進行一組簡單的操作
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> get name
"tom"
127.0.0.1:6379>
驗證redis 安裝成功且自啟動配置成功。
依次配置並驗證其他兩個從節點。
主從配置
因為前面已經再其他兩個節點安裝好redis ,且已經將主節點的配置檔案複製到兩個從節點,所有我們直接修改兩個從節點的配置檔案後,起來就可以。
修改Slave1
[root@localhost ~]# cd /redis/redis-5.0.5/redis_slave1
[root@localhost redis_slave1]# ls -rtl
total 68
drwxr-xr-x. 2 root root 4096 Jun 16 15:36 bin
-rw-r--r--. 1 root root 61797 Jun 16 15:38 redis_6380.conf
[root@localhost redis_slave1]# vi redis_6380.conf
編輯redis_6380.conf 檔案,根據需要修改以下內容
# 服務以守護程式方式啟動
daemonize yes
# 允許Redis 被遠端訪問
bind 0.0.0.0
# 啟動服務佔用的埠
port 6380
# 日誌檔案存放的路徑
logfile "/redis/redis-5.0.5/redis_slave1/redis_6380.log"
# pid 檔案存放的路徑
pidfile /redis/redis-5.0.5/redis_slave1/redis_6380.pid
# 主庫的密碼(本機可以不配置)最好配置因為等下配置哨兵,如果主機掛了重啟之後(等於變成了從機)不能直接連上。(主機會根據哨兵投票決定)
masterauth hzmcdba
# 持久化檔案的儲存路徑
dir /redis-data/slave1/6380
# 指定本地資料庫檔名
dbfilename dump-slave1.rdb
# 設定記憶體快取策略
maxmemory-policy volatile-ttl
#aof 持久化方式
appendfsync everysec
# 指定當本機為slave 服務時, 設定master 服務的IP 地址及埠, 在redis 啟動的時候他會自動跟master 進行資料同步
replicaof 192.168.242.70 6379
修改Slave2
[root@localhost ~]# cd /redis/redis-5.0.5/redis_slave2
[root@localhost redis_slave2]# ls -rtl
total 68
drwxr-xr-x. 2 root root 4096 Jun 16 15:37 bin
-rw-r--r--. 1 root root 61972 Jun 24 16:07 redis_6381.conf
[root@localhost redis_slave2]# vi redis_6381.conf
編輯redis_6380.conf 檔案,根據需要修改以下內容
# 服務以守護程式方式啟動
daemonize yes
# 允許Redis 被遠端訪問
bind 0.0.0.0
# 啟動服務佔用的埠
port 6381
# 日誌檔案存放的路徑
logfile "/redis/redis-5.0.5/redis_slave2/redis_6381.log"
# pid 檔案存放的路徑
pidfile /redis/redis-5.0.5/redis_slave2/redis_6381.pid
# 主庫的密碼(本機可以不配置)最好配置因為等下配置哨兵,如果主機掛了重啟之後(等於變成了從機)不能直接連上。(主機會根據哨兵投票決定)
masterauth hzmcdba
# 持久化檔案的儲存路徑
dir /redis-data/slave2/6381
# 指定本地資料庫檔名
dbfilename dump-slave2.rdb
# 設定記憶體快取策略
maxmemory-policy volatile-ttl
#aof 持久化方式
appendfsync everysec
# 指定當本機為slave 服務時, 設定master 服務的IP 地址及埠, 在redis 啟動的時候他會自動跟master 進行資料同步
replicaof 192.168.242.70 6379
啟動兩個從節點
[root@localhost redis_slave1]# redis-server /redis/redis-5.0.5/redis_slave1/redis_6380.conf
[root@localhost redis_slave2]# redis-server /redis/redis-5.0.5/redis_slave2/redis_6381.conf
由於引數已經修改完了,後面修改密碼:
config set requirepass "hzmcdba"
並且寫入配置檔案:
例如關閉提示需要密碼就說明修改成功。
同理修改下面兩臺伺服器:
檢查主從複製情況
Master :
[root@localhost redis_master]# redis-cli
127.0.0.1:6379> info replication
NOAUTH Authentication required.
127.0.0.1:6379> auth hzmcdba
OK
127.0.0.1:6379> info replication
# Replication
role: master
connected_slaves: 2
slave0:ip=192.168.242.71,port=6380,state=online,offset=84,lag=1
slave1:ip=192.168.242.72,port=6381,state=online,offset=84,lag=1
master_replid:8b90010b378c34aaf89c39a9002684363de31b40
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84
從機1
[root@localhost redis_slave1]# redis-cli -h 192.168.242.71 -p 6380
192.168.242.71:6380> info replication
NOAUTH Authentication required.
192.168.242.71:6380> auth hzmcdba
OK
192.168.242.71:6380> info replication
# Replication
role: slave
master_host:192.168.242.70
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:266
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8b90010b378c34aaf89c39a9002684363de31b40
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:266
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:266
從節點2
[root@localhost redis_slave2]# redis-cli -h 192.168.242.72 -p 6381
192.168.242.72:6381> auth hzmcdba
OK
192.168.242.72:6381> info replication
# Replication
role: slave
master_host:192.168.242.70
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:882
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8b90010b378c34aaf89c39a9002684363de31b40
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:882
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:882
同步情況:
主節點:
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> get k1
"1"
從節點1 :
192.168.242.71:6380> get k1
"1"
從節點2 :
192.168.242.72:6381> get k1
"1"
可以看到同步狀態正常,當然在相應的日誌中也可以看到。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29956245/viewspace-2933097/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- centos 搭建redis主從CentOSRedis
- redis-cluster主從搭建Redis
- Redis主從同步叢集搭建Redis主從同步
- Redis叢集搭建 三主三從Redis
- Redis叢集搭建(三主三從)Redis
- Redis搭建主從複製、哨兵叢集Redis
- 實踐 - 搭建Redis一主兩從三哨兵Redis
- Docker環境搭建redis叢集(主從模式)DockerRedis模式
- 深入剖析Redis系列(一) - Redis入門簡介與主從搭建Redis
- 深入剖析Redis系列(一) – Redis入門簡介與主從搭建Redis
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- Redis多例項及主從複製環境搭建Redis
- Redis主從配置Redis
- Redis主從同步Redis主從同步
- Redis 主從配置Redis
- 基於docker環境下搭建redis主從叢集DockerRedis
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- mysql主從搭建MySql
- Redis - 主從複製Redis
- Redis主從切換Redis
- Redis:主從複製Redis
- docker 配置 Redis 主從DockerRedis
- Redis主從複製Redis
- Redis主從模式部署Redis模式
- redis主從備份Redis
- Redis 結合 Docker 搭建哨兵+主從,並整合SpringBootRedisDockerSpring Boot
- 【Redis】Redis 主從複製之一Redis
- 搭建Redis“主-從-從”模式叢集並使用 RedisTemplate 實現讀寫分離Redis模式
- MYSQL5.6.40原始碼安裝 主從搭建 主主搭建MySql原始碼
- MYSQL主從搭建5.6.38MySql
- mysqlxtrabackup線上搭建主從MySql
- CentOS7.8 環境搭建 Redis 主從複製和哨兵模式CentOSRedis模式
- Docker配置redis主從哨兵DockerRedis
- Redis 主從複製原理Redis
- Redis 主從複製(Replication)Redis
- redis系列:主從複製Redis
- redis主從同步機制Redis主從同步