Redis叢集生產環境原始碼安裝
阿新 • • 發佈:2019-12-08
安裝redis叢集 根據各人單位生產環境使用者搭建
一、安裝環境
作業系統:centos7.6
關閉防火牆、關閉selinux
redis1:192.168.26.128
redis2:192.168.26.129
二、使用者環境
groupadd usr
useradd -g usr -md /usr/users/sw sw
cd /usr/users/sw/
mkdir app;mkdir backup
cd app
mkdir redis
make /applog
chown -R sw:usr /usr/users/sw
chown -R sw:usr /applog
三、系統引數修改,有幾個系統引數需要調整,否則,在啟動redis時會有幾個WARNING:
1.redis的配置檔案中,預設的最大客戶端連線數為10000,要求至少最大檔案描述符要10032個,我 們一般系統都會設定為65535
vim /etc/security/limits.conf新增以下內容
* soft nproc 12000
* hard nproc 12000
* soft nofile 65535
* hard nofile 65535
* hard stack 10240
* soft stack 10240
* hard sigpending 127934
* soft sigpending 127934
vim /etc/security/limits.d/20-nproc.conf 修改
* soft nproc 12000
2.在/etc/sysctl.conf中加入 net.core.somaxconn=511 ,然後執行 sysctl ‐p 生效,解決預設設 置為一個較低的值128的警告。
3. overcommit_memory 設定為0,在低記憶體環境下的後臺儲存可能失敗。在檔案 /etc/sysctl.conf 中添 加 vm.overcommit_memory = 1 ,然後重啟或執行命令 sysctl vm.overcommit_memory=1
4.如果伺服器的"Transparent Huge Pages (THP)"支援在核心中啟用了。這將在使用Redis時造成延遲和 記憶體使用問題。使用root執行命令
echo never > /sys/kernel/mm/transparent_hugepage/enabled ,並且將它新增到你的/etc/rc.local中使在 重啟後仍然保持生效來修復這個問題。在THP禁用之後Redis必須重啟。
四、安裝GCC編譯工具,不然會有編譯不過的問題
yum install gcc g++ gcc-c++ make -y
五、下載、解壓、編譯安裝
su - sw
cd backup
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -xvf redis-4.0.1.tar.gz
cd redis-4.0.1
make
make PREFIX=/usr/users/sw/app/redis install
編譯完成,redis已經安裝在/usr/users/sw/app/redis/bin下面,幾個檔案大致作用為
redis‐benchmark:效能測試工具,測試Redis在你的系統及配置下的讀寫效能
redis‐check‐aof:用於修復出問題的AOF檔案
redis‐check‐dump:用於修復出問題的dump.rdb檔案
redis‐cli:Redis命令列互動客戶端
redis‐sentinel:redis‐server別名
redis‐server:Redis伺服器啟動程式
六、redis的配置修改
在原始碼目錄中,將配置檔案模板redis.conf複製到redis配置檔案目錄中app/redis/conf/,因為一個虛擬機器要啟動單個
redis節點,所以配置檔案要複製三份,分別用於用於規劃的伺服器埠號命名區別
mkdir ~/app/redis/conf
cp backup/redis-4.0.1/redis.conf ~/app/redis/conf/redis8601.conf
七、編輯redis8601.conf檔案
1. 設定bind地址為本機IP,&&為本機IP,需要改為其他節點機器可訪問的ip,否則建立叢集時無法訪問對應的埠,無法建立叢集
bind 192.168.26.*
2. 修改daemonize為yes,即以後臺程式方式執行
daemonize yes
3. 修改服務埠
port 8601
4. 修改pid生成路徑
pidfile "/usr/uses/sw/app/redis/run/redis8601.pid"
需要手動建立run目錄存放pid路徑
mkdir /usr/users/sw/app/redis/run/
5. 修改日誌檔案的位置
logfile "/applog/redis8601/redis.log"
需要手動建立日誌目錄
mkdir /applog/redis8601/
6. 修改工作目錄,資料檔案,append only檔案等會在該目錄生成
dir "/applog/redisdump"
需要手動建立該目錄
mkdir /applog/redisdump
7. 資料檔名
dbfilename "dump8601.rdb"
8. 是否每次更新操作進行日誌記錄
appendonly yes
檔名設定
appendfilename "appendonly8601.aof"
9. 是否支援叢集
cluster-enabled yes
10. 叢集配置檔名
cluster-config-file "nodes-8601.conf"
八、複製redis8601.conf檔案為另外兩個節點修改
1. cp redis8601.conf redis8602.conf
cp redis8601.conf redis8603.conf
2.統一替換配置檔案redis8602.conf和redis8603.conf的8601為8602和8603
sed -i 's/8601/8602/g' redis8602.conf
sed -i 's/8601/8603/g' redis8603.conf
3.要手動建立8602和8603的日誌目錄
mkdir /applog/redis8602
mkdir /applog/redis8603
九、啟動redis各節點服務
1、cd ~/app/redis/bin
./redis-server ~/app/redis/conf/redis8601.conf
./redis-server ~/app/redis/conf/redis8602.conf
./redis-server ~/app/redis/conf/redis8603 .conf
十、指令碼啟動
mkdir ~/bin
vim redis.sh
#!/bin/bash
case $1 in
start)
cd /usr/users/sw/app/redis/bin
./redis-server /usr/users/sw/app/redis/conf/redis8601.conf
./redis-server /usr/users/sw/app/redis/conf/redis8602.conf
./redis-server /usr/users/sw/app/redis/conf/redis8603.conf if [ "$?" -eq 0 ];then
ps -ef|grep redis|grep -v grep
echo "redis is started"
else
echo "redis is error"
exit 10
fi
;;
stop)
for pid in $(ps -ef|grep redis|grep -v "grep"|egrep -v "${0}"|awk -F " " '{print $2}'|uniq);do
kill -9 $pid >> /dev/null 2>&1
done
#echo "redis is stopped"
;;
restart)
${0} stop
${0} start
;;
esac
十一、叢集搭建
1.yum -y install ruby-devel ruby-irb ruby-libs ruby-rdoc ruby rubygems-devel rubygems
2. 下載redis的gem並上傳至伺服器
https://rubygems.org/downloads/redis-3.3.0.gem
安裝redis-gem
gem install --local redis‐3.3.3.gem
檢視安裝
gem list redis
3.使用 redis‐trib.rb 指令碼建立叢集 redis‐trib.rb 在redis的原始碼包的src目錄中:
cd ~/backup/redis-4.0.1/src/
十二、 為redis各節點設定密碼 為redis各節點設定密碼,應用設定裡也要設定redis的密碼,如果密碼不匹配,則應用無法連線上 redis。
密碼均設定為:111111 修改配置檔案 直接修改配置檔案的方法,需要修改完後重啟redis服務。
1.在每個節點的配置檔案末尾加上: 然後重啟所有節點的redis使密碼生效即可。 masterauth "111111" requirepass "111111"
vim redis8601.conf 新增
masterauth "111111"
requirepass "111111"
2. 已設定了密碼的節點建立叢集,但此時建立叢集,redis‐trib.rb指令碼會提示無法連線到redis節點,這是因為ruby的redis gem中預設的客戶 端連線密碼為空,
所以導致redis‐trib.rb指令碼無法建立叢集。 可以修改ruby的redis gem的預設redis客戶端密碼即可
vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb 如果redis‐3.3.3.gem是使用非root安裝的,則在使用者主目錄下搜尋client.rb即可找到。
使用root編輯redis gem 裡的client.rb檔案: 第15行為設定密碼,預設為空: :password => "111111", 修改完後,再回去執行redis‐trib.rb即可連線上redis進行叢集操作。
vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb
15 :password => "111111",
3.然後進行叢集搭建
./redis-trib.rb create --replicas 1 192.168.26.128:8601 192.168.26.128:8602 192.168.26.128:8603 192.168.26.129:8601 192.168.26.129:8602 192.168.26.129:8603
4.如果有報錯[ERR] Node 192.168.26.129:8601 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
刪除各個節點下面的redis.log和dump下面的aof,rdb,conf檔案
十三、檢視叢集狀態
./redis-trib.rb check 192.168.26.129:8602
 
