Docker

安装
wget -qO- get.docker.com | bash

安装完成后,运行下面的命令,验证是否安装成功。
docker version

启动 Docker
systemctl start docker

查看 Docker 启动状态
systemctl status docker

允许 Docker 开机自启
systemctl enable docker

查看容器运行情况
docker ps -as

停止容器
docker stop $name

删除容器
docker rm $name

启动容器
docker start $name

docker run -e PASSWORD=9MLSpPmNt -p 8388:8388 -p 8388:8388/udp -d –name ss-libev –restart always shadowsocks/shadowsocks-libev

Windows10 通过USB 连接 iPhone 个人热点

由于疫情关系,被困老家只能远程工作。家里的宽带是广电的,垃圾的一匹约等于无法使用,被逼无奈只能通过手机开热点的方式提供网络给电脑。不知道什么原因通过无线的方式总是各种问题,无法搜索到热点,用着用着断掉了。每次都只能开关手机和电脑的飞行模式,特别麻烦而且很影响效率。今天看到手机个人热点界面上最下面有通过USB连接。
搜索一番 官方介绍在此。按照说明安装了反人类的iTunes,一系列操作以后还是不行。
按照惯例打开设备管理器,在其他设备发现一个黄色感叹号的iPhone。直接右键更新驱动程序,等待更新成功。执行扫描检测硬件改动。如下图所示:

把iPhone和数据线连起来就可以正常上网。

最新反馈:
使用USB连接会导致Windows10配置的系统IKev2 VPN无法连接,使用WiFi热点则正常。

OneDrive 资源占用过多解决方案

最近换了新电脑,迫穷硬盘只有256GB。把各种软件一装完感觉磁盘有点不够用。还好有Office365订阅,配合着1TB的OneDrive。磁盘空间得到解放,真香!用了一段时间以后发现这个OneDrive资源占用真的高,特别是同步的时候,占用40%的CPU和700多的内存。都快赶上内存大户Chrome了。搜索了一下发现如下解决方案,记录一下。

原因:
OneDrive的安装log出错了,卡在更新/安装上,占用大量资源。只删掉Log就可以。

Log位置:
C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\userTelemetryCache.otc
C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\userTelemetryCache.otc.session

解决方法:

  • OneDrive打开并且未注销登录的情况下结束OneDrive进程
  • 删除日志文件,或者直接清空C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\ 目录
  • 重新打开OneDrive既可

参考资料:Onedrive占用CPU过多的问题以及解决方法

VS2017使用MySQL和EntityFramework闪退解决方案

现象

1.VS2017新建工程使用NuGet添加最新版本的Mysql.Data和Mysql.Data.Entity引用。此处的版本分别为8.0.13和6.10.8
1.png

2.添加ADO.NET实体数据模型,设置相关数据库信息。正常情况下设置完数据库连接信息以后点击下一步会出现设置界面闪退情况。
2.png

原因

因为本机安装的mysql-connector-net的Mysql.Data.Entity的版本与项目引用的Mysql.Data.Entity版本不一致导致。必须确认两个DLL的版本号一致。

解决方案

MySQL官网下载6.10.8版本的的 mysql-connector-net。卸载原有版本,重新安装此版本即可。
另外如果在设置数据模型中无法添加MySQL连接,需要安装 MySQL for Visual Studio

已知问题

.NETFramework版本为v.4.5.2的也会出现闪退错误,建议选择v4.7.2

MySql.Data.Entity 6.10.8 与 MySql.Data 8.0.13不兼容,在调用SaveChanges方法的时候会报错 解决方案参考
stackoverflow

1.更新MySql.Data 版本

2.更新MySql.Data.Entity 版本

如果全部更新到兼容8.0 版本,那么mysql-connector-net的版本保持最新版本即可,正常引用版本如下:
3.png

Ubuntu Server 18.04 安装Redis

源安装

sudo apt-get update
sudo apt-get install redis-serve

在 /usr/bin 目录下会出现Redis 相关文件
微信图片_20181009115104.png

redis-bemchmark: 官方Redis性能测试工具
redis-server: Redis服务器
redis-cli: Redis命令行客户端
redis-check-aof: AOF文件修复工具
redis-check-dump: RDB文件检测工具

启动

redis-server #默认方式启动,非守护进程
redis-server /etc/redis/redis.conf #使用配置文件启动,守护进程

测试

微信图片_20181009115108.png

操作

redis-cli shutdown #关闭服务
/etc/init.d/redis-server stop # 停止
/etc/init.d/redis-server start # 启动
/etc/init.d/redis-server restart # 重启

