本次创建是为了简化服务的部署时间,使用的都是比较基础的命令方法,易懂!
因为密钥无法连接本机,所以搭建服务,全程没有部署密钥!
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 root@192.168.1.$i "yum -y install wget"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "mkdir /etc/yum.repos.d/repo_bak"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "mkdir repo_bak"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/"
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "cd /etc/yum.repos.d/ && wget http://mirrors.aliyun.com/repo/Centos-7.repo" #下载阿里源
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "yum clean all" #清空缓存
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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 root@192.168.1.$i
#非交互式远程登录下载相关插件
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "yum -y install gcc make "
#拷贝下好的软件包传送过去
sshpass -p "123456" scp /opt/redis-5.0.5.tar.gz root@192.168.1.$i:/opt
done
do
#解压&&预编译&&安装
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "cd /opt/ && tar -zxvf redis-5.0.5.tar.gz -C /usr/local/"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "cd /usr/local/redis-5.0.5 && make && make install"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "mv /usr/local/redis-5.0.5 /usr/local/redis"
#方便命令启动,设置全局变量
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "mkdir -p /opt/redis/{conf,data,log,tmp}"
#拷贝配置文件redis.conf和sentinel.conf
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "cp /usr/local/redis/redis.conf /opt/redis/conf/redis-6379.conf"
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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 root@192.168.1.$i "sed -i '/^protected-mode/s/yes/no/' /opt/redis/conf/redis-6379.conf"
#修改IP地址
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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 root@192.168.1.$i "sed -i '/^daemonize/s/no/yes/' /opt/redis/conf/redis-6379.conf"
#db等相关目录位置
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "sed -i '/^dir/s/.\//\/opt\/redis\/data\//' /opt/redis/conf/redis-6379.conf"
#开启日志形式
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "sed -i '/^appendonly/s/no/yes/' /opt/redis/conf/redis-6379.conf"
#设置访问密码
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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 root@192.168.1.$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 root@192.168.1.$i "sed -i '/# protected-mode/s/^#//' /opt/redis/conf/sentinel-26379.conf"
#后台运行
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "sed -i '/^daemonize/s/no/yes/' /opt/redis/conf/sentinel-26379.conf"
#哨兵文件目录
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "sed -i '/^dir/s#tmp#opt/redis/tmp/#' /opt/redis/conf/sentinel-26379.conf"
#指定日志文件路径
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "sed -i '/^logfile/s/\"\"/\/opt\/redis\/log\/sentinel-26379.log/' /opt/redis/conf/sentinel-26379.conf"
#指定监视主服务器
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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 root@192.168.1.$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 root@192.168.1.$i "sed -i '/down-after-milliseconds mymaster/s/30000/10000/' /opt/redis/conf/sentinel-26379.conf"
# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒 (默认即可)
#sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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 root@192.168.1.$i "mkdir /opt/tar-gz && mv /opt/redis-5.0.5.tar.gz /opt/tar-gz/"
#启动redis
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$i "redis-server /opt/redis/conf/redis-6379.conf"
#启动哨兵
sshpass -p "123456" ssh -o StrictHostKeyChecking=no root@192.168.1.$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工具远程传输,拷贝的使用方式参考文章