Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LVS+Keepalived+Nginx+DRBD+Zabbix集群架构

LVS+Keepalived+Nginx+DRBD+Zabbix集群架构

作者头像
老七Linux
发布于 2018-05-31 02:58:19
发布于 2018-05-31 02:58:19
1.6K00
代码可运行
举报
运行总次数:0
代码可运行
一、准备工作:

1.1 6台模拟服务器:

主机名

IP 地址

角色

zhdy01

192.168.96.129

Master LVS + Keepalived

zhdy02

192.168.96.130

Slave LVS + Keepalived

LVS+Keepalived

192.168.96.200

vip

zhdy03

192.168.96.131

Nginx server1

zhdy04

192.168.96.132

Nginx server2

zhdy05

192.168.96.133

Master

zhdy06

192.168.96.134

Slave

确保每台机器全部关闭 firewall以及selinux服务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# systemctl stop firewalld

# systemctl disable firewalld

# iptables -F

# setenforce 0
二、两台都需要配置脚本:

vim /usr/local/sbin/lvs_rs.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#! /bin/bash
vip=192.168.96.200
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

两台Real server分别执行脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# sh /usr/local/sbin/lvs_rs.sh

查看一下两台real server的router -n

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# route -n

查看IP是否已经绑在lo卡上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ip addr
三、安装keepalived
zhdy01:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected]-01 ~]# yum install -y keepalived

[[email protected]-01 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass zhangduanya
    }
    virtual_ipaddress {
        192.168.96.200
    }
}
virtual_server 192.168.96.200 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 0
    #(TCP协议检查realserver状态)
    protocol TCP
    real_server 192.168.96.131 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.96.132 80 {
        weight 90
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

重启keepalived服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl restart keepalived
zhdy02:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected]-01 ~]# yum install -y keepalived

[[email protected]-01 ~]# vim /etc/keepalived/keepalived.conf 

vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass zhangduanya
    }
    virtual_ipaddress {
        192.168.96.200
    }
}
virtual_server 192.168.96.200 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 0
    #(TCP协议检查realserver状态)
    protocol TCP
    real_server 192.168.96.131 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.96.132 80 {
        weight 90
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

配置完keepalived后,需要开启端口转发(主从都要做):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo 1 >/proc/sys/net/ipv4/ip_forward

启动keepalived, 启动master的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl start keepalived
四、配置两台nginx服务器
zhdy03(Nginx server1)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# yum install -y nginx(其实是为了搭建集群,所以就简单用yum安装了nginx,线上一定要尽量编译去安装)

# systemctl start nginx

# ps aux | grep nginx

# netstat -lntp

# vim /usr/share/nginx/html/index.html 
this is master nginx!
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
打开Nginx所在服务器的“路由”功能、关闭“ARP查询”功能

[[email protected] ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[[email protected] ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
 
设置回环IP

[[email protected] ~]# ifconfig lo:0 192.168.96.200 broadcast 192.168.96.200 netmask 255.255.255.255 up
[[email protected] ~]# route add -host 192.168.96.200 dev lo:0
zhdy04(Nginx server2)一样的操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# yum install -y nginx(其实是为了搭建集群,所以就简单用yum安装了nginx,线上一定要尽量编译去安装)

# systemctl start nginx

# ps aux | grep nginx

# netstat -lntp

# vim /usr/share/nginx/html/index.html 
this is master nginx!
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
打开Nginx所在服务器的“路由”功能、关闭“ARP查询”功能

[[email protected] ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[[email protected] ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
 
设置回环IP

[[email protected] ~]# ifconfig lo:0 192.168.96.200 broadcast 192.168.96.200 netmask 255.255.255.255 up
[[email protected] ~]# route add -host 192.168.96.200 dev lo:0
五、检查并测试:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zhdy01:

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.96.200:80 rr
  -> 192.168.96.131:80            Route   1      0          0         
  -> 192.168.96.132:80            Route   1      1          0      

zhdy02:

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.96.200:80 rr
  -> 192.168.96.131:80            Route   100    0          0         
  -> 192.168.96.132:80            Route   90     1          0

验证在浏览器内输入 192.168.96.200。(如下图在站点)

这样LVS + Keepalived + Nginx方式的配置就做完了。

现在我们进行搭建监测: 停掉一台LVS + keepalived。

再次测试,发现效果和上面的动画是一样的效果。

再次搞事情,把nginx也停掉一台。

不管怎么刷新都是一直显示一个。(如下,用事实说话)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.96.200:80 wlc
  -> 192.168.96.131:80            Route   100    1          1

六、mysql的主从

我刚刚开始有的疑问,如果说mysql安装在一台独立的server,如何连接?之前都是安装在一台,如果分离那就直接使用IP地址喽(数据库主机)!看图吧↓

七、DRBD安装配置
  1. Mysql的主从复制功能是通过建立复制关系的多台或多台机器环境中,一台宕机就切换到另一台服务器上,保证mysql的可用性,可以实现90.000%的SLA。
  2. Mysql+DRBD的复制功能,可以实现99.999%的SLA。

看了上面有什么感想?我今天就尝试DRBD!!

6.1 增加一块专门给数据用的磁盘(虚拟机直接增加即可)

然后两台机器都需要操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.96.133 zhdy05
192.168.96.134 zhdy06

# ntpdate -u time.nist.gov      #网络时间同步命令

6.2 安装MYSQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /usr/local/src

wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz 

tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

cd /usr/local/mysql

useradd mysql

mkdir -p /data/mysql

chown -R mysql:mysql /data/mysql

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

cp support-files/my-default.cnf  /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld

vi /etc/init.d/mysqld 

vim编辑下面两行basedir和datadir配置
basedir=/usr/local/mysql
datadir=/data/mysql

/etc/init.d/mysqld start

6.3 安装DRBD

以下均为两台机器操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# yum -y install drbd84-utils kmod-drbd84

6.4 格式化磁盘给drbd使用(两个节点分别提供大小相同的分区):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] mysql]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk 
├─sda1   8:1    0  400M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 57.6G  0 part /
sdb      8:16   0   10G  0 disk 
sr0     11:0    1  4.1G  0 rom  

[[email protected] mysql]# fdisk /dev/sdb 

n → p → 3 → 回车 → 回车 → w

[[email protected] mysql]# cat /proc/partitions
major minor  #blocks  name

   8        0   62914560 sda
   8        1     409600 sda1
   8        2    2097152 sda2
   8        3   60406784 sda3
   8       16   10485760 sdb
   8       19   10484736 sdb3
  11        0    4277248 sr0

6.5 查看DRBD配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] ~]# vim /etc/drbd.d/global_common.conf 

global {
    usage-count no;
}
common {
    protocol C;
    handlers {
        pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
    }
    startup {
        wfc-timeout 30;
        degr-wfc-timeout 30;
    }
    options {
    }
    disk {
                on-io-error detach;
                fencing resource-only;
    }
    net {
        cram-hmac-alg "sha1";
                shared-secret "mydrbd";
    }

    syncer {
        rate 100M;
    }
}

6.6 添加资源文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] ~]# vim /etc/drbd.d/r0.res
resource r0 {
    device /dev/drbd0;  
        disk /dev/sdb3;  
        meta-disk internal;
        on zhdy05 {  
        address 192.168.96.133:7789;
        }  
        on zhdy06 {  
        address 192.168.96.134:7789;  
        }  
}

6.7 将配置文件为zhdy06提供一份

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] ~]# scp /etc/drbd.d/{global_common.conf,r0.res} zhdy06:/etc/drbd.d/
The authenticity of host 'zhdy06 (192.168.96.134)' can't be established.
ECDSA key fingerprint is 2f:14:f6:09:bd:e2:79:98:d1:62:15:0c:90:90:1d:bb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'zhdy06,192.168.96.134' (ECDSA) to the list of known hosts.
global_common.conf                                                                                                                                                                                         100% 2354     2.3KB/s   00:00    
r0.res

6.8 初始化资源并启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -F
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 7799 -j ACCEPT
service iptables save

################在NOD1节点上初始化资源并启动服务
[[email protected] ~]# drbdadm create-md r0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.

################启动服务
[[email protected] ~]# systemctl start drbd

