amoeba读写分离测试 / redis数据库

创建amoeba服务管理脚本

vim  /etc/rc.d/init.d/amoeba
添加:

#!/bin/bash
#chkconfig: 35 85 21
case $1 in
start)
    /usr/local/amoeba/bin/amoeba start & 
    if [ $? -eq 0 ];then
        echo "amoeba服务已启动"
    else
        echo "amoeba服务无法启动"
    fi
    ;;
stop)
    /usr/local/amoeba/bin/amoeba stop  &> /dev/null
    ;;
restart)
    $0 stop
    $0 start
    ;;
*)
    echo "start | stop | restart"
    ;;
esac

2、客户端访问

mysql -u li4 -p123.com -h 192.168.10.5 -P 8066


3、给所有的mysql节点服务器授权

MariaDB [(none)]>  grant all on *.* to 'zhang3'@'192.168.10.5' identified by '123.com';

4、访问测试

在slave1服务器上添加数据

insert into biao1 values (10,'slave1');

在slave2服务器上添加数据

insert into biao1 values (20,'slave2');

在客户端上查询


5、配置LAMP,使httpd服务器连接访问amoeba

vim /myweb/guiguedu/index.php
添加:
<?php
$link=mysql_connect('192.168.10.5:8066','root','123.com');                
if($link) echo "恭喜你,guiguedu的数据库连接成功啦!!";                   
?>

1、非关系型数据库

1.常用的关系型数据库

是一种结构化的数据库,主要建立库表结构,建立在关系型模型上,一般面向与记录。

mysql   sqlserver   oracle   db2

2.非关系型数据库  NOT  ONLY  SQL

面向对象应用的数据库,针对某个行业或者某种类型的数据存储。在应用中解决大数据的读写问题。

High performance——对数据库高并发读写需求

百度的搜索信息记录  个人身份信息,

Huge Storage——对海量数据高效存储与访问需求

抖音视频,微博类,评价类,购物网站

High Scalability && High Availability——对数据库高可扩展性与高可用性需求

对特殊行业的需求,进行数据库结构的更改或扩展功能。

3.非关系型数据库的分类

Column-Oriented:   面向检索的列式存储,主要用于提供高速的分类查询。对同类数据,或指定时间范围的数据进行分类索引。银行的账单,评价类,微博微信等信息类。

Key-Value   面向高性能并发读写的缓存存储,提供高速读写,也可以作为关系型数据库的缓存服务器使用。

Document-Oriented  面向海量数据访问的文档存储,能够快速,有效的存储文件类数据,视频类,图片类,云空间类。


4.常用的非关系型数据库

Hbase  :是面向检索的列式存储。

redis  :是一个key-value存储系统,提供高并发的数据读写,与数据缓存。

mongodbd :用于分布式存储文件的数据库。

Neo4j?:是一种特殊的图形化数据库,用于建立数据关系,朋友圈类


2、redis的安装部署

redis的工作特性:

redis会将所有的数据放入内存中进行读写处理,所有读写速度非常快,也支持内存到硬盘的数据回写处理,保证在系统重启或故障时,数据不会丢失。


1.解压redis软件

tar -zxvf redis-3.2.9.tar.gz -C /usr/src
cd /usr/src/redis-3.2.9

2.编译安装

make  && make  install

3.初始化redis

cd /usr/src/redis-3.2.9/utils
./install_server.sh

4.服务脚本优化

[root@localhost utils]# chkconfig --add redis_6379
[root@localhost utils]# chkconfig redis_6379 on


3、修改配置文件

[root@localhost ~]# vim /etc/redis/6379.conf 
修改:
bind 192.168.10.2    #监听地址
port 6379        #监听端口号,如果需要一台服务器启动多个redis进程时,需要修改。
daemonize yes        #redis的守护进程,防止redis在后台被系统自动关闭。
pidfile /var/run/redis_6379.pid    #进程ID号管理文件
logfile /var/log/redis_6379.log       #日志文件


4、重启两次服务

 systemctl restart redis_6379

5、redis的基本操作

[root@localhost ~]# redis-cli -h 192.168.10.2
192.168.10.2:6379> ping        #测试redis服务是否启动,一般用于测试远程服务器的redis状态。

192.168.10.2:6379> info        #显示redis服务器的相关信息,包括redis信息,系统信息,客户端访问量,内存使用信息,CPU使用信息,进程状态,群集状态等。

192.168.10.2:6379> help @list    #查看@list组中的命令帮助

192.168.10.2:6379> help @string  #查看@string组中的命令帮助

