1.设置网卡配置
sudo vim /etc/network/interfaces
auto enp0s3
iface enp0s3 inet static
hostname root1
address 10.10.3.45
netmask 255.255.254.0
gateway 10.10.3.254
dns-nameservers 8.8.8.8
sudo /etc/init.d/networking restart
AB服务器按照自己情况设置,注意设置hostname
2.设置时间
sudo dpkg-reconfigure tzdata
sudo apt-get update
sudo apt-get -y install ntp
3.配置主机名与ip对应
A服务器
vim /etc/hostname
root1
B服务器
vim /etc/hostname
root2
查看主机名
uname -n
或
hostname
vim /etc/hosts
10.10.3.65 root1
10.10.3.66 root2
A服务器查看是否ping通B服务器
ping -c 3 root2
4.设置免密
sudo apt-get install haveged
sudo corosync-keygen
A服务器
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub zfjia@10.10.3.66
ssh zfjia@10.10.3.66
B服务器
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub zfjia@10.10.3.65
ssh zfjia@10.10.3.65
B服务器
chmod 777 -R /etc/corosync/
A服务器
sudo scp /etc/corosync/authkey zfjia@10.10.3.66:/etc/corosync/
B服务器
chmod 644 -R /etc/corosync/
sudo chown root: /etc/corosync/authkey
sudo chmod 400 /etc/corosync/authkey
5.安装软件
apt-get install pacemaker corosync fence-agents
6.配置corosync
vim /etc/corosync/corosync.conf
totem {
version: 2
secauth: off
cluster_name: pacemaker1
transport: udpu
}
interface {
ringnumber: 0
bindnetaddr: 10.10.3.255
}
aisexec {
user:root
group:root
}
nodelist {
node {
ring0_addr: root1
nodeid: 101
}
node {
ring0_addr: root2
nodeid: 102
}
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
quorum {
provider: corosync_votequorum
two_node: 1
wait_for_all: 1
last_man_standing: 1
auto_tie_breaker: 0
expected_votes: 2
}
sudo mkdir -p /etc/corosync/service.d
sudo vim /etc/corosync/service.d/pcmk
然后将此脚本添加到pcmk文件中
service {
name: pacemaker
ver: 1
}
vim /etc/default/corosync
START=yes
重启
sudo service corosync restart
查看两个服务器是否连通
sudo corosync-cmapctl | grep members
7.启动服务
service pacemaker restart
service corosync restart
注意配置文件后是否生效
ps -ef|grep pacemaker
ps -ef|grep corosync
扩展:结束进程
ps -ef | grep pacemaker | grep -v grep | awk '{print $2}' | xargs kill -9
ps -ef | grep corosync | grep -v grep | awk '{print $2}' | xargs kill -9
8.
禁用STONITH
crm configure property stonith-enabled=false
忽略Quorum策略
crm configure property no-quorum-policy=ignore
强制集群在单个故障后移动服务
crm configure property migration-threshold=1
开机自启
sudo update-rc.d pacemaker defaults 20 01
sudo service pacemaker restart
成功监控状态
sudo crm status
9.创建sdb1磁盘
sudo fdisk -l
sudo fdisk /dev/sdb
n
p
1
输入开始字节2048
输入结束字节
p
w
lsblk
10.安装drbd
AB服务器
sudo apt-get install -y drbd8-utils
初始化磁盘文件(第一次部署时)
sudo dd if=/dev/zero of=/dev/sdb0 bs=100
sudo dd if=/dev/zero of=/dev/sdb2 bs=100
sudo dd if=/dev/zero of=/dev/sdb3 bs=100
10.配置drbd文件
vim /etc/drbd.conf
global { usage-count yes; }
common {
syncer {rate 10M;}
}
resource r0 {
protocol C;
on root1 {
device /dev/drbd0;
disk /dev/sdb2;
address 10.10.3.65:7788;
meta-disk internal;
}
on root2 {
device /dev/drbd0;
disk /dev/sdb2;
address 10.10.3.66:7788;
meta-disk internal;
}
}
resource r2 {
protocol C;
on root1 {
device /dev/drbd2;
disk /dev/sdb3;
address 10.10.3.65:7789;
meta-disk internal;
}
on root2 {
device /dev/drbd2;
disk /dev/sdb3;
address 10.10.3.66:7789;
meta-disk internal;
}
}
resource r3 {
protocol C;
on root1 {
device /dev/drbd3;
disk /dev/sdb4;
address 10.10.3.65:7790;
meta-disk internal;
}
on root2 {
device /dev/drbd3;
disk /dev/sdb4;
address 10.10.3.66:7790;
meta-disk internal;
}
}
启用模块
sudo modprobe drbd
查看可用块设备信息
lsblk
创建资源
sudo drbdadm create-md r0
sudo drbdadm create-md r2
sudo drbdadm create-md r3
启动资源
sudo drbdadm up r0
sudo drbdadm up r2
sudo drbdadm up r3
查看资源链接情况
sudo drbd-overview
A服务器设置为主节点,继续执行下面的操作,B服务器为子节点只执行上面的命令就行了
设置主节点
文件
sudo drbdadm -- --overwrite-data-of-peer primary r0/0
drbdadm primary r0
mysql
sudo drbdadm -- --overwrite-data-of-peer primary r2/0
drbdadm primary r2
redis
sudo drbdadm -- --overwrite-data-of-peer primary r3/0
drbdadm primary r3
修改磁盘类型、挂载
文件
sudo mkfs.ext4 /dev/drbd0
sudo mount /dev/drbd0 /mydata
mysql
sudo mkfs.ext4 /dev/drbd2
sudo mount /dev/drbd2 /var/lib/mysql/
redis
sudo mkfs.ext4 /dev/drbd3
sudo mount /dev/drbd3 /var/lib/redis/
增加apache2监控的服务
crm configure primitive apache2 service:apache2 op monitor interval=120s
增加虚拟ip的监控
sudo crm configure primitive virtual_public_ip \
ocf:heartbeat:IPaddr2 params ip="10.10.3.67" \
cidr_netmask="24" op monitor interval="10s" \
meta migration-threshold="2" failure-timeout="60s" resource-stickiness="100"
文件设置监控
sudo crm configure
> property stonith-enabled=false
> property no-quorum-policy=ignore
> primitive drbd_res ocf:linbit:drbd params drbd_resource=r0 op monitor interval=29s role=Master op monitor interval=31s role=Slave
> ms drbd_master_slave drbd_res meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
> primitive fs_res ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/mydata fstype=ext4
> colocation fs_drbd_colo INFINITY: fs_res drbd_master_slave:Master
> order fs_after_drbd mandatory: drbd_master_slave:promote fs_res:start
> commit
> show
> quit
mysql设置监控
sudo crm configure
> property stonith-enabled=false
> property no-quorum-policy=ignore
> primitive mysql_res ocf:linbit:drbd params drbd_resource=r2 op monitor interval=29s role=Master op monitor interval=31s role=Slave
> ms mysql_master_slave mysql_res meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
> primitive mysql_fs_res ocf:heartbeat:Filesystem params device=/dev/drbd2 directory=/var/lib/mysql fstype=xfs
> colocation mysql_drbd_colo INFINITY: mysql_fs_res mysql_master_slave:Master
> order mysql_after_drbd mandatory: mysql_master_slave:promote mysql_fs_res:start
> commit
> show
> quit
redis设置监控
sudo crm configure
> property stonith-enabled=false
> property no-quorum-policy=ignore
> primitive redis_res ocf:linbit:drbd params drbd_resource=r3 op monitor interval=29s role=Master op monitor interval=31s role=Slave
> ms redis_master_slave redis_res meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
> primitive redis_fs_res ocf:heartbeat:Filesystem params device=/dev/drbd3 directory=/var/lib/redis fstype=xfs
> colocation redis_drbd_colo INFINITY: redis_fs_res redis_master_slave:Master
> order redis_after_drbd mandatory: redis_master_slave:promote redis_fs_res:start
> commit
> show
> quit
增加到ha-group组里
crm configure modgroup ha-group add apache2 before virtual_public_ip
crm configure modgroup ha-group add mysql_fs_res before apache2
crm configure modgroup ha-group add fs_res before mysql_fs_res
crm configure modgroup ha-group add redis_fs_res before fs_res
扩展:脑裂
A服务器
drbdadm primary r0
B服务器
drbdadm secondary r0
drbdadm -- --discard-my-data connect r0
A服务器
drbdadm connect r0