一、概述

Apiserver是 kubernetes 集群交互的入口,封装了核心对象的增删改查操作,提供了 RESTFul 风格的 API 接口,通过etcd来实现持久化并维护对象的一致性。所以在整个K8S集群中,Apiserver服务至关重要,一旦宕机,整个K8S平台将无法使用,所以保障企业高可用是运维必备的工作之一。

二、安装keepalived

1.安装keepalived

yum install keepalived.x86_64

2.修改配置

cd /etc/keepalived/
vi keepalived.conf
  • 修改master1配置文件keepalived.conf

global_defs {
 router_id keepalive-master}vrrp_script check_apiserver {
 # 检测脚本路径
 script "/etc/keepalived/check-apiserver.sh"
 # 多少秒检测一次
 interval 3
 # 失败的话权重-2
 weight -2}vrrp_instance VI-kube-master {
   state MASTER  # 定义节点角色
   interface eth0 # 网卡名称
   virtual_router_id 68
   priority 100
   dont_track_primary
   advert_int 3
   virtual_ipaddress {
     # 自定义虚拟ip
     192.168.1.199
   }
   track_script {
       check_apiserver   }}
  • 修改master2配置文件keepalived.conf

global_defs {
 router_id keepalive-master}vrrp_script check_apiserver {
 # 检测脚本路径
 script "/etc/keepalived/check-apiserver.sh"
 # 多少秒检测一次
 interval 3
 # 失败的话权重-2
 weight -2}vrrp_instance VI-kube-master {
   state BACKUP  # 定义节点角色
   interface eth0  # 网卡名称
   virtual_router_id 68
   priority 99
   dont_track_primary
   advert_int 3
   virtual_ipaddress {
     # 自定义虚拟ip
     192.168.1.199
   }
   track_script {
       check_apiserver   }}
  • 修改master3配置文件keepalived.conf

global_defs {
 router_id keepalive-master}vrrp_script check_apiserver {
 # 检测脚本路径
 script "/etc/keepalived/check-apiserver.sh"
 # 多少秒检测一次
 interval 3
 # 失败的话权重-2
 weight -2}vrrp_instance VI-kube-master {
   state BACKUP  # 定义节点角色
   interface eth0  # 网卡名称
   virtual_router_id 68
   priority 99
   dont_track_primary
   advert_int 3
   virtual_ipaddress {
     # 自定义虚拟ip
     192.168.1.199
   }
   track_script {
       check_apiserver   }}

3.重启keepalived

systemctl start keepalived.service

systemctl status keepalived.service

虚拟vip出现在网卡上



作者:sknfie
链接:https://www.jianshu.com/p/4b4725a1e6c9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


一、什么sftp服务器
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。本身没有守护进程,是包含在ssh中,端口也是22。
sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装。

二、安装sftp服务器

创建用户组

groupadd sftpgroup

创建完成之后使用cat /etc/group命令组的信息

cat /etc/group

创建用户并且加入到这个用户组,并修改mysftp用户的密码

useradd -g sftpgroup -M -s /sbin/nologin  mysftp
passwd  mysftp

密码 Java_521

创建/data/sftp/mysftp目录,并将它指定为mysftp组用户的home目录

mkdir -p /data/sftp/mysftp
usermod -d /data/sftp/mysftp  mysftp

设置Chroot目录权限

chown root:sftpgroup /data/sftp/mysftp
chmod 755 /data/sftp/mysftp

新建一个目录供stp用户mysftp上传文件,这个目录所有者为mysftp所有组为sftp,所有者有写入权限所有组无写入权限

mkdir -p /data/sftp/mysftp/project
chown -R mysftp:sftpgroup /data/sftp/mysftp/project
chmod 755 /data/sftp/mysftp/project

chmod 755 设置用户的权限为

三、修改配置文件

vi /etc/ssh/sshd_config
将Subsystem sftp /usr/libexec/openssh/sftp-server 注释掉
在文件末尾添添加 加以下几行
Subsystem sftp internal-sftp
Match Group sftpgroup
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory  /data/sftp/mysftp
ForceCommand internal-sftp

四、测试sftp

重启sshd服务,然后测试 sftp 用户名@ip地址

systemctl restart sshd.service

sftp本地登录

sftp mysftp@127.0.0.1

测试上传

put abc.txt

测试下载

get abc.txt /opt



作者:老街老街
链接:https://www.jianshu.com/p/e4207bf09185
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


看看一般情况下网卡基本配置是怎么样的?

使用DHCP自动获取IP:

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

NAME=eth0

TYPE=Ethernet

IPV6INIT=no

HWADDR=xx:xx:xx:xx:xx:xx

如果是手工配静态IP:

TYPE=Ethernet