192.168.10.2:6379> quit        #退出redis数据库管理器

1、redis性能测试工具

redis-benchmark:redis自带的测试工具,用于测试网络环境,服务器的硬件运行环境。通过发送大量的并发请求,统计测试结果。

-h:指定主机名
-p:端口号
-s:服务器socket
-c:并发连接数
-n:请求数
-d:数据大小,单位字节
-k:保持会话或重置会话  1=keepalive  0=reconnect
-r:SET/GET/INCR 使用随机key
-P:同过管道传输<numreq>请求
-q:强制退出redis
--csv:以CSV格式输出
-l:生成循环,永久执行测试
 -t:仅运行以逗号分隔的测试命令列表
-I:Idle模式。仅打开N个idle连接并等待


测试1:给指定的服务器发送100个并发链接,1000访问请求,不显示过程,只显示统计结果。

redis-benchmark -h 192.168.10.2 -p 6379 -c 1000 -n 10000 -q

获得的结果会受到计算机硬件的影响,如CPU性能,内存大小,硬盘读取速度等,也会受到网络传输的影响。

测试2:测试指定服务器,存取100B大小的数据包的性能

redis-benchmark -h 192.168.10.2 -p 6379 -d 100 -q

测试3:对服务器测试指定操作的性能

redis-benchmark -h 192.168.10.2 -p 6379 -t set,lpush -n 1000 -q


2、mysql性能测试

mysqlslap -uroot -p123.com -a --concurrency=100 --number-of-queries=3000 -i 3 --number-char-cols=4 --number-int-cols=4 --engine=innodb --auto-generate-sql-load-type=write

redis的基本操作命令

登录redis:
redis-cli -h 192.168.10.2 -p 6379

在redis中,一个数据库中一张默认的表,表中只有两个字段,key 和 value,库之间没有依赖关系。

1.set    添加数据,如果有同名key的数据,则会覆盖此数据。

格式:
set  键名   值

例:
set  k1  zhang1

2.get     查看指定键名的数据值
格式:
get  键名

例:
get  k1

3.mset   添加多行数据,如果添加的数据值有key重名,则会覆盖之前的数据。

格式:
mset  键名1  值1  键名2  值2  键名3  值3  ......

例:
mset k2  zhang2  k3  zhang3  k1  zhang1  k4  liu2

4.setnx  添加数据,但是不覆盖重名key的数据。如果添加成功,则提示信息为1,如果失败则提示0。

格式:
setnx  键名   值

例:
setnx  k1  zhang1

5.msetnx  添加多行数据,但不覆盖重名key的数据。一旦添加数据出错,则整个命令被中断,其他记录不会被添加。

格式:
msetnx  键名1   值1  键名2  值2 ....

例:
msetnx  k6  zhang1  k7 aaa 


6. keys   查看key列表

keys *   查看key列表中的所有键名。

7.setex   添加具有生存时间的数据,超过生存时间后,数据会被自动清除。覆盖重名key的数据。

格式:
setex  键名  生存时间  值  

例:
setex  2020  10  aaaaaaaaaaa

8.mget  查看多个数据记录

格式:
mget  键名1  键名2  键名3  。。。。。

例:
mget  k1  k2 k3 k4


9.keys 命令的其他格式

keys  k*    查看以k开头的键名
keys  *1    查看以1结尾的键名
keys  2020*2  查看以2020开头,以2结尾的键名

1、exists   返回指定的键名是否存在,如果存在返回数值1,不存在返回数值0。一般在程序中进行键名判断时使用此命令。

exists  k1

2、del  删除指定的键

del  键名

例:

del k2

del k3 k4 k5

3、type  查看指定键值的类型

type  键名

4、rename  修改键名,修改键名不会覆盖内容。如果目标键名已存在,则会覆盖目标键值。

rename  旧键名  新键名

例:
rename 202020522  20200522

5、renamenx 修改键名,如果目标键名存在,则不覆盖目标键值。

renamenx  旧键名  新键名

6、dbsize   统计当前数据库中的key数

dbsize

7、select   切换数据库

redis默认数据库ID号为0,切换数据库时,使用select  数据库ID号。redis最大16个数据库,ID号到15。

select  1

8、move  移动数据到其他数据库,可以在不同库之间相互移动数据。

move  键名   数据库ID号

move k2 1


9、flushdb    清除当前数据库中的数据记录

flushdb

10、flushall    清除所有数据库中的数据记录

flushall

注意:flushdb和flushall命令只能在redis服务器做缓存时使用,千万不要在存储实体数据时使用。

11、incr     增加数值

