Skip to content

Commit

Permalink
20190723整理
Browse files Browse the repository at this point in the history
  • Loading branch information
ApesPlan committed Jul 23, 2019
1 parent 759adcd commit cb466ad
Show file tree
Hide file tree
Showing 105 changed files with 2,212 additions and 614 deletions.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"go.formatTool": "goimports"
}
32 changes: 32 additions & 0 deletions RabbitMq/common.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
docker run -d --hostname my-rabbit --name rmq -p 15672:15672 -p 5672:5672 -p 25672:25672 -e RABBITMQ_DEFAULT_USER=用户名 -e RABBITMQ_DEFAULT_PASS=密码 rabbitmq:3-management

5672:连接生产者、消费者的端口。
15672:WEB管理页面的端口。
25672:分布式集群的端口。

Producer:生产者,负责生产消息。
Connect:连接,生产者与RMQ Server之间建立的TCP连接。
Channel:信道,一条连接可包含多条信道,不同信道之间通信互不干扰。考虑下多线程应用场景,每个线程对应一条信道,而不是对应一条连接,这样可以提高性能。
body:消息主体,要传递的数据。
exchange:交换器,负责把消息转发到对应的队列。交换器本身没有缓存消息的功能,消息是在队列中缓存的,如果队列不存在,则交换器会直接丢弃消息。常用的有四种类型的交换器:direct、fanout、topic、headers。不同类型的交换器有不同的交换规则,交换器会根据交换规则把消息转发到对应的队列。
exchangeName:交换器名称,每个交换器对应一个名称,发送消息时会附带交换器名称,根据交换器名称选择对应的交换器。
queue:队列,用于缓存消息。
BandingKey:绑定键,一个队列可以有一个到多个绑定键,通过绑定操作可以绑定交换器和队列,交换器会根据绑定键的名称找到对应的队列。
RotingKey:路由键,发送消息时,需要附带一条路由键,交换器会对路由键和绑定键进行匹配,如果匹配成功,则消息会转发到绑定键对应的队列中。
Consumer:消费者,负责处理消息。
















8 changes: 8 additions & 0 deletions docker/common.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ Error response from daemon: pull access denied for ceph/mon, repository does not
docker login
apesplan

容器
UTS 主机名和域名
IPC 信号量、消息队列和共享内存
PID 进程编号
NETwork 网络设备、网络栈、端口等
Mount 挂载点(文件系统)
User 用户和用户组

privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
Expand Down
37 changes: 34 additions & 3 deletions docker/docker快速搭建ceph.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ docker run -itd --name mymon --network ceph -e MON_NAME=ceph_mon -e MON_IP=172.1

# 1. 创建Ceph专用网络
docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network
docker network inspect ceph-network

# 2. 删除旧的ceph相关容器
docker rm -f $(docker ps -a | grep ceph | awk '{print $1}')
# 3. 清理旧的ceph相关目录文件,加入有的话
Expand All @@ -19,8 +19,6 @@ mkdir -p /www/ceph /var/lib/ceph/osd /www/osd/
chown -R 64045:64045 /var/lib/ceph/osd/
chown -R 64045:64045 /www/osd/
# 5. 创建monitor节点
// 172.19.0.1
// docker run -d --name monnode --network ceph --ip 172.19.0.2 -e MON_NAME=monnode -e MON_IP=172.19.0.2 -e CEPH_PUBLIC_NETWORK=172.19.0.0/24 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon mon
docker run -itd --name monnode --network ceph-network --ip 172.20.0.10 -e MON_NAME=monnode -e MON_IP=172.20.0.10 -v /www/ceph:/etc/ceph ceph/mon
# 6. 在monitor节点上标识3个osd节点
docker exec monnode ceph osd create
Expand All @@ -43,7 +41,18 @@ docker exec monnode ceph -s



