Voltdb作为分布式的内存数据库,企业版比社区版主要多提供了命令日志(事务级别的持久化日志)、不停机的弹性扩容、用于灾难恢复的数据库备份、跨数据中心的备份。
1 | wget https://downloads.voltdb.com/technologies/server/voltdb-latest.tar.gz |
/etc/rc.local
文件:1 | echo never > /sys/kernel/mm/transparent_hugepage/enabled |
1 | #更新Path |
1 | voltdb init --dir /data/voltdb/ #如果以前启动过,需要强制初始化,加上 --force |
1 . 终端执行sqlcmd
进入sql终端:
1 | create table test(id int); #创建测试表 |
2 . 在终端通过http执行存储过程:
1 | curl -d "Procedure=ping&Parameters=%5B0%5D" "http://localhost:8080/api/1.0/" |
1 | voltadmin save #立刻生成快照 |
TINYINT
、SMALLINT
、 INTEGER
、BIGINT
、VARCHAR
类型。DROP TABLE 表名 IF EXISTS CASCADE
来级联删除。n
,节点数为a
,每个节点分区数为b
,那么一条数据有n+1
个拷贝,每a×b/(n+1)
个分区存有一份完整的数据。在服务端(centos)执行以下指令:
1 | echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config |
默认使用mvn clean package
生成的jar文件中的 MANIFEST.MF 是这样的:
1 | Manifest-Version: 1.0 |
这种jar文件执行的时候会返回 xxx.jar中没有主清单属性。
修改 pom.xml文件:
1 | <plugin> |
现在重新打包生成的MANIFEST.MF中多了一行Main-Class: com.shengyayun.App
http
块中添加日志格式main2018
:1 | log_format main2018 '$remote_addr|$remote_user|$time_local|$request|$status|$body_bytes_sent|$http_referer|$http_user_agent|$http_x_forwarded_for|$request_time|$upstream_response_time|$upstream_addr|$upstream_status'; |
server
中配置该站点的访问日志:1 | access_log /var/log/www.access main2018; #使用第一步中添加的格式main2018 |
1 | nginx -t #判断配置正确 |
在服务器上执行如下指令查看最近一次访问的记录:
1 | tail -n 1 /var/log/www.access | awk -F "|" '{printf "客户端地址: %s\n访问时间和时区: %s\n客户端用户名称: %s\n请求的URI和HTTP协议: %s\nHTTP请求状态: %s\n发送给客户端文件内容大小: %s\nurl跳转来源: %s\n客户端信息: %s\nHTTP的请求端真实的IP: %s\n请求的总时间: %s\nupstream响应时间: %s\nupstream地址: %s\nupstream状态: %s\n\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13} |
结果是:
1 | 客户端地址: 115.238.29.221 |
新建文件**/etc/yum.repos.d/mongodb-enterprise.repo**,内容如下:
1 | [mongodb-enterprise] |
然后直接通过yum安装:
1 | yum install mongodb-enterprise |
执行vi /etc/mongod.conf
,配置内容如下:
1 | #monogodb |
1 . 在主节点ma上执行openssl rand -base64 745 > /etc/mongodb-keyfile
。
2 . 将生成的**/etc/mongodb-keyfile**文件复制到其他节点的相同路径。
3 . 所有的节点上修改该文件的拥有者与权限:
1 | chmod 600 /etc/mongodb-keyfile |
1 . 编辑主节点的配置文件**/etc/mongod.conf**,将security
下的authorization
编辑为disabled
。
authorization为enable时无法创建管理员账号。
2 . 主节点执行以下指令:
1 | systemctl start mongod.service |
3 . 执行mongo
进入mongo shell,然后执行以下指令:
1 | rs.initiate() |
4 . 退出mongo shell,编辑**/etc/mongod.conf**,将security
下的authorization
改回为enabled
。
5 . 执行 systemctl restart mongod.service
来重启mongodb服务。
在其他节点上启动mongodb服务:
1 | systemctl start mongod.service |
第五步中已经在主节点里对集群进行了初始化,然后第六步中启动了从节点和仲裁节点的mongodb服务,现在就差将它们加入集群了。
1 . 在主节点执行mongo
进入mongo shell,执行以下指令完成用户认证:
1 | use admin |
2 . 添加从节点
1 | rs.add('mb:27017') |
3 . 添加仲裁节点
1 | rs.addArb('mc:27017') |
1 | use test_db |
现在,业务里可以通过连接字符串mongodb://test_user:复杂的test_user的密码@ma:27017,mb:27017/test_db
来对该集群进行读写了。
1 |
|
如果我想往influxdb中插入一条数据,教程告诉我可以这样:
1 | curl -i -XPOST 'http://127.0.0.1:8086/write?db=metrics' -u admin:admin --data-binary 'test,host=localhost count=1' |
但是现在我需要用php来实现。经过查阅网上资料,有人说可以先将test,host=localhost count=1
转为stream,然后php进行curl的时候设置CURLOPT_INFILE
、CURLOPT_INFILESIZE
、CURLOPT_UPLOAD
。这样操作下来虽然influxb虽然返回了204,但是数据并没有正确插入。
最后我使用了以下的代码实现了功能:
1 | $ch = curl_init();//init |
grafana 是基于JS开发的,功能齐全的度量仪表盘和图形编辑器。我们可以通过collectd和业务代码采集数据,通过influxdb存储数据,最后通过grafana的web端进行展现。
1 | wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.5.2-1.x86_64.rpm |
用vim打开文件/etc/grafana/grafana.ini,下面我们查看[server]
的配置:
http_port
默认是3000
,代表它自带的http服务默认监听3000端口。domain
默认是localhost
,结合上面的默认端口,我们可以通过http://localhost:3000
来访问grafana的图形化界面。root_url
这个配置主要为了在使用反向代理后能正常跳转,同时邮件可以提供正确的url。这里有个案例,我希望可以通过http://watch.langdaren.com
直接访问grafana,但80端口已经被nginx占用:
http_port
不修改,保留默认的3000
。domain
改为watch.langdaren.com
。root_url
改为http://watch.langdaren.com
。1 | server{ |
nginx -t
测试一下配置,然后再执行nginx -s reload
进行重启。配置正确的smtp,可以让grafana可以自动发送邮件,下面我使用我的腾讯邮箱进行配置。
用vim打开配置文件,下面我们查看[smtp]
的配置:
enabled
修改为true
。host
修改为邮件系统的发送服务器地址,这里是smtp.exmail.qq.com:465
。user
修改为我的邮箱全名719048774@qq.com
。password
修改为我的邮箱密码。from_address
修改为邮箱全名719048774@qq.com
。from_name
改为shengyayun
。用vim打开配置文件,下面我们查看[security]
的配置:
admin_user
默认为admin
,这个是管理员账号名,按需修改。admin_password
默认为admin
,这个是管理员密码,按需修改。1 | systemctl start grafana-server |
通过第二步的http配置,就知道如何访问grafana的web端了。默认的地址是http://localhost:3000
,在我的案例里的地址是http://watch.langdaren.com
。
grafana访问influxdb并创建dashboard之类操作,都是通过grafana的web端的管理员功能完成的,这里不做详细介绍,具体可以查看官网http://docs.grafana.org
。
collectd是一款性能监控程序,这里我将采用它对服务器进行监控,然后将数据写入influxdb。阅读该文档前先阅读influxdb的相关文档。
1 | yum install collectd |
QDNLookup
修改为false
。如果要保留为默认的true
的话,host必须与ip保持一致。LoadPlugin logfile
的注释,同时取消<Plugin logfile>...</Plugin>
的注释,将其中File Stdout
一行改为File "/var/log/collectd.log"
,这样collectd的日志会被单独写进这个文件里。LoadPlugin rrdtool
LoadPlugin cpu
1 | <Plugin network> |
127.0.0.1
是influxdb的ip地址,25826
是influxdb监听的端口号。[[collectd]]
下面的enabled
取消注释,并改为true
。[[collectd]]
下面的typesdb
取消注释,改为/etc/collectd.conf文件中TypesDB
指向的types.db
文件所在的目录。在测试过程中发现,如果不先在前台手动执行一次collectd,直接用systemctl start collectd
启动服务会导致其一直报错。执行以下指令可以让collectd在前台执行:/usr/sbin/collectd -f
如果没有问题的话就ctrl+c
结束程序。
1 | systemctl start influxdb |
通过influx shell查看数据库collectd数据库,一切正常的话,里面会出现名为cpu_value的measurement。这说明collectd的cpu组件已经在不停地往influxdb写入数据了。
influxdb是目前比较流行的时间序列数据库,本文只介绍如何部署influxdb,具体知识点请查阅相关资料。
1 | wget https://dl.influxdata.com/influxdb/releases/influxdb-1.3.5.x86_64.rpm |
1 | systemctl start influxdb |
1 | influx |
[http]
下的auth-enabled
修改为true
,然后重启服务。auth
指令通过身份认证。[http]
下的bind-address = ":8086"
中的8086
修改为8087
,改完后重启服务。influx -port 8087
1 | create database testDb; |
1 | curl -i -X POST "http://localhost:8087/write?db=testDb&u=admin&p=admin" --data-binary "testMetric,host=mbp value=0.64" |
1 | use testDb; //使用testDb数据库 |