BOOTPROTO=static

NAME=eth0

ONBOOT=yes

IPADDR=192.168.1.1

NETMASK=255.255.255.0

GATEWAY=192.168.1.254

DNS=192.168.100.1


配置双网卡高可用:

方法一:teaming

常用的两种策略:轮询式(roundrobin)的流量负载均衡;热备份(activebackup)连接冗余

①建立虚拟网卡team0   ,可参考 man teamd.conf

nmcli connection add  type team con-name team0  ifname team0 autoconnect yes  

config '{"runner": {"name": "activebackup"}}'

解析:nmcli connection  添加   类型  team 配置文件名 team0   网卡名  team0  开机自动启用

team的工作模式为热备份,若手误敲错,可将其删除 nmcli connection delete team0

②为team0添加两块真实网卡(team-slave)

nmcli connection add type team-slave  con-name team0-1 ifname  eth1  master team0

nmcli connection add type team-slave  con-name team0-2 ifname  eth2  master team0

nmcli con modify team0-1 connection.autoconnect yes

nmcli con modify team0-2 connection.autoconnect yes

若手误敲错,可将其删除 nmcli connection delete team0-1

③配值虚拟网卡team0的IP地址

nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.1.1/24 connection.autoconnect  yes

④激活网卡

nmcli connection up team0

nmcli connection up team0-1

nmcli connection up team0-2

⑤查看绑定状态

teamdctl team0 state

方法二:bonding

①网卡一配置文件内容:

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

USERCTL=no         

DEVICE=eth0

MASTER=bond0

SLAVE=yes

②网卡二配置文件内容:

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

USERCTL=no

DEVICE=eth1

MASTER=bond0

SLAVE=yes

③创建绑定网卡

vim /etc/sysconfig/network-scripts/ifcfg-bond0

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

USERCTL=no

DEVICE=bond0

IPADDR=192.168.1.1

PREFIX=24

NM_CONTROLLED=no

DNS=xxxx

GATEWAY=xxxx

BONDING_OPTS="mode=6 miimon=100"    ##等同于步骤⑤

④让内核支持网卡绑定驱动

modprobe --first-time bonding

lsmod |grep bonding

⑤创建一个网卡绑定内核驱动文件(若做了步骤③可省略此步)

vim /etc/modprobe.d/bond.conf

alias bond0 bonding

options bond0 miimon=100 mode=6

解析:定义网卡绑定为mode6平衡负载模式,且当出现故障时自动切换时间为100毫秒

常见的网卡绑定驱动模式有:

mode0平衡负载模式:平时两块网卡均工作,且自动备援,采用交换机设备支援。

mode1自动备援模式:平时只有一块网卡工作,故障后自动替换为另外的网卡。

mode6平衡负载模式:平时两块网卡均工作,且自动备援,无须交换机设备支援

⑥重启网络生效

systemctl restart network

⑦查看验证

 ifconfig  ; ip a s  ;

 cat /proc/net/bonding/bond0



作者:Jaxgogo
链接:https://www.jianshu.com/p/862c42a6765d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Bond简介

生产环境必须提供 7×24 小时的网络传输服务。借助于网卡绑定技术,不仅可以提高网络传输速度,更重要的是,还可以确保在其中一块网卡出现故障时,依然可以正常提供网络服务。假设我们对两块网卡实施了绑定技术,这样在正常工作中它们会共同传输数据,使得网络传输的速度变得更快;而且即使有一块网卡突然出现了故障,另外一块网卡便会立即自动顶替上去,保证数据传输不会中断。

Bond内核网卡绑定驱动模式

常用:
mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术。
mode1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。
mode6(平衡负载模式):平时两块网卡均工作,且自动备援,无须交换机设备提供辅助支持。

1.  mode=0  round-robin2.  mode=1  active-backup3.  mode=2 load balancing (xor)4.  mode=3  fault-tolerance (broadcast)5.  mode=4  lacp6.  mode=5  transmit load balancing7.  mode=6  adaptive load balancing

