嘉为蓝鲸-蓝鲸开源组件常用命令操作※
一、MySQL※
1.1 登录操作※
# 1. 加载蓝鲸环境变量
source $CTRL_DIR/utils.fc
# 2. 登录交互式命令行
# @2.5 版本
mysql -u $MYSQL_USER -p $MYSQL_PASS -h $MYSQL_IP
# @3.0 版本
mysql_config_editor print --all # 查看配置的数据库快捷登陆账号列表
mysql --login-path=mysql-default # 使用 mysql-default 配置进行登录
# 在 MySQL 本机,以 socket 形式登录,一般用于赋权
mysql \
-u$BK_MYSQL_ADMIN_USER \
-p$BK_MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket
1.2 常用 SQL 语句※
-- 1. 创建 MySQL 用户, 并设置密码为 blueking
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'blueking';
-- 注:'user1'@'localhost' 和 'user1'@'127.0.0.1' 会被识别为两个不同的用户
-- 2. 查看所有用户信息
SELECT user,host FROM mysql.user;
-- 3. 删除用户
DROP USER 'user1'@'localhost';
-- 4. 创建密码为 blueking 的用户 user1,并赋予其对所有数据库有所有的操作权限(ALL)
GRANT ALL ON *.* TO 'user1'@'%' IDENTIFIED BY 'blueking' WITH GRANT OPTION;
FLUSH PRIVILEGES; -- 刷新权限
-- 5. 创建密码为 blueking 的用户 user2,并赋予其对所有数据库只有只读权限(SELECT)
GRANT SElECT ON *.* TO 'user2'@'%' IDENTIFIED BY "blueking";
FLUSH PRIVILEGES; -- 刷新权限
-- 6. 查看 user1 的权限
SHOW GRANTS FOR 'user1'@'%';
-- 7. 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 8. 查看所有数据库
SHOW DATABASES;
-- 9. 查看数据库的建库语句
SHOW CREATE DATABASE dbname;
-- 10. 查看某表的创建语句
SHOW CREATE TABLE tablename;
-- 11. 查看所有数据库大小
SELECT
table_schema AS '数据库',
SUM(table_rows) AS '记录数',
SUM(TRUNCATE(data_length/1024/1024/1024, 2)) AS '数据容量(GB)',
SUM(TRUNCATE(index_length/1024/1024/1024, 2)) AS '索引容量(GB)'
FROM
information_schema.tables
GROUP BY
table_schema
ORDER BY
SUM(data_length) DESC,
SUM(index_length) DESC;
-- 12. 查看某个库中的表大小
SELECT
table_schema AS '数据库',
table_name AS '表名',
table_rows AS '记录数',
TRUNCATE(data_length/1024/1024/1024, 2) as '数据容量(GB)',
TRUNCATE(index_length/1024/1024/1024, 2) as '索引容量(GB)'
FROM
information_schema.tables
WHERE
table_schema='bkmonitorv3_alert' /* 数据库名 */
ORDER BY
table_rows DESC,
index_length DESC;
-- 13. 查询当前 MySQL 版本
SELECT @@VERSION;
-- 14. 查询定义的packet大小
select @@max_allowed_packet;
-- 15. 查看当前mysqld的所有参数,包括默认值
SHOW VARIABLES;
-- 16. 查询当前 MySQL 实例的端口
SHOW VARIABLES LIKE 'port';
-- 17. 查询 MySQL 实例的 socket 文件路径
SHOW VARIABLES LIKE 'socket';
-- 18. 查看实例的数据路径
SHOW VARIABLES LIKE 'datadir';
-- 19. 查看是否开启了慢查询日志, 以及慢日志的路径, ON代表开启
SHOW VARIABLES LIKE 'slow_query_log%';
-- 20. 查看从服务器是否开启慢查询日志,ON代表开启
SHOW VARIABLES LIKE 'log_slow_slave_statements';
-- 21. 查看慢查询时间,查询超过这个时间即被标记为慢查询
SHOW VARIABLES LIKE 'long_query_time';
-- 22. 在线开启慢日志
SET GLOBAL slow_query_log=1;
-- 23. 在线修改慢日志路径
SET GLOBAL slow_query_log_file='/tmp/slow.log';
-- 24. 在线修改慢日志查询时间
SET GLOBAL long_query_time=0.2; /* 需要重新登录命令行 */
-- 25. 查看日志的输出格式
SHOW VARIABLES LIKE 'log_output'; /* FILE 或 TABLE */
-- 26. 查看日志的时间信息
SHOW VARIABLES LIKE 'log_timestamps'; /* UTC时间或者SYSTEM时间 */
-- 27. 查看是否开启 '将没有使用索引的SQL语句记录到慢查询日志中' 的功能
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
-- 28. 限制每分钟内,在慢查询日志中,记录没有使用索引的次数
/* 一般与上面的参数一起使用, 避免日志快速增长。 */
SHOW VARIABLES LIKE 'log_throttle_queries_not_using_indexes';
-- 29. 查看创建的临时表的存储引擎类型
SHOW VARIABLES LIKE "default%tmp%";
-- 30. 查询log文件大小
SHOW VARIABLES LIKE 'innodb_log_file_size';
-- 31. 查询页的大小
/*
1) 一旦数据库通过innodb_page_size设置完成,则后续无法更改,
2) innodb_page_size 是针对普通表的,压缩表不受限制。
*/
SHOW VARIABLES LIKE 'innodb_page_size';
-- 32. 查看缓冲池的大小
/*
1) 每次读写数据都是通过buffer pool,当buffer pool中没有所需的数据时,才去硬盘中获取。
2) 该值设置的越大越好,buffer pool也是以页(page)为单位的,且大小和innodb_page_size一致。
*/
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 33. 在线调整innodb_buffer_pool_size
/* MySQL 5.7之前的版本,修改该值,需要重启 */
SET GLOBAL innodb_buffer_pool_size=2*1024*1024*1024;
-- 34. 设置了多少个缓冲池
/* 设置多个instance可将热点打散,提高并发性能(建议设置成cpu 个数值) */
SHOW VARIABLES LIKE 'innodb_buffer_pool_instances';
-- 35. 是否在停机时 dump 出 buffer pool数据
/*
在MySQL 5.6 以后,可以在停机的时候dump出buffer pool的数据,然后在启动的时候Load进buffer pool。该功能可以在MySQL启动时自动预热,无需人工干预。
*/
SHOW VARIABLES LIKE 'innodb_buffer_pool_dump_at_shutdown';
-- 36. 启动时加载dump的文件
/* 恢复到buffer pool中。dump的越多,启动的越慢 */
SHOW VARIABLES LIKE 'innodb_buffer_pool_load_at_startup';
-- 37. 查看 dump 百分比
/* 是每个buffer pool文件,而不是整体 */
SHOW VARIABLES LIKE 'innodb_buffer_pool_dump_pct';
-- 38. 查看隔离级别
SHOW VARIABLES LIKE 'transaction_isolation';
-- 39. 设置隔离级别
SEt transaction_isolation='read-committed';
-- 40. 是否将死锁信息打印到err_log中
SHOW VARIABLES LIKE 'innodb_print_all_deadlocks';
-- 41. master thread 每秒刷新redo的buffer到logfile
/* 5.7版本可以设置刷新间隔时间, 默认是1秒。 */
SHOW VARIABLES LIKE "%innodb_flush_log_at_timeout%";
-- 42. 查看binlog的类型
/*
STATEMENT: 记录SQL语句
ROW: 记录SQL语句操作的那些行(行的变化)
MIXED: mixed 混合statement 和 Row 格式(不推荐)。
*/
SHOW VARIABLES LIKE 'binlog_format';
-- 43. 查看timeout参数
SHOW VARIABLES LIKE "%timeout%"
-- 44. 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 45. 查看 binlog 过期时间
show variables like 'expire_logs_days';
-- 46. 修改 binlog 过期时间
set global expire_logs_days=7;
-- 47. 显示表结构和列结构的命令
DESC dbname.tablename;
-- 48. 显示正在执行的线程
SHOW PROCESSLIST;
-- 49. 查看buffer pool的状态
SHOW ENGINE INNODB STATUS\G;
-- 50. 查看表的索引情况
SHOW INDEX FROM tablename;
-- 51. 查看锁的信息
SELECT * FROM sys.innodb_lock_waits;
-- 52. 查看 master 状态
SHOW MASTER STATUS\G; /*在主节点上执行*/
-- 53. 查看所有的log文件
SHOW MASTER LOGS; /*在主节点上执行*/
-- 54. 查看 slave 状态
SHOW SLAVE STATUS\G; /*在从节点上执行*/
-- 55. 在线清理 mysql-bin3306.000003 之前的日志
PURGE BINARY LOGS TO 'mysql-bin3306.000003';
1.3 命令行操作※
# 操作主机:MySQL_IP
source /data/install/
# @2.5 版本
# 1. 全库备份
/data/src/service/mysql/bin/mysqldump \
-h$MYSQL_IP \
-u$MYSQL_USER \
-p$MYSQL_PASS \
--skip-opt \
--create-options \
--single-transaction \
-q \
--no-autocommit \
-R \
--triggers \
--default-character-set=utf8 \
--all-databases | gzip > /data/dbbak/all_db_$(date +%Y%m%d_%H%M%S).gz;
# 2. 备份 testdb 数据库
/data/src/service/mysql/bin/mysqldump \
-h$MYSQL_IP \
-u$MYSQL_USER \
-p$MYSQL_PASS \
--skip-opt \
--create-options \
--single-transaction \
-q \
--no-autocommit \
-R \
--triggers \
--default-character-set=utf8 \
--events testsdb | gzip > /data/dbbak/testdb_$(date +%Y%m%d_%H%M%S).gz;
# 3. 还原 testdb 数据库
gunzip /data/dbbak/testdb_$(date +%Y%m%d_%H%M%S).gz
/data/src/service/mysql/bin/mysql \
-h$MYSQL_IP \
-u$MYSQL_USER \
-p$MYSQL_PASS \
testdb < /data/dbbak/testdb_$(date +%Y%m%d_%H%M%S)
# @3.0 版本
source /data/install/utils.fc
# 1. 全库备份
mysqldump \
-h$BK_MYSQL_IP \
-u$BK_MYSQL_ADMIN_USER \
-p$BK_MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket \
--skip-opt \
--create-options \
--single-transaction \
-q \
--no-autocommit \
-R \
--triggers \
--default-character-set=utf8 \
--all-databases | gzip > /data/dbbak/all_db_$(date +%Y%m%d_%H%M%S).gz;
# 2. 备份 testdb 数据库
mysqldump \
-h$BK_MYSQL_IP \
-u$BK_MYSQL_ADMIN_USER \
-p$BK_MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket \
--skip-opt \
--create-options \
--single-transaction \
-q \
--no-autocommit \
-R \
--triggers \
--default-character-set=utf8 \
--events testsdb | gzip > /data/dbbak/testdb_$(date +%Y%m%d_%H%M%S).gz;
# 3. 还原 testdb 数据库
gunzip /data/dbbak/testdb_$(date +%Y%m%d_%H%M%S).gz
mysql \
-h$BK_MYSQL_IP \
-u$BK_MYSQL_ADMIN_USER \
-p$BK_MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket \
testdb < /data/dbbak/testdb_$(date +%Y%m%d_%H%M%S)
mysql \
-h$LAN_IP \
-u$BK_MYSQL_ADMIN_USER \
-p$BK_MYSQL_ADMIN_PASSWORD \
bk_monitorv3 < bk_monitorv3_20210713_112829
二、MongoDB※
2.1 登录操作※
# 1. 加载蓝鲸环境变量
source $CTRL_DIR/utils.fc
# @2.5
# 单机连接(使用admin) 用户
/data/src/service/mongodb/bin/mongo \
-u $MONGODB_USER \
-p $MONGODB_PASS \
mongodb://mongodb.service.consul:27017/admin \
--authenticationDatabase admin
# 单机连接(使用cmdb) 用户
/data/src/service/mongodb/bin/mongo \
-u bk_cmdb \
-p $(_app_token bk_cmdb) \
mongodb://mongodb.service.consul:27017/cmdb \
--authenticationDatabase cmdb
# 复制集连接(使用admin) 用户
/data/src/service/mongodb/bin/mongo \
-u $MONGODB_USER \
-p $MONGODB_PASS \
mongodb://mongodb.service.consul:27017/admin?replicatSet=rs0 \
--authenticationDatabase admin
# 复制集连接(使用 cmdb) 用户
/data/src/service/mongodb/bin/mongo \
-u bk_cmdb \
-p $(_app_token bk_cmdb) \
mongodb://mongodb.service.consul:27017/cmdb?replicatSet=rs0 \
--authenticationDatabase cmdb
# @3.0 连接
mongo \
-u $BK_MONGODB_ADMIN_USER \
-p $BK_MONGODB_ADMIN_PASSWORD \
mongodb://mongodb.service.consul:27017/admin \
--authenticationDatabase admin
PS:2024年7月26日
2.2 常用查询※
// 1. 创建管理员
db.createUser({
user:"exporter",
pwd:"blueking",
roles:[{
role:"root",
db:"admin"
}]
})
// 2. 为 cmdb 库创建读写用户
db.createUser({
user: "bk_cmdb",
pwd: "7ujm*IK<",
roles:[{
role: "readWrite",
db: "cmdb"
}]
})
// 3. 创建 backup 用户
db.getSiblingDB("local").createUser({
user: "exporter",
pwd: "blueking",
roles: ["backup"]
})
// 4. 查看所有数据库
show dbs;
// 5. 查看当前数据库的用户
db.getUsers();
// 6. 修改 bk_cmdb 用户密码
db.updateUser(
"bk_cmdb",
{
pwd:"blueking"
}
)
// 7. 查看所有数据库
show dbs;
// 8. 查看数据库中集合
show collections;
// 9. 查询数据多条数据
db.collection_name.find({
"bk_host_innerip": "xxxxxx"
}}
db.collection_name.find().skip(Number).limit(Number).sort({x:1})
// skip: 跳过查询的最开始的数量
// limit: 限制返回数量
// sort: 当 x:1 表示正序,x:-1 表示逆序
// 10. 条件筛选
db.collection_name.find(
{
key_name:{$gt:value}
})
// $gt,$lt,$get,$lte,$ne
// 11. 查询单条
db.collection_name.findOne()
// 12. 计算符合查询条件的文档的数量
db.collection_name.find().count()
// 13. 获取结果的唯一值
db.collection_name.distinct('key_name')
// 14. 更新数据
db.collection_name.update(
{original_key:original_value},
{new_key:new_value}
)
// 只要原 collection 中包含 original_key:original_value 就会被选中成为操作对象
// 整个collection都会被更新成new_key:new_value,而不单单就只是更新original_key:original_value
// 相较于上面会更新整个集合,下面添加了 $set: 的形式来只进行部分字段的更新
db.collection_name.update(
{original_key:original_value},
{
$set:{new_key:new_value}
}
)
// 15. 删除所有查找到的数据
db.coolection_name.remove({key:value})
// 16. 删除一张表
db.collection_name.drop()
// 17. 查看集合的索引
db.collection_name.getIndexes()
// 18. 创建索引
db.collection_name.ensureIndex({key:value})
// 19. 前面是根据key:value的形式创建索引的,接下来就为一集合的某一字段全部创建索引
db.collection_name.ensureIndex({key:1})
// 20. 删除索引
db.collection_name.dropIndex({key:value})
// 21. 删除所有索引
db.collection_name.dropIndexes()
// 22. 查看复制集状态及角色
rs.status()
2.3 命令行操作※
# 1. 备份
# @2.5
source /data/install/utils.fc
mkdir -p /data/dbbak
/data/src/service/mongodb/bin/mongodump \
-h $MONGODB_IP:$MONGODB_PORT \
-u bk_cmdb \
-p $(_app_token bk_cmdb) \
--archive=/data/dbbak/mongodb_cmdb_$(date +%F_%T).gz \
--gzip \
--db cmdb \
--excludeCollection=cc_OperationLog
# @3.0
mongodump \
-h $BK_CMDB_MONGODB_HOST:$BK_CMDB_MONGODB_PORT \
-u $BK_CMDB_MONGODB_USERNAME \
-p $BK_CMDB_MONGODB_PASSWORD \
--archive=/data/dbbak/mongodb_cmdb_$(date +%F_%T).gz \
--gzip \
--db cmdb
# 参数说明:
# -h: MongoDB IP地址:MongoDB 端口
# -u: 用户名
# -p: 密码
# --archive: 备份文件存放路径
# --gzip: 备份格式
# --db: 备份的数据库名
# --excludeCollection: 排除的集合
# --collection: 只备份某个集合
# 注:cc_OperationLog为CMDB的操作审计日志,如果需要进行备份,可把 --excludeCOllection 选项去掉。
# 2. 还原
# @2.5
/data/src/service/mongodb/bin/mongorestore \
-h $MONGODB_IP:$MONGODB_PORT \
-u bk_cmdb \
-p $(_app_token bk_cmdb) \
-d cmdb \
--gzip \
--archive=/data/mongodb_cmdb.tgz \
--drop
# @3.0
mongorestore \
-h $BK_CMDB_MONGODB_HOST:$BK_CMDB_MONGODB_PORT \
-u $BK_CMDB_MONGODB_USERNAME \
-p $BK_CMDB_MONGODB_PASSWORD \
--authenticationDatabase admin
-d cmdb \
--gzip \
--archive=/data/dbbak/mongodb_cmdb_$(date +%F_%T).gz \
--drop
## -d
# 参数说明:
# -h: MongoDB IP地址:MongoDB 端口
# -u: 用户名
# -p: 密码
# -d: 还原的数据库名
# --gzip: 指定还原文件的格式
# --archive: 备份文件的路径
# --drop: 先把数据库删掉再进行还原
# 注:--drop 参数会把现有的数据库进行删除,再从备份文件中还原,请慎用!!!
三、RabbitMQ※
RabbitMQ 官网:https://www.rabbitmq.com/documentation.html
#rabbitmq官网
rabbitmqctl --help #查看帮助
# 1. 新增 vhosts
rabbitmqctl add_vhost vhostname
# 2. 删除 vhosts
rabbitmqctl delete_vhost vhostname
# 3. vhost并授权
rabbitmqctl set_permissions -p vhostname vhostname ".*" ".*" ".*"
# 4. 查看监控队列
rabbitmqctl list_queues -p prod_bk_monitor
# 5. 服务重启
systemctl restart rabbitmq-server
# 启动: rabbitmq-server –detached
# 关闭: rabbitmqctl stop
# 6. 集群配置相关命令
rabbitmqctl stop_app
rabbitmqctl reset
# 在当前集群中加入某节点
rabbitmqctl join_cluster {rabbit_node_name}
# 某些低版本可以采用rabbitmqctl cluster {rabbit_node_name}
rabbitmqctl start_app
# 7. 查看集群状态
rabbitmqctl cluster_status
# 8. 将某节点剔除出当前集群
rabbitmqctl forget_cluster_node {rabbit_node_name}
# 9. 开启某个插件
rabbitmq-plugins enable {插件名}
# 10. 关闭某个插件
rabbitmq-plugins disable {插件名}
# 有关插件名可以在 rabbitmq 的安装目录下的 plugins 目录中查看:$RABBITMQ_HOME/plugins
# 如:
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins list
# 11. 添加用户
rabbitmqctl add_user {username} {password}
# 12. 删除用户
rabbitmqctl delete_user {username}
# 13. 修改密码
rabbitmqctl change_password {username} {newpassword}
# 14. 设置用户角色
rabbitmqctl set_user_tags {username} {tag}
# tag可以为 administrator, monitoring, management
# 举例:
rabbitmqctl add_user root root
rabbitmqctl set_user_tags root administrator
rabbitmqctl list_users
# 15. 权限设置
rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
# conf:一个正则表达式match哪些配置资源能够被该用户访问。
# write:一个正则表达式match哪些配置资源能够被该用户读。
# read:一个正则表达式match哪些配置资源能够被该用户访问。
# 16. 查看(指定vhost)所有用户的权限信息
rabbitmqctl list_permissions [-p vhostPath]
# 17. 查看指定用户的权限信息
rabbitmqctl list_user_permissions {username}
# 18. 清除用户的权限信息
rabbitmqctl clear_permissions [-p vhostPath] {username}
# 举例
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
# 19. 服务器状态
rabbitmqctl status
# 20. 队列信息
rabbitmqctl list_queues [-p vhostpath] [queueinfoitem …]
# queueinfoitem可以为:
# name,durable,auto_delete,arguments,messages_ready,messages_unacknowled,messages, consumers,memory.
# 21. Exchange信息
rabbitmqctl list_exchanges [-p vhostpath] [exchangeinfoitem …]
# exchangeinfoitem有:
# name, type, durable, auto_delete, internal, arguments.
# 22. Binding信息
rabbitmqctl list_bindings [-p vhostpath] [bindinginfoitem …]
# bindinginfoitem有:
# source_name, source_kind, destination_name, destination_kind, routing_key, arguments.等
# 23. connection信息
rabbitmqctl list_connections [connectioninfoitem …]
# connectioninfoitem有:
# recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。
# 24. channel信息
rabbitmqctl list_channels [channelinfoitem …]
# channelinfoitem有:
# consumer_count,messages_unacknowledged,messages_uncommitted,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked
# 举例:
rabbitmqctl list_queues name messages_ready pid slave_pids
# 25. 更改节点类型
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
# 或
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
# 26. 添加vhost
rabbitmqctl add vhost {name}
# 27. 删除vhost:
rabbitmqctl delete vhost {name}
# 28. 镜像队列的配置通过添加policy完成,policy添加的命令为:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
# -p Vhost: 可选参数,针对指定vhost下的queue进行设置
# Name: policy的名称
# Pattern: queue的匹配模式(正则表达式)
# Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
# ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
# all表示在集群所有的节点上进行镜像
# exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
# nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
# ha-params: ha-mode模式需要用到的参数
# ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
# Priority: 可选参数, policy的优先级
# 例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha "^hello" '{"ha-mode":"exactly",:ha-params":2,"ha-sync-mode":"automatic"}'
# 29. rabbitmq权限控制 https://blog.csdn.net/qq_35781732/article/details/79807160
# 30. 查看监控队列
rabbitmqctl list_queues -p prod_bk_monitor
# 31. 清理监控队列
ssh $APPO_IP
docker ps 找到bk_monitor的容器ID
docker exec -it 容器ID /bin/bash
#进到容器里,然后执行以清除堵塞的队列
cd /data/app/code && /cache/.bk/env/bin/python /data/app/code/manage.py celery purge
# 32. 查看作业队列
rabbitmqctl list_queues -p bk_job
# 33. 清理作业队列
rabbitmqctl purge_queue -p bk_job
四、Zookeeper※
# @2.5 版本
cd /data/bkee/public/zk
# @3.0 版本
cd /opt/zookeeper
# 1. 启动ZK服务
bin/zkServer.sh start
# 2. 查看ZK服务状态
bin/zkServer.sh status
# 3. 停止ZK服务
bin/zkServer.sh stop
# 4. 重启ZK服务
bin/zkServer.sh restart
# 5. 连接服务器
./bin/zkCli.sh -server $LAN_IP:2181
# -- 以下为交互式命令 --
# 6. 查看根目录:
ls /
# 7. 创建 testnode节点,关联字符串"zz"
create /zk/testnode "zz"
# 8. 查看节点内容
get /zk/testnode
# 9. 设置节点内容
set /zk/testnode abc
# 10. 删除节点
delete /zk/testnode
# -- 以下是在蓝鲸ZK服务器中的常用操作 --
# 1. 进入 ZK
# @2.5
/data/bkee/service/zk/bin/zkCli.sh \
-server zk.service.consul:2181
# @3.0
/opt/zookeeper/bin/zkCli.sh \
-server zk.service.consul:2181
# 2. 查看gse_server信息
# 添加 acl 身份认证信息
addauth digest bkzk:密码
ls /gse/config/server/dataserver/all
# 3. 查看kafka在zk上注册的节点
# @2.5
/data/bkee/service/zk/bin/zkCli.sh \
-server zk.service.consul:2181 ls /common_kafka/brokers/ids
# @3.0
/opt/zookeeper/bin/zkCli.sh \
-server zk.service.consul:2181 ls /common_kafka/brokers/ids
# 4. 查看dataid注册的信息,进入zk后操作
get /gse/config/etc/dataserver/data/1001
# -- 以下是 zk 常用的 4 字命令 --
# 5. 输出server配置
echo conf|nc $ZK_IP 2181
# 6. 输出指定server上所有客户端连接的详细信息,包括客户端IP,会话ID等
echo cons|nc $ZK_IP 2181
# crst: 功能性命令。重置所有连接的统计信息。New in 3.3.0
# dump: 这个命令针对Leader执行,用于输出所有等待队列中的会话和临时节点的信息。
# envi: 用于输出server的环境变量。包括操作系统环境和Java环境。
# ruok: 用于测试server是否处于无错状态。如果正常,则返回"imok",否则没有任何响应。
## 注意:ruok不是一个特别有用的命令,它不能反映一个server是否处于正常工作。"stat"命令更靠谱。
# stat: 输出server简要状态和连接的客户端信息。
# srst: 重置server的统计信息。
# wchs: 列出所有watcher信息概要信息,数量等
# wchc: 出所有watcher信息,以watcher的session为归组单元排列
# wchp: 列出所有watcher信息,以watcher的path为归组单元排列
# mntr: 输出一些ZK运行时信息,通过对这些返回结果的解析,可以达到监控的效果。
五、Kafka※
# 目录
# @2.5
cd /data/bkee/service/kafka/bin
# @3.0
cd /opt/kafka/bin
# 列出所有 topic
./kafka-topics.sh \
--zookeeper zk.service.consul:2181/common_kafka \
--list
# 列出 topic 的详细
./kafka-topics.sh \
--zookeeper zk.service.consul:2181/common_kafka \
--topic <XXX> \
--describe
# 列出所有消费组
./kafka-consumer-groups.sh \
--zookeeper zk.service.consul:2181/common_kafka \
--list
# 实时数据消费
./kafka-console-consumer.sh \
--bootstrap-server kafka.service.consul:9092 \
--topic <XXX>
# 注:这是从最开始进行消费数据,量会很大
./kafka-console-consumer.sh \
--bootstrap-server kafka.service.consul:9092 \
--topic "0bkmonitor_10000" \
--from-beginning | grep "2020-02-07" > ~/0bkmonitor_10000_0207
# 创建 topic(4个分区,2个副本)
./kafka-topics.sh \
--create --zookeeper zk.service.consul:2181/common_kafka \
--replication-factor 2 \
--partitions 4 \
--topic test
## 显示某个消费组的消费详情(仅支持offset存储在zookeeper上的)
./kafka-run-class.sh kafka.toolsonsumerOffsetChecker \
--zookeeper zk.service.consul:2181/common_kafka \
--group test
## 显示某个消费组的消费详情(0.9版本 - 0.10.1.0 之前)
./kafka-consumer-groups.sh \
--new-consumer \
--bootstrap-server kafka.service.consul:9092 \
--describe \
--group test-consumer-group
## 显示某个消费组的消费详情(0.10.1.0版本+)
./kafka-consumer-groups.sh \
--bootstrap-server kafka.service.consul:9092 \
--describe \
--group my-group
## 生产者
./kafka-console-producer.sh \
--broker-list kafka.service.consul:9092 \
--topic test
## 消费者
./kafka-console-consumer.sh \
--zookeeper zk.service.consul:2181/common_kafka \
--topic test
## 新生产者(支持0.9版本+)
./kafka-console-producer.sh \
--broker-list kafka.service.consul:9092 \
--topic test \
--producer.config config/producer.properties
## 新消费者(支持0.9版本+)
./kafka-console-consumer.sh \
--bootstrap-server kafka.service.consul:9092 \
--topic test \
--new-consumer \
--from-beginning \
--consumer.config config/consumer.properties
## 高级点的用法
./kafka-simple-consumer-shell.sh \
--brist kafka.service.consul:9092 \
--topic test \
--partition 0 \
--offset 1234 \
--max-messages 10
# 查看topic某分区偏移量最大(小)值
./kafka-run-class.sh kafka.tools.GetOffsetShell \
--topic hive-mdatabase-hostsltable \
--time -1 \
--broker-list kafka.service.consul:9092 \
--partitions 0
# 注: time为-1时表示最大值,time为-2时表示最小值
# 为topic t_cdr 增加10个分区
./kafka-topics.sh \
--zookeeper zk.service.consul:2181/common_kafka \
--alter \
--topic t_cdr \
--partitions 10
# 删除topic,慎用,只会删除zookeeper中的元数据,消息文件须手动删除
./kafka-run-class.sh kafka.admin.DeleteTopicCommand \
--zookeeper zk.service.consul:2181/common_kafka \
--topic t_cdr
# 查看topic消费进度
# 这个会显示出consumer group的offset情况,
# 必须参数为--group, 不指定--topic,默认为所有topic
./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker \
--group pv
# 返回
Group Topic Pid Offset logSize Lag Owner
pv page_visits 0 21 21 0 none
pv page_visits 1 19 19 0 none
pv page_visits 2 20 20 0 none
# Kafka 压测命令
./kafka-producer-perf-test.sh \
--topic test \
--num-records 100 \
--record-size 1 \
--throughput 100 \
--producer-props bootstrap.servers=kafka.service.consul:9092
# Kafka 给某个topic设置清理策略
# 其中retention.bytes=xxxxx 可以替换成别的,例如retention.ms等等
/opt/kafka/bin/kafka-configs.sh --zookeeper zk.service.consul:2181/common_kafka --entity-type topics --entity-name xxxxx--alter --add-config retention.bytes=1073741824
#kafka 查询某个topic策略详情
/opt/kafka/bin/kafka-configs.sh --zookeeper zk.service.consul:2181/common_kafka --entity-type topics --describe |grep xxxx
六、REDIS※
# 进入redis
source /data/install/utils.fc
# @2.5
redis-cli -h $REDIS_IP -p $REDIS_PORT -a $REDIS_PASS
# @3.0
redis-cli -h $BK_REDIS_IP -p 6379 -a $BK_REDIS_ADMIN_PASSWORD
#获取配置信息
CONFIG GET XXXXX
CONFIG GET *
#编辑配置
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
#查看信息
info all
#查看客户端连接情况
client list
#Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
key
keys * 获取所有的key
select 0 选择第一个库
move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动
flush db 清除指定库
randomkey 随机key
type key 类型
set key1 value1 设置key
get key1 获取key
mset key1 value1 key2 value2 key3 value3
mget key1 key2 key3
del key1 删除key
exists key 判断是否存在key
expire key 10 10过期
pexpire key 1000 毫秒
persist key 删除过期时间
string
set name cxx
get name
getrange name 0 -1 字符串分段
getset name new_cxx 设置值,返回旧值
mset key1 key2 批量设置
mget key1 key2 批量获取
setnx key value 不存在就插入(not exists)
setex key time value 过期时间(expire)
setrange key index value 从index开始替换value
incr age 递增
incrby age 10 递增
decr age 递减
decrby age 10 递减
incrbyfloat 增减浮点数
append 追加
strlen 长度
getbit/setbit/bitcount/bitop 位操作
hash
hset myhash name cxx
hget myhash name
hmset myhash name cxx age 25 note "i am notes"
hmget myhash name age note
hgetall myhash 获取所有的
hexists myhash name 是否存在
hsetnx myhash score 100 设置不存在的
hincrby myhash id 1 递增
hdel myhash name 删除
hkeys myhash 只取key
hvals myhash 只取value
hlen myhash 长度
list
lpush mylist a b c 左插入
rpush mylist x y z 右插入
lrange mylist 0 -1 数据集合
lpop mylist 弹出元素
rpop mylist 弹出元素
llen mylist 长度
lrem mylist count value 删除
lindex mylist 2 指定索引的值
lset mylist 2 n 索引设值
ltrim mylist 0 4 删除key
linsert mylist before a 插入
linsert mylist after a 插入
rpoplpush list list2 转移列表的数据
set
sadd myset redis
smembers myset 数据集合
srem myset set1 删除
sismember myset set1 判断元素是否在集合中
scard key_name 个数
sdiff | sinter | sunion 操作:集合间运算:差集 | 交集 | 并集
srandmember 随机获取集合中的元素
spop 从集合中弹出一个元素
zset
zadd zset 1 one
zadd zset 2 two
zadd zset 3 three
zincrby zset 1 one 增长分数
zscore zset two 获取分数
zrange zset 0 -1 withscores 范围值
zrangebyscore zset 10 25 withscores 指定范围的值
zrangebyscore zset 10 25 withscores limit 1 2 分页
Zrevrangebyscore zset 10 25 withscores 指定范围的值
zcard zset 元素数量
Zcount zset 获得指定分数范围内的元素个数
Zrem zset one two 删除一个或多个元素
Zremrangebyrank zset 0 1 按照排名范围删除元素
Zremrangebyscore zset 0 1 按照分数范围删除元素
Zrank zset 0 -1 分数最小的元素排名为0
Zrevrank zset 0 -1 分数最大的元素排名为0
Zinterstore
zunionstore rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 weights 1 1 1 1 1 1 1
排序:
sort mylist 排序
sort mylist alpha desc limit 0 2 字母排序
sort list by it:* desc by命令
sort list by it:* desc get it:* get参数
sort list by it:* desc get it:* store sorc:result sort命令之store参数:表示把sort查询的结果集保存起来
订阅与发布:
订阅频道:subscribe chat1
发布消息:publish chat1 "hell0 ni hao"
查看频道:pubsub channels
查看某个频道的订阅者数量: pubsub numsub chat1
退订指定频道: unsubscrible chat1 , punsubscribe java.*
订阅一组频道: psubscribe java.*
redis事物:
隔离性,原子性,
步骤: 开始事务,执行命令,提交事务
multi //开启事务
sadd myset a b c
sadd myset e f g
lpush mylist aa bb cc
lpush mylist dd ff gg
服务器管理
dump.rdb
appendonly.aof
//BgRewriteAof 异步执行一个aop(appendOnly file)文件重写
会创建当前一个AOF文件体积的优化版本
//BgSave 后台异步保存数据到磁盘,会在当前目录下创建文件dump.rdb
//save同步保存数据到磁盘,会阻塞主进程,别的客户端无法连接
//client kill 关闭客户端连接
//client list 列出所有的客户端
//给客户端设置一个名称
client setname myclient1
client getname
config get port
//configRewrite 对redis的配置文件进行改写
INFLUXDB※
influxdb常用操作命令※
#进入数据库查询
ssh $INFLUXDB_IP
influx -host influxdb.service.consul -port 8086 -precision rfc3339
> select * from "_internal"."monitor"."write" order by "time" desc limit 2
> help #查看帮助
> use system_2;
> select * from system_load_2 limit 1;
#查看表
show measurements
# 显示所有数据库
show databases
# 创建数据库
create database test
# 删除数据库
drop database test
# 使用数据库
use test
# 显示表,需要先use数据库
show measurements
# 插入数据
insert devops-idc-sz,host=server01 cpu=23.1,mem=0.63
# 显示表里所有tag keys
show tag keys
# 显示表里所有field keys
show field keys
# 显示series
show series from devops-idc-sz
# 查询数据
select * from devops-idc-sz
# 删除一行数据
delete from devops-idc-sz where "host"='server01' and time=1567158293s
# 删除时序数据序列
drop series from devops-idc-sz where "host"='server01'
# 删除表
drop measurement devops-idc-sz
# 改变时间显示格式
precision rfc3339
#备份
for i in `ls /data/bkee/public/influxdb/data`;do influxd backup -host 127.0.0.1:8088 -database $i /data/backup/influxdb_$(date +%Y-%m-%d);done
#还原
for db in $(ls *.rp_* | sed 's/\.rp_.*//' | sort -u); do influxd restore -database $db -datadir /data/bkee/public/influxdb/data /data/influxdb-backup-data; done
DOCKER※
docker常用操作命令※
#常用命令
#显示 Docker 版本信息
docker version
#显示 Docker 系统信息,包括镜像和容器数
docker info
#列出本地所有镜像
docker images
#列出所有容器
docker ps
docker ps -a |grep itsm #含沉睡镜像
#从本地移除一个或多个指定的镜像
docker rmi
#删除容器 -f 强行 -l移除容器间的网络连接,而非容器本身 -v 移除与容器关联的空间
docker rm
#查看指定镜像的创建历史
docker history
#启动、停止和重启一个或多个指定容器
docker start|stop|restart
#杀死一个或多个指定容器进程。
docker kill
#查看一个正在运行容器进程,支持 ps 命令参数。
docker top
#获取容器运行时的输出日志
docker logs
#启动一个容器,在其中运行指定命令
docker run
#实时显示容器资源使用情况的统计信息
docker stats
#以下是命令大全
管理命令:
container 管理容器
image 管理镜像
network 管理网络
node 管理Swarm节点
plugin 管理插件
secret 管理Docker secrets
service 管理服务
stack 管理Docker stacks
swarm 管理Swarm集群
system 查看系统信息
volume 管理卷
如:docker container ls 显示所有容器
普通命令:
attach 进入一个运行的容器
build 从一个DockerFile构建镜像
commit 从容器创建一个镜像
cp 从容器和主机文件系统之间拷贝文件
create 创建一个容器
diff 检查容器文件系统上的更改
events 从服务器获取实时事件
exec 在正在运行的容器中运行命令
export 将容器的文件系统导出为tar存档
history 显示镜像的历史记录
images 查看镜像列表
import 从归档文件中创建镜像
info 显示系统范围的信息
inspect 返回Docker对象的低级信息
kill kill运行中的容器
load 从存档或者STDIN加载镜像
login 登陆docker镜像仓库
logout 退出docker镜像仓库
logs 获取一个容器的日志
pause 暂停一个或多个容器中的所有进程
port 查看端口映射或容器的特定映射列表
ps 查看容器列表
pull 从镜像仓库拉取镜像
push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
rename 重命名容器
restart 重启容器
rm 删除容器
rmi 删除镜像
run 创建一个新的容器并运行一个命令
save 将指定镜像保存成 tar 归档文件
search 从Docker Hub搜索镜像
start 启动容器
stats 实时显示容器资源使用情况的统计信息
stop 停止容器
tag 标记本地镜像,将其归入某一仓库
top 展示一个容器中运行的进程
unpause 恢复容器中所有的进程
update 更新容器配置
version 显示Docker的版本信息
wait 阻塞直到容器停止,然后打印退出代码
ETCD※
etcd常用操作命令※
#通过 list、add、remove 命令列出、添加、删除 etcd 实例到 etcd 集群中
etcdctl member list
#修改etcd集群influxdb注册的节点
endpoint=http://192.168.102.171:2379,http://192.168.102.173:2379,http://192.168.102.174:2379
etcdctl --endpoints $endpoint get /backends/local/url
etcdctl --endpoints $endpoint get /backends/local1/url
etcdctl --endpoints $endpoint set /backends/local1/url http://192.168.102.175:5260
操作类型
get #获取指定键的值
update #当键存在时,更新值内容
rm #删除某个键值
rmdir #删除键值或者空目录
mkdir #如果给定的键目录不存在,则创建一个新的键目录
setdir #创建一个键目录,无论存在与否
updatedir #更新一个已经存在的目录
watch #监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出
exec-watch #监测一个键值的变化,一旦键值发生更新,就执行给定命令 etcdctl exec-watch testkey -- sh -c 'ls'
ES※
es常用操作命令※
索引状态 curl -XGET "http://es.service.consul:10004/_cat/indices?pretty"
open正常
健康状态 curl -XGET "http://es.service.consul:10004/_cat/health"
green正常
删除索引
curl -XDELETE "http://es.service.consul:10004/*201806*"
curl -X POST 'http://server_ip:port/索引名/_close' # 索引支持 “*” 匹配
curl -X POST 'http://server_ip:port/索引名/_open' # 打开索引
#创建索引
curl -XPUT 'http://server_ip:port/filebeat-2018.07.25.19' -d '
{
"settings": {
"index": {
"mapping": {
"total_fields": {
"limit": "10000"
}
},
"refresh_interval": "5s",
"number_of_shards": "5",
"number_of_replicas": "1"
}
}
}'
'查看集群状态' : http://server_ip:port/_cluster/stats
'集群健康状态' : http://server_ip:port/_cluster/health
'查看节点状态' : http://server_ip:port/_nodes/stats
http://server_ip:port/_nodes/ # 和上面的有出入,比上面主机ip全
'索引(indices)状态': http://server_ip:port/_stats
'查看设置' : http://server_ip:port/_all/_settings
'查看索引内容' :http://server_ip:port/你的索引名/_search
'查看es集群副本分配节点':http://server_ip:port/_cat/shards?v
---------------------
NGINX※
nginx常用操作命令※
#启动nginx
./sbin/nginx
#查看版本
nginx -v
#起停、重载配置
nginx -s stop
nginx -s start
nginx -s reload
#检查配置文件是否正确
nginx -t
#查看帮助
nginx -h
#参数调整,admin授权业务过多打开cmdb报404
#在paas、CMDB的nginx.conf的HTTP域新增以下参数调整:
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
proxy_buffer_size 64k;
proxy_buffers 8 64k;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
SUPERVISOR※
supervisor常用操作命令※
#查看帮助
supervisorctl help
supervisorctl update :配置文件修改后可以使用该命令加载新的配置
supervisorctl reload: 重新启动配置中的所有程序
查看单个任务状态: supervisorctl status 服务名
启动任务:supervisorctl start 服务名
停止任务:supervisorctl stop 服务名
重启任务:supervisorctl restart 服务名
#重启open_paas所有工程
/data/bkee/.envs/open_paas/bin/python /data/bkee/.envs/open_paas/bin/supervisorctl -c /data/bkee/etc/supervisor-open_paas.conf restart all
#单独重启esb工程
/data/bkee/.envs/open_paas/bin/python /data/bkee/.envs/open_paas/bin/supervisorctl -c /data/bkee/etc/supervisor-open_paas.conf restart esb
#esb默认配置worker=2*cpucores,每个worker最多建立20个mysql链接
#查看esb工程数据库连接数
pgrep -f esb/bin/uwsgi |xargs -n 1 lsof -i:3306 -a -nP -p | grep -c EST
#uwsgitop 查看worker性能 https://github.com/xrmx/uwsgitop
#修改 supervisor配置里,把command的uwsig --ini xxx.ini 改为 uwsgi --stats /tmp/esb.stats --ini xxx.ini 然后uwsgitop /tmp/esb.stats 看
CONSUL※
consul常用操作命令※
#官网链接 https://www.consul.io/docs/agent/basics.html
#consul service api: https://www.consul.io/api/agent/service.html
#解析蓝鲸域名 dig consul.service.consul srv
#蓝鲸consul配置和解析json生成,由parse_config(pxs)解析install.config
#主配置文件 /data/bkee/etc/consul.conf
#consul服务配置目录 /data/bkee/etc/consul.d/
consul --version #查看版本
consul -help #查看帮助
Available commands are:
agent Runs a Consul agent
event Fire a new event
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info Provides debugging information for operators.
join Tell Consul agent to join cluster
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
kv Interact with the key-value store
leave Gracefully leaves the Consul cluster and shuts down
lock Execute a command holding a lock
maint Controls node or service maintenance mode
members Lists the members of a Consul cluster
monitor Stream logs from a Consul agent
operator Provides cluster-level tools for Consul operators
reload Triggers the agent to reload configuration files
rtt Estimates network round trip time between nodes
snapshot Saves, restores and inspects snapshots of Consul server state
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consul
#consul控制台 http://127.0.0.1:8500/ui/
#解析异常排查思路:
1.查看/etc/resolv.conf第一行nameserver是否为127.0.0.1
2.consul monitor 看看日志,主要确认consul集群状态是否正常。观察是否有"no cluster leader" 的输出(查看consul主节点是否为奇数,install.config配置的consul节点)
对于出现"no cluster leader"的输出时,说明consul之间没有成功组成集群,选举出leader:
检查consul server节点是否都running
在任意一台consul上输入 consul join <另外一个consul节点>
查看节点状态:consul operator raft list-peers
3.针对具体的域名,譬如 zk.service.consul,那么登陆到zk所在机器,查看/data/bkce/etc/consul.d/zk.json文件 运行里面的check脚本,看返回的输出
服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
键/值存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。(蓝鲸2.4 paas monitor中使用此功能)
多数据中心:无需复杂的配置,即可支持任意数量的区域。(蓝鲸暂时未用到)
consul kv get -recurse #获取consul中所有键值
#服务注册
curl --request PUT --data '{"id":"usermgr-1","name":"usermgr","check":{"name":"usermgr api service","tcp":"10.0.1.34:8009","interval":"10s","timeout":"1s"},"port":8009,"address":"10.0.1.34"}' http://127.0.0.1:8500/v1/agent/service/register
#获取服务信息
curl http://127.0.0.1:8500/v1/catalog/service/appo