incr能够对指定键中的数值+1 ,返回增加后的结果。如果值为字符串,则报错,如果键名不存在,则默认创建键名,数值从0开始累加1

incr  键名

incr k2

12、incrby  指定增加数值量

incrby  键名  指定增加的值

incrby k2 10

13、decr    减少数值

decr能够对指定键中的数值-1,返回较少后的结果。如果键名不存在,则默认从0开始-1。

decr  键名

14、decrby   减少指定的数量

decrby  键名  指定减少的数值

decrby  k2  20


15、hmset   添加数据类型为hash的键值,使用哈希hash值的算法,将多个值写入到一个键名中。


hmset  键名  field1  值1  field2  值2 ....

hmset  name  field1 zhang1  field2  zhang2  

16、hget   查看hash类型的键值,查看hmset添加的键值数据。

hget  键名  field1


17、list(列表)  有序列表,在同一个键名中,添加多个值,并按顺序排序。

添加数据:
lpush  键名  数据

查看数据:
lrange  键名  起始序号   结束序号

1、redis群集

构建数据库群集的原因:数据库在读写数据时所占用的硬件资源比web服务更多,任何单服务器的硬件资源都是有限的。数据库在大量的读写访问时,硬件资源会产生瓶颈。所以,数据库可以通过构建群集,提升数据访问的并发量。如:支付宝,微信交易,朋友圈等,微信聊天。

redis群集关键词:

1.虚拟槽:slots(插槽,一般指主板上扩展设备的一个接口),在redis数据库中的虚拟槽,是在redis数据库中开启一个虚拟接口,客户端可以通过虚拟接口连接数据库,并对数据进行读取写入,每个槽都可以独立接收任务。

2.虚拟槽分区:redis数据库定义了在群集中,虚拟槽的总数为16384个,所有参与到群集的redis服务器平分这些槽,最后每个redis服务器分配到的槽数量范围为槽分区。对于redis服务器,上千个槽是足够用的。

3.无中心结构:一般构建群集的结构分为两种情况,第一种有中心结构,如LVS,haproxy,nginx,amoeba等等,必须有有一个独立的调度器,对数据访问请求进行群集规则调度,工作原理相对比较简单,容易实现,缺点时单点故障问题。无中心结构,没有固定的调度器,群集中的任何一台节点服务器都能够作为调度器使用,节点之间协商调度规则,分配访问请求的处理。工作原理相对比较复杂,对数据处理的效率相对高一点,能够有效解决单点故障问题。还能解决服务的接口访问并发量问题。

4.群集状态信息:每个群集都有自己的虚拟地址和群集相关的信息,如群集名称,虚拟IP,虚拟MAC,节点服务器数量,节点服务器地址,节点服务器的作用类型,数据调度算法,节点健康检查规则等等。redis群集中,每台节点服务器都要相关的信息,任何一台节点接收到客户端的访问请求后,通过状态信息判断数据在那个节点上,通知该节点服务器进行响应。工作方式有点像银行或保险公司的一站式服务。

5.群集角色:
master:在群集中用于接收客户端访问请求,并且进行读写数据响应的节点服务器,master节点之间分配槽分区。

slave:给master提供冗余的数据同步服务器,当master出现故障时,有slave顶替master的工作。所以,在redis群集中,一般会给每台master数据库匹配一台slave,提供冗余功能。


6.redis群集的端口号:

6379:面向客户端开放的端口号,用于接收客户端的访问请求,进行数据回应。

16379:面向群集中,节点服务器开发的端口号,用于同步数据,更新同步群集信息,包括健康检查。


2、redis工作原理

1.构建群集,并进行master的选举:

首先,redis群集由6台以上的偶数服务器数量构建。服务器的数量是计算了slave的。最少构建要求是3台master节点。首次创建群集的选举,是通过用户输入构建群集节点的IP地址升序排序进行设置,前一半的服务器做master,后一半的服务器做相对应的slave。

确认好master节点后,进行slots分配。slave上的槽数量与master相同。


2.添加节点

群集在使用过程中如果添加节点服务器,每次添加的数量是偶数。新添加的节点根据新节点服务器的IP地址的排序进行master和slave的分配,不影响之前的master。确认好master后,重新分配slots数,不是全部打撒,计算好需要保留的槽数,将多余的槽减掉,分配给新master节点。


3.缩减节点

先将被收缩节点服务器上的数据平均存储给其他剩余节点服务器,将被收缩节点服务器的槽平均分配给剩余的其他节点服务器。发送通告给所哟节点服务器,在群集信息中删除该节点信息。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据库从删库到跑路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值