1. 程式人生 > 其它 >運維相關之redis搭建

運維相關之redis搭建

技術標籤:運維相關redis分散式運維

一、簡介:REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value儲存系統
叢集模式:

1) 主從複製
2) 哨兵模式
3) 分散式儲存

【redis主從】:
是備份關係, 我們操作主庫,資料也會同步到從庫。 如果主庫機器壞了,從庫可以上。就好比你 D盤的片丟了,但是你移動硬盤裡邊備份有。

【redis哨兵】:
哨兵保證的是HA,保證特殊情況故障自動切換,哨兵盯著你的“redis主從叢集”,如果主庫死了,它會告訴你新的老大是誰。

【redis叢集】:

叢集保證的是高併發,因為多了一些兄弟幫忙一起扛。同時叢集會導致資料的分散,整個redis叢集會分成一堆資料槽,即不同的key會放到不不同的槽中

二、單節點安裝步驟:
1. 配置編譯環境
sudo yum install gcc-c++

2. 下載原始碼
cd /usr/local/src/
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8

3. 執行make編譯Redis
make MALLOC=libc
make install

4. 配置Redis能隨系統啟動
./utils/install_server.sh
#無需修改的話一直回車即可
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli

5. Redis服務檢視、開啟、關閉
a.通過ps -ef|grep redis命令檢視Redis程序
b.開啟Redis服務操作通過/etc/init.d/redis_6379 start命令
c.關閉Redis服務操作通過/etc/init.d/redis_6379 stop命令
#登入redis
redis-cli -h 127.0.0.1 -p 6379 -a zdvictory666

6. 配置檔案修改
# 設定密碼,去掉 requirepass 的註釋
requirepass zdvictory666
logfile /var/log/redis_6379.log

三、分散式儲存安裝步驟:
1. 每個節點啟動兩個redis程序,共三臺伺服器
2. 安裝編譯環境:yum install gcc-c++
3. 下載安裝包,並編譯安裝
4. 每臺伺服器,配兩個配置檔案
5. 啟動三臺伺服器,六個節點
6. redis-trib.rb環境準備(安裝Ruby、安裝rubygem redis依賴、檢查redis-trib.rb的可用性)
7. 一條命令建立叢集(./redis-4.0.8/src/redis-trib.rb create --replicas 1 192.168.1.21:7001 192.168.1.22:7002)
8. 檢查叢集完整性(redis-4.0.8/src/redis-trib.rb check 192.168.1.22:7002)
9. 如果某個節點掛掉,步驟:
1) 啟動掛掉的節點
2) 修復節點(./redis-trib.rb fix 192.168.1.21:7001)
3) 加入節點(./redis-trib.rb add-node 192.168.1.21:7001 192.168.1.21:7002) #前面是需要被加入的節點,後面是其中一個主節點
4) 手動指定從節點到某個主節點(cluster replicas 主節點ID)
5) 再檢查一下叢集狀態

四、哨兵模式搭建:
1. 規劃,單機搭建偽叢集
服務型別 是否主伺服器 IP地址 埠
Redis 是 127.0.0.1 6379
Redis 否 127.0.0.1 6380
Redis 否 127.0.0.1 6381
sentinel (哨兵) 127.0.0.1 26279
sentinel (哨兵) 127.0.0.1 26280
sentinel (哨兵) 127.0.0.1 26281

2. 安裝依賴
yum install -y wget gcc

3. 安裝redis
mkdir -p /usr/local/redis/config/sentinel-{26379,26380,26381}
mkdir -p /usr/local/redis/config/redis-{6379,6380,6381}
cd /usr/local/redis
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -xzf redis-5.0.7.tar.gz
cd redis-5.0.7
make && make install

4. 配置redis檔案
cp /usr/local/redis/redis-5.0.7/redis.conf /usr/local/redis/config/redis-6379/redis-6379.conf
cp /usr/local/redis/redis-5.0.7/redis.conf /usr/local/redis/config/redis-6380/redis-6380.conf
cp /usr/local/redis/redis-5.0.7/redis.conf /usr/local/redis/config/redis-6381/redis-6381.conf
#修改主配置
vi /usr/local/redis/config/redis-6379/redis-6379.conf

 bind 0.0.0.0  #網路互通
 port 6379
 protected-mode no #關閉保護模式
 daemonize yes  #後臺啟動
 requirepass 123456 #配置認證密碼
 dir /usr/local/redis/config/redis-6379 #rdb檔案目錄
 pidfile /usr/local/redis/config/redis-6379/redis_6379.pid 
 logfile "/usr/local/redis/logs/redis-6379.log"
 masterauth "123456" #指定主節點密碼,如果不加密碼,當主節點掛掉重啟的時候會連不上主節點



#修改兩個從配置
vi /usr/local/redis/config/redis-6380/redis-6380.conf

 bind 0.0.0.0
 port 6380
 protected-mode no
 daemonize yes
 requirepass 123456
 dir /usr/local/redis/config/redis-6380
 pidfile /usr/local/redis/config/redis-6380/redis_6380.pid
 logfile "/usr/local/redis/config/redis-6380/redis-6380.log" 
 replicaof 127.0.0.1 6379 #指定主節點IP和埠
 masterauth "123456"   #指定主節點密碼


