关于redis如何安装,参考:redis单点安装
- redis主从集群,master负责写;slave负责读
- 5.0版本由slaveof 改为 replicaof 名称,完成主从配置.
5.0.7版本
主从结构图
优点
- 多机备份数据
- 读写分离,减轻master压力
缺点
- 一旦master挂了,无法提供写服务.其它节点正常的话,读服务正常工作.
- 只能有一个master节点,写服务压力不能分散.
搭建主从redis前的准备
修改redis.conf共8处,即可实现一个主从Redis搭建. 还是很简单的.现在我们正式开始搭建吧.
- 69行:
bind 127.0.0.1
改为:bind 0.0.0.0
需要跨服务器访问,如果是生产最好指定IP或添加防火墙. - 88行:
protected-mode yes
改为:protected-mode no
如果是yes保护模式,需要配置bind或者设置密码,no的话则设置 - 92行:
port 6379
改为:port 6381
访问端口 - 136行:
daemonize no
改为:daemonize yes
守护进程模式运行 - 158行:
pidfile /var/run/redis.pid
改为:pidfile /var/run/redis_6381.pid
启动使用的PID - 263行:
dir ./
改为:dir /usr/local/redis-ms/6381/
存储日志与数据文件的目录 - 287行:
replicaof <masterip> <masterport>
改为:replicaof 192.168.21.22 6381
(从redis.conf配置才设置) - 294行:
# masterauth <master-password>
改为:masterauth o9bEuO6iDKrIhYkx
slave节点设置master的密码, - 507行:
#requirepass 123456
改为:requirepass o9bEuO6iDKrIhYkx
设置访问时需要的密码
创建必要的目录和复制redis.conf配置文件
- 创建目录
mkdir -p /usr/local/redis-ms/{6381,6382,6383,script}
- 复制redis.conf文件
#复制三次
cp ~/soft/redis-5.0.7/redis.conf /usr/local/redis-ms/6381/
cp ~/soft/redis-5.0.7/redis.conf /usr/local/redis-ms/6382/
cp ~/soft/redis-5.0.7/redis.conf /usr/local/redis-ms/6383/
# 更高级玩法: 一次将一个文件复制到多个目录
echo /usr/local/redis-ms/6381/ /usr/local/redis-ms/6382/ /usr/local/redis-ms/6383/ |xargs -n 1 cp -v ~/soft/redis-5.0.7/redis.conf
主Redis服务的redis.conf配置参数(port:6381)
# 69行 允许
bind 0.0.0.0
# 88行
protected-mode yes
# 92行
port 6381
# 136行
daemonize yes
# 158行
pidfile /var/run/redis_6381.pid
# 263行
dir /usr/local/redis-ms/6381/
# 509行
requirepass 123456
从Redis服务的redis配置参数(port:6382)
# 69行 允许
bind 0.0.0.0
# 88行
protected-mode yes
# 92行
port 6382
# 136行
daemonize yes
# 158行
pidfile /var/run/redis_6382.pid
# 263行
dir /usr/local/redis-ms/6382/
# 287行
replicaof 192.168.21.22 6381
# 295行
masterauth 123456
# 509行
requirepass 123456
从Redis服务的redis配置参数(port:6383)
# 69行 允许
bind 0.0.0.0
# 88行
protected-mode yes
# 92行
port 6383
# 136行
daemonize yes
# 158行
pidfile /var/run/redis_6383.pid
# 263行
dir /usr/local/redis-ms/6383/
# 287行
replicaof 192.168.21.22 6381
# 295行
masterauth 123456
# 509行
requirepass 123456
参数说明
bind
- 其实是表示允许通过哪个网卡过来访问Redis, 反过来说就是与那个网卡绑定.
- bind 127.0.0.1 意思是只允许本机才能访问Redis. 127.0.0.1是回环地址.使用ifconfig 查看
- bind 0.0.0.0 意思是任意网卡过来的请求都可以访问Redis.如果在生产上设置0.0.0.0则最好设置密码,否则在公网上都可以访问你的Redis. (当然啦, 防火墙必须放行redis端口)
protected-mode yes 保护模式.
- 开启protected-mode保护模式,需配置bind ip或者设置访问密码
- 关闭protected-mode模式,此时外部网络可以直接访问
port 端口号
- 对外提供服务时所用的端口号.
- 注意主从端口号不能一样.
daemonize 守护模式
- 开启 yes 则是守护模式,后台运行
- 关闭 no 则是非后台运行.
pidfile 存储PID的文件
当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件replicaof 主从复制
- 添加master的ip与port
- 注意中间需要有空格.
masterauth master访问密码
- 必须是master设置了requirepass密码选项.才需要添加
requirepass 访问权限
- 设置访问时所需的密码.
制作systemctl启动,关闭,重启命令
主从集群涉及多个实例redis,如果手动启动,关闭非常麻烦,耗时,我们需要借用脚本来管理.
shell脚本写命令
- 创建redis-ms.sh文件
touch /usr/local/redis-ms/script/redis-ms.sh
- 配置port_list变量列表
- 配置PASS变量
#!/bin/sh
#####################
# 名称: redis主从服务脚本
# 时间: 2020-01-05
# 作者: 百里
#####################
# 端口配置
port_list=(6381 6382 6383)
# redis-server服务
EXEC=/usr/local/bin/redis-server
# 客户端连接
CLIEXEC=/usr/local/bin/redis-cli
#pid文件位置
PIDFILE="/var/run/redis_%d.pid"
#配置文件存放位置
CONF="/usr/local/redis-ms/%d/redis.conf"
#密码,如果有密码则在此处添加
PASS=123456
# 启动脚本
start(){
for port in ${port_list[@]};do
pidfile=$(printf $PIDFILE $port)
if [ -f $pidfile ];then
echo "$pidfile exists, process is already running or crashed"
else
echo "Starting Redis ${port} server..."
conf=$(printf $CONF $port)
$EXEC $conf
fi
done
}
# 停止函数
stop(){
# 循环处理
for port in ${port_list[@]};do
pidfile=$(printf $PIDFILE $port)
if [ ! -f $pidfile ];then
echo "$pidfile does not exist, process is not running"
else
PID=$(cat $pidfile)
echo "Stopping Redis ${port}..."
if [ -z $PASS ];then
$CLIEXEC -p $port shutdown
else
$CLIEXEC -p $port -a $PASS shutdown
fi
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
done
}
# 重启函数
restart() {
stop
start
}
# 状态函数
status() {
netstat -nplt |grep redis
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Please use start or stop or restart or status as first argument"
;;
esac
自定义systemctl start|stop|restart redis-ms命令
- 创建redis-ms.service文件
touch /usr/lib/systemd/system/redis-ms.service
- 向redis-ms.service配置文件写入内容
[Unit]
Description=redis-ms replication
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/redis-ms/script/redis-ms.sh start
ExecStop=/usr/local/redis-ms/script/redis-ms.sh stop
ExecReload=/usr/local/redis-ms/script/redis-ms.sh restart
[Install]
WantedBy=multi-user.target
systemctl 操作
- 重加载systemctl
systemctl daemon-reload
- 启动服务
systemctl start redis-ms
- 停止服务
systemctl start redis-ms
- 重启服务
systemctl start redis-ms
- 加入开机启动服务
systemctl enable redis-ms
- 检查是否加入开机启动啦?
systemctl is-enabled redis-ms
参考:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。