docker network inspect ceph-network
// 172.19.0.1
// docker run -d --name monnode --network ceph --ip 172.19.0.2 -e MON_NAME=monnode -e MON_IP=172.19.0.2 -e CEPH_PUBLIC_NETWORK=172.19.0.0/24 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon mon
docker run -d --name monnode --network ceph --ip 172.19.0.2 -e MON_NAME=monnode -e MON_IP=172.19.0.2 -e CEPH_PUBLIC_NETWORK=172.19.0.0/24 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon mon
docker run -d --name monnode1 --network ceph --ip 172.19.0.3 -e MON_NAME=monnode1 -e MON_IP=172.19.0.3 -e CEPH_PUBLIC_NETWORK=172.19.0.0/24 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon mon
docker run -d --name monnode2 --network ceph --ip 172.19.0.4 -e MON_NAME=monnode2 -e MON_IP=172.19.0.4 -e CEPH_PUBLIC_NETWORK=172.19.0.0/24 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon mon

docker run -d --name osdnode --network ceph -e OSD_TYPE=directory -e MON_NAME=monnode -e MON_IP=172.19.0.10 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /data/ceph/0:/var/lib/ceph/osd -v /etc/localtime:/etc/localtime:ro ceph/daemon osd
docker run -d --name osdnode1 --network ceph -e OSD_TYPE=directory -e MON_NAME=monnode -e MON_IP=172.19.0.10 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /data/ceph/1:/var/lib/ceph/osd -v /etc/localtime:/etc/localtime:ro ceph/daemon osd
docker run -d --name osdnode2 --network ceph -e OSD_TYPE=directory -e MON_NAME=monnode -e MON_IP=172.19.0.10 -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /data/ceph/2:/var/lib/ceph/osd -v /etc/localtime:/etc/localtime:ro ceph/daemon osd

docker run -d --name gwnode --network ceph --ip 172.19.0.20 -p 8100:80 -e RGW_NAME=gwnode -v /data/ceph_node/ceph_mon/config:/etc/ceph -v /data/ceph_node/ceph_mon/data:/var/lib/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon rgw


[global]
Expand Down Expand Up @@ -74,3 +83,25 @@ osd crush update on start = false
mon addr = 172.19.0.2:8000
[client]
rbd default format = 2


[global] #全局,要将配置设置应用于整个集群,请在[global]下输入配置设置。
fsid = 9ec20e59-1033-4505-920d-113183167b31 #CLUSTER ID,每个Ceph存储集群都有唯一的标识符(fsid)。
mon initial members = ceph-153,ceph-154,ceph-155 #初始成员,建议最少运行三个ceph监视器在生产存储集群,以确保高可用性。启动期间集群中初始监视器的ID。 如果指定,Ceph需要奇数个监视器来形成初始定额
mon host = 192.168.1.153,192.168.1.154,192.168.1.155 #这里是主机名并非主机IP,当然如果是主机IP的形式,可以省略下面的[mon]
auth_cluster_required = cephx #如果启用了,集群守护进程(如 ceph-mon 、 ceph-osd 和 ceph-mds )间必须相互认证。可用选项有 cephx 或 none 。默认是cephx启用。
auth_service_required = cephx #如果启用,客户端要访问 Ceph 服务的话,集群守护进程会要求它和集群认证。可用选项为 cephx 或 none 。类型:String是否必需:No默认值:cephx.
auth_client_required = cephx #如果启用,客户端会要求 Ceph 集群和它认证。可用选项为 cephx 或 none 。 默认就是cephx。
public_network = 192.168.1.0/24 #设置在[global]。可以指定以逗号分隔的子网。这是分配集群的外网网段,即对外数据交流的网段。
osd journal size = 1024 #缺省值为0。你应该使用这个参数来设置日志大小。日志大小应该至少是预期磁盘速度和filestore最大同步时间间隔的两倍。如果使用了SSD日志,最好创建大于10GB的日志,并调大filestore的最小、最大同步时间间隔。
osd pool default size = 2 #osd的默认副本数,如果不设置默认是3份。
osd pool default min size = 1 #缺省值是0.这是处于degraded状态的副本数目,它应该小于osd pool default size的值,为存储池中的object设置最小副本数目来确认写操作。即使集群处于degraded状态。如果最小值不匹配,Ceph将不会确认写操作给客户端。
osd pool default pg num = 333 #每个存储池默认的pg数
osd pool default pgp num = 333 #PG和PGP的个数应该保持一致。PG和PGP的值很大程度上取决于集群大小。
osd crush chooseleaf type = 1 #CRUSH规则用到chooseleaf时的bucket的类型,默认值就是1.
[osd]
osd_journal_size = 5120
[mon]
mon osd allow primary affinity = true


