0%

安装youtubedr

1
2
brew install youtubedr
brew install ffmpeg

查看需要下载的视频信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[liudongkai@MBPR DIR]$ youtubedr info 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

Title: 第五季 | 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】
Author: 畫江湖動畫 Drawing Jianghu
Duration: 1m3s

+------+-----+---------+---------+----------+-----------+---------+--------------------------------------------+
| ITAG | FPS | VIDEO | AUDIO | AUDIO | SIZE [MB] | BITRATE | MIMETYPE |
| | | QUALITY | QUALITY | CHANNELS | | | |
+------+-----+---------+---------+----------+-----------+---------+--------------------------------------------+
| 271 | 25 | 1080p | | 0 | 17.2 | 2298678 | video/webm; codecs="vp9" |
| 400 | 25 | 1080p | | 0 | 15.5 | 2075227 | video/mp4; codecs="av01.0.08M.08" |
| 137 | 25 | 1080p | | 0 | 11.5 | 1540933 | video/mp4; codecs="avc1.640028" |
| 248 | 25 | 1080p | | 0 | 9.3 | 1246099 | video/webm; codecs="vp9" |
| 399 | 25 | 1080p | | 0 | 7.3 | 983101 | video/mp4; codecs="av01.0.08M.08" |
| 247 | 25 | 720p | | 0 | 5.3 | 710126 | video/webm; codecs="vp9" |
| 136 | 25 | 720p | | 0 | 4.6 | 613055 | video/mp4; codecs="avc1.4d401f" |
| 398 | 25 | 720p | | 0 | 4.2 | 562648 | video/mp4; codecs="av01.0.05M.08" |
| 22 | 25 | 720p | medium | 2 | 5.6 | 742192 | video/mp4; codecs="avc1.64001F, mp4a.40.2" |
| 135 | 25 | 480p | | 0 | 2.7 | 356167 | video/mp4; codecs="avc1.4d401e" |
| 244 | 25 | 480p | | 0 | 2.9 | 382376 | video/webm; codecs="vp9" |
| 18 | 25 | 360p | low | 2 | 3.6 | 487537 | video/mp4; codecs="avc1.42001E, mp4a.40.2" |
| 397 | 25 | 480p | | 0 | 2.2 | 298541 | video/mp4; codecs="av01.0.04M.08" |
| 134 | 25 | 360p | | 0 | 1.5 | 198119 | video/mp4; codecs="avc1.4d4015" |
| 243 | 25 | 360p | | 0 | 1.6 | 216536 | video/webm; codecs="vp9" |
| 396 | 25 | 360p | | 0 | 1.2 | 165822 | video/mp4; codecs="av01.0.01M.08" |
| 133 | 25 | 240p | | 0 | 0.7 | 100255 | video/mp4; codecs="avc1.4d400d" |
| 242 | 25 | 240p | | 0 | 0.8 | 103754 | video/webm; codecs="vp9" |
| 251 | 0 | | medium | 2 | 0.9 | 117014 | audio/webm; codecs="opus" |
| 140 | 0 | | medium | 2 | 1.0 | 129567 | audio/mp4; codecs="mp4a.40.2" |
| 395 | 25 | 240p | | 0 | 0.6 | 86192 | video/mp4; codecs="av01.0.00M.08" |
| 160 | 25 | 144p | | 0 | 0.4 | 47400 | video/mp4; codecs="avc1.4d400b" |
| 250 | 0 | | low | 2 | 0.4 | 58873 | audio/webm; codecs="opus" |
| 278 | 25 | 144p | | 0 | 0.4 | 55883 | video/webm; codecs="vp9" |
| 394 | 25 | 144p | | 0 | 0.4 | 48707 | video/mp4; codecs="av01.0.00M.08" |
| 249 | 0 | | low | 2 | 0.3 | 44740 | audio/webm; codecs="opus" |
+------+-----+---------+---------+----------+-----------+---------+--------------------------------------------+
  • 第三列的Video Quality,就是你想要下载的视频质量,也就是清晰度
  • 最后一列的MIMETYPE告诉你视频的文件类型,一般就选mp4

下载视频

1
youtubedr download -q 271 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