[[email protected] ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by [email protected], 2016-12-04 01:08:48
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Diskless C r-----
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10484380

######查看监听地址与端口
[[email protected] ~]# netstat -anput|grep 7789
tcp        0      0 192.168.96.133:47387    192.168.96.134:7789     ESTABLISHED -                   
tcp        0      0 192.168.96.133:49493    192.168.96.134:7789     ESTABLISHED -   

将其中一个节点设置为Primary,在要设置为Primary的节点上执行如下命令,这里在zhdy05上操作

########## 设置zhdy05为主动模式
[[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary r0

[[email protected] ~]# cat /proc/drbd     #开始同步
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by [email protected], 2016-12-04 01:08:48
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:1131520 nr:0 dw:0 dr:1132432 al:8 bm:0 lo:0 pe:2 ua:0 ap:0 ep:1 wo:f oos:9354908
	[=>..................] sync'ed: 10.9% (9132/10236)M
	finish: 0:03:56 speed: 39,472 (38,944) K/sec

[[email protected] ~]# cat /proc/drbd      #完成同步,显示为主/备模式。
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by [email protected], 2016-12-04 01:08:48
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:10484380 nr:0 dw:0 dr:10485292 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected] ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by [email protected], 2016-12-04 01:08:48
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:10484380 dw:10484380 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

6.9 创建文件系统并挂载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] ~]# mkfs.ext4 /dev/drbd0       //格式化块存储
[[email protected] ~]# mkdir /mydata             //创建挂载点
[[email protected] ~]# mount /dev/drbd0 /mydata/      //主节点挂载使用(从节点不会自动挂载的,也不需要挂载)

[[email protected] ~]# df -h      //最后一个。
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        58G  3.1G   55G    6% /
devtmpfs        479M     0  479M    0% /dev
tmpfs           489M     0  489M    0% /dev/shm
tmpfs           489M  6.7M  482M    2% /run
tmpfs           489M     0  489M    0% /sys/fs/cgroup
/dev/sda1       397M  119M  279M   30% /boot
tmpfs            98M     0   98M    0% /run/user/0
/dev/drbd0      9.8G   37M  9.2G    1% /mydata

6.10 测试~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] mydata]# ls
lost+found

[[email protected] mydata]# touch tst.txt

[[email protected] mydata]# cp /etc/issue /mydata/

[[email protected] mydata]# ls
issue  lost+found  tst.txt

[[email protected] mydata]# !cat
cat /proc/drbd  
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:10783940 nr:0 dw:299560 dr:10486289 al:81 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

已经同步完毕!!!


[[email protected] ~]# mount /dev/drbd0 /mnt # 默认是无法挂载DRBD数据盘的
mount: you must specify the filesystem type
[[email protected] ~]# mount /dev/sdb3 /mnt # 同样物理盘也无法挂载,因为DRBD在使用它
mount: /dev/sdb1 already mounted or /mnt busy
[[email protected] ~]# drbdadm down data # 关闭同步服务
[[email protected] ~]# mount /dev/sdb3 /mnt/ # 挂载物理盘
[[email protected] ~]# df -h # 查看磁盘使用情况,可以看到此处sdb3与zhdy05使用情况完全一致,从而手动切换完毕。

[[email protected] ~]# umount /mnt/ # 卸载物理盘
[[email protected] ~]# drbdadm up data # 开启DRBD同步模式
[[email protected] ~]# cat /proc/drbd # 查看同步情况,恢复到主/备模式
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@, 2014-07-08 20:52:23
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

大功告成,可以正常使用drbd存储。但是这种方式不高效,所以后期我准备再次增加heartbeat当故障发生时可以完全自动完成主从切换。


DRBD遇到了很多很多问题,前面的架构4个小时(思路~ 思路~ 思路~ ),就一个DRBD搞了至少6个小时(各种补脑学习~):

DRBD UpToDate/DUnknown 故障恢复 (必须要给个四级标题,整死我了~)

1, 节点状态查看

(1) 主节点状态

[[email protected] ~]# cat /proc/drbd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: 8.4.3 (api:1/proto:86-101)    

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2013-11-29 12:28:00    

0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----    

ns:0 nr:0 dw:0 dr:672 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:604

(2) 从节点状态

[[email protected] ~]# cat /proc/drbd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: 8.4.3 (api:1/proto:86-101)    

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2013-11-29 12:28:00    

