《求教》虚拟机部署seesaw v2 集群

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21398167/article/details/53836809

这篇文章 主要是希望路过的大神指点迷津,并非一篇完整的搭建(希望在大家的帮助下完成)


首先 按照github上的seesaw 的 README.md 搭建环境

当然上面描述不是很清楚,附上自己的搭建方法(参考 http://qiita.com/albatross/items/e38352911b2043531043    和  http://blog.csdn.net/shenshouer/article/details/50637291)


环境

· realserver centos7 64bit

· realserver application nginx

· seesaw node centos7 64bit

· seesaw01 10.10.11.191

· Seesaw02 10.10.11.192

· Backend01 10.10.11.181

· backend02 10.10.11.182

· VIP 10.10.11.223

· client 10.10.11.25

部署

关闭 selinux

# vi /etc/selinux/config

SELINUX=disabled

临时关闭 selinux

# setenforce 0

安装依赖

yum install -y git golang protobuf-compiler libnl3-devel

 

# mkdir go

# export GOPATH=/root/go

export GOROOT=/usr/local/go        // 红色部分忽略,这个是我装Ubuntu系统时,apt-get 的 go版本太低,手动安装了 go1.6.3 用的
export GOBIN=/usr/local/go/bin
export PATH=$PATH:$GOBIN

# go get -u golang.org/x/crypto/ssh

# go get -u github.com/dlintw/goconf

# go get -u github.com/golang/glog

# go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

# go get -u github.com/miekg/dns

在用go 装上面几个依赖时,如果总是失败,可以到对应目录手动git clone 对应项目,然后再执行go get


seesaw v2

# export PATH=$PATH:${GOPATH}/bin

# go get -u github.com/google/seesaw

执行 go get -u github.com/google/seesaw
可能会有错误提示  package github.com/google/seesaw: no buildable Go source files in /root/go/src/github.com/google/seesaw
进入 root/go/src/github.com/google 下  看是否已经下载好 seesaw  如果有忽略

# cd /root/go/src/github.com/google/seesaw/

# make test

# make install

将源码中的etc目录复制到/root/go/bin目录下,

# cp -r etc /root/go/bin/

编写/root/go/bin/install.sh:

SEESAW_BIN="/usr/local/seesaw"
SEESAW_ETC="/etc/seesaw"
SEESAW_LOG="/var/log/seesaw"

INIT=`ps -p 1 -o comm=`

install -d "${SEESAW_BIN}" "${SEESAW_ETC}" "${SEESAW_LOG}"

install "${GOPATH}/bin/seesaw_cli" /usr/bin/seesaw

for component in {ecu,engine,ha,healthcheck,ncc,watchdog}; do
  install "${GOPATH}/bin/seesaw_${component}" "${SEESAW_BIN}"
done

if [ $INIT = "init" ]; then
  install "etc/init/seesaw_watchdog.conf" "/etc/init"
elif [ $INIT = "systemd" ]; then
  install "etc/systemd/system/seesaw_watchdog.service" "/etc/systemd/system"
  systemctl --system daemon-reload
fi
install "etc/seesaw/watchdog.cfg" "${SEESAW_ETC}"

# Enable CAP_NET_RAW for seesaw binaries that require raw sockets.
/sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_ha"
/sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_healthcheck"

# chmod +x install.sh

# ./install

执行成功以后 

# systemctl status seesaw_watchdog  即可看见有这个服务

# systemctl enable seesaw_watchdog

将seesaw源码中etc/seesaw 下的cluster.pb.example  seesaw.cfg.example文件复制到/etc/seesaw下,改名为cluster.pb  seesaw.cfg

# cp cluster.pb.example  seesaw.cfg.example /etc/seesaw

# mv cluster.pb.example  cluster.pb

# mv seesaw.cfg.example  seesaw.cfg

修改两个配置文件如下:

/etc/seesaw/seesaw.cfg

[cluster]

anycast_enabled = false

name = test

node_ipv4 = 10.10.11.191

peer_ipv4 = 10.10.11.192

vip_ipv4 = 10.10.11.190

[config_server]     这里我不知道怎么使用,后面也会有错误,没有解决

primary = seesaw01

[interface]

node = eth0

lb = eth1

 

/etc/hosts

10.10.11.191       seesaw01

 

/etc/seesaw/cluster.pb

seesaw_vip: <

  fqdn: "seesaw-vip.localdomain."

  ipv4: "10.10.11.190/24"

  status: RODUCTION

>

node: <

  fqdn: "seesaw01."

  ipv4: "10.10.11.191/24"

  status: RODUCTION

>

node: <

  fqdn: "seeaw02."

  ipv4: "10.10.11.192/24"

  status: RODUCTION

>

vserver: <

  name: "test-vserver"

  entry_address: <

    fqdn: "lb-test.localdomain."

    ipv4: "10.10.11.223/24"

    status: RODUCTION

  >

  rp: "admin@localdomain"

  vserver_entry: <

    protocol: TCP

    port: 80

    scheduler: RR

    healthcheck: <

      type: HTTP

      port: 80

      mode: DSR

      proxy: false

      tls_verify: false

    >

  >

  backend: <

    host: <

      fqdn: "backend01.localdomain."

      ipv4: "10.10.11.181/24"

      status: RODUCTION

    >

    weight: 1

  >

  backend: <

    host: <

      fqdn: "backend02.localdomain."

      ipv4: "10.10.11.182/24"

      status: RODUCTION

    >

    weight: 1

  >

>

这样一个节点就算配置完成了,可以启动并成为master提供服务

# systemctl enable seesaw_watchdog

另一个节点的搭建和配置方法一样,将第一个节点上的两个配置文件拷贝过去,修改 seesaw.cfg  文件

node_ipv4 = 10.10.11.192

peer_ipv4 = 10.10.11.191

即可启动

当然启动时会有一些错误,参考  https://github.com/google/seesaw/blob/master/doc/getting_started.md

加载模块

echo ip_vs > /etc/modules-load.d/ipvs.conf

echo nf_conntrack_ipv4 > /etc/modules-load.d/nf_conntrack.conf

systemctl restart systemd-modules-load.service

ip link add ip+net type dummy

如果你的网卡 不是 eth0 和 eth1  参考 http://qiita.com/albatross/items/e38352911b2043531043   修改一点源码重新编译安装即可

如果你是用Openstack 虚拟机   网络问题参考 http://blog.csdn.net/lwei_998/article/details/50450182

现在集群能够正常启动,但依然有错误,提示无法找到 ca.crt  和 seesaw.crt  

我猜测是缺少HTTPS 证书认证  ,于是自己在对应目录  生成了这两个文件

# openssl genrsa -out ca.key 2048

# openssl req -x509 -new -nodes -key ca.key -subj "/CN=seesaw01" -days 5000 -out ca.crt

# openssl genrsa -out seesaw.key 2048

# more /etc/hostname

seesaw01

# openssl req -new -key seesaw.key -subj "/CN=seesaw01" -out seesaw.csr

# openssl x509 -req -in seesaw.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out seesaw.crt -days 5000

当然这个问题解决了(不知道是不是这样解决),两个节点依然有错误信息出来

master   报错无法获取服务器上的配置  ,服务拒绝(就是上面的  config_server 没有理解到位),我理解这个是为了动态修改配置文件,然后动态修改用的,也只有占时跳过了

backup  这个报错是无法获取 peer 上面的配置服务,看了下源码  这个报错是 因为没有实现这个功能吧  显示  #TODO

两台backends 的配置我这里就不描述了,和LVS一样,网上很多资料(一个脚本搞定)

除了上面那个错误  ,基本的seesaw 集群就算搭建完成了,下面是测试,也是我没有解决的问题


1. 启动两个节点,环境正常,一个master  一个backup,  正常提供负载服务

2. 关闭master  以前backup成为master   继续提供服务

3 再将以前的master启动,它成为backup 继续提供服务

现在的问题是   多次关闭当前master,让两台主被相互切换当前充当的角色,就会发现 当关闭的master再次启动时,它虽然成为了backup,但是外面来的请求实际上发送到了它上面,但它又不是master,就导致了请求失败

没明白 它明明是backup  而且网卡也是关闭的,路由也没有,为什么外部请求会发给它了,master上面有VIP,路由也有,反而收不到请求


还有个现象:虽然以前master挂掉了,现在由新的master提供服务,但在我关闭以前master机器时,负载服务会卡一段时间无法连通,感觉现在才开始转移服务,是不是以前那个master被修改了什么,导致它一直存在这个集群中,或者是当前的master记录了以前master的一些信息,导致以前master启动时,数据默认往以前master走


如果有大神能看到这里,我希望您能帮我解决下,或者你们有遇见相同的问题,大家一起讨论或者把你们的解决方法告诉我,也可能是我某些配置或者安装不对,都希望指点,谢谢











猜你喜欢

转载自blog.csdn.net/qq_21398167/article/details/53836809