• phpredisadmin工具
  • rdbtools管理工具
  • saltstack管理redis
  • 通过codis完成redis管理

 

一:phpredisadmin工具:类似于mysqladmin管理mysql一样

安装环境:

[root@node5 ~]# yum install httpd php php-redis -y

下载管理包:

[root@node5 html]# git clone https://github.com/erikdubbelboer/phpRedisAdmin.git

更改名称并解决依赖:

[root@node5 html]# mv phpRedisAdmin admin
[root@node5 html]# cd admin
[root@node5 admin]# git clone https://github.com/nrk/predis.git vendor #解决依赖包

 

启动http,启动前确认80端口没有被占用,如果被占用可以修改监听的默认端口为80以为的其他端口:

[root@node5 html]# /etc/init.d/httpd  restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]
[root@node5 html]# chkconfig  httpd on

访问http://ServerIP/admin:

redis的管理工具

报错,无法打开,查看apache错误日志如下:

[Mon Mar 21 21:24:47 2016] [error] [client 192.168.10.1] PHP Fatal error:  require(): Failed opening required '/var/www/html/admin/includes/../vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/admin/includes/common.inc.php on line 2

解决过程:

[root@node5 admin]# cd includes/
[root@node5 includes]# ls config.sample.inc.php  config.inc.php 
[root@node5 includes]# vim config.inc.php 
$config = array(
  'servers' => array(
    array(
      'name'   => 'local server', // Optional name.
      'host'   => '192.168.10.205', #配置为自己的主机IP
      'port'   => 6379,
      'filter' => '*',

      // Optional Redis authentication.
      //'auth' => 'redispasswordhere' // Warning: The password is sent in plain-text to the Redis server.
    ),  

保存退出后重新启动httpd:

  [root@node5 includes]# /etc/init.d/httpd restart
   Stopping httpd: [ OK ]
   Starting httpd: [ OK ]

 

再次测试还是不能访问,报错如下:

[Mon Mar 21 21:55:27 2016] [error] [client 192.168.10.1] PHP Fatal error:  Call to undefined function mb_internal_encoding() in /var/www/html/admin/includes/common.inc.php on line 59

解决办法:

[root@node5 admin]# vim /var/www/html/admin/includes/common.inc.php
mb_internal_encoding('utf-8'); 
将此行改为注释,如下:
#mb_internal_encoding('utf-8'); 

访问:

redis的管理工具

 

配置管理多个reids Server:

[root@node5 includes]# pwd
/var/www/html/admin/includes
[root@node5 includes]# vim config.inc.php

$config = array(
  'servers' => array(
    array(
      'name'   => '182.168.10.205', // Optional name.
      'host'   => '192.168.10.205',
      'port'   => 6379,
      'filter' => '*',

      // Optional Redis authentication.
      //'auth' => 'redispasswordhere' // Warning: The password is sent in plain-text to the Redis server.
    ),  

    array(  #一个主机一个配置,名称自定义,IP和端口是Redis的IP和端口
      'name'   => '7001', // Optional name.name支持中文
      'host'   => '192.168.10.205',
      'port'   => 7001, 
    ),  

    array(
      'name'   => '7002', // Optional name.
      'host'   => '192.168.10.205',
      'port'   => 7002, 
    ),  

    array(
      'name'   => '7003', // Optional name.
      'host'   => '192.168.10.205',
      'port'   => 7003, 
    ),  

更改完成以后无需重启apache,如果浏览器已经打开管理地址,刷新一下即可:

redis的管理工具

 

 

二:rdbtools管理工具:

使用pip命令安装,如果没有pip命令则先安装pip:

[root@node5 ~]# yum install python-pip

使用pip安装rdbtools: pip install rdbtools

[root@node5 ~]# pip install rdbtools
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
You are using pip version 7.1.0, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting rdbtools
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading rdbtools-0.1.6.tar.gz
Installing collected packages: rdbtools
  Running setup.py install for rdbtools
Successfully installed rdbtools-0.1.6

导出rdb中的key信息:

[root@node5 7001]# rdb -c memory dump_7001.rdb  >  memory.csv #然后将memory.csv文件下载到本地,即可用excel打开分析了,格式如下图:

redis的管理工具

 

三:通过saltstack管理redis:

模块名称:redismod

官方文档地址:https://docs.saltstack.com/en/latest/ref/modules/all/index.html 

 

 

四:通过codis完成redis管理:

1.codis简介:

  Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.其架构如下:

redis的管理工具

Codis 由四部分组成:

  • Codis Proxy (codis-proxy) #负责对redis server 的代理,可以在前端使用haproxy做负载均衡,负责调度redis-client的请求。
  • Codis Dashboard (codis-config) #codis的管理工具,可以添加删除redis节点,发起数据迁移,还自带一个http server,提供一个dashboard可以在浏览器进行观察和配置。
  • Codis Redis (codis-server) #基于redis 2.8做了一个分支,只能运行codis-server
  • ZooKeeper/Etcd #Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.

codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的 Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.

codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.

 2.准备基础环境:

安装go语言并设置环境变量:

[root@node5 opt]# yum install golang -y #codis是基于go语言编写的,因此要安装go语言环境
[root@node5 opt]# mkdir /opt/gopath #保存go环境的路径
[root@node5 opt]# vim /etc/profile
    export GOPATH=/opt/gopath
[root@node5 opt]# source  /etc/profile

安装配置zookeeper,需要有java环境:

[root@node5 ~]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[root@node5 ~]# mv zookeeper-3.4.6 /usr/local/zookeeper  #移动到目录
[root@node5 ~]# cd /usr/local/zookeeper/conf/   #进入到目录
[root@node5 conf]# cp zoo_sample.cfg  /opt/zoo.cfg  #复制配置文件
[root@node5 conf]# cd /opt/
[root@node5 opt]# mkdir zk1 zk2 zk3 #准备zookeeper 服务ID,每个服务器的ID是不同的
[root@node5 opt]# echo 1 > zk1/myid
[root@node5 opt]# echo 2 > zk2/myid
[root@node5 opt]# echo 3 > zk3/myid
[root@node5 opt]# vim zoo.cfg #编辑配置文件
  dataDir=/opt/zk1 #保存数据的命令
  clientPort=2181 #客户端连接的端口
  server.1 = 192.168.10.205:2887:3887 
  server.2 = 192.168.10.205:2888:3888
  server.3 = 192.168.10.205:2889:3889

[root@node5 opt]# cp zoo.cfg zk1/zk1.cfg
[root@node5 opt]# cp zoo.cfg zk2/zk2.cfg
[root@node5 opt]# cp zoo.cfg zk3/zk3.cfg

[root@node5 opt]# vim zk2/zk2.cfg #每个服务对应不同的目录
  dataDir=/opt/zk2
  clientPort=2182 [root@node5 opt]
# vim zk3/zk3.cfg   dataDir=/opt/zk3
  clientPort=2183

详细配置:

[root@node5 opt]# grep '^[a-z]' zk3/zk3.cfg 
tickTime=2000 #服务器和客户端的心跳维持间隔,间隔多久发送心跳
initLimit=10 #选举的时候的时间间隔是10次,10次 * 2000微秒
syncLimit=5 # Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度
dataDir=/opt/zk3 #数据保存目录
clientPort=2181 #客户端连接的端口
server.1 = 192.168.10.205:2887:3887 #集群端口和ID配置
server.2 = 192.168.10.205:2888:3888
server.3 = 192.168.10.205:2889:3889

详细解释:
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

 启动每个zookeeper 服务:

[root@node5 opt]# /usr/local/zookeeper/bin/zkServer.sh  start  /opt/zk1/zk1.cfg 
JMX enabled by default
Using config: /opt/zk1/zk1.cfg
Starting zookeeper ... STARTED
[root@node5 opt]# /usr/local/zookeeper/bin/zkServer.sh  start  /opt/zk2/zk2.cfg 
JMX enabled by default
Using config: /opt/zk2/zk2.cfg
Starting zookeeper ... STARTED
[root@node5 opt]# /usr/local/zookeeper/bin/zkServer.sh  start  /opt/zk3/zk3.cfg 
JMX enabled by default
Using config: /opt/zk3/zk3.cfg
Starting zookeeper ... STARTED

 确认端口启动成功:

[root@node5 opt]# ss -tnl | grep 2181
LISTEN     0      50                       :::2181                    :::*     
[root@node5 opt]# ss -tnl | grep 2182
LISTEN     0      50                       :::2182                    :::*     
[root@node5 opt]# ss -tnl | grep 2183
LISTEN     0      50                       :::2183                    :::*     
[root@node5 opt]# 

查看每个节点的状态:

[root@node5 opt]# /usr/local/zookeeper/bin/zkServer.sh  status /opt/zk1/zk1.cfg 
JMX enabled by default
Using config: /opt/zk1/zk1.cfg
Mode: follower
[root@node5 opt]# /usr/local/zookeeper/bin/zkServer.sh  status /opt/zk2/zk2.cfg 
JMX enabled by default
Using config: /opt/zk2/zk2.cfg
Mode: leader  #这是主的,另外两个是从的,表示已经启动完成
[root@node5 opt]# /usr/local/zookeeper/bin/zkServer.sh  status /opt/zk3/zk3.cfg 
JMX enabled by default
Using config: /opt/zk3/zk3.cfg
Mode: follower

连接到zookeeper节点:

[root@node5 opt]# /usr/local/zookeeper/bin/zkCli.sh  -server  192.168.10.205:2181
[root@node5 opt]# /usr/local/zookeeper/bin/zkCli.sh  -server  192.168.10.205:2181Connecting to 192.168.10.205:2181
2016-03-22 01:27:48,325 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
2016-03-22 01:27:48,331 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=node5.a.com
2016-03-22 01:27:48,332 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_45
2016-03-22 01:27:48,334 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-03-22 01:27:48,334 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre
2016-03-22 01:27:48,334 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/usr/local/zookeeper/bin/../build/classes:/usr/local/zookeeper/bin/../build/lib/*.jar:/usr/local/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/usr/local/zookeeper/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/bin/../zookeeper-3.4.6.jar:/usr/local/zookeeper/bin/../src/java/lib/*.jar:/usr/local/zookeeper/bin/../conf:
2016-03-22 01:27:48,334 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.32-431.el6.x86_64
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2016-03-22 01:27:48,335 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2016-03-22 01:27:48,336 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/opt
2016-03-22 01:27:48,337 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.10.205:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@6ade299f
Welcome to ZooKeeper!
2016-03-22 01:27:48,393 [myid:] - INFO  [main-SendThread(192.168.10.205:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.10.205/192.168.10.205:2181. Will not attempt to authenticate using SASL (unknown error)
2016-03-22 01:27:48,424 [myid:] - INFO  [main-SendThread(192.168.10.205:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.10.205/192.168.10.205:2181, initiating session
JLine support is enabled
2016-03-22 01:27:48,621 [myid:] - INFO  [main-SendThread(192.168.10.205:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.10.205/192.168.10.205:2181, sessionid = 0x1539a349fc40000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
连接时的初始化信息

相关文章:

  • 2021-06-21
  • 2021-05-17
  • 2022-01-11
  • 2021-12-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-16
  • 2022-01-18
  • 2021-09-10
  • 2022-12-23
  • 2022-01-26
  • 2021-04-16
  • 2022-01-19
相关资源
相似解决方案