#修改兩個從配置
vi /usr/local/redis/config/redis-6381/redis-6381.conf

 bind 0.0.0.0
 port 6381
 protected-mode no
 daemonize yes
 requirepass 123456
 dir /usr/local/redis/config/redis-6381
 pidfile /usr/local/redis/config/redis-6381/redis_6381.pid
 logfile "/usr/local/redis/config/redis-6381/redis-6381.log"  
 replicaof 127.0.0.1 6379 #指定主節點IP和埠
 masterauth "123456"   #指定主節點密碼




5. 啟動主從redis
redis-server /usr/local/redis/config/redis-6379/redis-6379.conf
redis-server /usr/local/redis/config/redis-6380/redis-6380.conf
redis-server /usr/local/redis/config/redis-6381/redis-6381.conf

redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=210,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=210,lag=1
master_replid:b9ebb7007a63570077018be9c0761439ae264de2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210

6. 修改哨兵配置檔案
cp /usr/local/redis/redis-5.0.7/sentinel.conf /usr/local/redis/config/sentinel-26379/sentinel-26379.conf
cp /usr/local/redis/redis-5.0.7/sentinel.conf /usr/local/redis/config/sentinel-26380/sentinel-26380.conf
cp /usr/local/redis/redis-5.0.7/sentinel.conf /usr/local/redis/config/sentinel-26381/sentinel-26381.conf

#修改sentinel-26379.conf配置檔案

 port 26379
 daemonize yes
 pidfile /usr/local/redis/config/sentinel-26379/redis-sentinel-26379.pid
 logfile "/usr/local/redis/config/sentinel-26379/redis-sentinel-26379.log"
 ## 修改3:取消註釋,增加主服務資訊和需要進行選舉的法定個數(兩臺從伺服器)
 sentinel monitor mymaster 127.0.0.1 6379 2
 #定義主密碼
 sentinel auth-pass mymaster 123456
 # 3s內mymaster無響應,則認為mymaster宕機了
 sentinel down-after-milliseconds mymaster 3000
 #指定在故障切換准許的毫秒數,當超過這個毫秒數的時候,就認為切換故障失敗,預設三分鐘
 sentinel failover-timeout mymaster 10000



#修改sentinel-26380.conf配置檔案

 port 26380
 daemonize yes
 pidfile /usr/local/redis/config/sentinel-26380/redis-sentinel-26380.pid
 logfile "/usr/local/redis/config/sentinel-26380/redis-sentinel-26380.log"
 ## 修改3:取消註釋,增加主服務資訊和需要進行選舉的法定個數(兩臺從伺服器)
 sentinel monitor mymaster 127.0.0.1 6379 2
 #定義主密碼
 sentinel auth-pass mymaster 123456
 # 3s內mymaster無響應,則認為mymaster宕機了
 sentinel down-after-milliseconds mymaster 3000
 #指定在故障切換准許的毫秒數,當超過這個毫秒數的時候,就認為切換故障失敗,預設三分鐘
 sentinel failover-timeout mymaster 10000




#修改sentinel-26381.conf配置檔案

 port 26381
 daemonize yes
 pidfile /usr/local/redis/config/sentinel-26381/redis-sentinel-26381.pid
 logfile "/usr/local/redis/config/sentinel-26381/redis-sentinel-26381.log"
 ## 修改3:取消註釋,增加主服務資訊和需要進行選舉的法定個數(兩臺從伺服器)
 sentinel monitor mymaster 127.0.0.1 6379 2
 #定義主密碼
 sentinel auth-pass mymaster 123456
 # 3s內mymaster無響應,則認為mymaster宕機了
 sentinel down-after-milliseconds mymaster 3000
 #指定在故障切換准許的毫秒數,當超過這個毫秒數的時候,就認為切換故障失敗,預設三分鐘
 sentinel failover-timeout mymaster 10000



7. 啟動哨兵redis
redis-sentinel /usr/local/redis/config/sentinel-26379/sentinel-26379.conf
redis-sentinel /usr/local/redis/config/sentinel-26380/sentinel-26380.conf
redis-sentinel /usr/local/redis/config/sentinel-26381/sentinel-26381.conf

#檢視啟動日誌
cat /usr/local/redis/config/sentinel-26381/redis-sentinel-26381.log
105800:X 01 Feb 2021 17:49:32.074 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
105800:X 01 Feb 2021 17:49:32.074 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=105800, just started
105800:X 01 Feb 2021 17:49:32.074 # Configuration loaded
105801:X 01 Feb 2021 17:49:32.077 * Running mode=sentinel, port=26279.
105801:X 01 Feb 2021 17:49:32.078 # Sentinel ID is 81c3169ea8b38ed896c43f4a69813721b9eeb0da
105801:X 01 Feb 2021 17:49:32.078 # +monitor master mymaster 127.0.0.1 6379 quorum 2
105801:X 01 Feb 2021 17:49:32.079 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
105801:X 01 Feb 2021 17:49:32.080 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
105801:X 01 Feb 2021 17:50:17.418 * +sentinel sentinel 954ba8335e63b557f37945a315118fa49d8dc08a 127.0.0.1 26280 @ mymaster 127.0.0.1 6379
105801:X 01 Feb 2021 17:50:23.207 * +sentinel sentinel d62673a744a61a64d8296936218ab362eb04031d 127.0.0.1 26281 @ mymaster 127.0.0.1 6379

#檢視sentinel狀態
redis-cli -p 26279
127.0.0.1:26279> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3