11 changes: 11 additions & 0 deletions docker/docker快速搭建rabbitmq.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
172.20.0.1
docker network create -d bridge rabbitmq
docker inspect 92

docker run -d --hostname rabbit-svr --name rabbit \
-p 5672:5672 -p 15672:15672 -p 25672:25672 \
-v /data/rabbitmq:/var/lib/rabbitmq rabbitmq:managment

http://192.168.43.25:15672/
guest
guest
9 changes: 9 additions & 0 deletions git/common.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
ssh-keygen -t rsa -C "[email protected]" // 三次回车即生成ssh-key,然后配置好
git config --list // 查看config
git config --global user.name "wangchonglin"
git config --global user.email [email protected]

git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
git config --global --unset http.proxy
git config --global --unset https.proxy

git init // 初始化本地版本库
git status // 查看本地版本库状态
git add . // 跟踪所有改动过的文件
Expand Down
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/ApesPlan/note

go 1.12
3 changes: 2 additions & 1 deletion go/gen/common.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// 例子
gen --connstr "root:root@tcp(127.0.0.1:3306)/cherry_ad?&parseTime=True" --package model --database cherry_ad --table payment_log --json --gorm --guregu --rest

// 非api 默认在model下
gen --connstr "root:root@tcp(127.0.0.1:3306)/cherry_custom?&parseTime=True" --table user_open_access_token --json --gorm
sqlType = goopt.String([]string{"--sqltype"}, "mysql", "sql database type such as mysql, postgres, etc.")
sqlConnStr = goopt.String([]string{"-c", "--connstr"}, "nil", "database connection string")
sqlDatabase = goopt.String([]string{"-d", "--database"}, "nil", "Database to for connection")
Expand Down
67 changes: 52 additions & 15 deletions go/go/common.txt
Original file line number Diff line number Diff line change
@@ -1,20 +1,57 @@
go build -o 路径+文件.exe(输出) 路径+文件名(输入)
// 编译到到指定文件
go build -o 路径+文件.exe(输出) 路径+文件名(输入)
go build src/golang.org/x/tools/cmd/goimports // 编译并生成可执行文件到当前文件下
go install ... 编译并生成可执行文件到bin

go get -v github.com/gpmgo/gopm // 下载编译好这个包,就可以不用翻墙下载go包
eg: gopm get g -v -u golang.org/x/tools/cmd/goimports

值接收者是go语言特有
值/指针接收者均可接收值/指针,主要以接收者的形参为准

如何扩充系统类型或者别人的类型
定义别名
使用组合
// 值接收者是go语言特有
// 值/指针接收者均可接收值/指针,主要以接收者的形参为准

linux gopath
~/go
sdk 建议放在/opt
在/etc/profile文件下添加三条语句
export GOROOT=/opt/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=$HOME/goprojects/
// 如何扩充系统类型或者别人的类型
定义别名
使用组合

echo $GOPATH //打印gopath
// linux 安装go
// linux gopath
~/go
sdk 建议放在/opt
在/etc/profile文件下添加三条语句
export GOROOT=/opt/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=$HOME/goprojects/

不要通过共享内存来通信,要通过通信来共享内存
//打印gopath
echo $GOPATH

// 不要通过共享内存来通信,要通过通信来共享内存

// 切片常用操作
// 初始化
s := make([]int, 10, 32)
// 复制
copy(s1, s2) // s2 覆盖 s1 中相同键的值[2,3,4,5,0,0,0,0,0]
// 删除中间值
s := append(s[:3], s[4:]...)
// pop
front := s[0]
s1 := s[1:]
tail := s[len(s) - 1]
s1 := s[:len(s) - 1]

// map 常用操作
// 初始化
make(map[string]int)
// 获取元素:m[key]
// key不存在时,获取value类型的初始值
// 用value, ok := m[key]来判断是否存在key
// 删除
delete(m, "name")

map 的range不保证顺序变量,如需顺序需要手动对key排序
len获取元素个数
map使用的hash表,必须相同才相等
除了slice,map,function的内建类型都可以作为key
Struct类型不包含上述字段,也可以作为key
5 changes: 4 additions & 1 deletion go/go/go mod.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
// 初始项目go mod,给项目生成go.mod
go mod init XXX
GO111MODULE on 开启gomod go get下载时也是下载到gopath/pkg/mod下

