三、单redis升级redis集群+哨兵
针对假如已经是安装了redis,只是是单部署,需要把他切换成redis集群+哨兵模式,我因为偷懒,就写了个脚本来执行,各位看官,请品~你品~你细品~
首先准备个升级包,放到任意路径,内容如下:
第一个文件不用管,第二个跟第四个,是把里面的配置改好,如何配置请参考我之前写的redis集群一,
然后是upgrade.sh脚本内容:
1 #!/bin/bash 23 base_path=/home/zmoon
4 redis_package_name=redis-5.0.12
5
6 #安装文件名称(安装文件位置=安装位置+安装文件名称)
7 redis_path=/redis-5.0.12
8 redis_conf=/etc/redis.conf
9 sentinel_conf=/etc/sentinel.conf
10 monitor_redis=/home/zmoon/bin
11
12
13
14#判断redis是否安装
15check_redis(){
16if [ -d "$base_path$redis_path" ]; then
17echo"redis 已安装,无需再次安装!"
18 return 1
19else
20 return 0
21fi
22}
23
24#判断etc
25check_redis_conf(){
26if [ -f "$base_path$redis_path$redis_conf" ]; then
27echo"redis.conf 已存在,无需再次安装!"
28 return 1
29else
30 return 0
31fi
32}
33
34#判断etc redis.conf,sentinel.conf是否存在
35check_sentinel_conf(){
36if [ -f "$base_path$redis_path$sentinel_conf" ]; then
37echo"sentinel.conf 已存在,无需再次安装!"
38 return 1
39else
40 return 0
41fi
42}
43
44
45copy_redis_conf(){
46mkdir -p $base_path$redis_path/etc
47cp redis.conf $base_path$redis_path/etc/redis.conf
48 return 2
49}
50
51copy_sentinel_conf(){
52mkdir -p $base_path$redis_path/etc
53cp sentinel.conf $base_path$redis_path/etc/sentinel.conf
54 return 2
55}
56
57copy_monitor_sh(){
58cpinstall-zm-redis.sh $monitor_redis/install-zm-redis.sh
59 return 2
60}
61
62install_redis(){
63echo"安装redis"
64
65tar -zxvf $redis_package_name.tar.gz
66
67echo"开始编译及安装。。。"
68 cd $redis_package_name
69
70make
71make PREFIX=$base_path$redis_path install
72
73 #切换到redis目录 新建etc文件夹
74mkdir -p $base_path$redis_path/etc
75
76 cd ..
77
78 #把配置好的文件复制过来
79cp redis.conf $base_path$redis_path/etc/redis.conf
80cp sentinel.conf $base_path$redis_path/etc/sentinel.conf
81
82 return 2
83
84}
85
86main(){
87echo"base_path:$base_path"
88
89 #判断当前用户是否为root用户,不是则终止部署
90if [ `whoami` != "root" ]; then
91echo"部署请将用户切换到root用户,安装终止"
92 exit 1
93fi
94
95if [ ! -d "$base_path" ]; then
96mkdir $base_path
97fi
98
99 #检查是否有redis进程
100 # 停止正在运行的services-应用
101echo"检查是否有redis进程"
102 pids=`ps -ef|grep redis-server|grep -v "grep"|awk"{print $2}"`
103 pidsentinel=`ps -ef|grep redis-sentinel|grep -v "grep"|awk"{print $2}"`
104 pids=${pids%/*}
105 if [ -n "$pids" ];then
106 for pid in $pids
107 do
108 kill -9 $pid
109 done
110 fi
111
112 pidsentinel=${pidsentinel%/*}
113 if [ -n "$pidsentinel" ];then
114 for pid in $pidsentinel
115 do
116 kill -9 $pid
117 done
118 fi
119
120 echo "------------------------------------------------"
121 echo "Redis service stop"
122 echo "------------------------------------------------"
123
124 #安装redis
125 check_redis
126 if [ $? -eq 0 ]; then
127 install_redis
128
129 if [ $? -eq 2 ]; then
130 echo "redis 安装成功!"
131 else
132 echo "redis 安装失败,安装终止!"
133 exit 1
134 fi
135 fi
136
137 #安装redis
138 check_redis_conf
139 if [ $? -eq 0 ]; then
140 copy_redis_conf
141
142 if [ $? -eq 2 ]; then
143 echo "redis.conf copy成功!"
144 else
145 echo "redis.conf copy失败,copy终止!"
146 exit 1
147 fi
148 fi
149
150 #安装redis
151 check_sentinel_conf
152 if [ $? -eq 0 ]; then
153 copy_sentinel_conf
154
155 if [ $? -eq 2 ]; then
156 echo "sentinel.conf copy成功!"
157 else
158 echo "sentinel.conf copy失败,copy终止!"
159 exit 1
160 fi
161 fi
162
163 copy_monitor_sh
164
165 if [ $? -eq 2 ]; then
166 echo "看门猫redis脚本 copy成功!"
167 else
168 echo "看门猫redis脚本 copy失败,copy终止!"
169 exit 1
170 fi
171
172 #提示“请输入当前节点IP(xx.xx.xx.xx):”,把输入IP保存入变量selfIp中
173 read -p "请输入当前节点IP(xx.xx.xx.xx):" selfIp
174 #提示“请输入Redis主节点IP(xx.xx.xx.xx):”,把输入IP保存入变量nodeIp中
175 read -p "请输入当前主节点IP(xx.xx.xx.xx):" nodeIp
176
177
178 if [ $selfIp = $nodeIp ]
179 then
180 sed -i "s#.*""sentinel monitor mymaster.*#sentinel monitor mymaster ${nodeIp} 6379 2""#" /home/zmoon/redis-5.0.12/etc/sentinel.conf
181 else
182 echo -e "replicaof ${nodeIp} 6379" >> /home/zmoon/redis-5.0.12/etc/redis.conf
183
184 sed -i "s#.*""sentinel monitor mymaster.*#sentinel monitor mymaster ${nodeIp} 6379 2""#" /home/zmoon/redis-5.0.12/etc/sentinel.conf
185 fi
186
187 #启动redis
188 $base_path$redis_path/bin/redis-server $base_path$redis_path/etc/redis.conf &
189 $base_path$redis_path/bin/redis-sentinel $base_path$redis_path/etc/sentinel.conf &
190}
191main $1
192exit 0
里面首先判断是否有redis进程与sentinel进程,有则kill掉,
然后又判断是否有安装redis,
然后是etc下的两个配置文件是否存在,
进而是修改配置文件的内容,
最后启动redis服务与哨兵服务,redis升级完成。
请各位看官大大参与评论,指点不足~
以上是 三、单redis升级redis集群+哨兵 的全部内容, 来源链接: utcz.com/z/520477.html