0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown   r-----    

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:548
  1. 这里确认以主节点的数据为准,重新同步到从节点

(1) 停止app2 drbd服务

[[email protected] ~]# systemctl stop drbd

Stopping all DRBD resources: .

(2) 重新初始化元数据

[[email protected] ~]# drbdadm create-md r0 #create-md后面的是drbd资源的名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
You want me to create a v08 style flexible-size internal meta data block.    

There appears to be a v08 flexible-size internal meta data block    

already in place on /dev/sdb1 at byte offset 5364318208    

Do you really want to overwrite the existing v08 meta-data?    

[need to type 'yes' to confirm] yes

Writing meta data...

md_offset 5364318208    

al_offset 5364285440    

bm_offset 5364121600

Found ext3 filesystem

5238400 kB data area apparently used    

5238400 kB left usable by current configuration

Even though it looks like this would place the new meta data intounused space, you still need to confirm, as this is only a guess.

Do you want to proceed?[need to type 'yes' to confirm] yes

initializing activity log

NOT initializing bitmap    

lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory    

New drbd meta data block successfully created.    

lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory

(3) 启动drbd服务

[[email protected] ~]# systemctl start brbd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Starting DRBD resources: [    

create res: data    

prepare disk: data    

adjust disk: data    

adjust net: data    

]    

..........    

***************************************************************    

DRBD's startup script waits for the peer node(s) to appear.    

- In case this node was already a degraded cluster before the    

reboot the timeout is 0 seconds. [degr-wfc-timeout]    

- If the peer was available before the reboot the timeout will    

expire after 0 seconds. [wfc-timeout]    

(These values are for resource 'data'; 0 sec -> wait forever)    

To abort waiting enter 'yes' [  15]:yes

.

[[email protected] ~]# cat /proc/drbd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: 8.4.3 (api:1/proto:86-101)    

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2013-11-29 12:28:00    

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----    

ns:0 nr:5238400 dw:5238400 dr:0 al:0 bm:320 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
  1. app1主节点下

(1) 主节点状态正常了

[[email protected] ~]# cat /proc/drbd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: 8.4.3 (api:1/proto:86-101)    

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2013-11-29 12:28:00    

0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----    

ns:0 nr:0 dw:0 dr:672 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:604

(2) 重启drbd之后,数据重新同步到从节点

[[email protected] ~]# systemctl reload drbd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Reloading DRBD configuration: .    

[[email protected] ~]# cat /proc/drbd    

version: 8.4.3 (api:1/proto:86-101)    

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2013-11-29 12:28:00    

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-    

ns:176816 nr:0 dw:0 dr:180896 al:0 bm:10 lo:4 pe:2 ua:8 ap:0 ep:1 wo:d oos:5063296    

[>....................] sync'ed:  3.4% (4944/5112)M    

finish: 0:00:57 speed: 87,552 (87,552) K/sec