// GO111MODULE on 开启gomod go get下载时也是下载到gopath/pkg/mod下
默认值为auto,如果当前目录里有go.mod文件,就使用go modules,否则使用旧的GOPATH和vendor机制
34 changes: 34 additions & 0 deletions go/go/json处理.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// 将JSON数据解析成结构体 json.Unmarshal(xxx)
// 将结构体解析成JSON数据 json.Marshal(xxx)

// Marshal
//与json数据对应的结构体
type Server struct {
ServerName string `json:"serverName1"`
ServerIP string `json:"serverIP2"`
}
// 数组对应slice
type ServerSlice struct {
Servers []Server `json:"servers3"`
}

func main() {
var s ServerSlice
s.Servers = append(s.Servers,Server{ServerName:"TianJin", ServerIP:"127.0.0.1"})
s.Servers = append(s.Servers,Server{ServerName:"BeiJing", ServerIP:"127.0.0.1"})
if data, err := json.Marshal(s); err == nil {
fmt.Printf("%s\n", data)
}
}
---output---
{"Servers":[{"ServerName":"TianJin","ServerIP":"127.0.0.1"}, {"ServerName":"BeiJing","ServerIP":"127.0.0.1"}]}

// Unmarshal
data:= `{"Servers":[{"ServerName":"TianJin","ServerIP":"127.0.0.1"}, {"ServerName":"BeiJing","ServerIP":"127.0.0.1"}]}`
str:=[]byte(data)

//1.Unmarshal的第一个参数是json字符串,第二个参数是接受json解析的数据结构。
//第二个参数必须是指针,否则无法接收解析的数据,如stu仍为空对象StuRead{}
//2.可以直接stu:=new(StuRead),此时的stu自身就是指针
stuUnmarshal := ServerSlice{}
err = json.Unmarshal(str,&stuUnmarshal)
45 changes: 42 additions & 3 deletions go/go/panic.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
停止当前函数执行
一直向上返回,执行每一层的defer
如果没有遇到recover,程序退出
// 停止当前函数执行
// 一直向上返回,执行每一层的defer
// 如果没有遇到recover,程序退出

func main(){
defer_call()
fmt.Println("333 Helloworld")
}

func defer_call() {
defer func(){
fmt.Println("11111")
}()
defer func(){
fmt.Println("22222")
}()

defer func() {
if r := recover(); r!= nil {
fmt.Println("Recover from r : ",r)
}
}()

defer func(){
fmt.Println("33333")
}()

fmt.Println("111 Helloworld")

panic("Panic 1!")

panic("Panic 2!")

fmt.Println("222 Helloworld")
}

// 111 Helloworld
// 33333
// Recover from r : Panic 1!
// 22222
// 11111
// 333 Helloworld
35 changes: 31 additions & 4 deletions go/go/recover.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
仅在defer调用中使用
获取panic的值
如果无法处理,可重新panic
// 仅在defer调用中使用
// 获取panic的值
// 如果无法处理,可重新panic

func tryRecover() {
defer func() { // 如果有recover 抛出的panic就会被recover捕获
Expand All @@ -9,5 +9,32 @@ func tryRecover() {
fmt
}
}()
panic(error.New(""))
panic(error.New("")) // 抛出的panic就会被recover捕获 程序继续进行
}

// 打印结果
// 33333
// Recover from r : Panic 1!
// 22222
// 333 Helloworld
func main(){
defer_call()
fmt.Println("333 Helloworld")
}
func defer_call() {
defer func(){
fmt.Println("22222")
}()

defer func() {
if r := recover(); r!= nil {
fmt.Println("Recover from r : ",r)
}
}()

defer func(){
fmt.Println("33333")
}()

panic("Panic 1!")
}
7 changes: 4 additions & 3 deletions go/go/url被转化.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
content = strings.Replace(content, "\\u003c", "<", -1)
content = strings.Replace(content, "\\u003e", ">", -1)
content = strings.Replace(content, "\\u0026", "&", -1)
// 如果路由中的&被转换成了\u0026
content = strings.Replace(content, "\\u003c", "<", -1)
content = strings.Replace(content, "\\u003e", ">", -1)
content = strings.Replace(content, "\\u0026", "&", -1)
Loading

0 comments on commit cb466ad

Please sign in to comment.