zoukankan      html  css  js  c++  java
  • Linux环境redis集群搭建

    集群后tomcat context.xml的配置

    <!-- 集群配置-->

    <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> 
    <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
    maxInactiveInterval="60"
    password="123456"
    sentinelMaster="mymaster"
    sentinels="192.168.1.249:7000,192.168.1.249:7001,192.168.1.249:7002,192.168.1.248:7003,192.168.1.248:7004,192.168.1.248:7005"/>

    原文:http://blog.csdn.net/yj327243832a/article/details/52785100

     参考了以下文章

     http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html

     http://www.linuxidc.com/Linux/2015-08/121845.htm

     https://my.oschina.net/guol/blog/506193

    必读:以下内容写的ip不一致是因为部分内容是从网页上复制来的,实际ip要改成自己的,如果集群的redis不在同一服务器上,则不要写127.0.0.1,要改成实际服务器的ip,不然集群时会连接不到其他机器的redis节点。

    改成真实ip后,则客户端连接都要写此ip,不能再写127.0.0.1。如果redis节点都在一台服务器上则可以写127.0.0.1

     (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)

    192.168.1.249:7000
    192.168.1.249:7001

    192.168.1.249:7002

    192.168.1.248:7003

    192.168.1.248:7004

    192.168.1.248:7005

    查看redis 

    ps -ef |grep redis

     杀死全部redis的节点:

    pkill -9 redis

    1.首先安装好一个redis实例,已安装好的此歩可不看

    、安装redis

    上传服务器,解压,编译

    tar -zxvf redis-3.2.1.tar.gz

    cd redis-3.2.1

    make

    2.可以在同目录下新建文件夹redis_cluster

     

    3.在redis_cluster文件夹下创建log文件夹,此路径后面会用在redis.conf logfile的配置中,便于统一存放日志

    4.在redis_cluster文件夹下创建各节点的文件夹名称,建议用端口号命名,如下图:

     

    5.将安装好的redis实例中的redis.conf分别copy至7000、7001、7002文件夹中,

    并修改如下内容

    port 7000

    cluster-config-file nodes-7000.conf

    dbfilename dump-7000.rdb

    logfile "/usr/local/redis_cluster/log/7000.log"

    bind 192.168.1.249

    appendonly yes

    daemonize yes

    cluster-enabled yes

    cluster-node-timeout 15000

    rename-command CONFIG ""

    我在192.168.1.248服务上也这样操作了一遍,将端口分配为7003、7004、7005。

    logfile "/usr/local/redis_cluster/log/"

    dir /usr/local/redis_cluster

    在redis_cluster目录下创建log文件夹

    在/usr/local/redis-3.2.4/src目录下,执行启动redis进程命令:
    ./redis-server /usr/local/redis_cluster/7000/redis.conf

    ./redis-server /usr/local/redis_cluster/7001/redis.conf

    ./redis-server /usr/local/redis_cluster/7002/redis.conf

    在192.168.1.248上也同样操作,在/usr/local/redis-3.2.4/src目录下:

    ./redis-server /usr/local/redis_cluster/7003/redis.conf

    ./redis-server /usr/local/redis_cluster/7004/redis.conf

    ./redis-server /usr/local/redis_cluster/7005/redis.conf

    bind要设置该服务器实际的ip,不要设置127.0.0.1,不然不同服务器直接集群会找不到其他集群的节点,如果是单台服务器可以配置为127.0.0.1

    执行集群创建命令,还是在/usr/local/redis-3.2.4/src目录下:

     ./redis-trib.rb create --replicas 1 192.168.1.249:7000 192.168.1.249:7001 127.0.0.1:7002 192.168.1.248:7003 192.168.1.248:7004 192.168.1.248:7005

    遇到执行集群创建时报错处理:

    /usr/bin/env: ruby: No such file or directory

    报错:/usr/bin/env: ruby: No such file or directory

    因为是执行的ruby的脚本,需要ruby的环境

    安装ruby环境

    [root@apec-001 src]# yum install ruby

    再次执行创建集群命令

    [root@apec-001 src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

    /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

            from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

            from ./redis-trib.rb:25:in `<main>'

    报错cannot load such file -- redis (LoadError)...

    缺少rubygems组件,使用yum安装

    [root@apec-001 src]# yum install rubygems

    再次执行创建集群命令

    [root@apec-001 src]# ./redis-trib.rb create --replicas 1 192.168.1.249:7000 192.168.1.249:7001 127.0.0.1:7002 192.168.1.248:7003 192.168.1.248:7004 192.168.1.248:7005

    /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

            from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

            from ./redis-trib.rb:25:in `<main>'

    缺少redis和ruby的接口,使用gem 安装

    gem install redis

    再次执行创建集群命令后,根据提示输入yes后集群创建成功

    [root@apec-001 src]# ./redis-trib.rb create --replicas 1 192.168.8.21:7000 192.168.8.21:7001 192.168.8.21:7002 192.168.8.21:7003 192.168.8.21:7004 192.168.8.21:7005

    6、测试

    使用redis-cli命令进入集群环境

    ./redis-cli -c -p 7000(此命令只能连接到bind为127.0.0.1)

     

     ./redis-cli -c -h 192.168.1.249 -p 7000   (这个命令可以指定连接到哪个服务器上的redis节点)

    如果redis设置密码的话,操作前需要输入auth 密码

     

    集群情况检查

    在/usr/local/redis-3.2.4/src目录下执行(设置密码后不能直接执行此命令了,需要先

    执行 ./redis-cli -c -h 192.168.1.248 -p 7003  再auth 密码  再执行cluster nodes

     ./redis-cli -c -h 192.168.1.248 -p 7003  cluster nodes

     

    或者
    ./redis-trib.rb check 192.168.1.248:7003

    端口号根据实际的来

    效果:

     

    查看集群目前状况:

    在/usr/local/redis-3.2.4/src目录下执行

     -h可以指定ip,bind为ip的必须输入-h ip

    ./redis-cli -c -p 7000(这个只能连接bind为127.0.0.1的)

    ./redis-cli -h 192.168.1.249 -c -p 7000

    连接成功后输入cluster info

    下图的示例是我加入密码后的,如果没有设置密码是不会要求输入密码的.

     

    测试存值取值:

    (下面是别人测试的,所以ip和我的不同)

     示例说明了redis会自动跳转到key所在的节点服务器与端口上。

    127.0.0.1:7000> set foo bar

    -> Redirected to slot [12182] located at 127.0.0.1:7002

    OK

    127.0.0.1:7002> set hello world

    -> Redirected to slot [866] located at 127.0.0.1:7000

    OK

    127.0.0.1:7000> get foo

    -> Redirected to slot [12182] located at 127.0.0.1:7002

    "bar"

    127.0.0.1:7000> get hello

    -> Redirected to slot [866] located at 127.0.0.1:7000

    "world"

    下图是我测试的,可能是因为6个加点都加了密码,所以跳了好几个节点都输入了密码才保存成功的

     

    随便打开一个 节点的nodes.conf文件内容

     

    6739eece298760a2ee4f81a70e1ae9c2401234e2 192.168.1.248:7005 master - 0 1476758650335 7 connected 6827-10922

    4f656a887b12a03e1c64f7585e77556ed06a988d 192.168.1.249:7000 myself,slave 6739eece298760a2ee4f81a70e1ae9c2401234e2 0 0 1 connected

    3fa0a3ff79be99c45fa378572a3e5f2ecf8ab520 192.168.1.249:7002 slave ec9fb7461190a04155ad36846aa955c184d8e991 0 1476758648188 5 connected

    e35f421a07ab04481ccd41e8c38a2b1e0a85afa9 192.168.1.249:7001 slave c7342df9eb32f0d58b1251e53ca716f85836fa26 0 1476758650230 9 connected

    c7342df9eb32f0d58b1251e53ca716f85836fa26 192.168.1.248:7003 master - 0 1476758649212 9 connected 0-6826 10923-12287

    ec9fb7461190a04155ad36846aa955c184d8e991 192.168.1.248:7004 master - 0 1476758647268 5 connected 12288-16383

    vars currentEpoch 9 lastVoteEpoch 0

     集群时密码设置

    方法1.集群前设置密码

    需要修改gem的redis工具下的一个文件,我这里是默认安装,路径如下:/usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb ,修改内容如下:

     

    方法2.集群后设置密码

    对每一个节点的redis.conf修改 requirepass 123456

     然后重启即可

    我是用的方法2

  • 相关阅读:
    idea 工具 听课笔记 首页
    桌面粉笔功能.有window ink功能区开启的快捷键
    原创: idea 的maven 方式配置 开发javaWeb(idea+tomcat +maven
    Post方式 前后端分离开发postman工具首次使用心得及注意事项
    c:forEach用法
    数据结构——并查集
    PTA高精度除法
    区块链(了解)
    数据结构-堆排
    数据结构-造树计划-最小生成树
  • 原文地址:https://www.cnblogs.com/shihaiming/p/5950250.html
Copyright © 2011-2022 走看看