修改配置文件

1.允许其他主机登录 bind 127.0.0.1 注释掉 protected-mode 修改成yes
2.最大内存占用 maxmemory
3.缓存淘汰机制 maxmemory-policy 默认为 noeviction 可以根据实际情况设置

noeviction: 不进行置换,表示即使内存达到上限也不进行置换,
所有能引起内存增加的命令都会返回error

allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据

volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据

allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据

volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据

volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据

Windows备份文件到阿里云OSS

最近在维护之前的一个项目,涉及到一些用户上传的图片。由于是企业应用,图片直接保存在了服务器本地,并未使用相关的图片存储服务。而且服务器也没做什么靠谱的备份方案,感觉不是很放心,想把用户上传的相关文件定期保存到阿里云的OSS。搜索了一下发现有一个基于Python的脚本,大致是使用osscmd这个工具,定期打包文件上传到服务器,并删除过期文件。看了一下要在服务器上安装Python,配置一下相关key。Python不是很懂,看了一下相关的SDK,比较简单,打算用.NET 造个轮子。
首先参考阿里云OSS .NET SDK 创建 AccessKeyId和 AccessKeySecret,再次软件的主要实现以下功能。
1.设置备份目录打包文件并上传到阿里云,支持断点续传。
2.由于OSS 存储空间有限,需要删除过期备份文件。
3.配合Windows计划任务,设置自动备份任务。

待完善功能:
使用Server酱发送备份消息到微信,但是想到备份任务都是在半夜执行,半夜突然收到一条微信提醒感觉不是很友好,所以就暂时没添加相关通知功能。或许可以考虑添加一个邮件通知。

工具下载 AliyunOSSBackUp

使用说明
1.解压文件夹
2.使用编辑器打开 AliyunOSSBackUp.exe.config 文件
3.根据说明修改配置信息
4.需要 .NETFramework,Version=v4.7.2

相关源代码参考 GitHub

Ubuntu18.04 配置 Hadoop 3.1.0 分布式集群

环境

操作系统 Ubuntu Server 18.04
Hadoop 版本: Hadoop 3.1.0

创建Hadoop用户设置SSH 免密登录

创建Hadoop账户

sudo useradd -m hadoop -s /bin/bash

设置密码

sudo passwd hadoop

增加管理员权限

sudo adduser hadoop sudo

更新系统

sudo apt-get update

安装SSH 配置SSH 免密登录

sudo apt-get install openssh-server
ssh localhost

首次登录会提示,输入Yes 按提示输入密码 就可以登录本机。
我们需要配置成免密登录。利用 ssh-keygen 生成密钥,并将密钥加入到授权中。

exit                       
cd ~/.ssh/                
ssh-keygen -t rsa            
cat ./id_rsa.pub >> ./authorized_keys  #

配置Java环境

下载安装包 上传到用户目录

创建目录作为JDK的安装目录,这里选择安装位置为:/usr/java/
解压文件带/usr/java/目录下,cd到文件下载的位置
修改jdk1.8.0_171为jdk。 方便配置jdk

sudo mkdir /usr/java
sudo tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/java/
sudo mv /usr/java/jdk1.8.0_171  /usr/java/jdk

配置环境变量

sudo vim /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin" 
export CLASSPATH=$JAVA_HOME/lib$JAVA_HOME/jre/lib 
export JAVA_HOME=/usr/java/jdk 
export JRE_HOME=${JAVA_HOME}/jre
sudo vim  /etc/profile
JAVA_HOME=/usr/java/jdk
export JRE_HOME=/usr/java/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

更新环境变量 查看Java是否安装成功

source /etc/environment
source /etc/profile
java -version

配置Hadoop

下载安装包 上传到用户目录

sudo tar -zxvf  /home/hadoop/hadoop-3.1.0.tar.gz -C /usr/local    # 解压到/usr/local中
sudo mv  /usr/local/hadoop-3.1.0/  /usr/local/hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop /usr/local/hadoop       # 修改文件权限
cd  /usr/local/hadoop  # 进入hadoop 安装目录
./bin/hadoop version #查看hadoop 版本

集群配置

为了方便配置建议关闭防火墙以及卸载iptables

sudo  ufw enable|disable
sudo apt-get remove iptables

修改Hosts文件

sudo vim /etc/hosts

172.16.111.233    hadoopmaster.quantilogic.com.cn
172.16.111.234    hadoopslave1.quantilogic.com.cn
172.16.111.235    hadoopslave2.quantilogic.com.cn

安装pdsh和ssh 确认master节点可以SSH免密登录到slave节点

