软件安装及高可用部署(四)
大约 5 分钟
本文介绍了redis安装
一、下载
官网下载需要安装版本redis,下载地址
https://redis.io/download
http://download.redis.io/releases/ (所有版本)
解压
tar -zxvf redis-7.0.5.tar.gz
cd redis-7.0.5/
二、编译源码
make
make PREFIX=/redis install
三、复制配置文件
cp /usr/local/redis/redis-7.0.5/redis.conf /redis/
四、创建日志文件
mkdir /redis/logs
touch /redis/logs/redis.log
chmod 666 /redis/logs/redis.log
mkdir /redis/aof/
chmod 777 /redis/aof/
五、修改配置文件
vim /redis/redis.conf
# 找到bind配置,添加注释(69行)
#bind 127.0.0.1
# 找到daemonize,将配置修改为yes(136行)
daemonize yes
# 取消保护模式(88行)
protected-mode no
# 增加密码
requirepass ******
# 配置文件路径(171行)
logfile "/redis/logs/redis.log"
# 配置文件路径(263行)
dir /redis/aof/
注册系统服务
重载系统服务
添加自启
防火墙配置
将防火墙服务停止并禁止开机自启。
在redis-backup服务器上重复以上步骤,安装Redis。
# 配置文件路径(699行)
appendonly no
# 配置文件路径,取消注释(216行)
save ""
# 配置文件路径,添加注释(218-220行)
# save 900 1
# save 300 10
# save 60 10000
# 配置文件路径(806行)
aof-use-rdb-preamble no
六、注册系统服务
修改启动文件
vim /usr/lib/systemd/system/redis.service
# 添加以下内容,保存退出
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/redis/bin/redis-server /redis/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重载系统服务
systemctl daemon-reload
添加自启
systemctl start redis
systemctl status redis
systemctl enable redis
在redis-backup服务器上重复以上步骤,安装Redis。
七、高可用配置(主从)
编辑redis-backup服务器上redis配置文件。
vim /redis/redis.conf
# 编辑从库的redis.conf配置文件,搜索replicaof(286行),去掉注释,修改为:
replicaof 主库IP 6379
# 从库重启redis
systemctl restart redis
# 主库使用客户端:redis-cli,添加键值
cd /redis/bin/
./redis-cli
127.0.0.1:6379> SET runoobkey redis
# 从库使用客户端:redis-cli,查看是否同步了主库的数据
cd /redis/bin/
./redis-cli
127.0.0.1:6379> keys *
1) "runoobkey"
八、高可用配置(keepalived)
在redis-master服务器上修改keepalived配置文件。
注意配置中interface(指定网卡)、virtual_ipaddress(虚拟IP)、unicast_src_ip(本机IP)和unicast_peer(其它服务器IP)参数可根据实际环境进行配置。
vim /etc/keepalived/keepalived.conf
在redis-master服务器上创建检测脚本。
# 将原配置文件内容清空,添加以下配置内容↓:
! Configuration File for keepalived
vrrp_script chk_redis {
script "/etc/keepalived/script/chk_redis.sh"
interval 3
}
vrrp_instance redis {
state BACKUP
nopreempt
interface ens33
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass redis
}
track_script {
chk_redis
}
virtual_ipaddress {
192.168.8.96
}
unicast_src_ip 192.168.8.189
unicast_peer {
192.168.8.190
}
}
在redis-master服务器上创建检测脚本。
mkdir -p /etc/keepalived/script
vim /etc/keepalived/script/chk_redis.sh
# 添加以下内容↓:
#!/bin/bash
A=`/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`
if [ "$A"x != "PONG"x ]
then
/bin/systemctl restart redis
sleep 2
if [ "`/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`"x != "PONG"x ]
then
/etc/init.d/keepalived stop
fi
fi
port=`netstat -anp|grep 2049`
if [ "$port" == "" ];then
#echo 1
/bin/systemctl start nfs
sleep 5
port=`netstat -anp|grep 2049`
if [ "$port" == "" ];then
/etc/init.d/keepalived stop
#echo 2
fi
fi
为检测脚本添加可执行权限。
chmod +x /etc/keepalived/script/chk_redis.sh
在redis-master服务器上验证虚拟IP是否绑定。
chmod -R 777 /etc/keepalived/keepalived.conf
service keepalived stop
service keepalived start
# 查看虚拟IP是否出现在了网卡上
ip a
验证keepalived服务是否可用。
# 停止redis服务,查看keepalived是否会自动拉起服务
systemctl stop redis
systemctl status redis
在redis-backup服务器上修改keepalived配置文件。
注意配置中interface(指定网卡)、virtual_ipaddress(虚拟IP)、unicast_src_ip(本机IP)和unicast_peer(其它服务器IP)参数可根据实际环境进行配置。
vim /etc/keepalived/keepalived.conf
# 将原配置文件内容清空,添加以下配置内容↓:
! Configuration File for keepalived
vrrp_script chk_redis {
script "/etc/keepalived/script/chk_redis.sh"
interval 3
}
vrrp_instance redis {
state BACKUP
nopreempt
interface ens33
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass redis
}
track_script {
chk_redis
}
virtual_ipaddress {
192.168.8.96
}
unicast_src_ip 192.168.8.190
unicast_peer {
192.168.8.189
}
notify_master "/etc/keepalived/script/become_master.sh"
}
在redis-backup服务器上创建检测脚本。
mkdir -p /etc/keepalived/script
vim /etc/keepalived/script/chk_redis.sh
# 添加以下内容↓:
#!/bin/bash
A=`/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`
if [ "$A"x != "PONG"x ]
then
/bin/systemctl restart redis
sleep 2
if [ "`/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`"x != "PONG"x ]
then
/etc/init.d/keepalived stop
fi
fi
为检测脚本添加可执行权限。
chmod +x /etc/keepalived/script/chk_redis.sh
在redis-backup服务器上创建处理脚本。
vim /etc/keepalived/script/become_master.sh
# 添加以下配置内容↓:
#!/bin/bash
/redis/bin/redis-cli -h 127.0.0.1 -p 6379 slaveof no one
为处理脚本添加可执行权限。
chmod +x /etc/keepalived/script/become_master.sh
在redis-backup服务器上,验证redis从库是否可以升级为主库。
chmod -R 777 /etc/keepalived/keepalived.conf
service keepalived stop
service keepalived start
# 在redis-master服务器上,停止keepalived服务,查看虚拟IP是否漂移,redis从库是否升级为主库
systemctl stop keepalived
# 在redis-backup服务器上,查看虚拟IP是否出现在了网卡上
ip a
# 在redis-backup服务器上,验证redis从库是否升级为主库
cd /redis/bin
./redis-cli
127.0.0.1:6379> set cfit test
OK
恢复使用主库Redis
当redis-master服务器出现故障,虚拟IP自动漂移到redis-backup服务器上时,此时禅道相关的session
信息会存储到redis-backup服务器上的redis中,上传的非结构数据也会存储到redis-backup服务器上
的nfs共享目录中。
因为上述步骤测试redis-backup服务器上的redis是否会升级为主库,虚拟IP已转移,所以此步骤可恢复
虚拟IP绑定在redis-master服务器上。
# 在redis-backup服务器上,停止运行keepalived和redis服务
systemctl stop keepalived
systemctl stop redis
# 在redis-master服务器上,挂载从库nfs共享目录,复制所有文件到redis-master服务器的共享目录
中
mkdir /cfit_pms_data_tmp
mount -t nfs 192.168.8.190:/redis/cfit_pms_data /cfit_pms_data_tmp
sudo cp -rf /cfit_pms_data_tmp/* /redis/cfit_pms_data/
# 在redis-master服务器上,卸载挂载目录
umount /cfit_pms_data_tmp
# 在redis-master服务器上,启动keepalived服务
systemctl start keepalived
# 在redis-master服务器上,查看虚拟IP是否已绑定
ip a
# 在redis-backup服务器上,启动keepalived服务
systemctl start keepalived