Keepalived: Download & Install & Config & Start

本文详细介绍Keepalived的安装步骤及配置方法,包括命令行安装、压缩包安装及配置文件详解。通过实例演示如何设置主备切换,并解决常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Download & Install:

命令行安装:
apt-get install keepalived

或者

压缩包安装:
tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/usr/local/keepalived 
make
make install

下面几步不是必须,为了以后操作方便,建议执行:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

Config

为keepalived创建配置文件存放路径:

mkdir -p /etc/keepalived/

打开配置文件:

vim  /etc/keepalived/keepalived.conf

配置如下:

global_defs
{
    notification_email
    {
        baifanmvp@163.com
    }
    notification_email_from baifanmvp@163.com
    smtp_server 127.0.0.1
    stmp_connect_timeout 30
    router_id lnmp_node1
}

vrrp_instance lnmp {
    state MASTER
    interface em1
    virtual_router_id 100
    priority 170
    advert_int 5
    track_interface {
        em1
    }

    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200
    }
}
  • global_defs: 全局配置标识,表面下面的区域{}是全局配置
  • notification_email: 里面填邮箱地址,如果keepalived在发生诸如切换操作时会的发邮件到配置上的邮箱,邮件地址可以多个,每行一个
  • notification_email_from:表示发送通知邮件时邮件源地址是谁
  • smtp_server:表示发送email时使用的smtp服务器地址,可以填127.0.0.1
  • smtp_connect_timeout:连接smtp超时时间
  • vrrp_instance:各服务器上实例配置域,这里按本服务器的具体情况填值
  • state:本实例启动状态,MASTER/SLAVE,不管填MASTER/SLAVE,最终还是要看本机器的权重。
  • interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,这里按本机情况而定
  • virtual_router_id:这里设置VRID,如果两台机器是同一个备份组,设置一样
  • priority:设置本节点的优先级,优先级高的为master,不能超过255
  • advert_int:组播信息发送间隔,同一个备份组两个机器设置必须一样,默认是1S
  • authentication:验证域,同组的机器auth_type(验证类型)和auth_pass(验证密码)必须一样
  • virtual_ipaddress:VIP,为master机器设置的虚拟地址,和实例绑定的网卡(interface)设置到一个网段

Start:

Ubuntu:
/usr/local/keepalived/sbin/keepalived
redhat:
/usr/local/keepalived/sbin/keepalived

or

sudo /etc/init.d/keepalived restart

启动好以后可以用 ip a 命令看虚拟IP的绑定情况,我的配置是192.168.1.135上的权重高,所以VIP绑定到135上面

(ape2!1076)~(h135:135)ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether d4:ae:52:6c:74:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.135/24 brd 192.168.1.255 scope global em1
    inet 192.168.1.200/32 scope global em1
    inet6 fe80::d6ae:52ff:fe6c:7469/64 scope link

于是此时就可以用192.168.1.200这个IP访问135这台机器(VIP)
当然,也可用192.168.1.135来访问这台机器(IP)


可能碰到的问题:

  1. 在配好主从备份之后,发现虚拟IP能ping通,但是访问虚拟IP对应机器上的服务(不是apache或者mysql之类的公用软件)却不成功,这是因为要访问的服务绑定了主机上的一个实体IP不是INADDR_ANY地址,所以连接不上。
  2. 记得设置防火墙和关闭selinux策略
    配置iptables,添加VRRP通讯支持:

    iptables -A INPUT -d 224.0.0.18 -j ACCEPT
    

    关闭selinux:

    vim /etc/sysconfig/selinux
    

    修改:

    SELINUX=disabled
    #setenforce 0
    

Reference:

  1. 官网:http://www.keepalived.org/
  2. Github:https://github.com/acassen/keepalived
  3. 下载:http://www.keepalived.org/software/keepalived-1.2.16.tar.gz