分别对应以下七种策略:(1)轮询策略(Round-robin policy),模式代号是0。该策略是按照设备顺序依次传输数据包,直到最后一个设备。这种模式提供负载均衡和容错能力。(2)活动备份策略(Active-backup policy),模式代号是1。该策略只有一个设备处理数据,当它宕机的时候就会由备份代替,仅提供容错能力。(3)异或策略(XOR policy),模式代号是2。该策略是根据MAC地址异或运算的结果来选择传输设备,提供负载均衡和容错能力。(4)广播策略(Broadcast policy),模式代号是3。该策略通过全部设备来传输所有数据,提供容错能力。(5)IEEE 802.3ad 动态链接聚合(IEEE 802.3ad Dynamic link aggregation),模式代号是4。该策略通过创建聚合组来共享相同的传输速度,需要交换机也支持 802.3ad 模式,提供容错能力。该模式下,网卡带宽最高可以翻倍(如从1Gbps翻到2Gbps)。(6)适配器传输负载均衡(Adaptive transmit load balancing),模式代号是5。该策略是根据当前的负载把发出的数据分给每一个设备,由当前使用的设备处理收到的数据,如果当前正用于接收数据的网卡发生故障,则由其它网卡接管,要求所用的网卡及网卡驱动可通过ethtool命令得到speed信息。本策略的通道联合不需要专用的交换机支持,提供负载均衡和容错能力。(7)适配器负载均衡(Adaptive load balancing),模式代号是6。该策略在IPV4情况下包含适配器传输负载均衡策略,由ARP协商完成接收的负载,通道联合驱动程序截获ARP在本地系统发送出的请求,用其中一个设备的硬件地址覆盖从属设备的原地址。即在策略6的基础之上,在接收数据的同时实现负载均衡,除要求ethtool命令可得到speed信息外,还要求支持对网卡MAC地址的动态修改功能。

注意:
Mode参数中的0、2、3、4模式要求交换机支持“ports group”功能并能进行相应的设置,例如在cisco中要将所连接的端口设为“port-channel”。
如果系统流量不超过单个网卡的带宽,请不要选择使用mode1之外的模式,因为负载均衡需要对流量进行计算,这对系统性能会有所损耗。
如果交换机及网卡都确认支持802.3ab,则实现负载均衡时尽量使用模式4以提高系统性能。
由于我们项目上的交换机型号不可控,且可能会更换,所以我们项目中设备绑定一般都使用mode5。

配置bond(单IP双网卡)