#所有节点执行
sudo apt install ssh pdsh
sudo sh -c "echo ssh > /etc/pdsh/rcmd_default"

#master 主机执行
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopmaster.quantilogic.com.cn
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopslave1.quantilogic.com.cn
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopslave2.quantilogic.com.cn

修改Hadoop 配置文件

配置文件路径 /usr/local/hadoop/etc/hadoop。修改完成以后上传到所有的hadoop节点

core-site.xml

<configuration>
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoopmaster.quantilogic.com.cn:9000</value>
  </property>
  <property>
   <name>hadoop.tmp.dir</name>
   <value>/usr/local/hadoop/tmp</value>
  </property>
</configuration>

hadoop-env.sh

修改Java_Home路径

export JAVA_HOME=/usr/java/jdk

hdfs-site.xml

设置Hdfs文件保存份数以及路径

<configuration>
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<property>
  <name>dfs.name.dir</name>
  <value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
  <name>dfs.data.dir</name>
  <value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

workers

设置为slave节点的主机名

hadoopslave1.quantilogic.com.cn
hadoopslave2.quantilogic.com.cn

yarn-env.sh

增加java安装路径

export JAVA_HOME=/usr/java/jdk

yarn-site.xml

<configuration>
  <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>hadoopmaster.quantilogic.com.cn</value>
  </property>
  <property>
          <name>yarn.resourcemanager.webapp.address</name>
          <value>hadoopmaster.quantilogic.com.cn:8088</value>
  </property>
  <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
      <value>false</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
  </property>
</configuration>

测试运行

在master 节点执行相关脚本进行Hadoop 测试。

初始化HDFS ,只需要执行一次。

/usr/local/hadoop/bin/hdfs namenode -format myClusterName # 初始化HDFS

启动HDFS和yarm

/usr/local/hadoop/sbin/start-dfs.sh  #启动HDFS   
/usr/local/hadoop/sbin/start-yarn.sh #  启动yarn

在三台主机上执行jps 查看运行情况。正常情况下显示如下
master节点

13905 ResourceManager
13669 SecondaryNameNode
17752 Jps
13374 NameNode

slave节点

41413 Jps
39432 NodeManager
39244 DataNode

在浏览器输入master节点 http://master:9870 和http://master:8088 查看节点运行情况。

在HDFS中创建用户目录

./bin/hdfs dfs -mkdir -p /user/hadoop

将 ./etc/hadoop 中的 xml 文件作为输入文件复制到HDFS中

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

运行MapReduce作业 将输出保存到output文件夹

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

将运行结果取回本地,也可以直接浏览器http://master:9870 中查看

rm -r ./output    # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output     # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*

frp在Windows下后台运行

在windows下使用nssm 将frp注册为服务.使其开机自启动&后台运行.

下载nssm 解压nssm到frp根目录。

以管理员身份运行cmd。 输入 cd D:\frp_0.18.0_windows_amd64  回车

运行 nssm install frpc

点击path选择frp相关目录,输入相关参数。点击Install service 即可 安装为服务.如有安全软件阻挡,允许即可。在服务管理中查找frpc服务并启动。

 
热加载 ./frps -c ./frps.ini –reload

服务端后台运行脚本 nohup ./frps -c ./frps.ini &

找到进程   ps -ef|grep frps   或者 lsof -i:7000

结束进程  kill -9 xxxx

nginx 配置

server {
listen 80;
server_name *.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
}

 

关于2017

想了很久,不知道写什么标题。依稀记得去年在Twitter还是FaceBook上简短的写了关于2016年的总结以及2017年的计划。想找出来做个对比,可是没有找到。应该是删除了吧。2017年发生了很多事情,做了很多决定。也错过了很多机遇。好的坏的都过去了

2017总结

  1. 换了一家公司,重新开始漂泊,来了杭州。
  2. 工作还算顺利,压力不大,但是个人进步较小。
  3. 她也来了杭州。工作还算OK。
  4. 见了双方父母,虽然她家里人对我不满意。
  5. 房子提前半年交付了。有点措手不及。
  6. 爷爷去世了。
  7. 自己身体情况还算稳定。
  8. 今年回家的次数比往年都多,继续坚持。

2018计划

  1. 工作继续推进 开发新功能 重构原有模块
  2. 学习.NET Core
  3. 学习Python 会写爬虫
  4. 考驾照
  5. 开始锻炼身体。不限方式,控制体重
  6. 控制欲望,处理一些债务。
  7. 开始读书,一个月一本。
  8. 开始面对不愿意面对的,不逃避。