一、安裝環境
作業系統:centos7.6
關閉防火牆、關閉selinux
redis1:192.168.26.128
redis2:192.168.26.129
二、使用者環境
groupadd usr
useradd -g usr -md /usr/users/sw sw
cd /usr/users/sw/
mkdir app;mkdir backup
cd app
mkdir redis
make /applog
chown -R sw:usr /usr/users/sw
chown -R sw:usr /applog
三、系統引數修改,有幾個系統引數需要調整,否則,在啟動redis時會有幾個WARNING:
1.redis的配置檔案中,預設的最大客戶端連線數為10000,要求至少最大檔案描述符要10032個,我 們一般系統都會設定為65535
vim /etc/security/limits.conf新增以下內容
* soft nproc 12000
* hard nproc 12000
* soft nofile 65535
* hard nofile 65535
* hard stack 10240
* soft stack 10240
* hard sigpending 127934
* soft sigpending 127934
vim /etc/security/limits.d/20-nproc.conf 修改
* soft nproc 12000
2.在/etc/sysctl.conf中加入 net.core.somaxconn=511 ,然後執行 sysctl ‐p 生效,解決預設設 置為一個較低的值128的警告。
3. overcommit_memory 設定為0,在低記憶體環境下的後臺儲存可能失敗。在檔案 /etc/sysctl.conf 中添 加 vm.overcommit_memory = 1 ,然後重啟或執行命令 sysctl vm.overcommit_memory=1
4.如果伺服器的"Transparent Huge Pages (THP)"支援在核心中啟用了。這將在使用Redis時造成延遲和 記憶體使用問題。使用root執行命令
echo never > /sys/kernel/mm/transparent_hugepage/enabled ,並且將它新增到你的/etc/rc.local中使在 重啟後仍然保持生效來修復這個問題。在THP禁用之後Redis必須重啟。
四、安裝GCC編譯工具,不然會有編譯不過的問題
yum install gcc g++ gcc-c++ make -y
五、下載、解壓、編譯安裝
su - sw
cd backup
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -xvf redis-4.0.1.tar.gz
cd redis-4.0.1
make
make PREFIX=/usr/users/sw/app/redis install
編譯完成,redis已經安裝在/usr/users/sw/app/redis/bin下面,幾個檔案大致作用為
redis‐benchmark:效能測試工具,測試Redis在你的系統及配置下的讀寫效能
redis‐check‐aof:用於修復出問題的AOF檔案
redis‐check‐dump:用於修復出問題的dump.rdb檔案
redis‐cli:Redis命令列互動客戶端
redis‐sentinel:redis‐server別名
redis‐server:Redis伺服器啟動程式
六、redis的配置修改
在原始碼目錄中,將配置檔案模板redis.conf複製到redis配置檔案目錄中app/redis/conf/,因為一個虛擬機器要啟動單個
redis節點,所以配置檔案要複製三份,分別用於用於規劃的伺服器埠號命名區別
mkdir ~/app/redis/conf
cp backup/redis-4.0.1/redis.conf ~/app/redis/conf/redis8601.conf
七、編輯redis8601.conf檔案
1. 設定bind地址為本機IP,&&為本機IP,需要改為其他節點機器可訪問的ip,否則建立叢集時無法訪問對應的埠,無法建立叢集
bind 192.168.26.*
2. 修改daemonize為yes,即以後臺程式方式執行
daemonize yes
3. 修改服務埠
port 8601
4. 修改pid生成路徑
pidfile "/usr/uses/sw/app/redis/run/redis8601.pid"
需要手動建立run目錄存放pid路徑
mkdir /usr/users/sw/app/redis/run/
5. 修改日誌檔案的位置
logfile "/applog/redis8601/redis.log"
需要手動建立日誌目錄
mkdir /applog/redis8601/
6. 修改工作目錄,資料檔案,append only檔案等會在該目錄生成
dir "/applog/redisdump"
需要手動建立該目錄
mkdir /applog/redisdump
7. 資料檔名
dbfilename "dump8601.rdb"
8. 是否每次更新操作進行日誌記錄
appendonly yes
檔名設定
appendfilename "appendonly8601.aof"
9. 是否支援叢集
cluster-enabled yes
10. 叢集配置檔名
cluster-config-file "nodes-8601.conf"
八、複製redis8601.conf檔案為另外兩個節點修改
1. cp redis8601.conf redis8602.conf
cp redis8601.conf redis8603.conf
2.統一替換配置檔案redis8602.conf和redis8603.conf的8601為8602和8603
sed -i 's/8601/8602/g' redis8602.conf
sed -i 's/8601/8603/g' redis8603.conf
3.要手動建立8602和8603的日誌目錄
mkdir /applog/redis8602
mkdir /applog/redis8603
九、啟動redis各節點服務
1、cd ~/app/redis/bin
./redis-server ~/app/redis/conf/redis8601.conf
./redis-server ~/app/redis/conf/redis8602.conf
./redis-server ~/app/redis/conf/redis8603 .conf
十、指令碼啟動
mkdir ~/bin
vim redis.sh
#!/bin/bash
case $1 in
start)
cd /usr/users/sw/app/redis/bin
./redis-server /usr/users/sw/app/redis/conf/redis8601.conf
./redis-server /usr/users/sw/app/redis/conf/redis8602.conf
./redis-server /usr/users/sw/app/redis/conf/redis8603.conf if [ "$?" -eq 0 ];then
ps -ef|grep redis|grep -v grep
echo "redis is started"
else
echo "redis is error"
exit 10
fi
;;
stop)
for pid in $(ps -ef|grep redis|grep -v "grep"|egrep -v "${0}"|awk -F " " '{print $2}'|uniq);do
kill -9 $pid >> /dev/null 2>&1
done
#echo "redis is stopped"
;;
restart)
${0} stop
${0} start
;;
esac
十一、叢集搭建
1.yum -y install ruby-devel ruby-irb ruby-libs ruby-rdoc ruby rubygems-devel rubygems
2. 下載redis的gem並上傳至伺服器
https://rubygems.org/downloads/redis-3.3.0.gem
安裝redis-gem
gem install --local redis‐3.3.3.gem
檢視安裝
gem list redis
3.使用 redis‐trib.rb 指令碼建立叢集 redis‐trib.rb 在redis的原始碼包的src目錄中:
cd ~/backup/redis-4.0.1/src/
十二、 為redis各節點設定密碼 為redis各節點設定密碼,應用設定裡也要設定redis的密碼,如果密碼不匹配,則應用無法連線上 redis。
密碼均設定為:111111 修改配置檔案 直接修改配置檔案的方法,需要修改完後重啟redis服務。
1.在每個節點的配置檔案末尾加上: 然後重啟所有節點的redis使密碼生效即可。 masterauth "111111" requirepass "111111"
vim redis8601.conf 新增
masterauth "111111"
requirepass "111111"
2. 已設定了密碼的節點建立叢集,但此時建立叢集,redis‐trib.rb指令碼會提示無法連線到redis節點,這是因為ruby的redis gem中預設的客戶 端連線密碼為空,
所以導致redis‐trib.rb指令碼無法建立叢集。 可以修改ruby的redis gem的預設redis客戶端密碼即可
vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb 如果redis‐3.3.3.gem是使用非root安裝的,則在使用者主目錄下搜尋client.rb即可找到。
使用root編輯redis gem 裡的client.rb檔案: 第15行為設定密碼,預設為空: :password => "111111", 修改完後,再回去執行redis‐trib.rb即可連線上redis進行叢集操作。
vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb
15 :password => "111111",
3.然後進行叢集搭建
./redis-trib.rb create --replicas 1 192.168.26.128:8601 192.168.26.128:8602 192.168.26.128:8603 192.168.26.129:8601 192.168.26.129:8602 192.168.26.129:8603
4.如果有報錯[ERR] Node 192.168.26.129:8601 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
刪除各個節點下面的redis.log和dump下面的aof,rdb,conf檔案
十三、檢視叢集狀態
./redis-trib.rb check 192.168.26.129:8602