这只是下载了视频。。还没有下载音频!!
第五列 AUDIO CHANNELS 找那些为2的行,
第四行 AUDIO QUALITY 尽量选medium的,
第三行 VIDEO QUALITY 为空的,
最后一列 MIMETYPE 为audio/mp4,
我们定位到质量最好的音频ITAG为 140。

下载音频

1
youtubedr download -q 140 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

现在下载了一个视频和一个音频。。。还差合并这一步,我们得合并下就大功告成了!!

合并视频与音频

1
2
3
4
# 合并下载的音频与视频
ffmpeg -i '源视频文件.mp4' -i '源音频文件.m4a' -vcodec copy -acodec copy 输出文件.mp4

# 例:ffmpeg -i 'Peru 8K HDR 60FPS (FUHD).mp4' -i 'Peru 8K HDR 60FPS (FUHD).m4a' -vcodec copy -acodec copy output.mp4

Youtube-dl 这套强大的网络影片下载器,目前很多朋友可能会使用一些线上下载YouTube的网站,除了网页上满满的广告之外,还可能会常常遇到画质、音质不佳、下载速度慢,或是根本无法正常下载,毕竟 YouTube 也是随时在改版,虽然 Google 对于下载 YouTube 这件事算睁一只眼闭一只眼,但时不时还是会顺手防堵下载的漏洞。
而 youtube-dl 则是在 GitHub 上公开的开源软体,且他更新的频率相当惊人,几乎每隔几天就会更新,而更新内容大多都是针对各个影音网站的下载支持或功能修正。虽然 youtube-dl 没有 GUI,而是通过终端命令行操作,但非常轻量,且效率极佳。

安装 youtube-dl

请先安装 Homebrew,若你已经装好 Homebrew,则可以透过指令来安装 youtube-dl,打开终端并输入:

1
brew install youtube-dl

安装 ffmpeg

我们下载 YouTube 影片时可能会用到转档、嵌入字幕等功能,这些功能必须安装 ffmpeg 来达成。

1
brew install ffmpeg

运行

如上面所说,youtube-dl 没有GUI,而是通过终端操作,因此在应用程序里是找不到它的,必须使用终端来操作。

下载影片

在 macOS 中,终端预设目录是下载文件夹,但我们一般下载影片通常不会存在预设目录里,因此我们可以先指定下载目录。

选择好下载目录后,在终端输入 youtube-dl,后跟 YouTube 影片网址即可下载,以下载 YouTube 影片 第五季 | 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】 为例:

1
2
3
4
5
[liudongkai@MBPR DIR]$ youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

[youtube] aaIUjeg9MpY: Downloading webpage
[download] Destination: 第五季 _ 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】-aaIUjeg9MpY.mp4
[download] 3.9% of 5.54MiB at 64.92KiB/s ETA 01:23

按下回车之后 youtube-dl 便开始下载,在没有设定任何下载选项的状况下,可以看到这支影片以预设的 WebM 格式下载到下载项目资料夹中。在 YouTube 下载影片,来源的影片文件可能是各种格式、分段或是影音分开,这时通常都是靠 ffmpeg 将其转换为单一的影片文件。

影片转档

刚刚下载的影片是 WebM 格式储存(有时可能是 mov 或 mkv 等等)不过其实 WebM 通常用于网页播放,我们一般在电脑、手机播放或剪辑,其实还是以 mp4 最通用。因此,我们可以在 youtube-dl 下载影片时,在指令后方加入 -f mp4 即可指定下载成 mp4 文件格式:

1
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY' -f mp4

所以 -f 后面的文件格式也可以换成 3gp、aac、flv、m4a、mp3、mp4、ogg、wav、webm 等等。

下载完成的文件,以 YouTube 来说,下载的文件名称就是 影片名称-影片网址的编号.文件格式,如上文案例文件名为:第五季 _ 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】-aaIUjeg9MpY.mp4

指定最高质量下载