[[email protected] ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2013-11-29 12:28:00

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–

ns:5238400 nr:0 dw:0 dr:5239072 al:0 bm:320 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0

再看一下节点状态就同步了!这样就解决了脑裂情况。且保证数据都还在。

扩展一下喽:

感兴趣的DRBD+Heartbeat+NFS高可用的可以点击此链接

八、关于zabbix的配置

我实在是不敢开第7台虚拟机了。我直接在其中的一台服务器上面做的。参考如下:

配置zabbix架构


最后允许我用一个三级标题:

开6个虚拟机,在打开浏览器查询资料,在使用有道笔记写个773行的笔记,卡成什么效果,就这一句话我分段打了好多次才打出来!!不过自从买了固态和内存,这一次是我使用最值得的一次!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/05/10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Keepalived+LVS+Nginx+DRBD+Heartbeat+Zabbix集群架构
大功告成,可以正常使用drbd存储。但是这种方式不高效,所以后期我准备再次增加heartbeat当故障发生时可以完全自动完成主从切换。
阿dai学长
2019/04/03
7310
Mfs+drbd+keepalived实现mfs系统高可用
oosefs分布式文件系统是一个易用的系统,但其只有在Pro版中提供了master的高可用方案,免费版master只能单机运行,存在单点故障的隐患。
用户2038009
2021/03/08
7820
DRBD 的日常管理
DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。对于在高可用集群的环境里,尽管DRBD磁盘资源被作为一种集群服务由集群管理组件接管,但对于DRBD的常用命令的掌握还是非常有必要的。本文描述了一些常用的DRBD日常管理命令,供大家参考。 有关DRBD的相关知识,可以参考: DRBD原理及特性概述 快速安装及部署DRBD 一、DRBD用户空间管理工具 drbdadm: 高层的 DRBD 程
Leshami
2018/08/13
6730
快速安装及部署DRBD
DRBD以其开源,简单,高效,性能不俗为广大运维者们所青睐。主要功能是在不同节点上两个相同大小的设备块级别之间的数据同步镜像。drbd是由内核模块和相关脚本而构成,用以构建高可用性的集群。本文主要描述其安装方式,供大家参考。 有关DRBD的特性,功能及其相关基础知识,大家可以参考: DRBD原理及特性概述 一、演示环境 OS版本:CentOS release 6.5 (Final) orasrv1: 192.168.21.10 orasrv2: 192.168.21.13 DRBD版本Versi
Leshami
2018/08/13
1.4K0
Gitlab+Drbd高可用方案(主备模式)
直接在清华大学镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
DevOps云学堂
2019/10/18
8K0
Gitlab+Drbd高可用方案(主备模式)
玩转企业集群运维管理系列(十六):DRBD 配置文件与运维管理
drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d/目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置 文件为global_common.conf和所有以.res结尾的文件。
民工哥
2023/12/19
3800
玩转企业集群运维管理系列(十六):DRBD 配置文件与运维管理
DRBD+Heartbeat+httpd实现HA群集
Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案,可以被用于高可用群集(HA)中。它类似于一个网络RAID-1功能。当数据写入本地文件系统时,数据还会被发送到网络中另一台主机上,以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用群集(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。
星哥玩云
2022/06/13
4100
DRBD+Heartbeat+httpd实现HA群集
DRBD 介绍
DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中.  本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会 保留有一份相同的数据,可以继续使用. 在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上, 切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了. DRBD的工作原理如下图:
SuperDream
2019/02/28
2K0
非常强悍并实用的双机热备+负载均衡线上方案
Heartbeat+DRBD+NFS+Keepalived+Lnmp      对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里最主要是就是数据同步用的共享磁盘了,磁盘柜+磁盘一共下来是20多万,这对于追求最高性价比的双机负载热备方案来说是极其不靠谱的,尤其是中小型企业,私有企业,一般经理是不会考虑这么高的成本的。我们通常做都是四台服务器+一个磁盘柜子+千兆交换机,那么这个成本下来将近30万了,而且这个方案有个弊端就是 存储依然存在单点故障,除非使用双控制+双电源+
洗尽了浮华
2018/01/22
5.2K0
磁盘高可用解决方案(DBA).md
官方网站: Q:什么是Drbd? 答:分布式复制块设备(Drbd,Dirtributed Replicated Block Device)是基于软件的,无共享,复制的存储解决方案以及在块设备在不同高可用服务器对之间同步和镜像数据软件,解决磁盘单点故障(般情况下只支持2个节点),通过它可用实现在网络中两台服务器之间进行块设备级别的实时或异步镜像或者同步复制,类似rsync+inotify架构项目软件:
全栈工程师修炼指南
2020/10/23
1.4K0
磁盘高可用解决方案(DBA).md
LVS DR模式+keepalived架构搭建
为什么不使用IP TUNNEL模式呢? 在生产环境中用的比较多的情况就是DR模式,NAT模式用的也不是太多,因为我们也说到了NAT的瓶颈问题。 如果规模在10台以内访问量不是很大且硬件配置+网络环境都可以的话建议使用NAT模式,可以节省公网IP,因为公网IP的成本也比较高。 另外一种方案就是搭建内网的LVS,全部的server均使用内网IP,我们使用一个公网IP端口映射到内网VIP的80端口即可,从而达到节省IP资源。 一、准备工作: 1.1 三台模拟服务器: 主机名 IP 地址 角色 zhdy-01 19
老七Linux
2018/05/09
8660
磁盘高可用解决方案(DBA).md
官方网站: Q:什么是Drbd? 答:分布式复制块设备(Drbd,Dirtributed Replicated Block Device)是基于软件的,无共享,复制的存储解决方案以及在块设备在不同高可用服务器对之间同步和镜像数据软件,解决磁盘单点故障(般情况下只支持2个节点),通过它可用实现在网络中两台服务器之间进行块设备级别的实时或异步镜像或者同步复制,类似rsync+inotify架构项目软件:
全栈工程师修炼指南
2022/09/28
7860
磁盘高可用解决方案(DBA).md
MYSQL高可用架构heartbeat和drbd实现.md
Mysql数据库高可用涉及技术:1.mysql 主从同步 / 2. heartbeat技术 / 3. drdb 技术 总结:改变单一软件应用思想打组合权;
全栈工程师修炼指南
2022/09/28
5170
MYSQL高可用架构heartbeat和drbd实现.md
Centos下部署DRBD+NFS+Keepalived高可用环境记录
使用NFS服务器(比如图片业务),一台为主,一台为备。通常主到备的数据同步是通过rsync来做(可以结合inotify做实时同步)。由于NFS服务是存在单点的,出于对业务在线率和数据安全的保障,可以采用"DRBD+NFS+Keepalived"架构来完成高可用方案部署。之前介绍了DRBD详细解说及配置过程记录,废话不多说了,基于之前的那篇文档的机器配置信息,以下记录部署过程: 思路: 1)在两台机器上安装keepalived,VIP为192.168.1.200 2)将DRBD的挂载目录/data作为NFS的
洗尽了浮华
2018/01/22
3.6K0
学习笔记0606----Linux集群架构(二)
当rs中其中一台nginx 服务有问题的时候,lvs并不能之后后端那个服务器down掉了,会出现以下的情况。
嘻哈记
2020/11/24
4490
DRBD详细解说及配置过程记录
一、DRBD介绍 DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等) 进行镜像。也就是说当某一个应用程序完成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD也会将这份数据复制一份,通过网络传输到另一个节点的块设 备上,这样,两个节点上的块设备上的数据将会保存一致,这就是镜像功能。 DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群,其实现方式是通过网络
洗尽了浮华
2018/01/22
3.6K0
DRBD详细解说及配置过程记录
Linux 高可用存储环境搭建(DRBD+Heartbeat+NFS)
心跳线:Stronge1:172.16.10.1                      Stronge2:172.16.10.2
SuperDream
2019/02/28
1.8K0
Linux 高可用存储环境搭建(DRBD+Heartbeat+NFS)
LVS+Keepalived实现高可用集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR); 十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。 Keepalvied Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现
DevinGeng
2019/04/09
7660
LVS+Keepalived实现高可用集群
18.12 keepalived + LVS
Keepalived+LVS DR 完整架构需要两台服务器(角色为dir)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以本次实验可以只安装一台keepalived keepalived内置了ipvsadm的功能,所以不需要再安装ipvsadm包,也不用编写和执行那个lvs_dir的脚本 三台机器分别为: dir(安装keepalived)133.130 rs1 133.132 rs2 133.133 vip 133.200 编辑keepalived配置
运维小白
2018/02/07
9840
LVS+KeepAlived+Nginx高可用实现方案
当我们的服务器意外挂了之后,我们要怎么做? 当然是找一台新的机器,替代现有的机器,然后做新的环境部署,端口映射,域名解析等等一系列的工作,再将服务重新启动;但是如果这一系列的操作都是手动完成的,那么等你把这些工作搞好,可能服务已经停止个把小时了,这会儿估计运营早就提着菜刀架在你脖子上了; 但是如果使用了KeepAlived之后,然后提前将备用机准备好,当主的机器挂掉之后,自动将VIP给你切换到备用机,并且以邮件的形式告诉你说主服务已经挂了,你得赶紧恢复起来;这时候你就可以慢慢的去找主服务的问题,这时候并不会影响到你的正常业务运行。
全栈程序员站长
2022/09/15
7030
LVS+KeepAlived+Nginx高可用实现方案
相关推荐
Keepalived+LVS+Nginx+DRBD+Heartbeat+Zabbix集群架构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验