在 Ubuntu 24.04 上安装和部署 Kubernetes(k8s)需要遵循一系列步骤,以确保系统环境的正确配置和组件的顺利安装。以下是基于最佳实践整理出的完整指南。 ### 一、环境准备 #### 1. 系统初始化 - 更新系统软件包: ```bash sudo apt update &amp;&amp; sudo apt upgrade -y ``` - 安装必要的依赖项: ```bash sudo apt install -y curl gnupg2 software-properties-common ``` #### 2. 安装容器运行时(containerd) - 添加 Docker 的官方 GPG 密钥并设置仓库: ```bash curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null ``` - 更新 APT 包索引并安装 containerd: ```bash sudo apt update &amp;&amp; sudo apt install -y containerd.io ``` - 配置 containerd: ```bash sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml ``` - 重启 containerd 服务: ```bash sudo systemctl restart containerd ``` #### 3. 安装 Kubernetes 组件(kubeadm, kubelet, kubectl) - 添加 Kubernetes 的官方 GPG 密钥并设置仓库: ```bash curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-add-repository &quot;deb http://apt.kubernetes.io/ kubernetes-xenial main&quot; ``` - 安装 Kubernetes 组件: ```bash sudo apt update &amp;&amp; sudo apt install -y kubelet kubeadm kubectl ``` - 锁定版本以防止意外升级: ```bash sudo apt-mark hold kubelet kubeadm kubectl ``` ### 二、部署 Kubernetes 集群 #### 1. 初始化主节点 - 使用 `kubeadm init` 命令初始化主节点,该命令会自动检测网络插件,并生成一个用于加入其他节点的 token: ```bash sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` - 按照输出提示设置用户权限: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` #### 2. 添加工作节点 - 在每个工作节点上执行以下命令来加入集群(具体命令由主节点初始化时输出提供): ```bash sudo kubeadm join &lt;control-plane-ip&gt;:&lt;port&gt; --token &lt;token&gt; --discovery-token-ca-cert-hash sha256:&lt;hash&gt; ``` #### 3. 验证集群状态 - 查看节点状态: ```bash kubectl get nodes ``` - 查看所有命名空间下的 Pod 状态: ```bash kubectl get pods --all-namespaces ``` ### 三、部署应用示例 #### 1. 创建 Deployment - 创建一个简单的 Nginx Deployment: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 ``` - 应用配置文件: ```bash kubectl apply -f nginx-deployment.yaml ``` #### 2. 创建 Service - 创建一个 ClusterIP 类型的服务来暴露 Deployment: ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 ``` - 应用配置文件: ```bash kubectl apply -f nginx-service.yaml ``` #### 3. 部署应用 - 验证 Deployment 和 Service 是否成功创建: ```bash kubectl get deployments kubectl get services ``` ### 四、运维管理 #### 1. 资源监控 - 可以使用 Prometheus 和 Grafana 来监控 Kubernetes 集群中的资源使用情况。 - 安装 Prometheus Operator: ```bash helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack ``` #### 2. 日志管理 - 使用 Fluentd 或 Logstash 收集日志,并通过 Elasticsearch 存储和搜索日志数据。 - 安装 EFK 堆栈: ```bash helm repo add elastic https://helm.elastic.co helm repo update helm install elasticsearch elastic/elasticsearch helm install kibana elastic/kibana helm install fluentd fluent/fluentd ``` #### 3. 自动扩缩容 - 使用 Horizontal Pod Autoscaler (HPA) 根据 CPU 使用率自动调整 Pod 数量: ```bash kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10 ``` ### 五、生产级最佳实践 #### 1. 高可用控制平面 - 部署多个主节点以实现高可用性,并使用负载均衡器分发请求。 - 使用 Keepalived 或 HAProxy 设置虚拟 IP 地址。 #### 2. 持久化存储 - 使用 Persistent Volumes (PV) 和 Persistent Volume Claims (PVC) 提供持久化存储。 - 配置 StorageClass 以便动态分配存储卷。 #### 3. 安全加固 - 启用 RBAC 并限制用户的访问权限。 - 使用 Network Policies 控制 Pod 之间的通信。 ### 六、备份与灾难恢复 #### 1. 备份 etcd 数据 - 定期备份 etcd 数据库以防止数据丢失: ```bash ETCDCTL_API=3 etcdctl --endpoints=https://[ETCD_IP]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/snapshot-pre-boot.db ``` #### 2. 恢复 etcd 数据 - 如果发生故障,可以从快照恢复 etcd 数据: ```bash ETCDCTL_API=3 etcdctl snapshot restore /opt/snapshot-pre-boot.db --data-dir /var/lib/etcd-backup sudo mv /var/lib/etcd /var/lib/etcd-old sudo mv /var/lib/etcd-backup /var/lib/etcd sudo chown -R etcd:etcd /var/lib/etcd sudo systemctl start etcd ``` ### 七、常见问题排查 #### 1. Pod 处于 Pending 状态 - 检查节点资源是否充足,或者查看是否有调度策略阻止了 Pod 的调度。 #### 2. 服务无法访问 - 确认服务类型是否正确(如 NodePort 或 LoadBalancer),并且检查防火墙规则是否允许流量通过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值