YouTube 通常会提供不同分辨率、不同码率的影片文件,我们可以通过指定编码序号进行下载。首先使用 -F 参数查看相关编码序号与质量(注意F为大写)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[liudongkai@MBPR DIR]$ youtube-dl -F 'https://www.youtube.com/watch?v=aaIUjeg9MpY' 
[youtube] aaIUjeg9MpY: Downloading webpage
[info] Available formats for aaIUjeg9MpY:
format code extension resolution note
249 webm audio only tiny 44k , webm_dash container, opus @ 44k (48000Hz), 342.00KiB
250 webm audio only tiny 58k , webm_dash container, opus @ 58k (48000Hz), 450.04KiB
251 webm audio only tiny 117k , webm_dash container, opus @117k (48000Hz), 894.48KiB
140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 990.85KiB
160 mp4 256x106 144p 47k , mp4_dash container, avc1.4d400b@ 47k, 25fps, video only, 362.21KiB
394 mp4 256x106 144p 48k , mp4_dash container, av01.0.00M.08@ 48k, 25fps, video only, 372.20KiB
278 webm 256x106 144p 55k , webm_dash container, vp9@ 55k, 25fps, video only, 427.04KiB
395 mp4 426x178 240p 86k , mp4_dash container, av01.0.00M.08@ 86k, 25fps, video only, 658.65KiB
133 mp4 426x178 240p 100k , mp4_dash container, avc1.4d400d@ 100k, 25fps, video only, 766.11KiB
242 webm 426x178 240p 103k , webm_dash container, vp9@ 103k, 25fps, video only, 792.85KiB
396 mp4 640x266 360p 165k , mp4_dash container, av01.0.01M.08@ 165k, 25fps, video only, 1.24MiB
134 mp4 640x266 360p 198k , mp4_dash container, avc1.4d4015@ 198k, 25fps, video only, 1.48MiB
243 webm 640x266 360p 216k , webm_dash container, vp9@ 216k, 25fps, video only, 1.62MiB
397 mp4 854x356 480p 298k , mp4_dash container, av01.0.04M.08@ 298k, 25fps, video only, 2.23MiB
135 mp4 854x356 480p 356k , mp4_dash container, avc1.4d401e@ 356k, 25fps, video only, 2.66MiB
244 webm 854x356 480p 382k , webm_dash container, vp9@ 382k, 25fps, video only, 2.85MiB
398 mp4 1280x532 720p 562k , mp4_dash container, av01.0.05M.08@ 562k, 25fps, video only, 4.20MiB
136 mp4 1280x532 720p 613k , mp4_dash container, avc1.4d401f@ 613k, 25fps, video only, 4.57MiB
247 webm 1280x532 720p 710k , webm_dash container, vp9@ 710k, 25fps, video only, 5.30MiB
399 mp4 1920x798 1080p 983k , mp4_dash container, av01.0.08M.08@ 983k, 25fps, video only, 7.34MiB
248 webm 1920x798 1080p 1246k , webm_dash container, vp9@1246k, 25fps, video only, 9.30MiB
137 mp4 1920x798 1080p 1540k , mp4_dash container, avc1.640028@1540k, 25fps, video only, 11.50MiB
400 mp4 2048x852 1080p 2075k , mp4_dash container, av01.0.08M.08@2075k, 25fps, video only, 15.49MiB
271 webm 2048x852 1080p 2298k , webm_dash container, vp9@2298k, 25fps, video only, 17.15MiB
18 mp4 640x266 360p 487k , avc1.42001E, 25fps, mp4a.40.2 (44100Hz), 3.64MiB
22 mp4 1280x532 720p 742k , avc1.64001F, 25fps, mp4a.40.2 (44100Hz) (best)

查看输出列表,找到画质音质最好的序号,案例中1920x798分辨率下视频最好的是271,音频最好的是140,得到这两个序号后,可以通过 youtube-dl -f 视频序号+音频序号 进行合并下载,这样下载后,视频和音频会自动合并。

1
2
3
4
5
6
[liudongkai@MBPR DIR]$ youtube-dl -f 271+140 'https://www.youtube.com/watch?v=aaIUjeg9MpY'
[youtube] aaIUjeg9MpY: Downloading webpage
WARNING: You have requested multiple formats but ffmpeg or avconv are not installed. The formats won't be merged.
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: 第五季 _ 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】-aaIUjeg9MpY.f271.webm
[download] 5.8% of 17.15MiB at 942.21KiB/s ETA 00:17

注意:-f 后跟的两个序号需要必须先视频后音频

嵌入字幕

有时 YouTube 影片会有不同语言的 CC 字幕可选择,我们可以透过 youtube-dl 将字幕嵌入到影片中。

