腳本一鍵式部署redis主從與哨兵服務

本次創建是爲了簡化服務的部署時間,使用的都是比較基礎的命令方法,易懂!

因爲密鑰無法連接本機,所以搭建服務,全程沒有部署密鑰!

vim Auto-deploy-redis.sh

注:腳本沒有關閉回顯,所以解壓,和編譯時會顯示在屏幕,其他正則操作不會顯示!

#!/bin/bash
#redis哨兵一鍵式部署腳本

#下載redis軟件包:
cd /opt
yum -y install wget     #不確定是否有安裝wget命令,直接安一個
yum -y install sshpass

#如果是相讓下載軟件快點的話,建議更換阿里源:
# for i in  11 12 13 
#do
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum -y install wget"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir /etc/yum.repos.d/repo_bak"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir repo_bak"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cd /etc/yum.repos.d/ && wget http://mirrors.aliyun.com/repo/Centos-7.repo" #下載阿里源

#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum clean all"  #清空緩存
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum makecache"  #生產新的緩存

#done

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

#非交互式創建密鑰(密鑰目前操作有點問題,就不使用密鑰了)
#ssh-keygen    -t   rsa    -f   /root/.ssh/id_rsa    -N   ''

#準備環境
for i in  11 12 13
do
#拷貝公鑰到相關服務器(全程使用 sshpass工具)
#sshpass -p "123456" ssh-copy-id [email protected].$i
#非交互式遠程登錄下載相關插件
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "yum -y install gcc make "

#拷貝下好的軟件包傳送過去
sshpass -p "123456" scp /opt/redis-5.0.5.tar.gz  [email protected].$i:/opt
done

do
#解壓&&預編譯&&安裝
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cd /opt/ && tar -zxvf redis-5.0.5.tar.gz -C /usr/local/"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cd /usr/local/redis-5.0.5 && make && make install"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mv /usr/local/redis-5.0.5 /usr/local/redis"
#方便命令啓動,設置全局變量
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir -p /opt/redis/{conf,data,log,tmp}"
#拷貝配置文件redis.conf和sentinel.conf
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cp /usr/local/redis/redis.conf  /opt/redis/conf/redis-6379.conf"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "cp /usr/local/redis/sentinel.conf /opt/redis/conf/sentinel-26379.conf"
done

#配置redis主從模式

for i in 11 12 13
do

#protected-mode配置,默認是yes,需要配置bind ip或設置訪問密碼,
#關閉protected-mode模式,此時外部網絡可以直接訪問
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^protected-mode/s/yes/no/' /opt/redis/conf/redis-6379.conf"

#修改IP地址
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^bind/s/127.0.0.1/0.0.0.0/' /opt/redis/conf/redis-6379.conf"
#開啓後臺運行
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^daemonize/s/no/yes/' /opt/redis/conf/redis-6379.conf"

#db等相關目錄位置
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^dir/s/.\//\/opt\/redis\/data\//' /opt/redis/conf/redis-6379.conf"
#開啓日誌形式
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^appendonly/s/no/yes/' /opt/redis/conf/redis-6379.conf"

#設置訪問密碼
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i  '/requirepass/s/# requirepass foobared/requirepass 123456/' /opt/redis/conf/redis-6379.conf"

#設置連接主的密碼

done

#從服務器要單獨修改一個地方,指定主服務器配置:我這裏的主是11,從是12,13
for i in 12 13
do
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i  '/replicaof/s/# replicaof <masterip> <masterport>/replicaof 192.168.1.11 6379/' /opt/redis/conf/redis-6379.conf"
done


#部署sentinel 哨兵服務
for i in 11 12 13
do

#保護模式關閉,也可以不用去管它,因爲它默認是註釋的
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/# protected-mode/s/^#//' /opt/redis/conf/sentinel-26379.conf"

#後臺運行
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^daemonize/s/no/yes/' /opt/redis/conf/sentinel-26379.conf"

#哨兵文件目錄
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^dir/s#tmp#opt/redis/tmp/#' /opt/redis/conf/sentinel-26379.conf"

#指定日誌文件路徑
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/^logfile/s/\"\"/\/opt\/redis\/log\/sentinel-26379.log/' /opt/redis/conf/sentinel-26379.conf"

#指定監視主服務器
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/sentinel monitor/s/127.0.0.1/192.168.1.11/' /opt/redis/conf/sentinel-26379.conf"

#主服務器設置了密碼,哨兵得在sentinel monitor 下配置asentinel auth-pass mymaster 123456
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/sentinel monitor mymaster/asentinel auth-pass mymaster 123456' /opt/redis/conf/sentinel-26379.conf"

# 如果mymaster 30秒內沒有響應,則認爲其主觀失效 (默認即可,也可以修改)
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/down-after-milliseconds mymaster/s/30000/10000/' /opt/redis/conf/sentinel-26379.conf"

# 該參數指定一個時間段,在該時間段內沒有實現故障轉移成功,則會再一次發起故障轉移的操作,單位毫秒 (默認即可)
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "sed -i '/failover-timeout mymaster/s/180000/160000/' /opt/redis/conf/sentinel-26379.conf"

done

#啓動服務
for i in 11 12 13
do
#方便管理做的操作,可不做
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "mkdir /opt/tar-gz && mv /opt/redis-5.0.5.tar.gz  /opt/tar-gz/"

#啓動redis
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "redis-server /opt/redis/conf/redis-6379.conf"

#啓動哨兵
sshpass -p "123456" ssh -o StrictHostKeyChecking=no [email protected].$i "redis-sentinel /opt/redis/conf/sentinel-26379.conf"

done

Sentinel操作

[root@redis-master ~] redis-cli -p 26379     //哨兵模式查看
127.0.0.1:26379> sentinel master mymaster   //輸出被監控的主節點的狀態信息

......

127.0.0.1:26379> sentinel slaves mymaster   //查看mymaster的從信息,可以看到有2個從節點

......

127.0.0.1:26379> sentinel sentinels mymaster    //查看其它sentinel(哨兵)信息

**到此就一鍵式部署完畢了!**這個shell腳本其實都是可以快速改編的,可以很快的修改成單機redis主從-哨兵服務
這個看shell腳本里的內容,需要改的地方觀摩了

借閱了一些資料:
非交互式遠程登錄參考文章
sshpass工具遠程傳輸,拷貝的使用方式參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章