1、配置两块网卡配置信息

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=EthernetBOOTPROTO=none
ONBOOT=yes
DEVICE=ens33
MASTER=bond0
SLAVE=yes[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=EthernetBOOTPROTO=none
ONBOOT=yes
DEVICE=ens37
MASTER=bond0
SLAVE=yes
2、配置bond网卡信息

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 
TYPE=EthernetBOOTPROTO=none
ONBOOT=yes
DEVICE=bond0
IPV6INIT=no   # 关闭IPv6PEERDNS=yes   # 运行网卡在启动时向DHCP服务器查询DNS信息,并自动覆盖/etc/resolv.conf配置文件
IPADDR=192.168.1.210NETMASK=255.255.255.0GATEWAY=192.168.1.2DNS1=114.114.114.114DNS2=223.5.5.5
3、配置内核网卡驱动模式

[root@CentOS ~]# vim /etc/modprobe.d/bond.conf 
alias bond0 bonding
options bonding mode=6 miimon=200# miimon参数:指定网卡故障时切换时间间隔时间,以ms为单位# mode参数:bonding模式
4、重启网络

[root@CentOS ~]# systemctl restart network

配置bond(双IP双网卡,不同VLAN)

1、配置两块网卡配置信息

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=EthernetPROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=no
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=EthernetPROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=no
DEFROUTE=yes
NAME=ens37
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes
2、配置bond网卡信息

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
BOOTPROTO=none
IPV6INIT=no
NM_CONTROLLED=no
ONBOOT=yes
TYPE=EthernetBONDING_OPTS="mode=4 miimon=100"    # 绑定模式选择
3、配置bond子网卡信息

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0.30DEVICE=bond0.30BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
IPADDR=10.0.0.102NETMASK=255.255.255.0GATEWAY=10.0.0.1VLAN=yes
DNS1=223.5.5.5DNS2=114.114.114.114[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0.51DEVICE=bond0.51BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
IPADDR=157.0.0.202NETMASK=255.255.255.0GATEWAY=157.0.0.1VLAN=yes
DNS1=223.5.5.5DNS2=114.114.114.114
4、重启网络

[root@CentOS ~]# systemctl restart network



作者:运维猿Winter
链接:https://www.jianshu.com/p/2d5773b8e981
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


一、引子

上一篇文章,我们讲述了:《MySQL 如何保证数据不丢失?》,介绍了 binlogredo log 的工作流程。
那么,MySQL 怎么保证高可用呢?
为了提高 MySQL 的读写性能,我们往往采用 MySQL 一主多从的方案。
即一个主库(主要负责写),多个从库(只负责读)。
因为单实例有性能瓶颈,多从库能优先解决 MySQL 的读负载压力。

二、主从同步

主从同步(简化)

原理:

MySQL 设计成一主多从模式。

简单来说,主要分为三步:

  • 第一步:所有增删改的 DML 语句都在 master 节点的示例上完成。

  • 第二步:将处理完成的 binlog 日志传输到各个 slave 节点。

  • 第三步:多个 slave 节点处理 binlog,从而保持主从一致。

详细来说,

主从同步(详细)

MasterSlave 之间会维护一个长连接,专门用来同步binlog

创建从库的过程:

  1. Slave 机器上,通过 change master 命令,设置主库的 IP、端口号、用户名、密码,以及binlog 从哪里开始获取等信息(具体binlog文件名 + 文件偏移量)。

  2. Slave 机器上,执行start slave命令,启动 io_threadsql_thread 线程。
    其中 io_thread 用于接收主库的 binlogsql_thread 用于处理主库的 binlog

  3. Slave 开始尝试连接 MasterMaster 校验完用户名密码后,dump_thread 根据 Slave 设置的 binlog 文件和偏移量,开始读取 binlog 发送给 Slave

  4. Slaveio_thread 将接收到的 binlog 写到 relay log (中转日志)。

  5. sql_thread 读取中转日志,执行对应SQL,同步完成。

问题:

1. 主从延迟

即“同步延迟”。
表示同一个事务下,主库执行完成到备库执行完成的时间差值。

主从延迟时间

时间线:

  1. Master 执行一个事务,成功写入binlog —— 这个时刻,我们记为 T1

  2. Slaveio_thread 接收到binlog —— 这个时刻,我们记为 T2

  3. Slave执行完这个事务。—— 这个时刻,我们记为 T3

所谓主从延迟,就是 T3-T1 的时间。

如果在这段时间里,在从库上查询主库刚插入/修改的数据,会出现主从不一致的现象。
这时,一些对可靠性要求比较高的业务场景里,就会出现错误。
我们可以在从库上执行:

show slave status;

其中,seconds_behind_master 就是从库延迟的时间(T3-T1

主从延迟的根本原因是:从库消费中转日志(relay log)的速度比主库生产 binlog 的速度慢。

2. 主从切换

在实际场景下,可能会遇到主库所在机器异常、掉电、或者机房升级等等。
这就会涉及到“主库”与“从库”之间的切换问题。
由于主从延迟的存在,在主从切换的时候,就会有不同的策略。

主从切换

可靠性优先策略(推荐):

  1. 查询 slaveseconds_behind_master,如果小于预定的某个值(比如3秒),就下一步。
    否则就一直轮训,直到出现满足条件的Slave。(选未来主库)

  2. masterreadonly = true,降为从库。

  3. 查询该 slave(未来主库) 的 seconds_behind_master 值变成 0。(即无主从延迟)

  4. 将该 slave (未来主库)的状态变成读写。readonly = false,升成主库。

  5. 将请求流量切到新主库。

  • 优点:可靠性高,数据可靠。

  • 缺点:会有一小段不可用的时间。

因此,得选择 seconds_behond_master 比较短的 slavemaster

可用性优先策略:

  1. 直接将 slave (未来主库)的状态变成读写。readonly = false,升成主库。

  2. 将请求流量切到新主库。

  3. 将老主库的 readonly = true,降为从库。

  • 优点:可用性高,没有真空期。

  • 缺点:可能会出现数据不一致的情况。

三、如何保证高可用

MySQL 如果要保证高可用,就要满足三个条件。

  1. 数据不丢失。(双1策略)

  2. 主从最终一致性。(主库所有binlog,备库都执行了)

  3. 无主从延迟。

主从延迟的来源:

1. Slave 所在机器性能问题。(部署在同一机器上)

我就遇到过这种 case:
我们的数据库和飞书的数据库部署在同一个机器上,
他们在大量的做一些DML操作,删除/归档很多老数据。
导致于我们的Slave资源被一直抢占,进而出现主从延迟。

解决思路:

  1. 如果成本允许,按服务,分开独立部署。

2. Slave 压力大,查询耗费了大量CPU资源,影响了同步速度。

这种也比较常见,表/索引设计不合理、或者有临时任务在拖库,导致慢慢查询,耗费了大量CPU资源。导致 io_threadsql_thread 抢占不到资源进而同步缓慢。

解决思路:
1.优化表设计、索引设计。解决慢 SQL 问题。
2.增加从库,分担现有从库的压力。
3.对于一些临时/定时任务:可用 Binlog -> Hadoop。转移让另外一个系统来提供查询能力。

3. 大事务

这种也比较好理解,主库上执行一个大事务花了n分钟,那么大概率就会导致从库延迟n分钟。
比如,磁盘空间快满了,需要归档一些历史数据,需要一次性删除大量历史数据。这时候和就会出现主从延迟。

解决思路:
1.业务允许的话,控制每个事务的数据量,分成多次操作。



作者:齐舞647
链接:https://www.jianshu.com/p/4f640003027e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。