首先我们先列出可以下载的字幕,以上文案例为例,在 youtube-dl 下载指令后方加入 –list-subs

1
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY' --list-subs

youtube-dl 分析 YouTube 网页后,在最下方 Available subtitles 列出可用的字幕包含:

  • zh-CN
  • en
  • zh
  • zh-TW

也就是简体中文、英文、中文、中文(台湾)这几种选择。

有关嵌入字幕的 youtube-dl 指令:

1
2
3
4
--write-sub #下载字幕
--embed-sub #嵌入字幕
—-sub-lang zh-CN #指定语言(以简体中文为例)
--all-subs #下载所有字幕(如果要将所有可用的字幕嵌入)

因此如果我们要下载嵌入简体中文字幕的 mp4 影片,指令为:

1
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY' --write-sub --embed-sub --sub-lang zh-CN -f mp4

支援嵌入字幕的影片格式包含:mp4、mkv 以及 webm;与格式工厂、HandBreak 那种将字幕直接写入在影片画面上的方式不同,使用 youtube-dl 嵌入的字幕是可以选择开启或关闭,以及选择不同语言的。此外,语系的代号大小写有别,必须一模一样,例如简体中文 zh-CN 的 CN 一定要是大写,非常重要!

下载完成后,以 QuickTime Player 打开,可以看到出现中文字幕的选项;若是以其他播放软体如 INNA 开启,也是可以选择字幕的,不过每个软件显示情况可能有所不同。

高级应用

指定格式以最优质量下载视频

1
2
3
4
5
6
# 指定视频为mp4格式、音频为m4a格式以最优质量下载youtube视频,其它网站暂未测试,官方说Windows下换单引号为双引号
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

# 或者直接使用默认设置,一般会下载两个webm文件,分别为视频和音频,
# 再自动合并成附带音轨的webm格式视频,测试发现也是最高分辨率,有4K就下4K版本
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

以最优质量下载音频

1
2
3
4
5
6
7
8
# 默认下载音频为opus格式
youtube-dl -x 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

# 下载mp3格式的音频
youtube-dl -x --audio-format mp3 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

# 最优质量下载音频
youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

下载播放列表中的视频

1
2
3
4
5
6
7
8
# 使用默认,与下载单个视频格式一样
youtbue-dl 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

# 可以使用选项--playlist-start, --playlist-end或者指定某个视频 --playlist-items
# --playlist-items 可设置多个值.如:"--playlist-items 1,2,5 下载1、2、5项

# 下载列表第二个及以后的所有视频
youtube-dl --playstart-start 2 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

限定分辨率下载播放列表中的视频

1
2
# 以最高480P下载列表第3个及以后的所有视频
youtube-dl --playlist-start 3 -f 'bestvideo[height<=480]+bestaudio/best[height<=480]' 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

下载播放列表中视频的音轨

1
2
3
4
# 使用--playlist-start、--playlist-end、--playlist-items来限定

# 最优质量下载播放列表中3-6这四个视频的音频文件,并转换成mp3格式
youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --playlist-start 3 --playlist-end 6 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

调用aria2加速下载

​解决使用youtube-dl默认下载时常常断开连接的问题。

1
youtube-dl --external-downloader aria2c --external-downloader-args "-x 16 -k 1M" 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

参数说明:

1
2
3
4
--external-downloader aria2c # 调用外部下载工具
--external-downloader-args # 外部下载工具指定参数
-x 16 # 启用aria2 16个线程,最多就支持16线程
-K 1M # 指定块的大小

参考:

You can use

1
brew install coreutils

And then whenever you need timeout, use

1
gtimeout

..instead. To explain why here’s a snippet from the Homebrew Caveats section:

Caveats

All commands have been installed with the prefix ‘g’.

If you really need to use these commands with their normal names, you can add a “gnubin” directory to your PATH from your bashrc like:

1
>PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Additionally, you can access their man pages with normal names if you add the “gnuman” directory to your MANPATH from your bashrc as well:

1
>MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

永久使用Parallels Desktop 17

本方法已通过几百名Mac玩家验证,亲测有效,是目前最佳方案!
本方法支持苹果Intel机型,也支持M1机型!支持最新Monterey系统,支持最新的PD17,还可以更新!
本方法可以全新安装,也可以直接启动已经安装好的Win11虚拟机或者Linux虚拟机,不会丢失数据!
本方法联网正常、网银正常、U盾、加密狗等USB设备连接正常,数字证书正常,总之就是官方正版绕过激活而已,所有正版的功能都可以正常使用!

