redis5.0主从集群搭建

image.png

关于redis如何安装,参考:redis单点安装

  1. redis主从集群,master负责写;slave负责读
  2. 5.0版本由slaveof 改为 replicaof 名称,完成主从配置.

5.0.7版本

image.png

主从结构图

image.png

优点

  1. 多机备份数据
  2. 读写分离,减轻master压力

缺点

  1. 一旦master挂了,无法提供写服务.其它节点正常的话,读服务正常工作.
  2. 只能有一个master节点,写服务压力不能分散.

搭建主从redis前的准备

修改redis.conf共8处,即可实现一个主从Redis搭建. 还是很简单的.现在我们正式开始搭建吧.

  1. 69行: bind 127.0.0.1 改为: bind 0.0.0.0 需要跨服务器访问,如果是生产最好指定IP或添加防火墙.
  2. 88行: protected-mode yes 改为: protected-mode no 如果是yes保护模式,需要配置bind或者设置密码,no的话则设置
  3. 92行: port 6379 改为: port 6381 访问端口
  4. 136行:daemonize no 改为: daemonize yes 守护进程模式运行
  5. 158行: pidfile /var/run/redis.pid 改为: pidfile /var/run/redis_6381.pid 启动使用的PID
  6. 263行: dir ./ 改为: dir /usr/local/redis-ms/6381/ 存储日志与数据文件的目录
  7. 287行: replicaof <masterip> <masterport> 改为:replicaof 192.168.21.22 6381 (从redis.conf配置才设置)
  8. 294行: # masterauth <master-password> 改为: masterauth o9bEuO6iDKrIhYkx slave节点设置master的密码,
  9. 507行: #requirepass 123456 改为: requirepass o9bEuO6iDKrIhYkx 设置访问时需要的密码

创建必要的目录和复制redis.conf配置文件

  1. 创建目录
mkdir -p /usr/local/redis-ms/{6381,6382,6383,script}
image.png
  1. 复制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

  1. 其实是表示允许通过哪个网卡过来访问Redis, 反过来说就是与那个网卡绑定.
  2. bind 127.0.0.1 意思是只允许本机才能访问Redis. 127.0.0.1是回环地址.使用ifconfig 查看
  3. bind 0.0.0.0 意思是任意网卡过来的请求都可以访问Redis.如果在生产上设置0.0.0.0则最好设置密码,否则在公网上都可以访问你的Redis. (当然啦, 防火墙必须放行redis端口)

protected-mode yes 保护模式.

  1. 开启protected-mode保护模式,需配置bind ip或者设置访问密码
  2. 关闭protected-mode模式,此时外部网络可以直接访问

port 端口号

  1. 对外提供服务时所用的端口号.
  2. 注意主从端口号不能一样.

daemonize 守护模式

  1. 开启 yes 则是守护模式,后台运行
  2. 关闭 no 则是非后台运行.

pidfile 存储PID的文件
当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件

replicaof 主从复制

  1. 添加master的ip与port
  2. 注意中间需要有空格.

masterauth master访问密码

  1. 必须是master设置了requirepass密码选项.才需要添加

requirepass 访问权限

  1. 设置访问时所需的密码.

制作systemctl启动,关闭,重启命令

主从集群涉及多个实例redis,如果手动启动,关闭非常麻烦,耗时,我们需要借用脚本来管理.

shell脚本写命令

  1. 创建redis-ms.sh文件
    touch /usr/local/redis-ms/script/redis-ms.sh
  2. 配置port_list变量列表
  3. 配置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命令

  1. 创建redis-ms.service文件
    touch /usr/lib/systemd/system/redis-ms.service
  2. 向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 操作

  1. 重加载systemctl
    systemctl daemon-reload
  2. 启动服务
    systemctl start redis-ms
  3. 停止服务
    systemctl start redis-ms
  4. 重启服务
    systemctl start redis-ms
  5. 加入开机启动服务
    systemctl enable redis-ms
  6. 检查是否加入开机启动啦?
    systemctl is-enabled redis-ms

参考:

  1. https://blog.csdn.net/cw_hello1/article/details/83444013
  2. https://www.runoob.com/redis/redis-install.html
  3. https://www.cnblogs.com/kingsonfu/p/10138647.html
  4. https://www.cnblogs.com/zxtceq/p/7676911.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,888评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,677评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,386评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,726评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,729评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,337评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,902评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,807评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,349评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,439评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,567评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,242评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,933评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,420评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,531评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,995评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,585评论 2 359