Nginx 使用$hostname做为access_log名中的坑

在多节点部署的情况下,需要对nginx日志文件按节点名[hostname]做区分,但实际使用中发现日志文件夹中并没有输出这种文件,本以为access_log中不支持这个变量,其实看到error_log中的日志发现了问题所在。

        access_log  /logs/nginx/prd-$hostname-access.log main;

继续阅读Nginx 使用$hostname做为access_log名中的坑

MySQL复制报错(Slave failed to initialize relay log info structure from the repository)

机器重启以后,主从出现了问题,具体报错信息:

Slave failed to initialize relay log info structure from the repository

解决方案:
继续阅读MySQL复制报错(Slave failed to initialize relay log info structure from the repository)

logrotate参数说明

logrotate 是 Linux 下的一个日志管理工具。通过 logrotate 可以很轻松地管理(拆分、压缩等)系统的所有日志文件。 通过配置,我们可以按日志大小或者固定周期来管理日志文件。

安装 logrotate

yum install logrotate

打开配置文件

vim /etc/logrotate.conf

在文件最后增加以下配置

/PATH/TO/YOUR/LOG/*.log {
    daily          # 按日,也可以 weekly 按周,monthly 按月
    dateext        # 增加日期作为后缀
    missingok      # 如果文件不存在,忽略错误信息
    rotate 30      # 保留 30 份
    compress       # 压缩
    delaycompress  # 延迟压缩,也就是本次拆分的文件在下次执行时再压缩
    notifempty     # 忽略空白文件
    copytruncate   # 拆分文件后,清空原有文件,而不是创建一个新文件
    su root root   # 解决没权限的问题
}

马上执行 logrotate

sudo /usr/sbin/logrotate -f /etc/logrotate.conf

查看你的 log 文件所在目录,应该可以得到类似这个的结果

-rw-r--r-- 1 deploy deploy  0K 2012-06-27 23:39 production.log
-rw-r--r-- 1 deploy deploy  27M 2012-06-27 23:15 production.log-20181217

小程序JS Date.parse返回null

前端同事在做微信小程序时发现IOS获取的时间戳为空的问题,后来通过跟踪发现,原来是因为IOS系统不支持2018-08-08格式的时间导致的,

var mydata = ‘2018-08-08 11:00:00’;
console.log(“返回时间:” + mydata);
var time = Date.parse(new Date(mydata)) / 1000;

这样的代码安卓手机开发手机测试都没有问题,唯独IOS获取的日期为null,若干次百度调试后发现,原来IOS只识别2018/08/08这样的日期格式,
下面用正则替换2018-08-08日期格式为2018/08/08后问题解决(代码如下)

var mydata = ‘2018-08-08 11:00:00’;
mydata=data.replace(/-/g, ‘/’);
console.log(“返回时间:” + mydata);
var time = Date.parse(new Date(mydata)) / 1000;

转自:https://blog.csdn.net/zqtsx/article/details/74331076

基于动态发现的ETCD集群的节点迁移

基于docker-compose编排了一组etcd集群,如果想把其中一个节点替换掉应该怎么操作呢,网上有一些质量非常高的技术文章,但是有一些细节地方没有说清楚。

先把我的docker-compose.yml帖上来。

version: '3'
services:
  etcd1:
    image: "quay.io/coreos/etcd:latest"
    network_mode: "host"
    volumes:
      - /data0/etcd/etcd1/:/etcd_data/:rw
    command:
      - etcd
      - --name
      - etcd1
      - --data-dir
      - /etcd_data
      - --listen-peer-urls
      - http://${DOCKER_IIP}:2380
      - --listen-client-urls
      - http://${DOCKER_IIP}:2379,http://127.0.0.1:2379
      - --advertise-client-urls
      - http://${DOCKER_IIP}:2379
      - --initial-advertise-peer-urls
      - http://${DOCKER_IIP}:2380
      - --discovery
      - http://discovery.etcd.io/TTTTTTTTTTTTTTTTTTTTTTT

下面来进行替换节点的操作,先查看一下节点列表

/ # etcdctl member list
1ca4fc0d4b2c9fa2: name=etcd1 peerURLs=http://192.168.56.42:2380 clientURLs=http://192.168.56.42:2379 isLeader=true
4cf04322e0117c69: name=etcd4 peerURLs=http://192.168.56.33:2380 clientURLs=http://192.168.56.33:2379 isLeader=false
6dc5120e6c9ba574: name=etcd3 peerURLs=http://192.168.56.42:2382 clientURLs=http://192.168.56.42:2381 isLeader=false

先拿掉etcd4。

/ # etcdctl member remove 4cf04322e0117c69
Removed member 4cf04322e0117c69 from cluster

再进行添加操作。

/ # etcdctl member add etcd2 http://192.168.56.33:2380
Added member named etcd2 with ID d401a8b3607279fc to cluster

ETCD_NAME="etcd2"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.56.42:2380,etcd3=http://192.168.56.42:2382,etcd2=http://192.168.56.33:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

接下来是重点了,把这几个环境变量记录一下,修改一下原来的docker-compose.yml,进行新节点启动。

version: '3'
services:
  etcd2:
    image: "quay.io/coreos/etcd:latest"
    network_mode: "host"
    volumes:
      - /data0/etcd/etcd2/:/etcd_data/:rw
    command:
      - etcd
      - --name
      - etcd2
      - --data-dir
      - /etcd_data
      - --listen-peer-urls
      - http://${DOCKER_IIP}:2380
      - --listen-client-urls
      - http://${DOCKER_IIP}:2379,http://127.0.0.1:2379
      - --advertise-client-urls
      - http://${DOCKER_IIP}:2379
      - --initial-advertise-peer-urls
      - http://${DOCKER_IIP}:2380
      #- --discovery
      #- http://discovery.etcd.io/df65ece6e8eef0db7548c7a51adb894e
      - --initial-cluster-state
      - existing
      - --initial-cluster
      - etcd1=http://192.168.56.42:2380,etcd2=http://192.168.56.33:2380,etcd3=http://192.168.56.42:2382

将原来的–discovery临时注释,添加下面几行,然后进行节点启动,节点启动成功之后,把上面这一次临时修改还原就可以。