方法一:修改时间

关闭PD软件,完全关闭
修改MacOS系统时间为2021年2月2日
开启PD虚拟机即可继续使用

注:此方法可以把标准版PD自动变成专业版。但时间不正确,会影响访问https的一些网页,可进入虚拟机后恢复正确时间来解决,不会影响虚拟机的运行。

方法二:指令启动

打开终端
输入:prlctl start "虚拟机名称" , 回车后直接进入

注:此方法可以启动若干虚拟机,虚拟机的名称可以在PD控制中心里查看。例如:prlctl start "Windows 11" ,虚拟机暂停后需要重新输入命令,可修改虚拟机暂停时间来解决。

prlctl

方法三:工具引导

工具下载:

注:此方法是目前最佳方法,重启电脑依然可以用,不用改变电脑任何设置,脱离PD激活管控,直接可以进入Windows虚拟机或者Linux虚拟机。以后退出虚拟机后,直接运行以上的小工具进入。虚拟机暂停或者休眠也可以用这个小工具唤醒。

Win11激活方式

1
2
3
4
5
# 逐行执行
slmgr /upk
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms zh.us.to
slmgr /ato

报错故障分析

因为无法验证开发者

第一种情况:首次运行这个小工具,可能会提示文件损坏,或提示无法验证开发者(如下图),记得在系统偏好设置—安全性和隐私中—通用允许这个程序即可

The command is available only in Parallels Desktop for Mac Pro or Business Edition

第二种情况:如果出现以上英文提示框报错,这是你的PD是标准版的,可以右键Docker栏的PD图标,选择关于Parallels Desktop,看是否有Pro Edition的标识,如果没有,就是标准版的,请安装专业版或者商业版的PD。或者用以上教程的第一种方法自动变成专业版,如果还是报错,说明的你的PD被锁定成标准版了。

Failed to get VM config

第三种情况:如果出现以上英文报错,就是你的虚拟机名称并非Windows 10,请关闭或者强行停止win10虚拟机,到PD控制中心重命名,注意大小写和空格。(Win10的标准名字是Windows 10,Win11的标准名字是Windows 11,Ubuntu的标准名字是Ubuntu Linux)

Failed to start the VM

第四种情况:如果出现类似以上的英文报错,说明你的虚拟机系统已经在 后台运行,可以手动运行PD,右键Docker栏的PD图标, 选择控制中心,查看虚拟机系统的运行状态,可以右键电源图标,选择关闭或者停止,然后重新运行我们的工具即可。 另外,如果你的虚拟机设置成融合模式,已经后台运行, 重复运行小工具也可能会有这个报错,建议关闭融合模式。

一、Orchestrator简介

简介

Orchestrator是一款开源对MySQL复制提供高可用、拓扑的可视化管理工具,采用go语言编写,它能够主动发现当前拓扑结构和主从复制状态,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换(failover)、手动主从切换(switchover)等功能。

Orchestrator后台依赖于MySQL存储元数据,能够提供Web界面展示MySQL集群的拓扑关系及实例状态,可以通过Web界面可更改MySQL实例的部分配置信息,同时也提供命令行和api接口,以便更加灵活的自动化运维管理。

Orchestrator对MySQL主库的故障切换分为自动切换和手动切换。手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.

相比于MHA,Orchestrator更加偏重于复制拓扑关系的管理,能够实现MySQL任一复制拓扑关系的调整,并在此基础上,实现MySQL高可用。Orchestrator本身也可以部署多个节点,通过raft分布式一致性协议,保证其自身高可用性。

项目地址:https://github.com/github/orchestrator
相关文档:
GitHub的MySQL高可用性实践
MySQL高可用实现:Orchestrator在MyData中的应用与优化
MySQL高可用实现:主从结构下ProxySQL中的读写分离
MySQL高可用复制管理工具 —— Orchestrator使用
Graceful Master Switchover With ProxySQL And Orchestrator

对比

