Привет, у меня есть два файловых сервера, назовем их g1 @ 10.13.13.201 и g2 @ 10.13.13.202. Мне удалось успешно объединить оба в том glusterfs, монтируемый 10.13.13.201:/mnt/glusterfs. Так что технически у меня есть один ящик, который является исключительно сервером glusterd, а другой - одновременно сервером и клиентом. Я решил сделать это так, потому что каждый файловый сервер - это 24 диска, только один диск - это ОС, остальные - LSOD в массиве raidz2 zfs. Итак, я подумал, зачем нужен отдельный контроллер, если у одной из машин было достаточно мяса, чтобы взять на себя эти обязанности.
До этого момента эта настройка работала нормально, однако у меня возникли некоторые проблемы с настройкой SSL / TLS для работы с этой конфигурацией. Итак, начиная с нуля, я создаю пулы zfs и устанавливаю серверное программное обеспечение glusterfs. Перед настройкой любых одноранговых узлов gluster я запускаю следующий сценарий для генерации сертификатов и CA на обоих устройствах:
#!/bin/bash
#temp user directory for generation of keys
mkdir ~/temp_ssl
cd ~/temp_ssl
#generating self-signed keys
openssl genrsa -out $HOSTNAME.key 2048
openssl req -new -x509 -key "$HOSTNAME".key -subj "/CN=$HOSTNAME" -out "$HOSTNAME".pem
#grab both keys
sshpass -p 1 scp user@10.13.13.201:~/temp_ssl/g1.key .
sshpass -p 1 scp user@10.13.13.202:~/temp_ssl/g2.key .
#concatenate both keys to generate CA
for f in *key; do
cat $f >> gluster.ca;
done;
#cp CA and key and CA to /etc/ssl, change ownership and access priveledges to only root read / write.
sudo cp $HOSTNAME* gluster.ca /etc/ssl
sudo chown root:root /etc/ssl/$HOSTNAME* gluster.ca
sudo chmod 0600 /etc/ssl/$HOSTNAME* gluster.ca
#remove the unsecured keys
cd
sudo rm -rf temp_ssl
#generate file flag for ssl secured maintenance between glusters
sudo touch /var/lib/glusterd/secure-access
#restart glusterd
sudo system systemctl restart glusterfs-server.service
exit 0
Однако прикосновение файла с защищенным доступом к пути обслуживания glusterd приводит к поломке сервера:
$ sudo systemctl restart glusterfs-server.service
Job for glusterfs-server.service failed because the control process exited with error code. See "systemctl status glusterfs-server.service" and "journalctl -xe" for details.
$ sudo systemctl status glusterfs-server.service
glusterfs-server.service - LSB: GlusterFS server
Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2017-03-15 18:50:17 CDT; 1min 0s ago
Docs: man:systemd-sysv-generator(8)
Process: 6482 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS)
Process: 6526 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=1/FAILURE)
Mar 15 18:50:17 g1 systemd[1]: Starting LSB: GlusterFS server...
Mar 15 18:50:17 g1 glusterfs-server[6526]: * Starting glusterd service glusterd
Mar 15 18:50:17 g1 glusterfs-server[6526]: ...fail!
Mar 15 18:50:17 g1 systemd[1]: glusterfs-server.service: Control process exited, code=exited status=1
Mar 15 18:50:17 g1 systemd[1]: Failed to start LSB: GlusterFS server.
Mar 15 18:50:17 g1 systemd[1]: glusterfs-server.service: Unit entered failed state.
Mar 15 18:50:17 g1 systemd[1]: glusterfs-server.service: Failed with result 'exit-code'.
Когда я его снимаю, все начинается нормально:
$ sudo rm -rf secure-access
$ sudo systemctl restart glusterfs-server.service
$ sudo systemctl status glusterfs-server.service
● glusterfs-server.service - LSB: GlusterFS server
Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled)
Active: active (running) since Wed 2017-03-15 18:53:15 CDT; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 6482 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS)
Process: 6552 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS)
Tasks: 7
Memory: 12.8M
CPU: 2.306s
CGroup: /system.slice/glusterfs-server.service
└─6560 /usr/sbin/glusterd -p /var/run/glusterd.pid
Mar 15 18:53:13 g1 systemd[1]: Starting LSB: GlusterFS server...
Mar 15 18:53:13 g1 glusterfs-server[6552]: * Starting glusterd service glusterd
Mar 15 18:53:15 g1 glusterfs-server[6552]: ...done.
Mar 15 18:53:15 g1 systemd[1]: Started LSB: GlusterFS server.
У меня такое чувство, что проблема связана с тем, что центры сертификации идентичны как на сервере, так и на клиенте. Как я читал в документации, сертификаты от серверов и клиента объединяются и распределяются по серверам, тогда как клиент получает только объединенные сертификаты с серверов. В настоящее время клиент использует ЦС как со своим собственным сертификатом, так и с сертификатом второго сервера. Так что, может быть, проблема в этом. Но я несколько сомневаюсь, потому что даже перезапуск службы glusterd на серверах не удается по той же причине, и в этих случаях центры сертификации должны быть в порядке.
Кроме того, возможно ли мне обойти это, используя туннель ssh для всего трафика на портах glusterd? Итак, в этом случае у меня есть 4 порта для gluster, открытых на ящиках, плюс ssh / 22 на клиенте:
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.201 --dport 24007:24008 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.202 --dport 24007:24008 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.201 --dport 49152:49153 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.202 --dport 49152:49153 -j ACCEPT
Как мне перенести весь этот перекрестный разговор на порты 49152-3 и 24007-8 через туннель ssh?
Мысли о том, что здесь происходит? Марти
Нашел ошибку!
for f in *key; do
cat $f >> gluster.ca;
done;
Вместо этого я должен был объединить PEM.
Это особенно неприятно для меня в отношении этого сообщества. Ясно, что это была ситуация типа резинового утенка, когда я провел слишком много времени с кодом и не мог ясно увидеть ошибку. В итоге я потратил часы на простую ошибку, и, вероятно, было бы очень полезно иметь хотя бы 1 дополнительную пару глаз, чтобы уловить проблему. Частично в этом суть этого форума, верно? Честно говоря, если никто на этом форуме не мог понять этого и / или просто отказался помочь, то какой смысл вообще сюда приходить?
Может, мне просто нужно было дать выход. Кто-то на днях взял мой мяч от стресса.