• 多台虚机redis cluster集群


    用到的安装包

    https://pan.baidu.com/s/1wwLm3C7oWcM9ptwMjRltGA

    提取码:vdfp

    系统环境:centos7

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    1.虚拟机配置网络

    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    修改
    BOOTPROTO=static
    ONBOOT=yes
    增加
    IPADDR=192.168.10.101
    PREFIX=24
    GATEWAY=192.168.10.2
    DNS1=10.8.1.10

      重启服务

    systemctl restart network.service

    2.安装gcc,安装ruby需要

    yum -y install gcc gcc-c++

    3.安装redis

    tar -zxf redis-4.0.1.tar.gz
    cd /usr/local/src/redis-4.0.1

      安装两个redis,MALLOC=libc解决jemalloc 重载了Linux下的 ANSIC 的 malloc 和 free 函数问题

    make PREFIX=/usr/local/bin/redis/redis1 install
    make PREFIX=/usr/local/bin/redis/redis2 install

      安装目录的redis.conf拷到redis1下并修改redis.conf文件参数

    cp redis.conf /usr/local/bin/redis/redis1
    cd /usr/local/bin/redis/redis1
    vi redis.conf
    ##########################################
    bind 192.168.10.101       	   // 绑定机器的机器IP,不用127.0.0.1,否则创建集群可能失败
    port 7001                           // 修改成对应的端口号
    daemonize yes                       // 后台运行
    pidfile /var/run/redis_7001.pid     // pid文件
    logfile "./redis.log"               // 日志
    appendonly yes                      // 开启 aop 备份
    appendfsync always                  // 每写一条 备份 一次
    cluster-enabled yes                 // 开启 Redis Cluster 
    cluster-config-file nodes-7001.conf // 记录集群信息,不用手动维护,Redis Cluster 会自动维护
    cluster-node-timeout 15000          // Cluster 超时时间 节点宕机发现时间,可以理解为主节点宕机后从节点升级为主节点时间
    cluster-require-full-coverage no    // 只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
    ##########################################

      copy一份上边修改好的conf到redis2,然后快速修改配置文件的参数例

    cp redis.conf /usr/local/bin/redis/redis2
    sed -i 's/7001/8001/g' /usr/local/bin/redis/redis2/redis.conf

      如果拷到其他机器上配置除了修改端口也注意修改下conf的绑定ip,例

    sed -i 's/192.168.10.101/192.168.10.102/g' /usr/local/redis/redis1/redis.conf

      redis目录下启动redis脚本

    vi startup.sh

    cd /usr/local/bin/redis/redis1/bin/
    ./redis-server ../redis.conf
    cd
    cd /usr/local/bin/redis/redis2/bin/
    ./redis-server ../redis.conf
    cd

      关闭脚本

    vi shutdown.sh
    cd /usr/local/bin/redis/redis1/bin/
    ./redis-cli -h 192.168.10.101 -p 7001 shutdown
    ./redis-cli -h 192.168.10.101 -p 8001 shutdown
    ./redis-cli -h 192.168.10.102 -p 7002 shutdown
    ./redis-cli -h 192.168.10.102 -p 8002 shutdown
    ./redis-cli -h 192.168.10.103 -p 7003 shutdown
    ./redis-cli -h 192.168.10.103 -p 8003 shutdown

      删除备份脚本

    vi remove.sh

    cd /usr/local/bin/redis/redis1/bin/
    rm appendonly.aof dump.rdb nodes-*.conf redis.log
    cd /usr/local/bin/redis/redis2/bin/
    rm appendonly.aof dump.rdb nodes-*.conf redis.log

      授权脚本执行权限

    chmod +x startup.sh
    chmod +x shutdown.sh
    chmod +x remove.sh

      启动redis

    sh startup.sh

      查看是否启动

    ps aux|grep redis

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ///////////////////////////////////////////////////////////
    // 以下用于redis集群的工具只在一台机器上安装就可以了 //
    ///////////////////////////////////////////////////////////

    4.安装ruby

    cd /usr/local/src
    tar -zxf ruby-2.6.3.tar.gz
    cd /usr/local/src/ruby-2.6.3
    ./configure --prefix=/usr/local/bin/ruby
    make && make install

      解决-bash: ruby: command not found问题

    ln -s /usr/local/bin/ruby/bin/ruby /usr/bin/ruby

    5.安装zlib

    tar -zxf zlib-1.2.11.tar.gz
    cd /usr/local/src/zlib-1.2.11
    ./configure --prefix=/usr/local/bin/zlib
    make && make install

      集成到ruby

    cd /usr/local/src/ruby-2.6.3/ext/zlib
    ruby ./extconf.rb --with-zlib-dir=/usr/local/bin/zlib
    有的版本里边没有top_srcdir,make报错
    vi Makefile
    增加top_srcdir=../..
    make && make install

    6.安装perl,安装openssl需要

    tar -zxf perl-5.10.0.tar.gz
    cd /usr/local/src/perl-5.10.0
    ./configure.gnu --prefix=/usr/local/bin/perl
    make && make install

    7.安装openssl

    tar -zxf openssl-1.1.0k.tar.gz
    cd /usr/local/src/openssl-1.1.0k
    ./config --prefix=/usr/local/bin/openssl
    make && make install

      设置openssl软链接,不然不能用openssl version

    ln -s /usr/local/bin/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    ln -s /usr/local/bin/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

      集成到ruby

    cd /usr/local/src/ruby-2.6.3/ext/openssl
    ruby ./extconf.rb --with-openssl-dir=/usr/local/bin/openssl
    vi Makefile
    增加top_srcdir=../..
    make && make install

    8.安装rubygems

    tar -zxf rubygems-3.0.6.tgz
    cd /usr/local/src/rubygems-3.0.6
    ruby setup.rb --prefix=/usr/local/bin/rubygems

      配置rubygems环境变量

    vi /etc/profile
    export RUBYGEMS_PATH=/usr/local/bin/rubygems
    export PATH=$RUBYGEMS_PATH/bin:$PATH
    source /etc/profile

    9.创建集群

    gem install redis-4.0.1.gem
    gem list --local
    cd /usr/local/src/redis-4.0.1/src
    ./redis-trib.rb create --replicas 1 192.168.10.101:7001 192.168.10.101:8001 192.168.10.102:7002 192.168.10.102:8002 192.168.10.103:7003 192.168.10.103:8003

    如果执行不通,可以telnet试试,可能防火墙有拦截,需要开通端口号或者关闭防火墙。
    开通端口【后边的17xxx和18xxx端口是在配置的redis端口+10000得到的,是集群总线端口,具体信息请查文档】
    101机器 7001 8001 17001 18001
    102机器 7002 8002 17002 18002
    103机器 7003 8003 17003 18003

      首先安装iptables服务

    关闭防火墙
    systemctl stop firewalld.service
    禁止开机启动
    systemctl disable firewalld.service
    安装iptables服务
    yum install iptables-services

      添加完服务后添加规则

    101机器

    iptables -N REDIS
    iptables -A REDIS -s 192.168.10.101 -j ACCEPT
    iptables -A REDIS -s 192.168.10.102 -j ACCEPT
    iptables -A REDIS -s 192.168.10.103 -j ACCEPT
    iptables -A REDIS -j LOG --log-prefix "unauth-redis-access"
    iptables -A REDIS -j REJECT --reject-with icmp-port-unreachable
    iptables -I INPUT -p tcp --dport 7001 -j REDIS
    iptables -I INPUT -p tcp --dport 8001 -j REDIS
    iptables -I INPUT -p tcp --dport 17001 -j REDIS
    iptables -I INPUT -p tcp --dport 18001 -j REDIS
    iptables -I OUTPUT -p tcp --sport 7001 -j REDIS
    iptables -I OUTPUT -p tcp --sport 8001 -j REDIS
    iptables -I OUTPUT -p tcp --sport 17001 -j REDIS
    iptables -I OUTPUT -p tcp --sport 18001 -j REDIS

    102机器

    iptables -N REDIS
    iptables -A REDIS -s 192.168.10.101 -j ACCEPT
    iptables -A REDIS -s 192.168.10.102 -j ACCEPT
    iptables -A REDIS -s 192.168.10.103 -j ACCEPT
    iptables -A REDIS -j LOG --log-prefix "unauth-redis-access"
    iptables -A REDIS -j REJECT --reject-with icmp-port-unreachable
    iptables -I INPUT -p tcp --dport 7002 -j REDIS
    iptables -I INPUT -p tcp --dport 8002 -j REDIS
    iptables -I INPUT -p tcp --dport 17002 -j REDIS
    iptables -I INPUT -p tcp --dport 18002 -j REDIS
    iptables -I OUTPUT -p tcp --sport 7002 -j REDIS
    iptables -I OUTPUT -p tcp --sport 8002 -j REDIS
    iptables -I OUTPUT -p tcp --sport 17002 -j REDIS
    iptables -I OUTPUT -p tcp --sport 18002 -j REDIS

    103机器

    iptables -N REDIS
    iptables -A REDIS -s 192.168.10.101 -j ACCEPT
    iptables -A REDIS -s 192.168.10.102 -j ACCEPT
    iptables -A REDIS -s 192.168.10.103 -j ACCEPT
    iptables -A REDIS -j LOG --log-prefix "unauth-redis-access"
    iptables -A REDIS -j REJECT --reject-with icmp-port-unreachable
    iptables -I INPUT -p tcp --dport 7003 -j REDIS
    iptables -I INPUT -p tcp --dport 8003 -j REDIS
    iptables -I INPUT -p tcp --dport 17003 -j REDIS
    iptables -I INPUT -p tcp --dport 18003 -j REDIS
    iptables -I OUTPUT -p tcp --sport 7003 -j REDIS
    iptables -I OUTPUT -p tcp --sport 8003 -j REDIS
    iptables -I OUTPUT -p tcp --sport 17003 -j REDIS
    iptables -I OUTPUT -p tcp --sport 18003 -j REDIS

      保存放行规则防止重启失效,每台虚机添加规则后即执行

    保存放行规则防止重启失效,/etc/sysconfig/iptables
    service iptables save
    重启防火墙使配置生效
    systemctl restart iptables.service
    设置防火墙开机启动
    systemctl enable iptables.service
    关闭防火墙
    systemctl stop iptables.service
    打开防火墙
    systemctl start iptables.service

    10.虚机之间设置ssh免密访问

      修改机器名,分别操作

    vi /etc/sysconfig/network
    增加
    NETWORKING=yes
    HOSTNAME=server101

      修改hosts

    vi /etc/hosts
    增加
    192.168.10.101 server101
    192.168.10.102 server102
    192.168.10.103 server103

      几台机器分别生成密钥对

    ssh-keygen -t rsa
    cd /root/.ssh下查看
    生成了
    ~/.ssh/id_rsa.pub
    ~/.ssh/id_rsa

      把公钥发送给对方

    scp /root/.ssh/id_rsa.pub root@server102:/root/.ssh/pub101

      然后对方机器上操作,将公钥内容加入到授权列表

    cat pub101 >>authorized_keys

      授权

    chmod 700 .ssh
    chmod 600 .ssh/authorized_keys

     11.启动所有redis脚本,需要机器之间建立ssh免密登录设置

    vi startall.sh
    ==============================================
    #!/bin/sh
    SHELLL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    
    ssh root@server101 "bash" </usr/local/bin/redis/startup.sh
    ssh root@server102 "bash" </usr/local/bin/redis/startup.sh
    ssh root@server103 "bash" </usr/local/bin/redis/startup.sh

       删除所有备份,就把startall.sh中的最后startup.sh换成remove.sh即可

    vi removeall.sh
    ==============================================
    #!/bin/sh
    SHELLL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    
    ssh root@server101 "bash" </usr/local/bin/redis/remove.sh
    ssh root@server102 "bash" </usr/local/bin/redis/remove.sh
    ssh root@server103 "bash" </usr/local/bin/redis/remove.sh

      

  • 相关阅读:
    查询计划Hash和查询Hash
    执行计划的重用
    执行计划组件、组件、老化
    执行计划的生成
    查询反模式
    T-SQL 公用表表达式(CTE)
    SQL 操作结果集 -并集、差集、交集、结果集排序
    SQL语句
    POJ 1821 单调队列+dp
    区间gcd问题 HDU 5869 离线+树状数组
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/11416773.html
Copyright © 2020-2023  润新知