对比项 Orchestrator MHA
高可用 共享后端/raft 自身单点,且仅支持一次自动failover
数据一致性 半同步保证 半同步保证和复制reley_log
优雅主从切换 支持 支持
运维管理 支持可视化、api管理,自动发现复制拓扑,丰富的hooks,故障管理 配置复杂,至少三台MySQL实例
社区活跃 活跃 停止维护

部署

部署结构

选择Orchestrator/raft,后端数据库选择sqlite,命令行工具选择orchestrator-client
可参考:https://github.com/github/orchestrator/blob/master/docs/raft.md
node1:172.16.9.2、node2:172.16.9.3、node3:172.16.9.4

部署过程

当前版本(update:20210909):

版本
orchestrator 3.2.6 epel
orchestrator-client 3.2.6 epel
jq 1.6 epel
oniguruma 6.8.2 epel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# rpm安装
yum -y install orchestrator orchestrator-client jq oniguruma

# 配置orchestrator-client
cat >> /etc/profile.d/orchestrator-client.sh << EOF
ORCHESTRATOR_AUTH_USER=admin
ORCHESTRATOR_AUTH_PASSWORD=admin
ORCHESTRATOR_API="http://172.16.9.2:3000/api http://172.16.9.3:3000/api http://172.16.9.4:3000/api"
EOF

# 启动
cp orchestrator.conf.json /etc
mkdir -p /opt/orchestrator
mkdir -p /opt/orchestrator/raft
mkdir -p /opt/orchestrator/hooks
systemctl start orchestrator


# 访问
orchestrator-client -c raft-leader
http://leader:3000

配置

实例关联配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# orchestrator账号权限
CREATE USER 'orchestrator'@'orch_host' IDENTIFIED BY 'orch_topology_password';
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orchestrator'@'orch_host';
GRANT SELECT ON mysql.slave_master_info TO 'orchestrator'@'orch_host'; -- 获取replication的访问凭证
GRANT SELECT ON meta.* TO 'orchestrator'@'%'; -- 获取集群的元数据信息

-- 元数据信息,用于orch的集群信息展示,目前仅作为展示,未直接使用
create database meta;
CREATE TABLE `cluster` (
`anchor` tinyint(4) NOT NULL COMMENT '集群标识',
`cluster_name` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称',
`cluster_domain` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称',
PRIMARY KEY (`anchor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 被监控的实例配置要求
# 配置用于发现从库信息
report_host和report_port

# 用于获取replication的访问凭证
master_info_repository = table

# 缩短故障检测时间 ,注意MASTER_HEARTBEAT_PERIOD的配置,默认为slave_net_timeout的一半,如果MASTER_HEARTBEAT_PERIOD大于slave_net_timeout,会出现主从频繁断开链接,导致MySQL实例错误日志增加的问题
slave_net_timeout = 4
CHANGE MASTER TO MASTER_CONNECT_RETRY=1, MASTER_RETRY_COUNT=86400, MASTER_HEARTBEAT_PERIOD=2;

# 搭配ProxySQL使用还需要默认设置实例read_only=1
# 启用GTID
Percona with GTID: promotable servers must have log_bin and log_slave_updates enabled. Replicas must be using AUTO_POSITION=1

1
2
$ brew link python
Linking /usr/local/Cellar/python/3.7.3... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

解决方法:

1
2
$ sudo mkdir /usr/local/Frameworks
$ sudo chown $(whoami):admin /usr/local/Frameworks

验证:

1
2
$ brew link python
Linking /usr/local/Cellar/python/3.7.3... 1 symlinks created

参考:
https://github.com/Homebrew/homebrew-core/issues/19286

HTTPS(HTTP over SSL)是以安全为目标的 HTTP 通道,可以理解为 HTTP + SSL/TLS,即在 HTTP 下加入 SSL/TLS 层作为安全基础。其中 TLS 的前身是 SSL,目前广泛使用的是 TLS 1.2。

TLS性能调优

TLS 被普遍认为会使服务变慢,主要是早期 CPU 还很慢,只有少数站点买得起加密服务。但是今天计算能力不再是 TLS 的瓶颈。2010年,Google 默认情况下对其电子邮件服务上启用了加密,之后他们表示 SSL/TLS 不再花费昂贵的计算成本:

1
在我们的前端服务上,SSL/TLS 计算只占 CPU 负载的不到 1%,每个连接只占不到 10KB 的内存,以及不到 2% 的网络开销。

1. 延迟和连接管理

网络通讯的速度由两个主要因素决定:带宽和延迟。

  • 带宽:用来衡量在单位时间内有多少数据可发送
  • 延迟:描述一个消息从一端发送到另一端接收所需的时间

其中,带宽是次要因素,因为通常你可以随时购买更多带宽;而延迟则是无法避免的,因为它是在数据通过网络连接传输时被强加的限制。

延迟对 TLS 影响特别大,因为它有自己精心设计的握手,在连接初始化的时候额外增加了两个往返。

1.1 TCP优化

每个 TCP 连接都有一个称为 拥塞窗口 的速度极限,这个窗口最初时较小,在可靠性能保证的情况下随时间增长。这种机制被称为 慢启动

因此,对于所有的 TCP 连接,启动速度很慢,对于 TLS 连接情况则更糟糕,因为 TLS 握手协议消耗了宝贵的初始连接字节(当拥塞窗口较小时)。如果拥塞窗口足够大,那么慢启动不会有额外的延迟。但是,如果较长的握手协议超过了拥塞窗口的大小,发送方必须将它拆分为两块,先发送一块,等待确认(一个往返),增加拥塞窗口,然后再发送剩下的部分。

1.1.1 拥塞窗口调优

启动速度限制被称为 初始拥塞窗口。RFC6928 建议初始拥塞窗口设置为10个网络段(约15KB)。早期的建议是使用2-4个网络段起步。

在旧版本的Linux平台上,可以改变路由的初始拥塞窗口:

1
# ip route | while read p; do ip route change $p initcwnd 10; done

1.1.2 防止空闲时慢启动

慢启动可以作用于一段时间内没有任何流量的连接上,降低其速度,并且速度下降地非常快。 在 Linux 上,可以在连接空闲时禁用慢启动:

1
# sysctl -w net.ipv4.tcp_slow_start_after_idle=0

可以通过将该设置添加到 /etc/sysctl.conf 配置使其永久生效。

1.2 长连接

大部分情况下 TLS 性能影响集中在每一个连接的开始握手阶段。一个重要的优化技术是在连接数允许的情况下尽可能保持每个连接不断开。

现在的趋势是使用事件驱动的 WEB 服务器,通过使用固定的线程池(甚至单个线程)处理所有通讯,从而减少每个连接的成本以及被攻击的可能性。

长连接的缺点是在最后一个 HTTP 连接完成之后,服务器在关闭连接之前会等待一定时间,虽然一个连接不会消耗太多的资源,但是降低了服务器的总体伸缩性。长连接适用于客户端突发大量请求的场景。

1
当配置较大的长连接超时时间时,限制并发连接数以免服务器超负荷是至关重要的。通过测试调整服务器,使其运行在容量限制内。如果 TLS 是由 OpenSSL 处理的,请确保服务器正确设置 SSL_MODE_RELEASE_BUFFERS 标识。

1.3 HTTP/2.0

HTTP/2.0 是 二进制协议,具备 多路复用头部压缩 等特性,可以提升性能。

1.4 CDN

使用 CDN 可以实现世界级的性能,它利用地理上分散的服务器提供边缘缓存和流量优化。

当用户离你的服务器越远,访问网络就越慢,在这种情况下连接建立是一个很大的限制因素。为了服务器尽可能靠近最终用户,CDN 经营着大量的地理分布的服务器,它可以提供两种降低延迟的方式,即边缘缓存和连接管理。

1.4.1 边缘缓存

由于 CDN 服务器贴近用户,可以将你的文件提供给用户,就像你的服务器真的在那里一样。

1.4.2 连接管理

如果你的内容是动态的、用户特定的,那么久无法通过 CDN 缓存数据。但是,一个不错的 CDN 即使没有任何缓存,也能通过连接管理提供帮助,那就是它可以通过长时间保持的长连接消除大部分建立连接的成本。

建立连接期间大部分的时间都花在等待上面。为了尽量较少等待,CDN 通过自己的基础设置将流量路由到距离目的地最近的一个点。因为是 CDN 自己完全可控的服务器,它可以内部保持长连接很长一段时间。

当使用 CDN 时,用户连接到最近的 CDN 节点,这只有很短的距离,TLS 握手的网络延迟也很短;而 CDN 与服务器之间可以直接复用已有的远距离长连接。这意味着与 CDN 快速初始 TLS 握手后,用户与服务器就建立了有效连接。

2. TLS协议优化

在连接管理之后我们可以专注于 TLS 的性能特征,具备对 TLS 协议进行安全和速度调优的知识。

2.1 密钥交换

使用 TLS 最大的成本除了延迟以外,就是用于安全参数协商的 CPU 密集型加密操作。这部分通讯称为密钥交换(key exchange)。密钥交换的 CPU 消耗很大程度上取决于服务器选择的私钥算法、私钥长度和密钥交换算法。

  • 密钥长度
    破解密钥的难度取决于密钥的长度,密钥越长越安全。但较长的密钥同时也意味着需要花费更多时间进行加密和解密。

  • 密钥算法
    目前有两种密钥算法可用:RSA 和 ECDSA。当前 RSA密钥算法推荐最小长度2048位(112位加密强度),将来更多会部署3072位(128位加密强度)。ECDSA在性能和安全性上要优于 RSA,256位的 ECDSA (128位加密强度)提供和 3072位的 RSA 一样的安全性,却有更好地性能。

  • 密钥交换
    目前有两种可用的密钥交换算法:DHE 和 ECDHE。其中 DHE 太慢不推荐使用。 密钥交换算法的性能取决于配置的协商参数长度。对于 DHE,常用的1024和2048位,分别提供80和112位安全等级。对于 ECDHE,安全和性能取决于一种称为 曲线 的东西。secp256r1提供128位安全等级。

你在实践中不能随意组合密钥钥和密钥交换算法,但可以使用由协议指定的组合。

2.2 证书

一次完整的 TLS 握手期间,服务器会把它的证书链发送给客户端验证。证书链的长度和正确性对握手的性能有很大影响。

  • 使用尽可能少的证书
    证书链里的每个证书都会增大握手数据包,证书链中包含太多证书有可能导致 TCP 初始拥塞窗口溢出。

  • 只包含必需的证书
    证书链里包含非必需证书是个常见错误,每个这样的证书会给握手协议额外增加1-2KB。

  • 提供完整的证书链
    服务器必须提供一个被根证书信任的完整证书链。

  • 使用椭圆曲线证书链
    因为 ECDSA 私钥长度使用更少的位,所以 ECDSA 证书会更小。

  • 避免同一张证书绑定过多域名
    每增加一个域名都会增加证书的大小,对于大量域名来说会有明显的影响。

2.3 吊销检查

虽然证书吊销状态在不断变化,并且用户代理对证书吊销的行为差异很大,但是作为服务器,要做的就是尽可能快地传递吊销信息。

  • 使用 OCSP
    信息的证书 OCSP 被设计用于提供实时查询,允许用户代理只请求访问网站的吊销信息,查询简短而快速(一个HTTP请求)。相比之下 CRL 是一个包含大量被吊销证书的列表。

  • 使用具有快速且可靠的 OCSP 响应程序的 CA
    不同 CA 之间的 OCSP 响应程序性能不同,在你向 CA 提交之前先检查他们的历史 OCSP 响应程序。 另一个选择 CA 的标准是它更新 OCSP 响应程序的速度。

  • 部署 OCSP stapling
    OCSP stapling 是一种允许在 TLS 握手中包含吊销信息(整个OCSP响应)的协议功能。启用之后,通过给予用户代理进行吊销检查的全部信息以带来更好地性能,可以省去用户代理通过独立的连接获取 CA 的 OCSP 响应程序来查询吊销信息。

2.4 协议兼容

如果你的服务器与一些新版本协议的特性(例如TLS 1.2)不兼容,浏览器可能需要通过与服务器进行多次尝试,才能协商一个加密的连接。确保良好的 TLS 性能的最好方式是升级最新的 TLS 协议栈以支持较新的协议版本和扩展。

2.5 硬件加速

随着 CPU 速度的不断提高,基于软件的 TLS 实现在普通 CPU 上已经运行得足够快,无需专门的加密硬件就能处理大量的 HTTPS 请求。但安装加速卡或许能够提升速度。

参考文章
《HTTPS权威指南:在服务器和Web应用上部署SSL/TLS和PKI》

via: https://www.cnblogs.com/cyfonly/p/9061262.html